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
ScDrawView(OutputDevice * pOut,ScViewData * pData)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
SetAnchor(ScAnchorType eType)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
GetAnchor() const91 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
Notify(SfxBroadcaster & rBC,const SfxHint & rHint)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
UpdateIMap(SdrObject * pObj)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