1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sc.hxx" 26 27 28 29 // INCLUDE --------------------------------------------------------------- 30 31 #include <svx/svdograf.hxx> 32 #include <svx/svdoole2.hxx> 33 #include <sfx2/app.hxx> 34 #include <sfx2/viewfrm.hxx> 35 36 #include "drawview.hxx" 37 #include "drwlayer.hxx" 38 #include "viewdata.hxx" 39 #include "dbfunc.hxx" 40 #include "document.hxx" 41 #include "userdat.hxx" 42 #include "tabvwsh.hxx" 43 #include "docsh.hxx" 44 45 void ScIMapDlgSet( const Graphic& rGraphic, const ImageMap* pImageMap, 46 const TargetList* pTargetList, void* pEditingObj ); // imapwrap 47 sal_uInt16 ScIMapChildWindowId(); 48 49 // STATIC DATA ----------------------------------------------------------- 50 51 ScDrawView::ScDrawView( OutputDevice* pOut, ScViewData* pData ) : 52 FmFormView( pData->GetDocument()->GetDrawLayer(), pOut ), 53 pViewData( pData ), 54 pDev( pOut ), 55 pDoc( pData->GetDocument() ), 56 nTab( pData->GetTabNo() ), 57 pDropMarker( NULL ), 58 pDropMarkObj( NULL ), 59 bInConstruct( sal_True ) 60 //HMHbDisableHdl( sal_False ) 61 { 62 // #i73602# Use default from the configuration 63 SetBufferedOverlayAllowed(getOptionsDrawinglayer().IsOverlayBuffer_Calc()); 64 65 // #i74769#, #i75172# Use default from the configuration 66 SetBufferedOutputAllowed(getOptionsDrawinglayer().IsPaintBuffer_Calc()); 67 68 Construct(); 69 } 70 71 // Verankerung setzen 72 73 void ScDrawView::SetAnchor( ScAnchorType eType ) 74 { 75 SdrObject* pObj = NULL; 76 if( AreObjectsMarked() ) 77 { 78 const SdrMarkList* pMark = &GetMarkedObjectList(); 79 sal_uLong nCount = pMark->GetMarkCount(); 80 for( sal_uLong i=0; i<nCount; i++ ) 81 { 82 pObj = pMark->GetMark(i)->GetMarkedSdrObj(); 83 ScDrawLayer::SetAnchor( pObj, eType ); 84 } 85 86 if ( pViewData ) 87 pViewData->GetDocShell()->SetDrawModified(); 88 } 89 } 90 91 ScAnchorType ScDrawView::GetAnchor() const 92 { 93 sal_Bool bPage = sal_False; 94 sal_Bool bCell = sal_False; 95 const SdrObject* pObj = NULL; 96 if( AreObjectsMarked() ) 97 { 98 const SdrMarkList* pMark = &GetMarkedObjectList(); 99 sal_uLong nCount = pMark->GetMarkCount(); 100 Point p0; 101 for( sal_uLong i=0; i<nCount; i++ ) 102 { 103 pObj = pMark->GetMark(i)->GetMarkedSdrObj(); 104 if( ScDrawLayer::GetAnchor( pObj ) == SCA_CELL ) 105 bCell =sal_True; 106 else 107 bPage = sal_True; 108 } 109 } 110 if( bPage && !bCell ) 111 return SCA_PAGE; 112 if( !bPage && bCell ) 113 return SCA_CELL; 114 return SCA_DONTKNOW; 115 } 116 117 void __EXPORT ScDrawView::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) 118 { 119 if (rHint.ISA(ScTabDeletedHint)) // Tabelle geloescht 120 { 121 SCTAB nDelTab = ((ScTabDeletedHint&)rHint).GetTab(); 122 if (ValidTab(nDelTab)) 123 { 124 // used to be: HidePagePgNum(nDelTab) - hide only if the deleted sheet is shown here 125 if ( nDelTab == nTab ) 126 HideSdrPage(); 127 } 128 } 129 else if (rHint.ISA(ScTabSizeChangedHint)) // Groesse geaendert 130 { 131 if ( nTab == ((ScTabSizeChangedHint&)rHint).GetTab() ) 132 UpdateWorkArea(); 133 } 134 else 135 FmFormView::Notify( rBC,rHint ); 136 } 137 138 void ScDrawView::UpdateIMap( SdrObject* pObj ) 139 { 140 if ( pViewData && 141 pViewData->GetViewShell()->GetViewFrame()->HasChildWindow( ScIMapChildWindowId() ) && 142 pObj && ( pObj->ISA(SdrGrafObj) || pObj->ISA(SdrOle2Obj) ) ) 143 { 144 Graphic aGraphic; 145 TargetList aTargetList; 146 ScIMapInfo* pIMapInfo = ScDrawLayer::GetIMapInfo( pObj ); 147 const ImageMap* pImageMap = NULL; 148 if ( pIMapInfo ) 149 pImageMap = &pIMapInfo->GetImageMap(); 150 151 // Target-Liste besorgen 152 pViewData->GetViewShell()->GetViewFrame()->GetTargetList( aTargetList ); 153 154 // Grafik vom Objekt besorgen 155 if ( pObj->ISA( SdrGrafObj ) ) 156 aGraphic = ( (SdrGrafObj*) pObj )->GetGraphic(); 157 else 158 { 159 Graphic* pGraphic = ((const SdrOle2Obj*) pObj )->GetGraphic(); 160 if ( pGraphic ) 161 aGraphic = *pGraphic; 162 } 163 164 ScIMapDlgSet( aGraphic, pImageMap, &aTargetList, pObj ); // aus imapwrap 165 166 // TargetListe kann von uns wieder geloescht werden 167 String* pEntry = aTargetList.First(); 168 while( pEntry ) 169 { 170 delete pEntry; 171 pEntry = aTargetList.Next(); 172 } 173 } 174 } 175 176 177 178 179