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 "ViewShellImplementation.hxx"
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include "sdpage.hxx"
30*b1cdbd2cSJim Jagielski #include "drawdoc.hxx"
31*b1cdbd2cSJim Jagielski #include "sdresid.hxx"
32*b1cdbd2cSJim Jagielski #include "glob.hrc"
33*b1cdbd2cSJim Jagielski #include "app.hrc"
34*b1cdbd2cSJim Jagielski #include "strings.hrc"
35*b1cdbd2cSJim Jagielski #include "strings.hrc"
36*b1cdbd2cSJim Jagielski #include "helpids.h"
37*b1cdbd2cSJim Jagielski #include "sdattr.hxx"
38*b1cdbd2cSJim Jagielski #include "sdabstdlg.hxx"
39*b1cdbd2cSJim Jagielski #include "unmodpg.hxx"
40*b1cdbd2cSJim Jagielski #include "Window.hxx"
41*b1cdbd2cSJim Jagielski #include "optsitem.hxx"
42*b1cdbd2cSJim Jagielski #include "DrawDocShell.hxx"
43*b1cdbd2cSJim Jagielski #include "DrawController.hxx"
44*b1cdbd2cSJim Jagielski #include "FactoryIds.hxx"
45*b1cdbd2cSJim Jagielski #include "slideshow.hxx"
46*b1cdbd2cSJim Jagielski #include "ViewShellBase.hxx"
47*b1cdbd2cSJim Jagielski #include "FrameView.hxx"
48*b1cdbd2cSJim Jagielski #include "DrawViewShell.hxx"
49*b1cdbd2cSJim Jagielski #include "ViewShellHint.hxx"
50*b1cdbd2cSJim Jagielski #include "SidebarPanelId.hxx"
51*b1cdbd2cSJim Jagielski #include "framework/FrameworkHelper.hxx"
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski #include <sfx2/bindings.hxx>
54*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
55*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
56*b1cdbd2cSJim Jagielski #include <sfx2/sidebar/Sidebar.hxx>
57*b1cdbd2cSJim Jagielski #include <svl/aeitem.hxx>
58*b1cdbd2cSJim Jagielski #include <svx/imapdlg.hxx>
59*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
60*b1cdbd2cSJim Jagielski #include <basic/sbstar.hxx>
61*b1cdbd2cSJim Jagielski #include "undo/undoobjects.hxx"
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/framework/XControllerManager.hpp>
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
66*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::drawing::framework;
67*b1cdbd2cSJim Jagielski using ::sd::framework::FrameworkHelper;
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski namespace sd {
70*b1cdbd2cSJim Jagielski 
Implementation(ViewShell & rViewShell)71*b1cdbd2cSJim Jagielski ViewShell::Implementation::Implementation (ViewShell& rViewShell)
72*b1cdbd2cSJim Jagielski     : mbIsShowingUIControls(false),
73*b1cdbd2cSJim Jagielski       mbIsMainViewShell(false),
74*b1cdbd2cSJim Jagielski       mbIsInitialized(false),
75*b1cdbd2cSJim Jagielski       mbArrangeActive(false),
76*b1cdbd2cSJim Jagielski       mpSubShellFactory(),
77*b1cdbd2cSJim Jagielski       mpUpdateLockForMouse(),
78*b1cdbd2cSJim Jagielski       mrViewShell(rViewShell)
79*b1cdbd2cSJim Jagielski {
80*b1cdbd2cSJim Jagielski }
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 
~Implementation(void)85*b1cdbd2cSJim Jagielski ViewShell::Implementation::~Implementation (void)
86*b1cdbd2cSJim Jagielski {
87*b1cdbd2cSJim Jagielski     if ( ! mpUpdateLockForMouse.expired())
88*b1cdbd2cSJim Jagielski     {
89*b1cdbd2cSJim Jagielski         ::boost::shared_ptr<ToolBarManagerLock> pLock(mpUpdateLockForMouse);
90*b1cdbd2cSJim Jagielski         if (pLock.get() != NULL)
91*b1cdbd2cSJim Jagielski         {
92*b1cdbd2cSJim Jagielski             // Force the ToolBarManagerLock to be released even when the
93*b1cdbd2cSJim Jagielski             // IsUICaptured() returns <TRUE/>.
94*b1cdbd2cSJim Jagielski             pLock->Release(true);
95*b1cdbd2cSJim Jagielski         }
96*b1cdbd2cSJim Jagielski     }
97*b1cdbd2cSJim Jagielski }
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski 
ProcessModifyPageSlot(SfxRequest & rRequest,SdPage * pCurrentPage,PageKind ePageKind)102*b1cdbd2cSJim Jagielski void ViewShell::Implementation::ProcessModifyPageSlot (
103*b1cdbd2cSJim Jagielski     SfxRequest& rRequest,
104*b1cdbd2cSJim Jagielski     SdPage* pCurrentPage,
105*b1cdbd2cSJim Jagielski     PageKind ePageKind)
106*b1cdbd2cSJim Jagielski {
107*b1cdbd2cSJim Jagielski     SdDrawDocument* pDocument = mrViewShell.GetDoc();
108*b1cdbd2cSJim Jagielski     SdrLayerAdmin& rLayerAdmin = pDocument->GetLayerAdmin();
109*b1cdbd2cSJim Jagielski     sal_uInt8 aBckgrnd = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False);
110*b1cdbd2cSJim Jagielski     sal_uInt8 aBckgrndObj = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False);
111*b1cdbd2cSJim Jagielski     SetOfByte aVisibleLayers;
112*b1cdbd2cSJim Jagielski     sal_Bool bHandoutMode = sal_False;
113*b1cdbd2cSJim Jagielski     SdPage* pHandoutMPage = NULL;
114*b1cdbd2cSJim Jagielski     String aNewName;
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski     // #95981#
117*b1cdbd2cSJim Jagielski     String aOldName;
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski     AutoLayout aNewAutoLayout;
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski     sal_Bool bBVisible;
122*b1cdbd2cSJim Jagielski     sal_Bool bBObjsVisible;
123*b1cdbd2cSJim Jagielski     const SfxItemSet* pArgs = rRequest.GetArgs();
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski     if (pCurrentPage != NULL && pCurrentPage->TRG_HasMasterPage())
126*b1cdbd2cSJim Jagielski         aVisibleLayers = pCurrentPage->TRG_GetMasterPageVisibleLayers();
127*b1cdbd2cSJim Jagielski     else
128*b1cdbd2cSJim Jagielski         aVisibleLayers.SetAll();
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski     do
131*b1cdbd2cSJim Jagielski     {
132*b1cdbd2cSJim Jagielski         if (pCurrentPage == NULL)
133*b1cdbd2cSJim Jagielski             break;
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski         if (!pArgs || pArgs->Count() == 1 || pArgs->Count() == 2 )
136*b1cdbd2cSJim Jagielski         {
137*b1cdbd2cSJim Jagielski             if (pArgs && pArgs->Count() == 2)
138*b1cdbd2cSJim Jagielski             {
139*b1cdbd2cSJim Jagielski                 // We have been called with a request that contains two
140*b1cdbd2cSJim Jagielski                 // arguments.  One was used as preselected layout in a
141*b1cdbd2cSJim Jagielski                 // dialog.  We could select that layout in the
142*b1cdbd2cSJim Jagielski                 // layout panel instead.
143*b1cdbd2cSJim Jagielski                 /*
144*b1cdbd2cSJim Jagielski                     SFX_REQUEST_ARG (rRequest, pNewAutoLayout, SfxUInt32Item, ID_VAL_WHATLAYOUT, sal_False);
145*b1cdbd2cSJim Jagielski                     eNewAutoLayout = (AutoLayout) pNewAutoLayout->GetValue
146*b1cdbd2cSJim Jagielski                     ();
147*b1cdbd2cSJim Jagielski                 */
148*b1cdbd2cSJim Jagielski             }
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski             // Make the layout menu visible in the tool pane.
151*b1cdbd2cSJim Jagielski             sfx2::sidebar::Sidebar::ShowPanel(
152*b1cdbd2cSJim Jagielski                 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImpressLayoutsPanel")),
153*b1cdbd2cSJim Jagielski                 mrViewShell.GetViewFrame()->GetFrame().GetFrameInterface());
154*b1cdbd2cSJim Jagielski             break;
155*b1cdbd2cSJim Jagielski         }
156*b1cdbd2cSJim Jagielski         else if (pArgs->Count() == 4)
157*b1cdbd2cSJim Jagielski         {
158*b1cdbd2cSJim Jagielski             SFX_REQUEST_ARG (rRequest, pNewName, SfxStringItem, ID_VAL_PAGENAME, sal_False);
159*b1cdbd2cSJim Jagielski             SFX_REQUEST_ARG (rRequest, pNewAutoLayout, SfxUInt32Item, ID_VAL_WHATLAYOUT, sal_False);
160*b1cdbd2cSJim Jagielski             SFX_REQUEST_ARG (rRequest, pBVisible, SfxBoolItem, ID_VAL_ISPAGEBACK, sal_False);
161*b1cdbd2cSJim Jagielski             SFX_REQUEST_ARG (rRequest, pBObjsVisible, SfxBoolItem, ID_VAL_ISPAGEOBJ, sal_False);
162*b1cdbd2cSJim Jagielski             AutoLayout aLayout ((AutoLayout)pNewAutoLayout->GetValue ());
163*b1cdbd2cSJim Jagielski             if (aLayout >= AUTOLAYOUT__START
164*b1cdbd2cSJim Jagielski                 && aLayout < AUTOLAYOUT__END)
165*b1cdbd2cSJim Jagielski             {
166*b1cdbd2cSJim Jagielski                 aNewName		= pNewName->GetValue ();
167*b1cdbd2cSJim Jagielski                 aNewAutoLayout = (AutoLayout) pNewAutoLayout->GetValue ();
168*b1cdbd2cSJim Jagielski                 bBVisible		= pBVisible->GetValue ();
169*b1cdbd2cSJim Jagielski                 bBObjsVisible	= pBObjsVisible->GetValue ();
170*b1cdbd2cSJim Jagielski             }
171*b1cdbd2cSJim Jagielski             else
172*b1cdbd2cSJim Jagielski             {
173*b1cdbd2cSJim Jagielski                 StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
174*b1cdbd2cSJim Jagielski                 rRequest.Ignore ();
175*b1cdbd2cSJim Jagielski                 break;
176*b1cdbd2cSJim Jagielski             }
177*b1cdbd2cSJim Jagielski             if (ePageKind == PK_HANDOUT)
178*b1cdbd2cSJim Jagielski             {
179*b1cdbd2cSJim Jagielski                 bHandoutMode = sal_True;
180*b1cdbd2cSJim Jagielski                 pHandoutMPage = pDocument->GetMasterSdPage(0, PK_HANDOUT);
181*b1cdbd2cSJim Jagielski             }
182*b1cdbd2cSJim Jagielski         }
183*b1cdbd2cSJim Jagielski         else
184*b1cdbd2cSJim Jagielski         {
185*b1cdbd2cSJim Jagielski             StarBASIC::FatalError (SbERR_WRONG_ARGS);
186*b1cdbd2cSJim Jagielski             rRequest.Ignore ();
187*b1cdbd2cSJim Jagielski             break;
188*b1cdbd2cSJim Jagielski         }
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski         SdPage* pUndoPage =
191*b1cdbd2cSJim Jagielski             bHandoutMode ? pHandoutMPage : pCurrentPage;
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski         ::svl::IUndoManager* pUndoManager = mrViewShell.GetDocSh()->GetUndoManager();
194*b1cdbd2cSJim Jagielski         DBG_ASSERT(pUndoManager, "No UNDO MANAGER ?!?");
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski 		if( pUndoManager )
197*b1cdbd2cSJim Jagielski 		{
198*b1cdbd2cSJim Jagielski 			String aComment( SdResId(STR_UNDO_MODIFY_PAGE) );
199*b1cdbd2cSJim Jagielski 			pUndoManager->EnterListAction(aComment, aComment);
200*b1cdbd2cSJim Jagielski 			ModifyPageUndoAction* pAction = new ModifyPageUndoAction(
201*b1cdbd2cSJim Jagielski 				pDocument, pUndoPage, aNewName, aNewAutoLayout, bBVisible, bBObjsVisible);
202*b1cdbd2cSJim Jagielski 			pUndoManager->AddUndoAction(pAction);
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski 			// Clear the selection because the selectec object may be removed as
205*b1cdbd2cSJim Jagielski 			// a result of the ssignment of the layout.
206*b1cdbd2cSJim Jagielski 			mrViewShell.GetDrawView()->UnmarkAll();
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski 			if (!bHandoutMode)
209*b1cdbd2cSJim Jagielski 			{
210*b1cdbd2cSJim Jagielski 				if (pCurrentPage->GetName() != aNewName)
211*b1cdbd2cSJim Jagielski 				{
212*b1cdbd2cSJim Jagielski 					pCurrentPage->SetName(aNewName);
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski 					if (ePageKind == PK_STANDARD)
215*b1cdbd2cSJim Jagielski 					{
216*b1cdbd2cSJim Jagielski 						sal_uInt16 nPage = (pCurrentPage->GetPageNum()-1) / 2;
217*b1cdbd2cSJim Jagielski 						SdPage* pNotesPage = pDocument->GetSdPage(nPage, PK_NOTES);
218*b1cdbd2cSJim Jagielski 						if (pNotesPage != NULL)
219*b1cdbd2cSJim Jagielski 							pNotesPage->SetName(aNewName);
220*b1cdbd2cSJim Jagielski 					}
221*b1cdbd2cSJim Jagielski 				}
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 				pCurrentPage->SetAutoLayout(aNewAutoLayout, sal_True);
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski 				aBckgrnd = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False);
226*b1cdbd2cSJim Jagielski 				aBckgrndObj = rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False);
227*b1cdbd2cSJim Jagielski 				aVisibleLayers.Set(aBckgrnd, bBVisible);
228*b1cdbd2cSJim Jagielski 				aVisibleLayers.Set(aBckgrndObj, bBObjsVisible);
229*b1cdbd2cSJim Jagielski 				pCurrentPage->TRG_SetMasterPageVisibleLayers(aVisibleLayers);
230*b1cdbd2cSJim Jagielski 			}
231*b1cdbd2cSJim Jagielski 			else
232*b1cdbd2cSJim Jagielski 			{
233*b1cdbd2cSJim Jagielski 				pHandoutMPage->SetAutoLayout(aNewAutoLayout, sal_True);
234*b1cdbd2cSJim Jagielski 			}
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski 			mrViewShell.GetViewFrame()->GetDispatcher()->Execute(SID_SWITCHPAGE,
237*b1cdbd2cSJim Jagielski 				SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 			sal_Bool bSetModified = sal_True;
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski 			if (pArgs && pArgs->Count() == 1)
242*b1cdbd2cSJim Jagielski 			{
243*b1cdbd2cSJim Jagielski 				bSetModified = (sal_Bool) ((SfxBoolItem&) pArgs->Get(SID_MODIFYPAGE)).GetValue();
244*b1cdbd2cSJim Jagielski 			}
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski 			pUndoManager->AddUndoAction( new UndoAutoLayoutPosAndSize( *pUndoPage ) );
247*b1cdbd2cSJim Jagielski 			pUndoManager->LeaveListAction();
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 			pDocument->SetChanged(bSetModified);
250*b1cdbd2cSJim Jagielski         }
251*b1cdbd2cSJim Jagielski     }
252*b1cdbd2cSJim Jagielski     while (false);
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski     mrViewShell.Cancel();
255*b1cdbd2cSJim Jagielski     rRequest.Done ();
256*b1cdbd2cSJim Jagielski }
257*b1cdbd2cSJim Jagielski 
AssignLayout(SfxRequest & rRequest,PageKind ePageKind)258*b1cdbd2cSJim Jagielski void ViewShell::Implementation::AssignLayout ( SfxRequest& rRequest, PageKind ePageKind )
259*b1cdbd2cSJim Jagielski {
260*b1cdbd2cSJim Jagielski     const SfxUInt32Item* pWhatPage = static_cast< const SfxUInt32Item*  > ( rRequest.GetArg( ID_VAL_WHATPAGE, sal_False, TYPE(SfxUInt32Item) ) );
261*b1cdbd2cSJim Jagielski     const SfxUInt32Item* pWhatLayout = static_cast< const SfxUInt32Item*  > ( rRequest.GetArg( ID_VAL_WHATLAYOUT, sal_False, TYPE(SfxUInt32Item) ) );
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski     SdDrawDocument* pDocument = mrViewShell.GetDoc();
264*b1cdbd2cSJim Jagielski 	if( !pDocument )
265*b1cdbd2cSJim Jagielski 		return;
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski     SdPage* pPage = 0;
268*b1cdbd2cSJim Jagielski     if( pWhatPage )
269*b1cdbd2cSJim Jagielski     {
270*b1cdbd2cSJim Jagielski 		pPage = pDocument->GetSdPage(static_cast<sal_uInt16>(pWhatPage->GetValue()), ePageKind);
271*b1cdbd2cSJim Jagielski     }
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski     if( pPage == 0 )
274*b1cdbd2cSJim Jagielski         pPage = mrViewShell.getCurrentPage();
275*b1cdbd2cSJim Jagielski 
276*b1cdbd2cSJim Jagielski     if( pPage )
277*b1cdbd2cSJim Jagielski     {
278*b1cdbd2cSJim Jagielski         AutoLayout eLayout = pPage->GetAutoLayout();
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski         if( pWhatLayout )
281*b1cdbd2cSJim Jagielski             eLayout = static_cast< AutoLayout >( pWhatLayout->GetValue() );
282*b1cdbd2cSJim Jagielski 
283*b1cdbd2cSJim Jagielski         // Transform the given request into the four argument form that is
284*b1cdbd2cSJim Jagielski         // understood by ProcessModifyPageSlot().
285*b1cdbd2cSJim Jagielski         SdrLayerAdmin& rLayerAdmin (mrViewShell.GetViewShellBase().GetDocument()->GetLayerAdmin());
286*b1cdbd2cSJim Jagielski         sal_uInt8 aBackground (rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), sal_False));
287*b1cdbd2cSJim Jagielski         sal_uInt8 aBackgroundObject (rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), sal_False));
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski         SetOfByte aVisibleLayers;
290*b1cdbd2cSJim Jagielski 
291*b1cdbd2cSJim Jagielski 		if( pPage->GetPageKind() == PK_HANDOUT )
292*b1cdbd2cSJim Jagielski 			aVisibleLayers.SetAll();
293*b1cdbd2cSJim Jagielski 		else
294*b1cdbd2cSJim Jagielski 			aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers();
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski 		SfxRequest aRequest (mrViewShell.GetViewShellBase().GetViewFrame(), SID_MODIFYPAGE);
297*b1cdbd2cSJim Jagielski         aRequest.AppendItem(SfxStringItem (ID_VAL_PAGENAME, pPage->GetName()));
298*b1cdbd2cSJim Jagielski         aRequest.AppendItem(SfxUInt32Item (ID_VAL_WHATLAYOUT, eLayout));
299*b1cdbd2cSJim Jagielski         aRequest.AppendItem(SfxBoolItem(ID_VAL_ISPAGEBACK, aVisibleLayers.IsSet(aBackground)));
300*b1cdbd2cSJim Jagielski         aRequest.AppendItem(SfxBoolItem(ID_VAL_ISPAGEOBJ, aVisibleLayers.IsSet(aBackgroundObject)));
301*b1cdbd2cSJim Jagielski 
302*b1cdbd2cSJim Jagielski         // Forward the call with the new arguments.
303*b1cdbd2cSJim Jagielski         ProcessModifyPageSlot( aRequest, pPage, pPage->GetPageKind());
304*b1cdbd2cSJim Jagielski     }
305*b1cdbd2cSJim Jagielski }
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski 
309*b1cdbd2cSJim Jagielski 
GetViewId(void)310*b1cdbd2cSJim Jagielski sal_uInt16 ViewShell::Implementation::GetViewId (void)
311*b1cdbd2cSJim Jagielski {
312*b1cdbd2cSJim Jagielski     switch (mrViewShell.GetShellType())
313*b1cdbd2cSJim Jagielski     {
314*b1cdbd2cSJim Jagielski         case ViewShell::ST_IMPRESS:
315*b1cdbd2cSJim Jagielski         case ViewShell::ST_NOTES:
316*b1cdbd2cSJim Jagielski         case ViewShell::ST_HANDOUT:
317*b1cdbd2cSJim Jagielski             return IMPRESS_FACTORY_ID;
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski         case ViewShell::ST_DRAW:
320*b1cdbd2cSJim Jagielski             return DRAW_FACTORY_ID;
321*b1cdbd2cSJim Jagielski 
322*b1cdbd2cSJim Jagielski         case ViewShell::ST_OUTLINE:
323*b1cdbd2cSJim Jagielski             return OUTLINE_FACTORY_ID;
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski         case ViewShell::ST_SLIDE_SORTER:
326*b1cdbd2cSJim Jagielski             return SLIDE_SORTER_FACTORY_ID;
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski         case ViewShell::ST_PRESENTATION:
329*b1cdbd2cSJim Jagielski             return PRESENTATION_FACTORY_ID;
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski         // Since we have to return a view id for every possible shell type
332*b1cdbd2cSJim Jagielski         // and there is not (yet) a proper ViewShellBase sub class for the
333*b1cdbd2cSJim Jagielski         // remaining types we chose the Impress factory as a fall back.
334*b1cdbd2cSJim Jagielski         case ViewShell::ST_SIDEBAR:
335*b1cdbd2cSJim Jagielski         case ViewShell::ST_NONE:
336*b1cdbd2cSJim Jagielski         default:
337*b1cdbd2cSJim Jagielski             return IMPRESS_FACTORY_ID;
338*b1cdbd2cSJim Jagielski     }
339*b1cdbd2cSJim Jagielski }
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski 
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski 
GetImageMapDialog(void)344*b1cdbd2cSJim Jagielski SvxIMapDlg* ViewShell::Implementation::GetImageMapDialog (void)
345*b1cdbd2cSJim Jagielski {
346*b1cdbd2cSJim Jagielski     SvxIMapDlg* pDialog = NULL;
347*b1cdbd2cSJim Jagielski     SfxChildWindow* pChildWindow = SfxViewFrame::Current()->GetChildWindow(
348*b1cdbd2cSJim Jagielski         SvxIMapDlgChildWindow::GetChildWindowId());
349*b1cdbd2cSJim Jagielski     if (pChildWindow != NULL)
350*b1cdbd2cSJim Jagielski         pDialog = dynamic_cast<SvxIMapDlg*>(pChildWindow->GetWindow());
351*b1cdbd2cSJim Jagielski     return pDialog;
352*b1cdbd2cSJim Jagielski }
353*b1cdbd2cSJim Jagielski 
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski 
356*b1cdbd2cSJim Jagielski //===== ToolBarManagerLock ====================================================
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski class ViewShell::Implementation::ToolBarManagerLock::Deleter { public:
operator ()(ToolBarManagerLock * pObject)359*b1cdbd2cSJim Jagielski     void operator() (ToolBarManagerLock* pObject) { delete pObject; }
360*b1cdbd2cSJim Jagielski };
361*b1cdbd2cSJim Jagielski 
362*b1cdbd2cSJim Jagielski ::boost::shared_ptr<ViewShell::Implementation::ToolBarManagerLock>
Create(const::boost::shared_ptr<ToolBarManager> & rpManager)363*b1cdbd2cSJim Jagielski     ViewShell::Implementation::ToolBarManagerLock::Create (
364*b1cdbd2cSJim Jagielski         const ::boost::shared_ptr<ToolBarManager>& rpManager)
365*b1cdbd2cSJim Jagielski {
366*b1cdbd2cSJim Jagielski     ::boost::shared_ptr<ToolBarManagerLock> pLock (
367*b1cdbd2cSJim Jagielski         new ViewShell::Implementation::ToolBarManagerLock(rpManager),
368*b1cdbd2cSJim Jagielski         ViewShell::Implementation::ToolBarManagerLock::Deleter());
369*b1cdbd2cSJim Jagielski     pLock->mpSelf = pLock;
370*b1cdbd2cSJim Jagielski     return pLock;
371*b1cdbd2cSJim Jagielski }
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski 
ToolBarManagerLock(const::boost::shared_ptr<ToolBarManager> & rpManager)376*b1cdbd2cSJim Jagielski ViewShell::Implementation::ToolBarManagerLock::ToolBarManagerLock (
377*b1cdbd2cSJim Jagielski     const ::boost::shared_ptr<ToolBarManager>& rpManager)
378*b1cdbd2cSJim Jagielski     : mpLock(new ToolBarManager::UpdateLock(rpManager)),
379*b1cdbd2cSJim Jagielski       maTimer()
380*b1cdbd2cSJim Jagielski {
381*b1cdbd2cSJim Jagielski     // Start a timer that will unlock the ToolBarManager update lock when
382*b1cdbd2cSJim Jagielski     // that is not done explicitly by calling Release().
383*b1cdbd2cSJim Jagielski     maTimer.SetTimeoutHdl(LINK(this,ToolBarManagerLock,TimeoutCallback));
384*b1cdbd2cSJim Jagielski     maTimer.SetTimeout(100);
385*b1cdbd2cSJim Jagielski     maTimer.Start();
386*b1cdbd2cSJim Jagielski }
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski 
389*b1cdbd2cSJim Jagielski 
390*b1cdbd2cSJim Jagielski 
IMPL_LINK(ViewShell::Implementation::ToolBarManagerLock,TimeoutCallback,Timer *,EMPTYARG)391*b1cdbd2cSJim Jagielski IMPL_LINK(ViewShell::Implementation::ToolBarManagerLock,TimeoutCallback,Timer*,EMPTYARG)
392*b1cdbd2cSJim Jagielski {
393*b1cdbd2cSJim Jagielski     // If possible then release the lock now.  Otherwise start the timer
394*b1cdbd2cSJim Jagielski     // and try again later.
395*b1cdbd2cSJim Jagielski     if (Application::IsUICaptured())
396*b1cdbd2cSJim Jagielski     {
397*b1cdbd2cSJim Jagielski         maTimer.Start();
398*b1cdbd2cSJim Jagielski     }
399*b1cdbd2cSJim Jagielski     else
400*b1cdbd2cSJim Jagielski     {
401*b1cdbd2cSJim Jagielski         mpSelf.reset();
402*b1cdbd2cSJim Jagielski     }
403*b1cdbd2cSJim Jagielski     return 0;
404*b1cdbd2cSJim Jagielski }
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski 
408*b1cdbd2cSJim Jagielski 
Release(bool bForce)409*b1cdbd2cSJim Jagielski void ViewShell::Implementation::ToolBarManagerLock::Release (bool bForce)
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski     // If possible then release the lock now.  Otherwise try again when the
412*b1cdbd2cSJim Jagielski     // timer expires.
413*b1cdbd2cSJim Jagielski     if (bForce || ! Application::IsUICaptured())
414*b1cdbd2cSJim Jagielski     {
415*b1cdbd2cSJim Jagielski         mpSelf.reset();
416*b1cdbd2cSJim Jagielski     }
417*b1cdbd2cSJim Jagielski }
418*b1cdbd2cSJim Jagielski 
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski 
421*b1cdbd2cSJim Jagielski 
~ToolBarManagerLock(void)422*b1cdbd2cSJim Jagielski ViewShell::Implementation::ToolBarManagerLock::~ToolBarManagerLock (void)
423*b1cdbd2cSJim Jagielski {
424*b1cdbd2cSJim Jagielski     mpLock.reset();
425*b1cdbd2cSJim Jagielski }
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski } // end of namespace sd
428