1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sd.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include "DrawViewShell.hxx"
28*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase1.hxx>
29*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
30*b1cdbd2cSJim Jagielski #ifndef _SVX_SIZEITEM
31*b1cdbd2cSJim Jagielski #include <editeng/sizeitem.hxx>
32*b1cdbd2cSJim Jagielski #endif
33*b1cdbd2cSJim Jagielski #include <svx/svdlayer.hxx>
34*b1cdbd2cSJim Jagielski #ifndef _SVX_ZOOMITEM
35*b1cdbd2cSJim Jagielski #include <svx/zoomitem.hxx>
36*b1cdbd2cSJim Jagielski #endif
37*b1cdbd2cSJim Jagielski #include <svx/svdpagv.hxx>
38*b1cdbd2cSJim Jagielski #include <svl/ptitem.hxx>
39*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
40*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
41*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
42*b1cdbd2cSJim Jagielski #include <svx/svdopath.hxx>
43*b1cdbd2cSJim Jagielski #include <sfx2/docfile.hxx>
44*b1cdbd2cSJim Jagielski #include <svx/zoomslideritem.hxx>
45*b1cdbd2cSJim Jagielski #include <svl/eitem.hxx>
46*b1cdbd2cSJim Jagielski
47*b1cdbd2cSJim Jagielski #ifndef _SVX_DIALOGS_HRC
48*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc>
49*b1cdbd2cSJim Jagielski #endif
50*b1cdbd2cSJim Jagielski #include <svx/extrusionbar.hxx>
51*b1cdbd2cSJim Jagielski #include <svx/fontworkbar.hxx>
52*b1cdbd2cSJim Jagielski #include <svx/clipfmtitem.hxx>
53*b1cdbd2cSJim Jagielski
54*b1cdbd2cSJim Jagielski
55*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
56*b1cdbd2cSJim Jagielski #include <svx/fmshell.hxx>
57*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
58*b1cdbd2cSJim Jagielski #include <svtools/cliplistener.hxx>
59*b1cdbd2cSJim Jagielski #include <svx/float3d.hxx>
60*b1cdbd2cSJim Jagielski #include <svx/sidebar/SelectionAnalyzer.hxx>
61*b1cdbd2cSJim Jagielski #include "helpids.h"
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski #include "view/viewoverlaymanager.hxx"
64*b1cdbd2cSJim Jagielski #include "app.hrc"
65*b1cdbd2cSJim Jagielski #include "helpids.h"
66*b1cdbd2cSJim Jagielski #include "strings.hrc"
67*b1cdbd2cSJim Jagielski #include "res_bmp.hrc"
68*b1cdbd2cSJim Jagielski #include "sdpage.hxx"
69*b1cdbd2cSJim Jagielski #include "FrameView.hxx"
70*b1cdbd2cSJim Jagielski #include "drawdoc.hxx"
71*b1cdbd2cSJim Jagielski #include "sdresid.hxx"
72*b1cdbd2cSJim Jagielski #include "DrawDocShell.hxx"
73*b1cdbd2cSJim Jagielski #include "Window.hxx"
74*b1cdbd2cSJim Jagielski #include "fupoor.hxx"
75*b1cdbd2cSJim Jagielski #include "fusel.hxx"
76*b1cdbd2cSJim Jagielski #include "drawview.hxx"
77*b1cdbd2cSJim Jagielski #include "SdUnoDrawView.hxx"
78*b1cdbd2cSJim Jagielski #include "ViewShellBase.hxx"
79*b1cdbd2cSJim Jagielski #include "SdUnoDrawView.hxx"
80*b1cdbd2cSJim Jagielski #include "slideshow.hxx"
81*b1cdbd2cSJim Jagielski #include "ToolBarManager.hxx"
82*b1cdbd2cSJim Jagielski #include "annotationmanager.hxx"
83*b1cdbd2cSJim Jagielski
84*b1cdbd2cSJim Jagielski #include <boost/bind.hpp>
85*b1cdbd2cSJim Jagielski
86*b1cdbd2cSJim Jagielski using namespace ::rtl;
87*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
88*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
89*b1cdbd2cSJim Jagielski using sfx2::sidebar::EnumContext;
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski namespace {
92*b1cdbd2cSJim Jagielski static const ::rtl::OUString MASTER_VIEW_TOOL_BAR_NAME(
93*b1cdbd2cSJim Jagielski ::rtl::OUString::createFromAscii("masterviewtoolbar"));
94*b1cdbd2cSJim Jagielski }
95*b1cdbd2cSJim Jagielski
96*b1cdbd2cSJim Jagielski namespace sd {
97*b1cdbd2cSJim Jagielski
98*b1cdbd2cSJim Jagielski sal_Bool DrawViewShell::mbPipette = sal_False;
99*b1cdbd2cSJim Jagielski
100*b1cdbd2cSJim Jagielski // ------------------------
101*b1cdbd2cSJim Jagielski // - ScannerEventListener -
102*b1cdbd2cSJim Jagielski // ------------------------
103*b1cdbd2cSJim Jagielski
104*b1cdbd2cSJim Jagielski class ScannerEventListener : public ::cppu::WeakImplHelper1< ::com::sun::star::lang::XEventListener >
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski private:
107*b1cdbd2cSJim Jagielski
108*b1cdbd2cSJim Jagielski DrawViewShell* mpParent;
109*b1cdbd2cSJim Jagielski
110*b1cdbd2cSJim Jagielski public:
111*b1cdbd2cSJim Jagielski
ScannerEventListener(DrawViewShell * pParent)112*b1cdbd2cSJim Jagielski ScannerEventListener( DrawViewShell* pParent ) : mpParent( pParent ) {};
113*b1cdbd2cSJim Jagielski ~ScannerEventListener();
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski // XEventListener
116*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& rEventObject ) throw (::com::sun::star::uno::RuntimeException);
117*b1cdbd2cSJim Jagielski
ParentDestroyed()118*b1cdbd2cSJim Jagielski void ParentDestroyed() { mpParent = NULL; }
119*b1cdbd2cSJim Jagielski };
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
122*b1cdbd2cSJim Jagielski
~ScannerEventListener()123*b1cdbd2cSJim Jagielski ScannerEventListener::~ScannerEventListener()
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski }
126*b1cdbd2cSJim Jagielski
127*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
128*b1cdbd2cSJim Jagielski
disposing(const::com::sun::star::lang::EventObject & rEventObject)129*b1cdbd2cSJim Jagielski void SAL_CALL ScannerEventListener::disposing( const ::com::sun::star::lang::EventObject& rEventObject ) throw (::com::sun::star::uno::RuntimeException)
130*b1cdbd2cSJim Jagielski {
131*b1cdbd2cSJim Jagielski if( mpParent )
132*b1cdbd2cSJim Jagielski mpParent->ScannerEvent( rEventObject );
133*b1cdbd2cSJim Jagielski }
134*b1cdbd2cSJim Jagielski
135*b1cdbd2cSJim Jagielski /*************************************************************************
136*b1cdbd2cSJim Jagielski |*
137*b1cdbd2cSJim Jagielski |* Standard-Konstruktor
138*b1cdbd2cSJim Jagielski |*
139*b1cdbd2cSJim Jagielski \************************************************************************/
140*b1cdbd2cSJim Jagielski
DrawViewShell(SfxViewFrame * pFrame,ViewShellBase & rViewShellBase,::Window * pParentWindow,PageKind ePageKind,FrameView * pFrameViewArgument)141*b1cdbd2cSJim Jagielski DrawViewShell::DrawViewShell( SfxViewFrame* pFrame, ViewShellBase& rViewShellBase, ::Window* pParentWindow, PageKind ePageKind, FrameView* pFrameViewArgument )
142*b1cdbd2cSJim Jagielski : ViewShell (pFrame, pParentWindow, rViewShellBase)
143*b1cdbd2cSJim Jagielski , maTabControl(this, pParentWindow)
144*b1cdbd2cSJim Jagielski , mbIsInSwitchPage(false),
145*b1cdbd2cSJim Jagielski mpSelectionChangeHandler(new svx::sidebar::SelectionChangeHandler(
146*b1cdbd2cSJim Jagielski ::boost::bind(&DrawViewShell::GetSidebarContextName, this),
147*b1cdbd2cSJim Jagielski uno::Reference<frame::XController>(&rViewShellBase.GetDrawController()),
148*b1cdbd2cSJim Jagielski sfx2::sidebar::EnumContext::Context_Default))
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski {
151*b1cdbd2cSJim Jagielski if (pFrameViewArgument != NULL)
152*b1cdbd2cSJim Jagielski mpFrameView = pFrameViewArgument;
153*b1cdbd2cSJim Jagielski else
154*b1cdbd2cSJim Jagielski mpFrameView = new FrameView(GetDoc());
155*b1cdbd2cSJim Jagielski Construct(GetDocSh(), ePageKind);
156*b1cdbd2cSJim Jagielski
157*b1cdbd2cSJim Jagielski mpSelectionChangeHandler->Connect();
158*b1cdbd2cSJim Jagielski
159*b1cdbd2cSJim Jagielski SetContextName(GetSidebarContextName());
160*b1cdbd2cSJim Jagielski }
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski /*************************************************************************
163*b1cdbd2cSJim Jagielski |*
164*b1cdbd2cSJim Jagielski |* Destruktor
165*b1cdbd2cSJim Jagielski |*
166*b1cdbd2cSJim Jagielski \************************************************************************/
167*b1cdbd2cSJim Jagielski
~DrawViewShell()168*b1cdbd2cSJim Jagielski DrawViewShell::~DrawViewShell()
169*b1cdbd2cSJim Jagielski {
170*b1cdbd2cSJim Jagielski mpSelectionChangeHandler->Disconnect();
171*b1cdbd2cSJim Jagielski
172*b1cdbd2cSJim Jagielski mpAnnotationManager.reset();
173*b1cdbd2cSJim Jagielski mpViewOverlayManager.reset();
174*b1cdbd2cSJim Jagielski
175*b1cdbd2cSJim Jagielski OSL_ASSERT (GetViewShell()!=NULL);
176*b1cdbd2cSJim Jagielski
177*b1cdbd2cSJim Jagielski if( mxScannerListener.is() )
178*b1cdbd2cSJim Jagielski static_cast< ScannerEventListener* >( mxScannerListener.get() )->ParentDestroyed();
179*b1cdbd2cSJim Jagielski
180*b1cdbd2cSJim Jagielski // #96642# Remove references to items within Svx3DWin
181*b1cdbd2cSJim Jagielski // (maybe do a listening sometime in Svx3DWin)
182*b1cdbd2cSJim Jagielski sal_uInt16 nId = Svx3DChildWindow::GetChildWindowId();
183*b1cdbd2cSJim Jagielski SfxChildWindow* pWindow = GetViewFrame() ? GetViewFrame()->GetChildWindow(nId) : NULL;
184*b1cdbd2cSJim Jagielski if(pWindow)
185*b1cdbd2cSJim Jagielski {
186*b1cdbd2cSJim Jagielski Svx3DWin* p3DWin = static_cast< Svx3DWin* > (pWindow->GetWindow());
187*b1cdbd2cSJim Jagielski if(p3DWin)
188*b1cdbd2cSJim Jagielski p3DWin->DocumentReload();
189*b1cdbd2cSJim Jagielski }
190*b1cdbd2cSJim Jagielski
191*b1cdbd2cSJim Jagielski EndListening (*GetDoc());
192*b1cdbd2cSJim Jagielski EndListening (*GetDocSh());
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielski if( SlideShow::IsRunning(*this) )
195*b1cdbd2cSJim Jagielski StopSlideShow(false);
196*b1cdbd2cSJim Jagielski
197*b1cdbd2cSJim Jagielski DisposeFunctions();
198*b1cdbd2cSJim Jagielski
199*b1cdbd2cSJim Jagielski SdPage* pPage;
200*b1cdbd2cSJim Jagielski sal_uInt16 aPageCnt = GetDoc()->GetSdPageCount(mePageKind);
201*b1cdbd2cSJim Jagielski
202*b1cdbd2cSJim Jagielski for (sal_uInt16 i = 0; i < aPageCnt; i++)
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski pPage = GetDoc()->GetSdPage(i, mePageKind);
205*b1cdbd2cSJim Jagielski
206*b1cdbd2cSJim Jagielski if (pPage == mpActualPage)
207*b1cdbd2cSJim Jagielski {
208*b1cdbd2cSJim Jagielski GetDoc()->SetSelected(pPage, sal_True);
209*b1cdbd2cSJim Jagielski }
210*b1cdbd2cSJim Jagielski else
211*b1cdbd2cSJim Jagielski {
212*b1cdbd2cSJim Jagielski GetDoc()->SetSelected(pPage, sal_False);
213*b1cdbd2cSJim Jagielski }
214*b1cdbd2cSJim Jagielski }
215*b1cdbd2cSJim Jagielski
216*b1cdbd2cSJim Jagielski if ( mpClipEvtLstnr )
217*b1cdbd2cSJim Jagielski {
218*b1cdbd2cSJim Jagielski mpClipEvtLstnr->AddRemoveListener( GetActiveWindow(), sal_False );
219*b1cdbd2cSJim Jagielski mpClipEvtLstnr->ClearCallbackLink(); // #103849# prevent callback if another thread is waiting
220*b1cdbd2cSJim Jagielski mpClipEvtLstnr->release();
221*b1cdbd2cSJim Jagielski }
222*b1cdbd2cSJim Jagielski
223*b1cdbd2cSJim Jagielski delete mpDrawView;
224*b1cdbd2cSJim Jagielski // Set mpView to NULL so that the destructor of the ViewShell base class
225*b1cdbd2cSJim Jagielski // does not access it.
226*b1cdbd2cSJim Jagielski mpView = mpDrawView = NULL;
227*b1cdbd2cSJim Jagielski
228*b1cdbd2cSJim Jagielski mpFrameView->Disconnect();
229*b1cdbd2cSJim Jagielski delete [] mpSlotArray;
230*b1cdbd2cSJim Jagielski }
231*b1cdbd2cSJim Jagielski
232*b1cdbd2cSJim Jagielski /*************************************************************************
233*b1cdbd2cSJim Jagielski |*
234*b1cdbd2cSJim Jagielski |* gemeinsamer Initialisierungsanteil der beiden Konstruktoren
235*b1cdbd2cSJim Jagielski |*
236*b1cdbd2cSJim Jagielski \************************************************************************/
237*b1cdbd2cSJim Jagielski
Construct(DrawDocShell * pDocSh,PageKind eInitialPageKind)238*b1cdbd2cSJim Jagielski void DrawViewShell::Construct(DrawDocShell* pDocSh, PageKind eInitialPageKind)
239*b1cdbd2cSJim Jagielski {
240*b1cdbd2cSJim Jagielski mpActualPage = 0;
241*b1cdbd2cSJim Jagielski mbMousePosFreezed = sal_False;
242*b1cdbd2cSJim Jagielski mbReadOnly = GetDocSh()->IsReadOnly();
243*b1cdbd2cSJim Jagielski mpSlotArray = 0;
244*b1cdbd2cSJim Jagielski mpClipEvtLstnr = 0;
245*b1cdbd2cSJim Jagielski mbPastePossible = sal_False;
246*b1cdbd2cSJim Jagielski mbIsLayerModeActive = false;
247*b1cdbd2cSJim Jagielski
248*b1cdbd2cSJim Jagielski mpFrameView->Connect();
249*b1cdbd2cSJim Jagielski
250*b1cdbd2cSJim Jagielski OSL_ASSERT (GetViewShell()!=NULL);
251*b1cdbd2cSJim Jagielski
252*b1cdbd2cSJim Jagielski // Array fuer Slot-/ImageMapping:
253*b1cdbd2cSJim Jagielski // Gerader Eintrag: Haupt-/ToolboxSlot
254*b1cdbd2cSJim Jagielski // Ungerader Eintrag: gemappter Slot
255*b1cdbd2cSJim Jagielski // Achtung: Anpassen von GetIdBySubId() !!!
256*b1cdbd2cSJim Jagielski // Reihenfolge (insbesondere Zoom) darf nicht geaendert werden !!!
257*b1cdbd2cSJim Jagielski mpSlotArray = new sal_uInt16[ SLOTARRAY_COUNT ];
258*b1cdbd2cSJim Jagielski mpSlotArray[ 0 ] = SID_OBJECT_CHOOSE_MODE;
259*b1cdbd2cSJim Jagielski mpSlotArray[ 1 ] = SID_OBJECT_ROTATE;
260*b1cdbd2cSJim Jagielski mpSlotArray[ 2 ] = SID_OBJECT_ALIGN;
261*b1cdbd2cSJim Jagielski mpSlotArray[ 3 ] = SID_OBJECT_ALIGN_LEFT;
262*b1cdbd2cSJim Jagielski mpSlotArray[ 4 ] = SID_ZOOM_TOOLBOX;
263*b1cdbd2cSJim Jagielski mpSlotArray[ 5 ] = SID_ZOOM_TOOLBOX;
264*b1cdbd2cSJim Jagielski mpSlotArray[ 6 ] = SID_DRAWTBX_TEXT;
265*b1cdbd2cSJim Jagielski mpSlotArray[ 7 ] = SID_ATTR_CHAR;
266*b1cdbd2cSJim Jagielski mpSlotArray[ 8 ] = SID_DRAWTBX_RECTANGLES;
267*b1cdbd2cSJim Jagielski mpSlotArray[ 9 ] = SID_DRAW_RECT;
268*b1cdbd2cSJim Jagielski mpSlotArray[ 10 ] = SID_DRAWTBX_ELLIPSES;
269*b1cdbd2cSJim Jagielski mpSlotArray[ 11 ] = SID_DRAW_ELLIPSE;
270*b1cdbd2cSJim Jagielski mpSlotArray[ 12 ] = SID_DRAWTBX_LINES;
271*b1cdbd2cSJim Jagielski mpSlotArray[ 13 ] = SID_DRAW_FREELINE_NOFILL;
272*b1cdbd2cSJim Jagielski mpSlotArray[ 14 ] = SID_DRAWTBX_3D_OBJECTS;
273*b1cdbd2cSJim Jagielski mpSlotArray[ 15 ] = SID_3D_CUBE;
274*b1cdbd2cSJim Jagielski mpSlotArray[ 16 ] = SID_DRAWTBX_INSERT;
275*b1cdbd2cSJim Jagielski mpSlotArray[ 17 ] = SID_INSERT_DIAGRAM;
276*b1cdbd2cSJim Jagielski mpSlotArray[ 18 ] = SID_POSITION;
277*b1cdbd2cSJim Jagielski mpSlotArray[ 19 ] = SID_FRAME_TO_TOP;
278*b1cdbd2cSJim Jagielski mpSlotArray[ 20 ] = SID_DRAWTBX_CONNECTORS;
279*b1cdbd2cSJim Jagielski mpSlotArray[ 21 ] = SID_TOOL_CONNECTOR;
280*b1cdbd2cSJim Jagielski mpSlotArray[ 22 ] = SID_DRAWTBX_ARROWS;
281*b1cdbd2cSJim Jagielski mpSlotArray[ 23 ] = SID_LINE_ARROW_END;
282*b1cdbd2cSJim Jagielski
283*b1cdbd2cSJim Jagielski SetPool( &GetDoc()->GetPool() );
284*b1cdbd2cSJim Jagielski
285*b1cdbd2cSJim Jagielski GetDoc()->CreateFirstPages();
286*b1cdbd2cSJim Jagielski
287*b1cdbd2cSJim Jagielski mpDrawView = new DrawView(pDocSh, GetActiveWindow(), this);
288*b1cdbd2cSJim Jagielski mpView = mpDrawView; // Pointer der Basisklasse ViewShell
289*b1cdbd2cSJim Jagielski mpDrawView->SetSwapAsynchron(sal_True); // Asynchrones Laden von Graphiken
290*b1cdbd2cSJim Jagielski
291*b1cdbd2cSJim Jagielski // We do not read the page kind from the frame view anymore so we have
292*b1cdbd2cSJim Jagielski // to set it in order to resync frame view and this view.
293*b1cdbd2cSJim Jagielski mpFrameView->SetPageKind(eInitialPageKind);
294*b1cdbd2cSJim Jagielski mePageKind = eInitialPageKind;
295*b1cdbd2cSJim Jagielski meEditMode = EM_PAGE;
296*b1cdbd2cSJim Jagielski DocumentType eDocType = GetDoc()->GetDocumentType(); // RTTI fasst hier noch nicht
297*b1cdbd2cSJim Jagielski switch (mePageKind)
298*b1cdbd2cSJim Jagielski {
299*b1cdbd2cSJim Jagielski case PK_STANDARD:
300*b1cdbd2cSJim Jagielski meShellType = ST_IMPRESS;
301*b1cdbd2cSJim Jagielski break;
302*b1cdbd2cSJim Jagielski
303*b1cdbd2cSJim Jagielski case PK_NOTES:
304*b1cdbd2cSJim Jagielski meShellType = ST_NOTES;
305*b1cdbd2cSJim Jagielski break;
306*b1cdbd2cSJim Jagielski
307*b1cdbd2cSJim Jagielski case PK_HANDOUT:
308*b1cdbd2cSJim Jagielski meShellType = ST_HANDOUT;
309*b1cdbd2cSJim Jagielski break;
310*b1cdbd2cSJim Jagielski }
311*b1cdbd2cSJim Jagielski
312*b1cdbd2cSJim Jagielski Size aPageSize( GetDoc()->GetSdPage(0, mePageKind)->GetSize() );
313*b1cdbd2cSJim Jagielski Point aPageOrg( aPageSize.Width(), aPageSize.Height() / 2);
314*b1cdbd2cSJim Jagielski Size aSize(aPageSize.Width() * 3, aPageSize.Height() * 2);
315*b1cdbd2cSJim Jagielski InitWindows(aPageOrg, aSize, Point(-1, -1));
316*b1cdbd2cSJim Jagielski
317*b1cdbd2cSJim Jagielski Point aVisAreaPos;
318*b1cdbd2cSJim Jagielski
319*b1cdbd2cSJim Jagielski if ( pDocSh->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
320*b1cdbd2cSJim Jagielski {
321*b1cdbd2cSJim Jagielski aVisAreaPos = pDocSh->GetVisArea(ASPECT_CONTENT).TopLeft();
322*b1cdbd2cSJim Jagielski }
323*b1cdbd2cSJim Jagielski
324*b1cdbd2cSJim Jagielski mpDrawView->SetWorkArea(Rectangle(Point() - aVisAreaPos - aPageOrg, aSize));
325*b1cdbd2cSJim Jagielski
326*b1cdbd2cSJim Jagielski // Objekte koennen max. so gross wie die ViewSize werden
327*b1cdbd2cSJim Jagielski GetDoc()->SetMaxObjSize(aSize);
328*b1cdbd2cSJim Jagielski
329*b1cdbd2cSJim Jagielski // Split-Handler fuer TabControls
330*b1cdbd2cSJim Jagielski maTabControl.SetSplitHdl( LINK( this, DrawViewShell, TabSplitHdl ) );
331*b1cdbd2cSJim Jagielski
332*b1cdbd2cSJim Jagielski // Damit der richtige EditMode von der FrameView komplett eingestellt
333*b1cdbd2cSJim Jagielski // werden kann, wird hier ein aktuell anderer gewaehlt (kleiner Trick)
334*b1cdbd2cSJim Jagielski if (mpFrameView->GetViewShEditMode(mePageKind) == EM_PAGE)
335*b1cdbd2cSJim Jagielski {
336*b1cdbd2cSJim Jagielski meEditMode = EM_MASTERPAGE;
337*b1cdbd2cSJim Jagielski }
338*b1cdbd2cSJim Jagielski else
339*b1cdbd2cSJim Jagielski {
340*b1cdbd2cSJim Jagielski meEditMode = EM_PAGE;
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski
343*b1cdbd2cSJim Jagielski // Einstellungen der FrameView uebernehmen
344*b1cdbd2cSJim Jagielski ReadFrameViewData(mpFrameView);
345*b1cdbd2cSJim Jagielski
346*b1cdbd2cSJim Jagielski if( eDocType == DOCUMENT_TYPE_DRAW )
347*b1cdbd2cSJim Jagielski {
348*b1cdbd2cSJim Jagielski SetHelpId( SD_IF_SDGRAPHICVIEWSHELL );
349*b1cdbd2cSJim Jagielski GetActiveWindow()->SetHelpId( HID_SDGRAPHICVIEWSHELL );
350*b1cdbd2cSJim Jagielski GetActiveWindow()->SetUniqueId( HID_SDGRAPHICVIEWSHELL );
351*b1cdbd2cSJim Jagielski }
352*b1cdbd2cSJim Jagielski else
353*b1cdbd2cSJim Jagielski {
354*b1cdbd2cSJim Jagielski if (mePageKind == PK_NOTES)
355*b1cdbd2cSJim Jagielski {
356*b1cdbd2cSJim Jagielski SetHelpId( SID_NOTESMODE );
357*b1cdbd2cSJim Jagielski GetActiveWindow()->SetHelpId( CMD_SID_NOTESMODE );
358*b1cdbd2cSJim Jagielski GetActiveWindow()->SetUniqueId( CMD_SID_NOTESMODE );
359*b1cdbd2cSJim Jagielski
360*b1cdbd2cSJim Jagielski // AutoLayouts muessen erzeugt sein
361*b1cdbd2cSJim Jagielski GetDoc()->StopWorkStartupDelay();
362*b1cdbd2cSJim Jagielski }
363*b1cdbd2cSJim Jagielski else if (mePageKind == PK_HANDOUT)
364*b1cdbd2cSJim Jagielski {
365*b1cdbd2cSJim Jagielski SetHelpId( SID_HANDOUTMODE );
366*b1cdbd2cSJim Jagielski GetActiveWindow()->SetHelpId( CMD_SID_HANDOUTMODE );
367*b1cdbd2cSJim Jagielski GetActiveWindow()->SetUniqueId( CMD_SID_HANDOUTMODE );
368*b1cdbd2cSJim Jagielski
369*b1cdbd2cSJim Jagielski // AutoLayouts muessen erzeugt sein
370*b1cdbd2cSJim Jagielski GetDoc()->StopWorkStartupDelay();
371*b1cdbd2cSJim Jagielski }
372*b1cdbd2cSJim Jagielski else
373*b1cdbd2cSJim Jagielski {
374*b1cdbd2cSJim Jagielski SetHelpId( SD_IF_SDDRAWVIEWSHELL );
375*b1cdbd2cSJim Jagielski GetActiveWindow()->SetHelpId( HID_SDDRAWVIEWSHELL );
376*b1cdbd2cSJim Jagielski GetActiveWindow()->SetUniqueId( HID_SDDRAWVIEWSHELL );
377*b1cdbd2cSJim Jagielski }
378*b1cdbd2cSJim Jagielski }
379*b1cdbd2cSJim Jagielski
380*b1cdbd2cSJim Jagielski // Selektionsfunktion starten
381*b1cdbd2cSJim Jagielski SfxRequest aReq(SID_OBJECT_SELECT, 0, GetDoc()->GetItemPool());
382*b1cdbd2cSJim Jagielski FuPermanent(aReq);
383*b1cdbd2cSJim Jagielski mpDrawView->SetFrameDragSingles(sal_True);
384*b1cdbd2cSJim Jagielski
385*b1cdbd2cSJim Jagielski if (pDocSh->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED)
386*b1cdbd2cSJim Jagielski {
387*b1cdbd2cSJim Jagielski mbZoomOnPage = sal_False;
388*b1cdbd2cSJim Jagielski }
389*b1cdbd2cSJim Jagielski else
390*b1cdbd2cSJim Jagielski {
391*b1cdbd2cSJim Jagielski mbZoomOnPage = sal_True;
392*b1cdbd2cSJim Jagielski }
393*b1cdbd2cSJim Jagielski
394*b1cdbd2cSJim Jagielski mbIsRulerDrag = sal_False;
395*b1cdbd2cSJim Jagielski
396*b1cdbd2cSJim Jagielski String aName( RTL_CONSTASCII_USTRINGPARAM("DrawViewShell"));
397*b1cdbd2cSJim Jagielski SetName (aName);
398*b1cdbd2cSJim Jagielski
399*b1cdbd2cSJim Jagielski mnLockCount = 0UL;
400*b1cdbd2cSJim Jagielski
401*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() );
402*b1cdbd2cSJim Jagielski
403*b1cdbd2cSJim Jagielski if( xMgr.is() )
404*b1cdbd2cSJim Jagielski {
405*b1cdbd2cSJim Jagielski mxScannerManager = ::com::sun::star::uno::Reference< ::com::sun::star::scanner::XScannerManager >(
406*b1cdbd2cSJim Jagielski xMgr->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.scanner.ScannerManager" ) ),
407*b1cdbd2cSJim Jagielski ::com::sun::star::uno::UNO_QUERY );
408*b1cdbd2cSJim Jagielski
409*b1cdbd2cSJim Jagielski if( mxScannerManager.is() )
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski mxScannerListener = ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >(
412*b1cdbd2cSJim Jagielski static_cast< ::cppu::OWeakObject* >( new ScannerEventListener( this ) ),
413*b1cdbd2cSJim Jagielski ::com::sun::star::uno::UNO_QUERY );
414*b1cdbd2cSJim Jagielski }
415*b1cdbd2cSJim Jagielski }
416*b1cdbd2cSJim Jagielski
417*b1cdbd2cSJim Jagielski mpAnnotationManager.reset( new AnnotationManager( GetViewShellBase() ) );
418*b1cdbd2cSJim Jagielski mpViewOverlayManager.reset( new ViewOverlayManager( GetViewShellBase() ) );
419*b1cdbd2cSJim Jagielski }
420*b1cdbd2cSJim Jagielski
421*b1cdbd2cSJim Jagielski
422*b1cdbd2cSJim Jagielski
423*b1cdbd2cSJim Jagielski
Init(bool bIsMainViewShell)424*b1cdbd2cSJim Jagielski void DrawViewShell::Init (bool bIsMainViewShell)
425*b1cdbd2cSJim Jagielski {
426*b1cdbd2cSJim Jagielski ViewShell::Init(bIsMainViewShell);
427*b1cdbd2cSJim Jagielski
428*b1cdbd2cSJim Jagielski StartListening (*GetDocSh());
429*b1cdbd2cSJim Jagielski }
430*b1cdbd2cSJim Jagielski
431*b1cdbd2cSJim Jagielski
432*b1cdbd2cSJim Jagielski
433*b1cdbd2cSJim Jagielski
Shutdown(void)434*b1cdbd2cSJim Jagielski void DrawViewShell::Shutdown (void)
435*b1cdbd2cSJim Jagielski {
436*b1cdbd2cSJim Jagielski ViewShell::Shutdown();
437*b1cdbd2cSJim Jagielski
438*b1cdbd2cSJim Jagielski if(SlideShow::IsRunning( GetViewShellBase() ) )
439*b1cdbd2cSJim Jagielski {
440*b1cdbd2cSJim Jagielski // Turn off effects.
441*b1cdbd2cSJim Jagielski GetDrawView()->SetAnimationMode(SDR_ANIMATION_DISABLE);
442*b1cdbd2cSJim Jagielski }
443*b1cdbd2cSJim Jagielski }
444*b1cdbd2cSJim Jagielski
445*b1cdbd2cSJim Jagielski
446*b1cdbd2cSJim Jagielski
447*b1cdbd2cSJim Jagielski
CreateSubController(void)448*b1cdbd2cSJim Jagielski css::uno::Reference<css::drawing::XDrawSubController> DrawViewShell::CreateSubController (void)
449*b1cdbd2cSJim Jagielski {
450*b1cdbd2cSJim Jagielski css::uno::Reference<css::drawing::XDrawSubController> xSubController;
451*b1cdbd2cSJim Jagielski
452*b1cdbd2cSJim Jagielski if (IsMainViewShell())
453*b1cdbd2cSJim Jagielski {
454*b1cdbd2cSJim Jagielski // Create uno sub controller for the main view shell.
455*b1cdbd2cSJim Jagielski xSubController = css::uno::Reference<css::drawing::XDrawSubController>(
456*b1cdbd2cSJim Jagielski new SdUnoDrawView (
457*b1cdbd2cSJim Jagielski GetViewShellBase().GetDrawController(),
458*b1cdbd2cSJim Jagielski *this,
459*b1cdbd2cSJim Jagielski *GetView()));
460*b1cdbd2cSJim Jagielski }
461*b1cdbd2cSJim Jagielski
462*b1cdbd2cSJim Jagielski return xSubController;
463*b1cdbd2cSJim Jagielski }
464*b1cdbd2cSJim Jagielski
465*b1cdbd2cSJim Jagielski
466*b1cdbd2cSJim Jagielski
467*b1cdbd2cSJim Jagielski
RelocateToParentWindow(::Window * pParentWindow)468*b1cdbd2cSJim Jagielski bool DrawViewShell::RelocateToParentWindow (::Window* pParentWindow)
469*b1cdbd2cSJim Jagielski {
470*b1cdbd2cSJim Jagielski // DrawViewShells can not be relocated to a new parent window at the
471*b1cdbd2cSJim Jagielski // moment, so return <FALSE/> except when the given parent window is the
472*b1cdbd2cSJim Jagielski // parent window that is already in use.
473*b1cdbd2cSJim Jagielski return pParentWindow==GetParentWindow();
474*b1cdbd2cSJim Jagielski }
475*b1cdbd2cSJim Jagielski
476*b1cdbd2cSJim Jagielski
477*b1cdbd2cSJim Jagielski
478*b1cdbd2cSJim Jagielski
479*b1cdbd2cSJim Jagielski /*************************************************************************
480*b1cdbd2cSJim Jagielski |*
481*b1cdbd2cSJim Jagielski |* pruefe ob linienzuege gezeichnet werden muessen
482*b1cdbd2cSJim Jagielski |*
483*b1cdbd2cSJim Jagielski \************************************************************************/
484*b1cdbd2cSJim Jagielski
485*b1cdbd2cSJim Jagielski /*
486*b1cdbd2cSJim Jagielski linienzuege werden ueber makros als folge von
487*b1cdbd2cSJim Jagielski MoveTo (x, y)
488*b1cdbd2cSJim Jagielski LineTo (x, y) [oder BezierTo (x, y)]
489*b1cdbd2cSJim Jagielski LineTo (x, y)
490*b1cdbd2cSJim Jagielski :
491*b1cdbd2cSJim Jagielski dargestellt. einen endbefehl fuer die linienzuege
492*b1cdbd2cSJim Jagielski gibt es nicht, also muessen alle befehle in den
493*b1cdbd2cSJim Jagielski requests nach LineTo (BezierTo) abgetestet und die
494*b1cdbd2cSJim Jagielski punktparameter gesammelt werden.
495*b1cdbd2cSJim Jagielski der erste nicht-LineTo fuehrt dann dazu, dass aus
496*b1cdbd2cSJim Jagielski den gesammelten punkten der linienzug erzeugt wird
497*b1cdbd2cSJim Jagielski */
498*b1cdbd2cSJim Jagielski
CheckLineTo(SfxRequest & rReq)499*b1cdbd2cSJim Jagielski void DrawViewShell::CheckLineTo(SfxRequest& rReq)
500*b1cdbd2cSJim Jagielski {
501*b1cdbd2cSJim Jagielski (void)rReq;
502*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
503*b1cdbd2cSJim Jagielski if(rReq.IsAPI())
504*b1cdbd2cSJim Jagielski {
505*b1cdbd2cSJim Jagielski if(SID_LINETO == rReq.GetSlot() || SID_BEZIERTO == rReq.GetSlot() || SID_MOVETO == rReq.GetSlot() )
506*b1cdbd2cSJim Jagielski {
507*b1cdbd2cSJim Jagielski DBG_ERROR("DrawViewShell::CheckLineTo: slots SID_LINETO, SID_BEZIERTO, SID_MOVETO no longer supported.");
508*b1cdbd2cSJim Jagielski }
509*b1cdbd2cSJim Jagielski }
510*b1cdbd2cSJim Jagielski #endif
511*b1cdbd2cSJim Jagielski
512*b1cdbd2cSJim Jagielski rReq.Ignore ();
513*b1cdbd2cSJim Jagielski }
514*b1cdbd2cSJim Jagielski
515*b1cdbd2cSJim Jagielski /*************************************************************************
516*b1cdbd2cSJim Jagielski |*
517*b1cdbd2cSJim Jagielski |* veraendere die seitemparameter, wenn SID_PAGESIZE oder SID_PAGEMARGIN
518*b1cdbd2cSJim Jagielski |*
519*b1cdbd2cSJim Jagielski \************************************************************************/
520*b1cdbd2cSJim Jagielski
SetupPage(Size & rSize,long nLeft,long nRight,long nUpper,long nLower,sal_Bool bSize,sal_Bool bMargin,sal_Bool bScaleAll)521*b1cdbd2cSJim Jagielski void DrawViewShell::SetupPage (Size &rSize,
522*b1cdbd2cSJim Jagielski long nLeft,
523*b1cdbd2cSJim Jagielski long nRight,
524*b1cdbd2cSJim Jagielski long nUpper,
525*b1cdbd2cSJim Jagielski long nLower,
526*b1cdbd2cSJim Jagielski sal_Bool bSize,
527*b1cdbd2cSJim Jagielski sal_Bool bMargin,
528*b1cdbd2cSJim Jagielski sal_Bool bScaleAll)
529*b1cdbd2cSJim Jagielski {
530*b1cdbd2cSJim Jagielski sal_uInt16 nPageCnt = GetDoc()->GetMasterSdPageCount(mePageKind);
531*b1cdbd2cSJim Jagielski sal_uInt16 i;
532*b1cdbd2cSJim Jagielski
533*b1cdbd2cSJim Jagielski for (i = 0; i < nPageCnt; i++)
534*b1cdbd2cSJim Jagielski {
535*b1cdbd2cSJim Jagielski /**********************************************************************
536*b1cdbd2cSJim Jagielski * Erst alle MasterPages bearbeiten
537*b1cdbd2cSJim Jagielski **********************************************************************/
538*b1cdbd2cSJim Jagielski SdPage *pPage = GetDoc()->GetMasterSdPage(i, mePageKind);
539*b1cdbd2cSJim Jagielski
540*b1cdbd2cSJim Jagielski if( pPage )
541*b1cdbd2cSJim Jagielski {
542*b1cdbd2cSJim Jagielski if( bSize )
543*b1cdbd2cSJim Jagielski {
544*b1cdbd2cSJim Jagielski Rectangle aBorderRect(nLeft, nUpper, nRight, nLower);
545*b1cdbd2cSJim Jagielski pPage->ScaleObjects(rSize, aBorderRect, bScaleAll);
546*b1cdbd2cSJim Jagielski pPage->SetSize(rSize);
547*b1cdbd2cSJim Jagielski
548*b1cdbd2cSJim Jagielski }
549*b1cdbd2cSJim Jagielski if( bMargin )
550*b1cdbd2cSJim Jagielski {
551*b1cdbd2cSJim Jagielski pPage->SetLftBorder(nLeft);
552*b1cdbd2cSJim Jagielski pPage->SetRgtBorder(nRight);
553*b1cdbd2cSJim Jagielski pPage->SetUppBorder(nUpper);
554*b1cdbd2cSJim Jagielski pPage->SetLwrBorder(nLower);
555*b1cdbd2cSJim Jagielski }
556*b1cdbd2cSJim Jagielski
557*b1cdbd2cSJim Jagielski if ( mePageKind == PK_STANDARD )
558*b1cdbd2cSJim Jagielski {
559*b1cdbd2cSJim Jagielski GetDoc()->GetMasterSdPage(i, PK_NOTES)->CreateTitleAndLayout();
560*b1cdbd2cSJim Jagielski }
561*b1cdbd2cSJim Jagielski
562*b1cdbd2cSJim Jagielski pPage->CreateTitleAndLayout();
563*b1cdbd2cSJim Jagielski }
564*b1cdbd2cSJim Jagielski }
565*b1cdbd2cSJim Jagielski
566*b1cdbd2cSJim Jagielski nPageCnt = GetDoc()->GetSdPageCount(mePageKind);
567*b1cdbd2cSJim Jagielski
568*b1cdbd2cSJim Jagielski for (i = 0; i < nPageCnt; i++)
569*b1cdbd2cSJim Jagielski {
570*b1cdbd2cSJim Jagielski /**********************************************************************
571*b1cdbd2cSJim Jagielski * Danach alle Pages bearbeiten
572*b1cdbd2cSJim Jagielski **********************************************************************/
573*b1cdbd2cSJim Jagielski SdPage *pPage = GetDoc()->GetSdPage(i, mePageKind);
574*b1cdbd2cSJim Jagielski
575*b1cdbd2cSJim Jagielski if( pPage )
576*b1cdbd2cSJim Jagielski {
577*b1cdbd2cSJim Jagielski if( bSize )
578*b1cdbd2cSJim Jagielski {
579*b1cdbd2cSJim Jagielski Rectangle aBorderRect(nLeft, nUpper, nRight, nLower);
580*b1cdbd2cSJim Jagielski pPage->ScaleObjects(rSize, aBorderRect, bScaleAll);
581*b1cdbd2cSJim Jagielski pPage->SetSize(rSize);
582*b1cdbd2cSJim Jagielski }
583*b1cdbd2cSJim Jagielski if( bMargin )
584*b1cdbd2cSJim Jagielski {
585*b1cdbd2cSJim Jagielski pPage->SetLftBorder(nLeft);
586*b1cdbd2cSJim Jagielski pPage->SetRgtBorder(nRight);
587*b1cdbd2cSJim Jagielski pPage->SetUppBorder(nUpper);
588*b1cdbd2cSJim Jagielski pPage->SetLwrBorder(nLower);
589*b1cdbd2cSJim Jagielski }
590*b1cdbd2cSJim Jagielski
591*b1cdbd2cSJim Jagielski if ( mePageKind == PK_STANDARD )
592*b1cdbd2cSJim Jagielski {
593*b1cdbd2cSJim Jagielski SdPage* pNotesPage = GetDoc()->GetSdPage(i, PK_NOTES);
594*b1cdbd2cSJim Jagielski pNotesPage->SetAutoLayout( pNotesPage->GetAutoLayout() );
595*b1cdbd2cSJim Jagielski }
596*b1cdbd2cSJim Jagielski
597*b1cdbd2cSJim Jagielski pPage->SetAutoLayout( pPage->GetAutoLayout() );
598*b1cdbd2cSJim Jagielski }
599*b1cdbd2cSJim Jagielski }
600*b1cdbd2cSJim Jagielski
601*b1cdbd2cSJim Jagielski if ( mePageKind == PK_STANDARD )
602*b1cdbd2cSJim Jagielski {
603*b1cdbd2cSJim Jagielski SdPage* pHandoutPage = GetDoc()->GetSdPage(0, PK_HANDOUT);
604*b1cdbd2cSJim Jagielski pHandoutPage->CreateTitleAndLayout(sal_True);
605*b1cdbd2cSJim Jagielski }
606*b1cdbd2cSJim Jagielski
607*b1cdbd2cSJim Jagielski long nWidth = mpActualPage->GetSize().Width();
608*b1cdbd2cSJim Jagielski long nHeight = mpActualPage->GetSize().Height();
609*b1cdbd2cSJim Jagielski
610*b1cdbd2cSJim Jagielski Point aPageOrg(nWidth, nHeight / 2);
611*b1cdbd2cSJim Jagielski Size aSize( nWidth * 3, nHeight * 2);
612*b1cdbd2cSJim Jagielski
613*b1cdbd2cSJim Jagielski InitWindows(aPageOrg, aSize, Point(-1, -1), sal_True);
614*b1cdbd2cSJim Jagielski
615*b1cdbd2cSJim Jagielski Point aVisAreaPos;
616*b1cdbd2cSJim Jagielski
617*b1cdbd2cSJim Jagielski if ( GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
618*b1cdbd2cSJim Jagielski {
619*b1cdbd2cSJim Jagielski aVisAreaPos = GetDocSh()->GetVisArea(ASPECT_CONTENT).TopLeft();
620*b1cdbd2cSJim Jagielski }
621*b1cdbd2cSJim Jagielski
622*b1cdbd2cSJim Jagielski GetView()->SetWorkArea(Rectangle(Point() - aVisAreaPos - aPageOrg, aSize));
623*b1cdbd2cSJim Jagielski
624*b1cdbd2cSJim Jagielski UpdateScrollBars();
625*b1cdbd2cSJim Jagielski
626*b1cdbd2cSJim Jagielski Point aNewOrigin(mpActualPage->GetLftBorder(), mpActualPage->GetUppBorder());
627*b1cdbd2cSJim Jagielski GetView()->GetSdrPageView()->SetPageOrigin(aNewOrigin);
628*b1cdbd2cSJim Jagielski
629*b1cdbd2cSJim Jagielski GetViewFrame()->GetBindings().Invalidate(SID_RULER_NULL_OFFSET);
630*b1cdbd2cSJim Jagielski
631*b1cdbd2cSJim Jagielski // auf (neue) Seitengroesse zoomen
632*b1cdbd2cSJim Jagielski GetViewFrame()->GetDispatcher()->Execute(SID_SIZE_PAGE,
633*b1cdbd2cSJim Jagielski SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
634*b1cdbd2cSJim Jagielski }
635*b1cdbd2cSJim Jagielski
636*b1cdbd2cSJim Jagielski /*************************************************************************
637*b1cdbd2cSJim Jagielski |*
638*b1cdbd2cSJim Jagielski |* Statuswerte der Statusbar zurueckgeben
639*b1cdbd2cSJim Jagielski |*
640*b1cdbd2cSJim Jagielski \************************************************************************/
641*b1cdbd2cSJim Jagielski
GetStatusBarState(SfxItemSet & rSet)642*b1cdbd2cSJim Jagielski void DrawViewShell::GetStatusBarState(SfxItemSet& rSet)
643*b1cdbd2cSJim Jagielski {
644*b1cdbd2cSJim Jagielski // Zoom-Item
645*b1cdbd2cSJim Jagielski // Hier sollte der entsprechende Wert (Optimal ?, Seitenbreite oder
646*b1cdbd2cSJim Jagielski // Seite) mit Hilfe des ZoomItems weitergegeben werden !!!
647*b1cdbd2cSJim Jagielski if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_ZOOM ) )
648*b1cdbd2cSJim Jagielski {
649*b1cdbd2cSJim Jagielski if (GetDocSh()->IsUIActive() || (SlideShow::IsRunning(GetViewShellBase())) )
650*b1cdbd2cSJim Jagielski {
651*b1cdbd2cSJim Jagielski rSet.DisableItem( SID_ATTR_ZOOM );
652*b1cdbd2cSJim Jagielski }
653*b1cdbd2cSJim Jagielski else
654*b1cdbd2cSJim Jagielski {
655*b1cdbd2cSJim Jagielski SvxZoomItem* pZoomItem;
656*b1cdbd2cSJim Jagielski sal_uInt16 nZoom = (sal_uInt16) GetActiveWindow()->GetZoom();
657*b1cdbd2cSJim Jagielski
658*b1cdbd2cSJim Jagielski if( mbZoomOnPage )
659*b1cdbd2cSJim Jagielski pZoomItem = new SvxZoomItem( SVX_ZOOM_WHOLEPAGE, nZoom );
660*b1cdbd2cSJim Jagielski else
661*b1cdbd2cSJim Jagielski pZoomItem = new SvxZoomItem( SVX_ZOOM_PERCENT, nZoom );
662*b1cdbd2cSJim Jagielski
663*b1cdbd2cSJim Jagielski // Bereich einschraenken
664*b1cdbd2cSJim Jagielski sal_uInt16 nZoomValues = SVX_ZOOM_ENABLE_ALL;
665*b1cdbd2cSJim Jagielski SdrPageView* pPageView = mpDrawView->GetSdrPageView();
666*b1cdbd2cSJim Jagielski
667*b1cdbd2cSJim Jagielski if( ( pPageView && pPageView->GetObjList()->GetObjCount() == 0 ) )
668*b1cdbd2cSJim Jagielski // || ( mpDrawView->GetMarkedObjectList().GetMarkCount() == 0 ) )
669*b1cdbd2cSJim Jagielski {
670*b1cdbd2cSJim Jagielski nZoomValues &= ~SVX_ZOOM_ENABLE_OPTIMAL;
671*b1cdbd2cSJim Jagielski }
672*b1cdbd2cSJim Jagielski
673*b1cdbd2cSJim Jagielski pZoomItem->SetValueSet( nZoomValues );
674*b1cdbd2cSJim Jagielski rSet.Put( *pZoomItem );
675*b1cdbd2cSJim Jagielski delete pZoomItem;
676*b1cdbd2cSJim Jagielski }
677*b1cdbd2cSJim Jagielski }
678*b1cdbd2cSJim Jagielski if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_ZOOMSLIDER ) )
679*b1cdbd2cSJim Jagielski {
680*b1cdbd2cSJim Jagielski rtl::Reference< sd::SlideShow > xSlideshow( SlideShow::GetSlideShow( GetDoc() ) );
681*b1cdbd2cSJim Jagielski if (GetDocSh()->IsUIActive() || (xSlideshow.is() && xSlideshow->isRunning()) || !GetActiveWindow() )
682*b1cdbd2cSJim Jagielski {
683*b1cdbd2cSJim Jagielski rSet.DisableItem( SID_ATTR_ZOOMSLIDER );
684*b1cdbd2cSJim Jagielski }
685*b1cdbd2cSJim Jagielski else
686*b1cdbd2cSJim Jagielski {
687*b1cdbd2cSJim Jagielski sd::Window * pActiveWindow = GetActiveWindow();
688*b1cdbd2cSJim Jagielski SvxZoomSliderItem aZoomItem( (sal_uInt16) pActiveWindow->GetZoom(), (sal_uInt16)pActiveWindow->GetMinZoom(), (sal_uInt16)pActiveWindow->GetMaxZoom() ) ;
689*b1cdbd2cSJim Jagielski
690*b1cdbd2cSJim Jagielski SdrPageView* pPageView = mpDrawView->GetSdrPageView();
691*b1cdbd2cSJim Jagielski if( pPageView )
692*b1cdbd2cSJim Jagielski {
693*b1cdbd2cSJim Jagielski Point aPagePos(0, 0);
694*b1cdbd2cSJim Jagielski Size aPageSize = pPageView->GetPage()->GetSize();
695*b1cdbd2cSJim Jagielski
696*b1cdbd2cSJim Jagielski aPagePos.X() += aPageSize.Width() / 2;
697*b1cdbd2cSJim Jagielski aPageSize.Width() = (long) (aPageSize.Width() * 1.03);
698*b1cdbd2cSJim Jagielski
699*b1cdbd2cSJim Jagielski aPagePos.Y() += aPageSize.Height() / 2;
700*b1cdbd2cSJim Jagielski aPageSize.Height() = (long) (aPageSize.Height() * 1.03);
701*b1cdbd2cSJim Jagielski aPagePos.Y() -= aPageSize.Height() / 2;
702*b1cdbd2cSJim Jagielski
703*b1cdbd2cSJim Jagielski aPagePos.X() -= aPageSize.Width() / 2;
704*b1cdbd2cSJim Jagielski
705*b1cdbd2cSJim Jagielski Rectangle aFullPageZoomRect( aPagePos, aPageSize );
706*b1cdbd2cSJim Jagielski aZoomItem.AddSnappingPoint( pActiveWindow->GetZoomForRect( aFullPageZoomRect ) );
707*b1cdbd2cSJim Jagielski }
708*b1cdbd2cSJim Jagielski aZoomItem.AddSnappingPoint(100);
709*b1cdbd2cSJim Jagielski rSet.Put( aZoomItem );
710*b1cdbd2cSJim Jagielski }
711*b1cdbd2cSJim Jagielski }
712*b1cdbd2cSJim Jagielski
713*b1cdbd2cSJim Jagielski Point aPos = GetActiveWindow()->PixelToLogic(maMousePos);
714*b1cdbd2cSJim Jagielski mpDrawView->GetSdrPageView()->LogicToPagePos(aPos);
715*b1cdbd2cSJim Jagielski Fraction aUIScale(GetDoc()->GetUIScale());
716*b1cdbd2cSJim Jagielski aPos.X() = Fraction(aPos.X()) / aUIScale;
717*b1cdbd2cSJim Jagielski aPos.Y() = Fraction(aPos.Y()) / aUIScale;
718*b1cdbd2cSJim Jagielski
719*b1cdbd2cSJim Jagielski // Position- und Groesse-Items
720*b1cdbd2cSJim Jagielski if ( mpDrawView->IsAction() )
721*b1cdbd2cSJim Jagielski {
722*b1cdbd2cSJim Jagielski Rectangle aRect;
723*b1cdbd2cSJim Jagielski mpDrawView->TakeActionRect( aRect );
724*b1cdbd2cSJim Jagielski
725*b1cdbd2cSJim Jagielski if ( aRect.IsEmpty() )
726*b1cdbd2cSJim Jagielski rSet.Put( SfxPointItem(SID_ATTR_POSITION, aPos) );
727*b1cdbd2cSJim Jagielski else
728*b1cdbd2cSJim Jagielski {
729*b1cdbd2cSJim Jagielski mpDrawView->GetSdrPageView()->LogicToPagePos(aRect);
730*b1cdbd2cSJim Jagielski aPos = aRect.TopLeft();
731*b1cdbd2cSJim Jagielski aPos.X() = Fraction(aPos.X()) / aUIScale;
732*b1cdbd2cSJim Jagielski aPos.Y() = Fraction(aPos.Y()) / aUIScale;
733*b1cdbd2cSJim Jagielski rSet.Put( SfxPointItem( SID_ATTR_POSITION, aPos) );
734*b1cdbd2cSJim Jagielski Size aSize( aRect.Right() - aRect.Left(), aRect.Bottom() - aRect.Top() );
735*b1cdbd2cSJim Jagielski aSize.Height() = Fraction(aSize.Height()) / aUIScale;
736*b1cdbd2cSJim Jagielski aSize.Width() = Fraction(aSize.Width()) / aUIScale;
737*b1cdbd2cSJim Jagielski rSet.Put( SvxSizeItem( SID_ATTR_SIZE, aSize) );
738*b1cdbd2cSJim Jagielski }
739*b1cdbd2cSJim Jagielski }
740*b1cdbd2cSJim Jagielski else
741*b1cdbd2cSJim Jagielski {
742*b1cdbd2cSJim Jagielski if ( mpDrawView->AreObjectsMarked() )
743*b1cdbd2cSJim Jagielski {
744*b1cdbd2cSJim Jagielski Rectangle aRect = mpDrawView->GetAllMarkedRect();
745*b1cdbd2cSJim Jagielski mpDrawView->GetSdrPageView()->LogicToPagePos(aRect);
746*b1cdbd2cSJim Jagielski
747*b1cdbd2cSJim Jagielski // Show the position of the selected shape(s)
748*b1cdbd2cSJim Jagielski Point aShapePosition (aRect.TopLeft());
749*b1cdbd2cSJim Jagielski aShapePosition.X() = Fraction(aShapePosition.X()) / aUIScale;
750*b1cdbd2cSJim Jagielski aShapePosition.Y() = Fraction(aShapePosition.Y()) / aUIScale;
751*b1cdbd2cSJim Jagielski rSet.Put (SfxPointItem(SID_ATTR_POSITION, aShapePosition));
752*b1cdbd2cSJim Jagielski
753*b1cdbd2cSJim Jagielski Size aSize( aRect.Right() - aRect.Left(), aRect.Bottom() - aRect.Top() );
754*b1cdbd2cSJim Jagielski aSize.Height() = Fraction(aSize.Height()) / aUIScale;
755*b1cdbd2cSJim Jagielski aSize.Width() = Fraction(aSize.Width()) / aUIScale;
756*b1cdbd2cSJim Jagielski rSet.Put( SvxSizeItem( SID_ATTR_SIZE, aSize) );
757*b1cdbd2cSJim Jagielski }
758*b1cdbd2cSJim Jagielski else
759*b1cdbd2cSJim Jagielski {
760*b1cdbd2cSJim Jagielski rSet.Put( SfxPointItem(SID_ATTR_POSITION, aPos) );
761*b1cdbd2cSJim Jagielski rSet.Put( SvxSizeItem( SID_ATTR_SIZE, Size( 0, 0 ) ) );
762*b1cdbd2cSJim Jagielski }
763*b1cdbd2cSJim Jagielski }
764*b1cdbd2cSJim Jagielski
765*b1cdbd2cSJim Jagielski // Display of current page and layer.
766*b1cdbd2cSJim Jagielski if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_STATUS_PAGE ) )
767*b1cdbd2cSJim Jagielski {
768*b1cdbd2cSJim Jagielski // Allways show the slide/page number.
769*b1cdbd2cSJim Jagielski String aString (SdResId( STR_SD_PAGE ));
770*b1cdbd2cSJim Jagielski aString += sal_Unicode(' ');
771*b1cdbd2cSJim Jagielski aString += UniString::CreateFromInt32( maTabControl.GetCurPageId() );
772*b1cdbd2cSJim Jagielski aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " / " ));
773*b1cdbd2cSJim Jagielski aString += UniString::CreateFromInt32( GetDoc()->GetSdPageCount( mePageKind ) );
774*b1cdbd2cSJim Jagielski
775*b1cdbd2cSJim Jagielski // If in layer mode additionally show the layer that contains all
776*b1cdbd2cSJim Jagielski // selected shapes of the page. If the shapes are distributed on
777*b1cdbd2cSJim Jagielski // more than one layer, no layer name is shown.
778*b1cdbd2cSJim Jagielski if (IsLayerModeActive())
779*b1cdbd2cSJim Jagielski {
780*b1cdbd2cSJim Jagielski SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin();
781*b1cdbd2cSJim Jagielski SdrLayerID nLayer = 0, nOldLayer = 0;
782*b1cdbd2cSJim Jagielski SdrLayer* pLayer = NULL;
783*b1cdbd2cSJim Jagielski SdrObject* pObj = NULL;
784*b1cdbd2cSJim Jagielski const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
785*b1cdbd2cSJim Jagielski sal_uLong nMarkCount = rMarkList.GetMarkCount();
786*b1cdbd2cSJim Jagielski FASTBOOL bOneLayer = sal_True;
787*b1cdbd2cSJim Jagielski
788*b1cdbd2cSJim Jagielski // Use the first ten selected shapes as a (hopefully
789*b1cdbd2cSJim Jagielski // representative) sample of all shapes of the current page.
790*b1cdbd2cSJim Jagielski // Detect whether they belong to the same layer.
791*b1cdbd2cSJim Jagielski for( sal_uLong j = 0; j < nMarkCount && bOneLayer && j < 10; j++ )
792*b1cdbd2cSJim Jagielski {
793*b1cdbd2cSJim Jagielski pObj = rMarkList.GetMark( j )->GetMarkedSdrObj();
794*b1cdbd2cSJim Jagielski if( pObj )
795*b1cdbd2cSJim Jagielski {
796*b1cdbd2cSJim Jagielski nLayer = pObj->GetLayer();
797*b1cdbd2cSJim Jagielski
798*b1cdbd2cSJim Jagielski if( j != 0 && nLayer != nOldLayer )
799*b1cdbd2cSJim Jagielski bOneLayer = sal_False;
800*b1cdbd2cSJim Jagielski
801*b1cdbd2cSJim Jagielski nOldLayer = nLayer;
802*b1cdbd2cSJim Jagielski }
803*b1cdbd2cSJim Jagielski }
804*b1cdbd2cSJim Jagielski
805*b1cdbd2cSJim Jagielski // Append the layer name to the current page number.
806*b1cdbd2cSJim Jagielski if( bOneLayer && nMarkCount )
807*b1cdbd2cSJim Jagielski {
808*b1cdbd2cSJim Jagielski pLayer = rLayerAdmin.GetLayerPerID( nLayer );
809*b1cdbd2cSJim Jagielski if( pLayer )
810*b1cdbd2cSJim Jagielski {
811*b1cdbd2cSJim Jagielski aString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " (" ));
812*b1cdbd2cSJim Jagielski aString += pLayer->GetName();
813*b1cdbd2cSJim Jagielski aString += sal_Unicode(')');
814*b1cdbd2cSJim Jagielski }
815*b1cdbd2cSJim Jagielski }
816*b1cdbd2cSJim Jagielski }
817*b1cdbd2cSJim Jagielski
818*b1cdbd2cSJim Jagielski rSet.Put (SfxStringItem (SID_STATUS_PAGE, aString));
819*b1cdbd2cSJim Jagielski }
820*b1cdbd2cSJim Jagielski // Layout
821*b1cdbd2cSJim Jagielski if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_STATUS_LAYOUT ) )
822*b1cdbd2cSJim Jagielski {
823*b1cdbd2cSJim Jagielski String aString = mpActualPage->GetLayoutName();
824*b1cdbd2cSJim Jagielski aString.Erase( aString.SearchAscii( SD_LT_SEPARATOR ) );
825*b1cdbd2cSJim Jagielski rSet.Put( SfxStringItem( SID_STATUS_LAYOUT, aString ) );
826*b1cdbd2cSJim Jagielski }
827*b1cdbd2cSJim Jagielski }
828*b1cdbd2cSJim Jagielski
829*b1cdbd2cSJim Jagielski
830*b1cdbd2cSJim Jagielski
Notify(SfxBroadcaster &,const SfxHint & rHint)831*b1cdbd2cSJim Jagielski void DrawViewShell::Notify (SfxBroadcaster&, const SfxHint& rHint)
832*b1cdbd2cSJim Jagielski {
833*b1cdbd2cSJim Jagielski const SfxSimpleHint* pSimple = dynamic_cast< const SfxSimpleHint* >(&rHint);
834*b1cdbd2cSJim Jagielski if (pSimple!=NULL && pSimple->GetId()==SFX_HINT_MODECHANGED)
835*b1cdbd2cSJim Jagielski {
836*b1cdbd2cSJim Jagielski // Change to selection when turning on read-only mode.
837*b1cdbd2cSJim Jagielski if(GetDocSh()->IsReadOnly() && dynamic_cast< FuSelection* >( GetCurrentFunction().get() ) )
838*b1cdbd2cSJim Jagielski {
839*b1cdbd2cSJim Jagielski SfxRequest aReq(SID_OBJECT_SELECT, 0, GetDoc()->GetItemPool());
840*b1cdbd2cSJim Jagielski FuPermanent(aReq);
841*b1cdbd2cSJim Jagielski }
842*b1cdbd2cSJim Jagielski
843*b1cdbd2cSJim Jagielski // Turn on design mode when document is not read-only.
844*b1cdbd2cSJim Jagielski if (GetDocSh()->IsReadOnly() != mbReadOnly )
845*b1cdbd2cSJim Jagielski {
846*b1cdbd2cSJim Jagielski mbReadOnly = GetDocSh()->IsReadOnly();
847*b1cdbd2cSJim Jagielski
848*b1cdbd2cSJim Jagielski SfxBoolItem aItem( SID_FM_DESIGN_MODE, !mbReadOnly );
849*b1cdbd2cSJim Jagielski GetViewFrame()->GetDispatcher()->Execute( SID_FM_DESIGN_MODE,
850*b1cdbd2cSJim Jagielski SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
851*b1cdbd2cSJim Jagielski }
852*b1cdbd2cSJim Jagielski }
853*b1cdbd2cSJim Jagielski
854*b1cdbd2cSJim Jagielski }
855*b1cdbd2cSJim Jagielski
ExecuteAnnotation(SfxRequest & rRequest)856*b1cdbd2cSJim Jagielski void DrawViewShell::ExecuteAnnotation (SfxRequest& rRequest)
857*b1cdbd2cSJim Jagielski {
858*b1cdbd2cSJim Jagielski if( mpAnnotationManager.get() )
859*b1cdbd2cSJim Jagielski mpAnnotationManager->ExecuteAnnotation( rRequest );
860*b1cdbd2cSJim Jagielski }
861*b1cdbd2cSJim Jagielski
862*b1cdbd2cSJim Jagielski // --------------------------------------------------------------------
863*b1cdbd2cSJim Jagielski
GetAnnotationState(SfxItemSet & rItemSet)864*b1cdbd2cSJim Jagielski void DrawViewShell::GetAnnotationState (SfxItemSet& rItemSet )
865*b1cdbd2cSJim Jagielski {
866*b1cdbd2cSJim Jagielski if( mpAnnotationManager.get() )
867*b1cdbd2cSJim Jagielski mpAnnotationManager->GetAnnotationState( rItemSet );
868*b1cdbd2cSJim Jagielski }
869*b1cdbd2cSJim Jagielski
870*b1cdbd2cSJim Jagielski
871*b1cdbd2cSJim Jagielski
872*b1cdbd2cSJim Jagielski
GetSidebarContextName(void) const873*b1cdbd2cSJim Jagielski ::rtl::OUString DrawViewShell::GetSidebarContextName (void) const
874*b1cdbd2cSJim Jagielski {
875*b1cdbd2cSJim Jagielski ::svx::sidebar::SelectionAnalyzer::ViewType eViewType (::svx::sidebar::SelectionAnalyzer::VT_Standard);
876*b1cdbd2cSJim Jagielski switch (mePageKind)
877*b1cdbd2cSJim Jagielski {
878*b1cdbd2cSJim Jagielski case PK_HANDOUT:
879*b1cdbd2cSJim Jagielski eViewType = ::svx::sidebar::SelectionAnalyzer::VT_Handout;
880*b1cdbd2cSJim Jagielski break;
881*b1cdbd2cSJim Jagielski case PK_NOTES:
882*b1cdbd2cSJim Jagielski eViewType = ::svx::sidebar::SelectionAnalyzer::VT_Notes;
883*b1cdbd2cSJim Jagielski break;
884*b1cdbd2cSJim Jagielski case PK_STANDARD:
885*b1cdbd2cSJim Jagielski if (meEditMode == EM_MASTERPAGE)
886*b1cdbd2cSJim Jagielski eViewType = ::svx::sidebar::SelectionAnalyzer::VT_Master;
887*b1cdbd2cSJim Jagielski else
888*b1cdbd2cSJim Jagielski eViewType = ::svx::sidebar::SelectionAnalyzer::VT_Standard;
889*b1cdbd2cSJim Jagielski break;
890*b1cdbd2cSJim Jagielski }
891*b1cdbd2cSJim Jagielski return EnumContext::GetContextName(
892*b1cdbd2cSJim Jagielski ::svx::sidebar::SelectionAnalyzer::GetContextForSelection_SD(
893*b1cdbd2cSJim Jagielski mpDrawView->GetMarkedObjectList(),
894*b1cdbd2cSJim Jagielski eViewType));
895*b1cdbd2cSJim Jagielski }
896*b1cdbd2cSJim Jagielski
897*b1cdbd2cSJim Jagielski
898*b1cdbd2cSJim Jagielski } // end of namespace sd
899