xref: /trunk/main/sc/source/ui/view/drawvie3.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sc.hxx"
30 
31 
32 
33 // INCLUDE ---------------------------------------------------------------
34 
35 #include <svx/svdograf.hxx>
36 #include <svx/svdoole2.hxx>
37 #include <sfx2/app.hxx>
38 #include <sfx2/viewfrm.hxx>
39 
40 #include "drawview.hxx"
41 #include "drwlayer.hxx"
42 #include "viewdata.hxx"
43 #include "dbfunc.hxx"
44 #include "document.hxx"
45 #include "userdat.hxx"
46 #include "tabvwsh.hxx"
47 #include "docsh.hxx"
48 
49 void ScIMapDlgSet( const Graphic& rGraphic, const ImageMap* pImageMap,
50                     const TargetList* pTargetList, void* pEditingObj );     // imapwrap
51 sal_uInt16 ScIMapChildWindowId();
52 
53 // STATIC DATA -----------------------------------------------------------
54 
55 ScDrawView::ScDrawView( OutputDevice* pOut, ScViewData* pData ) :
56     FmFormView( pData->GetDocument()->GetDrawLayer(), pOut ),
57     pViewData( pData ),
58     pDev( pOut ),
59     pDoc( pData->GetDocument() ),
60     nTab( pData->GetTabNo() ),
61     pDropMarker( NULL ),
62     pDropMarkObj( NULL ),
63     bInConstruct( sal_True )
64     //HMHbDisableHdl( sal_False )
65 {
66     // #i73602# Use default from the configuration
67     SetBufferedOverlayAllowed(getOptionsDrawinglayer().IsOverlayBuffer_Calc());
68 
69     // #i74769#, #i75172# Use default from the configuration
70     SetBufferedOutputAllowed(getOptionsDrawinglayer().IsPaintBuffer_Calc());
71 
72     Construct();
73 }
74 
75 // Verankerung setzen
76 
77 void ScDrawView::SetAnchor( ScAnchorType eType )
78 {
79     SdrObject* pObj = NULL;
80     if( AreObjectsMarked() )
81     {
82         const SdrMarkList* pMark = &GetMarkedObjectList();
83         sal_uLong nCount = pMark->GetMarkCount();
84         for( sal_uLong i=0; i<nCount; i++ )
85         {
86             pObj = pMark->GetMark(i)->GetMarkedSdrObj();
87             ScDrawLayer::SetAnchor( pObj, eType );
88         }
89 
90         if ( pViewData )
91             pViewData->GetDocShell()->SetDrawModified();
92     }
93 }
94 
95 ScAnchorType ScDrawView::GetAnchor() const
96 {
97     sal_Bool bPage = sal_False;
98     sal_Bool bCell = sal_False;
99     const SdrObject* pObj = NULL;
100     if( AreObjectsMarked() )
101     {
102         const SdrMarkList* pMark = &GetMarkedObjectList();
103         sal_uLong nCount = pMark->GetMarkCount();
104         Point p0;
105         for( sal_uLong i=0; i<nCount; i++ )
106         {
107             pObj = pMark->GetMark(i)->GetMarkedSdrObj();
108             if( ScDrawLayer::GetAnchor( pObj ) == SCA_CELL )
109                 bCell =sal_True;
110             else
111                 bPage = sal_True;
112         }
113     }
114     if( bPage && !bCell )
115         return SCA_PAGE;
116     if( !bPage && bCell )
117         return SCA_CELL;
118     return SCA_DONTKNOW;
119 }
120 
121 void __EXPORT ScDrawView::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
122 {
123     if (rHint.ISA(ScTabDeletedHint))                        // Tabelle geloescht
124     {
125         SCTAB nDelTab = ((ScTabDeletedHint&)rHint).GetTab();
126         if (ValidTab(nDelTab))
127         {
128             // used to be: HidePagePgNum(nDelTab) - hide only if the deleted sheet is shown here
129             if ( nDelTab == nTab )
130                 HideSdrPage();
131         }
132     }
133     else if (rHint.ISA(ScTabSizeChangedHint))               // Groesse geaendert
134     {
135         if ( nTab == ((ScTabSizeChangedHint&)rHint).GetTab() )
136             UpdateWorkArea();
137     }
138     else
139         FmFormView::Notify( rBC,rHint );
140 }
141 
142 void ScDrawView::UpdateIMap( SdrObject* pObj )
143 {
144     if ( pViewData &&
145          pViewData->GetViewShell()->GetViewFrame()->HasChildWindow( ScIMapChildWindowId() ) &&
146          pObj && ( pObj->ISA(SdrGrafObj) || pObj->ISA(SdrOle2Obj) ) )
147     {
148         Graphic     aGraphic;
149         TargetList  aTargetList;
150         ScIMapInfo* pIMapInfo = ScDrawLayer::GetIMapInfo( pObj );
151         const ImageMap* pImageMap = NULL;
152         if ( pIMapInfo )
153             pImageMap = &pIMapInfo->GetImageMap();
154 
155         // Target-Liste besorgen
156         pViewData->GetViewShell()->GetViewFrame()->GetTargetList( aTargetList );
157 
158         // Grafik vom Objekt besorgen
159         if ( pObj->ISA( SdrGrafObj ) )
160             aGraphic = ( (SdrGrafObj*) pObj )->GetGraphic();
161         else
162         {
163             Graphic* pGraphic = ((const SdrOle2Obj*) pObj )->GetGraphic();
164             if ( pGraphic )
165                 aGraphic = *pGraphic;
166         }
167 
168         ScIMapDlgSet( aGraphic, pImageMap, &aTargetList, pObj );    // aus imapwrap
169 
170         // TargetListe kann von uns wieder geloescht werden
171         String* pEntry = aTargetList.First();
172         while( pEntry )
173         {
174             delete pEntry;
175             pEntry = aTargetList.Next();
176         }
177     }
178 }
179 
180 
181 
182 
183