1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sd.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include "DrawViewShell.hxx" 32*cdf0e10cSrcweir #include "ViewShellImplementation.hxx" 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir #include "DrawController.hxx" 35*cdf0e10cSrcweir #include <com/sun/star/embed/EmbedStates.hpp> 36*cdf0e10cSrcweir 37*cdf0e10cSrcweir #include "comphelper/anytostring.hxx" 38*cdf0e10cSrcweir #include "comphelper/scopeguard.hxx" 39*cdf0e10cSrcweir #include "cppuhelper/exc_hlp.hxx" 40*cdf0e10cSrcweir #include "rtl/ref.hxx" 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir #ifndef _SVXIDS_HRC 43*cdf0e10cSrcweir #include <svx/svxids.hrc> 44*cdf0e10cSrcweir #endif 45*cdf0e10cSrcweir #include <svx/svdpagv.hxx> 46*cdf0e10cSrcweir #include <sfx2/viewfrm.hxx> 47*cdf0e10cSrcweir #include <sfx2/bindings.hxx> 48*cdf0e10cSrcweir #include <svx/svdoole2.hxx> 49*cdf0e10cSrcweir #include <sfx2/dispatch.hxx> 50*cdf0e10cSrcweir #include <vcl/scrbar.hxx> 51*cdf0e10cSrcweir #include <svx/svdograf.hxx> 52*cdf0e10cSrcweir #include <svx/svdopage.hxx> 53*cdf0e10cSrcweir #include <vcl/msgbox.hxx> 54*cdf0e10cSrcweir #include <sot/storage.hxx> 55*cdf0e10cSrcweir #include <svx/fmshell.hxx> 56*cdf0e10cSrcweir #include <svx/globl3d.hxx> 57*cdf0e10cSrcweir #include <svx/fmglob.hxx> 58*cdf0e10cSrcweir #include <editeng/outliner.hxx> 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir #include "misc.hxx" 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir #ifdef STARIMAGE_AVAILABLE 64*cdf0e10cSrcweir #ifndef _SIMDLL_HXX 65*cdf0e10cSrcweir #include <sim2/simdll.hxx> 66*cdf0e10cSrcweir #endif 67*cdf0e10cSrcweir #endif 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir #include <svx/dialogs.hrc> 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir #include "view/viewoverlaymanager.hxx" 72*cdf0e10cSrcweir 73*cdf0e10cSrcweir #include "glob.hrc" 74*cdf0e10cSrcweir #include "app.hrc" 75*cdf0e10cSrcweir #include "res_bmp.hrc" 76*cdf0e10cSrcweir #include "strings.hrc" 77*cdf0e10cSrcweir #include "helpids.h" 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir #include "app.hxx" 80*cdf0e10cSrcweir #include "fupoor.hxx" 81*cdf0e10cSrcweir #include "sdresid.hxx" 82*cdf0e10cSrcweir #include "fusel.hxx" 83*cdf0e10cSrcweir #include "sdpage.hxx" 84*cdf0e10cSrcweir #include "FrameView.hxx" 85*cdf0e10cSrcweir #include "stlpool.hxx" 86*cdf0e10cSrcweir #include "Window.hxx" 87*cdf0e10cSrcweir #ifndef SD_DRAWVIEW_HXX 88*cdf0e10cSrcweir #include "drawview.hxx" 89*cdf0e10cSrcweir #endif 90*cdf0e10cSrcweir #include "drawdoc.hxx" 91*cdf0e10cSrcweir #include "DrawDocShell.hxx" 92*cdf0e10cSrcweir #include "Ruler.hxx" 93*cdf0e10cSrcweir #include "Client.hxx" 94*cdf0e10cSrcweir #include "slideshow.hxx" 95*cdf0e10cSrcweir #include "optsitem.hxx" 96*cdf0e10cSrcweir #include "fusearch.hxx" 97*cdf0e10cSrcweir #include "Outliner.hxx" 98*cdf0e10cSrcweir #include "AnimationChildWindow.hxx" 99*cdf0e10cSrcweir #include "SdUnoDrawView.hxx" 100*cdf0e10cSrcweir #include "ToolBarManager.hxx" 101*cdf0e10cSrcweir #include "FormShellManager.hxx" 102*cdf0e10cSrcweir #include "ViewShellBase.hxx" 103*cdf0e10cSrcweir #include "LayerDialogChildWindow.hxx" 104*cdf0e10cSrcweir #include "LayerTabBar.hxx" 105*cdf0e10cSrcweir #include "ViewShellManager.hxx" 106*cdf0e10cSrcweir #include "ViewShellHint.hxx" 107*cdf0e10cSrcweir 108*cdf0e10cSrcweir #include <sfx2/request.hxx> 109*cdf0e10cSrcweir #include <boost/bind.hpp> 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir #ifdef _MSC_VER 112*cdf0e10cSrcweir #if (_MSC_VER < 1400) 113*cdf0e10cSrcweir #pragma optimize ( "", off ) 114*cdf0e10cSrcweir #endif 115*cdf0e10cSrcweir #endif 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir using namespace com::sun::star; 118*cdf0e10cSrcweir 119*cdf0e10cSrcweir namespace sd { 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir void DrawViewShell::Activate(sal_Bool bIsMDIActivate) 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir ViewShell::Activate(bIsMDIActivate); 124*cdf0e10cSrcweir } 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir void DrawViewShell::UIActivating( SfxInPlaceClient* pCli ) 127*cdf0e10cSrcweir { 128*cdf0e10cSrcweir ViewShell::UIActivating(pCli); 129*cdf0e10cSrcweir 130*cdf0e10cSrcweir // #94252# Disable own controls 131*cdf0e10cSrcweir maTabControl.Disable(); 132*cdf0e10cSrcweir if (GetLayerTabControl() != NULL) 133*cdf0e10cSrcweir GetLayerTabControl()->Disable(); 134*cdf0e10cSrcweir } 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir void DrawViewShell::UIDeactivated( SfxInPlaceClient* pCli ) 137*cdf0e10cSrcweir { 138*cdf0e10cSrcweir // #94252# Enable own controls 139*cdf0e10cSrcweir maTabControl.Enable(); 140*cdf0e10cSrcweir if (GetLayerTabControl() != NULL) 141*cdf0e10cSrcweir GetLayerTabControl()->Enable(); 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir ViewShell::UIDeactivated(pCli); 144*cdf0e10cSrcweir } 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir /************************************************************************* 148*cdf0e10cSrcweir |* 149*cdf0e10cSrcweir |* Deactivate() 150*cdf0e10cSrcweir |* 151*cdf0e10cSrcweir \************************************************************************/ 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir void DrawViewShell::Deactivate(sal_Bool bIsMDIActivate) 154*cdf0e10cSrcweir { 155*cdf0e10cSrcweir ViewShell::Deactivate(bIsMDIActivate); 156*cdf0e10cSrcweir } 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir namespace 159*cdf0e10cSrcweir { 160*cdf0e10cSrcweir class LockUI 161*cdf0e10cSrcweir { 162*cdf0e10cSrcweir private: 163*cdf0e10cSrcweir void Lock(bool bLock); 164*cdf0e10cSrcweir SfxViewFrame *mpFrame; 165*cdf0e10cSrcweir public: 166*cdf0e10cSrcweir LockUI(SfxViewFrame *pFrame) : mpFrame(pFrame) { Lock(true); } 167*cdf0e10cSrcweir ~LockUI() { Lock(false); } 168*cdf0e10cSrcweir 169*cdf0e10cSrcweir }; 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir void LockUI::Lock(bool bLock) 172*cdf0e10cSrcweir { 173*cdf0e10cSrcweir if (!mpFrame) 174*cdf0e10cSrcweir return; 175*cdf0e10cSrcweir mpFrame->Enable( !bLock ); 176*cdf0e10cSrcweir } 177*cdf0e10cSrcweir } 178*cdf0e10cSrcweir 179*cdf0e10cSrcweir /************************************************************************* 180*cdf0e10cSrcweir |* 181*cdf0e10cSrcweir |* Wird gerufen, wenn sich der Selektionszustand der View aendert 182*cdf0e10cSrcweir |* 183*cdf0e10cSrcweir \************************************************************************/ 184*cdf0e10cSrcweir void DrawViewShell::SelectionHasChanged (void) 185*cdf0e10cSrcweir { 186*cdf0e10cSrcweir Invalidate(); 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir //Update3DWindow(); // 3D-Controller 189*cdf0e10cSrcweir SfxBoolItem aItem( SID_3D_STATE, sal_True ); 190*cdf0e10cSrcweir GetViewFrame()->GetDispatcher()->Execute( 191*cdf0e10cSrcweir SID_3D_STATE, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L ); 192*cdf0e10cSrcweir 193*cdf0e10cSrcweir SdrOle2Obj* pOleObj = NULL; 194*cdf0e10cSrcweir SdrGrafObj* pGrafObj = NULL; 195*cdf0e10cSrcweir 196*cdf0e10cSrcweir if ( mpDrawView->AreObjectsMarked() ) 197*cdf0e10cSrcweir { 198*cdf0e10cSrcweir const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir if (rMarkList.GetMarkCount() == 1) 201*cdf0e10cSrcweir { 202*cdf0e10cSrcweir SdrMark* pMark = rMarkList.GetMark(0); 203*cdf0e10cSrcweir SdrObject* pObj = pMark->GetMarkedSdrObj(); 204*cdf0e10cSrcweir 205*cdf0e10cSrcweir sal_uInt32 nInv = pObj->GetObjInventor(); 206*cdf0e10cSrcweir sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier(); 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir if (nInv == SdrInventor && nSdrObjKind == OBJ_OLE2) 209*cdf0e10cSrcweir { 210*cdf0e10cSrcweir pOleObj = (SdrOle2Obj*) pObj; 211*cdf0e10cSrcweir UpdateIMapDlg( pObj ); 212*cdf0e10cSrcweir } 213*cdf0e10cSrcweir else if (nSdrObjKind == OBJ_GRAF) 214*cdf0e10cSrcweir { 215*cdf0e10cSrcweir pGrafObj = (SdrGrafObj*) pObj; 216*cdf0e10cSrcweir UpdateIMapDlg( pObj ); 217*cdf0e10cSrcweir } 218*cdf0e10cSrcweir } 219*cdf0e10cSrcweir } 220*cdf0e10cSrcweir 221*cdf0e10cSrcweir ViewShellBase& rBase = GetViewShellBase(); 222*cdf0e10cSrcweir rBase.SetVerbs( uno::Sequence< embed::VerbDescriptor >() ); 223*cdf0e10cSrcweir 224*cdf0e10cSrcweir try 225*cdf0e10cSrcweir { 226*cdf0e10cSrcweir Client* pIPClient = static_cast<Client*>(rBase.GetIPClient()); 227*cdf0e10cSrcweir if ( pIPClient && pIPClient->IsObjectInPlaceActive() ) 228*cdf0e10cSrcweir { 229*cdf0e10cSrcweir /********************************************************************** 230*cdf0e10cSrcweir * Ggf. OLE-Objekt beruecksichtigen und deaktivieren 231*cdf0e10cSrcweir **********************************************************************/ 232*cdf0e10cSrcweir 233*cdf0e10cSrcweir // this means we recently deselected an inplace active ole object so 234*cdf0e10cSrcweir // we need to deselect it now 235*cdf0e10cSrcweir if (!pOleObj) 236*cdf0e10cSrcweir { 237*cdf0e10cSrcweir //#i47279# disable frame until after object has completed unload 238*cdf0e10cSrcweir LockUI aUILock(GetViewFrame()); 239*cdf0e10cSrcweir pIPClient->DeactivateObject(); 240*cdf0e10cSrcweir //HMHmpDrView->ShowMarkHdl(); 241*cdf0e10cSrcweir } 242*cdf0e10cSrcweir else 243*cdf0e10cSrcweir { 244*cdf0e10cSrcweir uno::Reference < embed::XEmbeddedObject > xObj = pOleObj->GetObjRef(); 245*cdf0e10cSrcweir if ( xObj.is() ) 246*cdf0e10cSrcweir { 247*cdf0e10cSrcweir rBase.SetVerbs( xObj->getSupportedVerbs() ); 248*cdf0e10cSrcweir } 249*cdf0e10cSrcweir else 250*cdf0e10cSrcweir { 251*cdf0e10cSrcweir rBase.SetVerbs( uno::Sequence < embed::VerbDescriptor >() ); 252*cdf0e10cSrcweir } 253*cdf0e10cSrcweir } 254*cdf0e10cSrcweir } 255*cdf0e10cSrcweir else 256*cdf0e10cSrcweir { 257*cdf0e10cSrcweir if ( pOleObj ) 258*cdf0e10cSrcweir { 259*cdf0e10cSrcweir uno::Reference < embed::XEmbeddedObject > xObj = pOleObj->GetObjRef(); 260*cdf0e10cSrcweir if ( xObj.is() ) 261*cdf0e10cSrcweir { 262*cdf0e10cSrcweir rBase.SetVerbs( xObj->getSupportedVerbs() ); 263*cdf0e10cSrcweir } 264*cdf0e10cSrcweir else 265*cdf0e10cSrcweir { 266*cdf0e10cSrcweir rBase.SetVerbs( uno::Sequence < embed::VerbDescriptor >() ); 267*cdf0e10cSrcweir } 268*cdf0e10cSrcweir } 269*cdf0e10cSrcweir else 270*cdf0e10cSrcweir { 271*cdf0e10cSrcweir rBase.SetVerbs( uno::Sequence < embed::VerbDescriptor >() ); 272*cdf0e10cSrcweir } 273*cdf0e10cSrcweir } 274*cdf0e10cSrcweir } 275*cdf0e10cSrcweir catch( ::com::sun::star::uno::Exception& e ) 276*cdf0e10cSrcweir { 277*cdf0e10cSrcweir (void)e; 278*cdf0e10cSrcweir DBG_ERROR( 279*cdf0e10cSrcweir (rtl::OString("sd::DrawViewShell::SelectionHasChanged(), " 280*cdf0e10cSrcweir "exception caught: ") + 281*cdf0e10cSrcweir rtl::OUStringToOString( 282*cdf0e10cSrcweir comphelper::anyToString( cppu::getCaughtException() ), 283*cdf0e10cSrcweir RTL_TEXTENCODING_UTF8 )).getStr() ); 284*cdf0e10cSrcweir } 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir if( HasCurrentFunction() ) 287*cdf0e10cSrcweir { 288*cdf0e10cSrcweir GetCurrentFunction()->SelectionHasChanged(); 289*cdf0e10cSrcweir } 290*cdf0e10cSrcweir else 291*cdf0e10cSrcweir { 292*cdf0e10cSrcweir GetViewShellBase().GetToolBarManager()->SelectionHasChanged(*this,*mpDrawView); 293*cdf0e10cSrcweir } 294*cdf0e10cSrcweir 295*cdf0e10cSrcweir // #96124# Invalidate for every subshell 296*cdf0e10cSrcweir GetViewShellBase().GetViewShellManager()->InvalidateAllSubShells(this); 297*cdf0e10cSrcweir 298*cdf0e10cSrcweir mpDrawView->UpdateSelectionClipboard( sal_False ); 299*cdf0e10cSrcweir 300*cdf0e10cSrcweir GetViewShellBase().GetDrawController().FireSelectionChangeListener(); 301*cdf0e10cSrcweir } 302*cdf0e10cSrcweir 303*cdf0e10cSrcweir 304*cdf0e10cSrcweir /************************************************************************* 305*cdf0e10cSrcweir |* 306*cdf0e10cSrcweir |* Zoomfaktor setzen 307*cdf0e10cSrcweir |* 308*cdf0e10cSrcweir \************************************************************************/ 309*cdf0e10cSrcweir 310*cdf0e10cSrcweir void DrawViewShell::SetZoom( long nZoom ) 311*cdf0e10cSrcweir { 312*cdf0e10cSrcweir // Make sure that the zoom factor will not be recalculated on 313*cdf0e10cSrcweir // following window resizings. 314*cdf0e10cSrcweir mbZoomOnPage = sal_False; 315*cdf0e10cSrcweir ViewShell::SetZoom( nZoom ); 316*cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOM ); 317*cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER ); 318*cdf0e10cSrcweir mpViewOverlayManager->onZoomChanged(); 319*cdf0e10cSrcweir } 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir /************************************************************************* 322*cdf0e10cSrcweir |* 323*cdf0e10cSrcweir |* Zoomrechteck fuer aktives Fenster einstellen 324*cdf0e10cSrcweir |* 325*cdf0e10cSrcweir \************************************************************************/ 326*cdf0e10cSrcweir 327*cdf0e10cSrcweir void DrawViewShell::SetZoomRect( const Rectangle& rZoomRect ) 328*cdf0e10cSrcweir { 329*cdf0e10cSrcweir ViewShell::SetZoomRect( rZoomRect ); 330*cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOM ); 331*cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER ); 332*cdf0e10cSrcweir mpViewOverlayManager->onZoomChanged(); 333*cdf0e10cSrcweir } 334*cdf0e10cSrcweir 335*cdf0e10cSrcweir /************************************************************************* 336*cdf0e10cSrcweir |* 337*cdf0e10cSrcweir |* PrepareClose, ggfs. Texteingabe beenden, damit andere Viewshells ein 338*cdf0e10cSrcweir |* aktualisiertes Textobjekt vorfinden 339*cdf0e10cSrcweir |* 340*cdf0e10cSrcweir \************************************************************************/ 341*cdf0e10cSrcweir 342*cdf0e10cSrcweir sal_uInt16 DrawViewShell::PrepareClose( sal_Bool bUI, sal_Bool bForBrowsing ) 343*cdf0e10cSrcweir { 344*cdf0e10cSrcweir if ( ViewShell::PrepareClose(bUI, bForBrowsing) != sal_True ) 345*cdf0e10cSrcweir return sal_False; 346*cdf0e10cSrcweir 347*cdf0e10cSrcweir sal_Bool bRet = sal_True; 348*cdf0e10cSrcweir 349*cdf0e10cSrcweir if( bRet && HasCurrentFunction() ) 350*cdf0e10cSrcweir { 351*cdf0e10cSrcweir sal_uInt16 nID = GetCurrentFunction()->GetSlotID(); 352*cdf0e10cSrcweir if (nID == SID_TEXTEDIT || nID == SID_ATTR_CHAR) 353*cdf0e10cSrcweir { 354*cdf0e10cSrcweir mpDrawView->SdrEndTextEdit(); 355*cdf0e10cSrcweir } 356*cdf0e10cSrcweir } 357*cdf0e10cSrcweir else if( !bRet ) 358*cdf0e10cSrcweir { 359*cdf0e10cSrcweir maCloseTimer.SetTimeoutHdl( LINK( this, DrawViewShell, CloseHdl ) ); 360*cdf0e10cSrcweir maCloseTimer.SetTimeout( 20 ); 361*cdf0e10cSrcweir maCloseTimer.Start(); 362*cdf0e10cSrcweir } 363*cdf0e10cSrcweir 364*cdf0e10cSrcweir return bRet; 365*cdf0e10cSrcweir } 366*cdf0e10cSrcweir 367*cdf0e10cSrcweir /************************************************************************* 368*cdf0e10cSrcweir |* 369*cdf0e10cSrcweir |* Status (Enabled/Disabled) von Menue-SfxSlots setzen 370*cdf0e10cSrcweir |* 371*cdf0e10cSrcweir \************************************************************************/ 372*cdf0e10cSrcweir 373*cdf0e10cSrcweir void DrawViewShell::ChangeEditMode(EditMode eEMode, bool bIsLayerModeActive) 374*cdf0e10cSrcweir { 375*cdf0e10cSrcweir if (meEditMode != eEMode || mbIsLayerModeActive != bIsLayerModeActive) 376*cdf0e10cSrcweir { 377*cdf0e10cSrcweir ViewShellManager::UpdateLock aLock (GetViewShellBase().GetViewShellManager()); 378*cdf0e10cSrcweir 379*cdf0e10cSrcweir sal_uInt16 nActualPageNum = 0; 380*cdf0e10cSrcweir 381*cdf0e10cSrcweir GetViewShellBase().GetDrawController().FireChangeEditMode (eEMode == EM_MASTERPAGE); 382*cdf0e10cSrcweir GetViewShellBase().GetDrawController().FireChangeLayerMode (bIsLayerModeActive); 383*cdf0e10cSrcweir 384*cdf0e10cSrcweir if ( mpDrawView->IsTextEdit() ) 385*cdf0e10cSrcweir { 386*cdf0e10cSrcweir mpDrawView->SdrEndTextEdit(); 387*cdf0e10cSrcweir } 388*cdf0e10cSrcweir 389*cdf0e10cSrcweir LayerTabBar* pLayerBar = GetLayerTabControl(); 390*cdf0e10cSrcweir if (pLayerBar != NULL) 391*cdf0e10cSrcweir pLayerBar->EndEditMode(); 392*cdf0e10cSrcweir maTabControl.EndEditMode(); 393*cdf0e10cSrcweir 394*cdf0e10cSrcweir if (mePageKind == PK_HANDOUT) 395*cdf0e10cSrcweir { 396*cdf0e10cSrcweir // Bei Handzetteln nur MasterPage zulassen 397*cdf0e10cSrcweir eEMode = EM_MASTERPAGE; 398*cdf0e10cSrcweir } 399*cdf0e10cSrcweir 400*cdf0e10cSrcweir meEditMode = eEMode; 401*cdf0e10cSrcweir mbIsLayerModeActive = bIsLayerModeActive; 402*cdf0e10cSrcweir 403*cdf0e10cSrcweir // Determine whether to show the master view toolbar. The master 404*cdf0e10cSrcweir // page mode has to be active and the shell must not be a handout 405*cdf0e10cSrcweir // view. 406*cdf0e10cSrcweir bool bShowMasterViewToolbar (meEditMode == EM_MASTERPAGE 407*cdf0e10cSrcweir && GetShellType() != ViewShell::ST_HANDOUT); 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir // If the master view toolbar is not shown we hide it before 410*cdf0e10cSrcweir // switching the edit mode. 411*cdf0e10cSrcweir if (::sd::ViewShell::mpImpl->mbIsInitialized 412*cdf0e10cSrcweir && IsMainViewShell() 413*cdf0e10cSrcweir && ! bShowMasterViewToolbar) 414*cdf0e10cSrcweir { 415*cdf0e10cSrcweir GetViewShellBase().GetToolBarManager()->ResetToolBars(ToolBarManager::TBG_MASTER_MODE); 416*cdf0e10cSrcweir } 417*cdf0e10cSrcweir 418*cdf0e10cSrcweir if (meEditMode == EM_PAGE) 419*cdf0e10cSrcweir { 420*cdf0e10cSrcweir /****************************************************************** 421*cdf0e10cSrcweir * PAGEMODE 422*cdf0e10cSrcweir ******************************************************************/ 423*cdf0e10cSrcweir 424*cdf0e10cSrcweir maTabControl.Clear(); 425*cdf0e10cSrcweir 426*cdf0e10cSrcweir SdPage* pPage; 427*cdf0e10cSrcweir String aPageName; 428*cdf0e10cSrcweir sal_uInt16 nPageCnt = GetDoc()->GetSdPageCount(mePageKind); 429*cdf0e10cSrcweir 430*cdf0e10cSrcweir for (sal_uInt16 i = 0; i < nPageCnt; i++) 431*cdf0e10cSrcweir { 432*cdf0e10cSrcweir pPage = GetDoc()->GetSdPage(i, mePageKind); 433*cdf0e10cSrcweir aPageName = pPage->GetName(); 434*cdf0e10cSrcweir maTabControl.InsertPage(i + 1, aPageName); 435*cdf0e10cSrcweir 436*cdf0e10cSrcweir if ( pPage->IsSelected() && nActualPageNum == 0 ) 437*cdf0e10cSrcweir { 438*cdf0e10cSrcweir nActualPageNum = i; 439*cdf0e10cSrcweir } 440*cdf0e10cSrcweir } 441*cdf0e10cSrcweir 442*cdf0e10cSrcweir maTabControl.SetCurPageId(nActualPageNum + 1); 443*cdf0e10cSrcweir 444*cdf0e10cSrcweir SwitchPage(nActualPageNum); 445*cdf0e10cSrcweir } 446*cdf0e10cSrcweir else 447*cdf0e10cSrcweir { 448*cdf0e10cSrcweir /****************************************************************** 449*cdf0e10cSrcweir * MASTERPAGE 450*cdf0e10cSrcweir ******************************************************************/ 451*cdf0e10cSrcweir GetViewFrame()->SetChildWindow( 452*cdf0e10cSrcweir AnimationChildWindow::GetChildWindowId(), sal_False ); 453*cdf0e10cSrcweir 454*cdf0e10cSrcweir if (!mpActualPage) 455*cdf0e10cSrcweir { 456*cdf0e10cSrcweir // Sofern es keine mpActualPage gibt, wird die erste genommen 457*cdf0e10cSrcweir mpActualPage = GetDoc()->GetSdPage(0, mePageKind); 458*cdf0e10cSrcweir } 459*cdf0e10cSrcweir 460*cdf0e10cSrcweir maTabControl.Clear(); 461*cdf0e10cSrcweir sal_uInt16 nActualMasterPageNum = 0; 462*cdf0e10cSrcweir sal_uInt16 nMasterPageCnt = GetDoc()->GetMasterSdPageCount(mePageKind); 463*cdf0e10cSrcweir 464*cdf0e10cSrcweir for (sal_uInt16 i = 0; i < nMasterPageCnt; i++) 465*cdf0e10cSrcweir { 466*cdf0e10cSrcweir SdPage* pMaster = GetDoc()->GetMasterSdPage(i, mePageKind); 467*cdf0e10cSrcweir String aLayoutName(pMaster->GetLayoutName()); 468*cdf0e10cSrcweir aLayoutName.Erase(aLayoutName.SearchAscii(SD_LT_SEPARATOR)); 469*cdf0e10cSrcweir 470*cdf0e10cSrcweir maTabControl.InsertPage(i + 1, aLayoutName); 471*cdf0e10cSrcweir 472*cdf0e10cSrcweir if (&(mpActualPage->TRG_GetMasterPage()) == pMaster) 473*cdf0e10cSrcweir { 474*cdf0e10cSrcweir nActualMasterPageNum = i; 475*cdf0e10cSrcweir } 476*cdf0e10cSrcweir } 477*cdf0e10cSrcweir 478*cdf0e10cSrcweir maTabControl.SetCurPageId(nActualMasterPageNum + 1); 479*cdf0e10cSrcweir SwitchPage(nActualMasterPageNum); 480*cdf0e10cSrcweir } 481*cdf0e10cSrcweir 482*cdf0e10cSrcweir // If the master view toolbar is to be shown we turn it on after the 483*cdf0e10cSrcweir // edit mode has been changed. 484*cdf0e10cSrcweir if (::sd::ViewShell::mpImpl->mbIsInitialized 485*cdf0e10cSrcweir && IsMainViewShell() 486*cdf0e10cSrcweir && bShowMasterViewToolbar) 487*cdf0e10cSrcweir { 488*cdf0e10cSrcweir GetViewShellBase().GetToolBarManager()->SetToolBar( 489*cdf0e10cSrcweir ToolBarManager::TBG_MASTER_MODE, 490*cdf0e10cSrcweir ToolBarManager::msMasterViewToolBar); 491*cdf0e10cSrcweir } 492*cdf0e10cSrcweir 493*cdf0e10cSrcweir if ( ! mbIsLayerModeActive) 494*cdf0e10cSrcweir { 495*cdf0e10cSrcweir maTabControl.Show(); 496*cdf0e10cSrcweir // Set the tab control only for draw pages. For master page 497*cdf0e10cSrcweir // this has been done already above. 498*cdf0e10cSrcweir if (meEditMode == EM_PAGE) 499*cdf0e10cSrcweir maTabControl.SetCurPageId (nActualPageNum + 1); 500*cdf0e10cSrcweir } 501*cdf0e10cSrcweir /*AF: The LayerDialogChildWindow is not used anymore (I hope). 502*cdf0e10cSrcweir if (GetViewFrame()->KnowsChildWindow( 503*cdf0e10cSrcweir LayerDialogChildWindow::GetChildWindowId())) 504*cdf0e10cSrcweir { 505*cdf0e10cSrcweir GetViewFrame()->SetChildWindow( 506*cdf0e10cSrcweir LayerDialogChildWindow::GetChildWindowId(), 507*cdf0e10cSrcweir IsLayerModeActive()); 508*cdf0e10cSrcweir } 509*cdf0e10cSrcweir */ 510*cdf0e10cSrcweir ResetActualLayer(); 511*cdf0e10cSrcweir 512*cdf0e10cSrcweir Invalidate( SID_PAGEMODE ); 513*cdf0e10cSrcweir Invalidate( SID_LAYERMODE ); 514*cdf0e10cSrcweir Invalidate( SID_MASTERPAGE ); 515*cdf0e10cSrcweir Invalidate( SID_DELETE_MASTER_PAGE ); 516*cdf0e10cSrcweir Invalidate( SID_DELETE_PAGE ); 517*cdf0e10cSrcweir Invalidate( SID_SLIDE_MASTERPAGE ); 518*cdf0e10cSrcweir Invalidate( SID_TITLE_MASTERPAGE ); 519*cdf0e10cSrcweir Invalidate( SID_NOTES_MASTERPAGE ); 520*cdf0e10cSrcweir Invalidate( SID_HANDOUT_MASTERPAGE ); 521*cdf0e10cSrcweir } 522*cdf0e10cSrcweir } 523*cdf0e10cSrcweir 524*cdf0e10cSrcweir 525*cdf0e10cSrcweir 526*cdf0e10cSrcweir 527*cdf0e10cSrcweir bool DrawViewShell::IsLayerModeActive (void) const 528*cdf0e10cSrcweir { 529*cdf0e10cSrcweir return mbIsLayerModeActive; 530*cdf0e10cSrcweir } 531*cdf0e10cSrcweir 532*cdf0e10cSrcweir 533*cdf0e10cSrcweir 534*cdf0e10cSrcweir 535*cdf0e10cSrcweir /************************************************************************* 536*cdf0e10cSrcweir |* 537*cdf0e10cSrcweir |* Groesse des TabControls und der ModeButtons zurueckgeben 538*cdf0e10cSrcweir |* 539*cdf0e10cSrcweir \************************************************************************/ 540*cdf0e10cSrcweir 541*cdf0e10cSrcweir long DrawViewShell::GetHCtrlWidth() 542*cdf0e10cSrcweir { 543*cdf0e10cSrcweir // return maTabControl.GetSizePixel().Width(); 544*cdf0e10cSrcweir return 0; 545*cdf0e10cSrcweir } 546*cdf0e10cSrcweir 547*cdf0e10cSrcweir 548*cdf0e10cSrcweir /************************************************************************* 549*cdf0e10cSrcweir |* 550*cdf0e10cSrcweir |* Horizontales Lineal erzeugen 551*cdf0e10cSrcweir |* 552*cdf0e10cSrcweir \************************************************************************/ 553*cdf0e10cSrcweir 554*cdf0e10cSrcweir SvxRuler* DrawViewShell::CreateHRuler (::sd::Window* pWin, sal_Bool bIsFirst) 555*cdf0e10cSrcweir { 556*cdf0e10cSrcweir Ruler* pRuler; 557*cdf0e10cSrcweir WinBits aWBits; 558*cdf0e10cSrcweir sal_uInt16 nFlags = SVXRULER_SUPPORT_OBJECT; 559*cdf0e10cSrcweir 560*cdf0e10cSrcweir if ( bIsFirst ) 561*cdf0e10cSrcweir { 562*cdf0e10cSrcweir aWBits = WB_HSCROLL | WB_3DLOOK | WB_BORDER | WB_EXTRAFIELD; 563*cdf0e10cSrcweir nFlags |= ( SVXRULER_SUPPORT_SET_NULLOFFSET | 564*cdf0e10cSrcweir SVXRULER_SUPPORT_TABS | 565*cdf0e10cSrcweir SVXRULER_SUPPORT_PARAGRAPH_MARGINS ); // Neu 566*cdf0e10cSrcweir } 567*cdf0e10cSrcweir else 568*cdf0e10cSrcweir aWBits = WB_HSCROLL | WB_3DLOOK | WB_BORDER; 569*cdf0e10cSrcweir 570*cdf0e10cSrcweir pRuler = new Ruler (*this, GetParentWindow(), pWin, nFlags, 571*cdf0e10cSrcweir GetViewFrame()->GetBindings(), aWBits); 572*cdf0e10cSrcweir pRuler->SetSourceUnit(pWin->GetMapMode().GetMapUnit()); 573*cdf0e10cSrcweir 574*cdf0e10cSrcweir // Metric ... 575*cdf0e10cSrcweir sal_uInt16 nMetric = (sal_uInt16)GetDoc()->GetUIUnit(); 576*cdf0e10cSrcweir 577*cdf0e10cSrcweir if( nMetric == 0xffff ) 578*cdf0e10cSrcweir nMetric = (sal_uInt16)GetViewShellBase().GetViewFrame()->GetDispatcher()->GetModule()->GetFieldUnit(); 579*cdf0e10cSrcweir 580*cdf0e10cSrcweir pRuler->SetUnit( FieldUnit( nMetric ) ); 581*cdf0e10cSrcweir 582*cdf0e10cSrcweir // ... und auch DefTab am Lineal einstellen 583*cdf0e10cSrcweir pRuler->SetDefTabDist( GetDoc()->GetDefaultTabulator() ); // Neu 584*cdf0e10cSrcweir 585*cdf0e10cSrcweir Fraction aUIScale(pWin->GetMapMode().GetScaleX()); 586*cdf0e10cSrcweir aUIScale *= GetDoc()->GetUIScale(); 587*cdf0e10cSrcweir pRuler->SetZoom(aUIScale); 588*cdf0e10cSrcweir 589*cdf0e10cSrcweir return pRuler; 590*cdf0e10cSrcweir } 591*cdf0e10cSrcweir 592*cdf0e10cSrcweir /************************************************************************* 593*cdf0e10cSrcweir |* 594*cdf0e10cSrcweir |* Vertikales Lineal erzeugen 595*cdf0e10cSrcweir |* 596*cdf0e10cSrcweir \************************************************************************/ 597*cdf0e10cSrcweir 598*cdf0e10cSrcweir SvxRuler* DrawViewShell::CreateVRuler(::sd::Window* pWin) 599*cdf0e10cSrcweir { 600*cdf0e10cSrcweir Ruler* pRuler; 601*cdf0e10cSrcweir WinBits aWBits = WB_VSCROLL | WB_3DLOOK | WB_BORDER; 602*cdf0e10cSrcweir sal_uInt16 nFlags = SVXRULER_SUPPORT_OBJECT; 603*cdf0e10cSrcweir 604*cdf0e10cSrcweir pRuler = new Ruler(*this, GetParentWindow(), pWin, nFlags, 605*cdf0e10cSrcweir GetViewFrame()->GetBindings(), aWBits); 606*cdf0e10cSrcweir pRuler->SetSourceUnit(pWin->GetMapMode().GetMapUnit()); 607*cdf0e10cSrcweir 608*cdf0e10cSrcweir // #96629# Metric same as HRuler, use document setting 609*cdf0e10cSrcweir sal_uInt16 nMetric = (sal_uInt16)GetDoc()->GetUIUnit(); 610*cdf0e10cSrcweir 611*cdf0e10cSrcweir if( nMetric == 0xffff ) 612*cdf0e10cSrcweir nMetric = (sal_uInt16)GetViewShellBase().GetViewFrame()->GetDispatcher()->GetModule()->GetFieldUnit(); 613*cdf0e10cSrcweir 614*cdf0e10cSrcweir pRuler->SetUnit( FieldUnit( nMetric ) ); 615*cdf0e10cSrcweir 616*cdf0e10cSrcweir Fraction aUIScale(pWin->GetMapMode().GetScaleY()); 617*cdf0e10cSrcweir aUIScale *= GetDoc()->GetUIScale(); 618*cdf0e10cSrcweir pRuler->SetZoom(aUIScale); 619*cdf0e10cSrcweir 620*cdf0e10cSrcweir return pRuler; 621*cdf0e10cSrcweir } 622*cdf0e10cSrcweir 623*cdf0e10cSrcweir /************************************************************************* 624*cdf0e10cSrcweir |* 625*cdf0e10cSrcweir |* Horizontales Lineal aktualisieren 626*cdf0e10cSrcweir |* 627*cdf0e10cSrcweir \************************************************************************/ 628*cdf0e10cSrcweir 629*cdf0e10cSrcweir void DrawViewShell::UpdateHRuler() 630*cdf0e10cSrcweir { 631*cdf0e10cSrcweir Invalidate( SID_ATTR_LONG_LRSPACE ); 632*cdf0e10cSrcweir Invalidate( SID_RULER_PAGE_POS ); 633*cdf0e10cSrcweir Invalidate( SID_RULER_OBJECT ); 634*cdf0e10cSrcweir Invalidate( SID_RULER_TEXT_RIGHT_TO_LEFT ); 635*cdf0e10cSrcweir 636*cdf0e10cSrcweir if (mpHorizontalRuler.get() != NULL) 637*cdf0e10cSrcweir mpHorizontalRuler->ForceUpdate(); 638*cdf0e10cSrcweir } 639*cdf0e10cSrcweir 640*cdf0e10cSrcweir /************************************************************************* 641*cdf0e10cSrcweir |* 642*cdf0e10cSrcweir |* Vertikales Lineal aktualisieren 643*cdf0e10cSrcweir |* 644*cdf0e10cSrcweir \************************************************************************/ 645*cdf0e10cSrcweir 646*cdf0e10cSrcweir void DrawViewShell::UpdateVRuler() 647*cdf0e10cSrcweir { 648*cdf0e10cSrcweir Invalidate( SID_ATTR_LONG_LRSPACE ); 649*cdf0e10cSrcweir Invalidate( SID_RULER_PAGE_POS ); 650*cdf0e10cSrcweir Invalidate( SID_RULER_OBJECT ); 651*cdf0e10cSrcweir 652*cdf0e10cSrcweir if (mpVerticalRuler.get() != NULL) 653*cdf0e10cSrcweir mpVerticalRuler->ForceUpdate(); 654*cdf0e10cSrcweir } 655*cdf0e10cSrcweir 656*cdf0e10cSrcweir /************************************************************************* 657*cdf0e10cSrcweir |* 658*cdf0e10cSrcweir |* Metrik setzen 659*cdf0e10cSrcweir |* 660*cdf0e10cSrcweir \************************************************************************/ 661*cdf0e10cSrcweir 662*cdf0e10cSrcweir void DrawViewShell::SetUIUnit(FieldUnit eUnit) 663*cdf0e10cSrcweir { 664*cdf0e10cSrcweir ViewShell::SetUIUnit(eUnit); 665*cdf0e10cSrcweir } 666*cdf0e10cSrcweir 667*cdf0e10cSrcweir /************************************************************************* 668*cdf0e10cSrcweir |* 669*cdf0e10cSrcweir |* TabControl nach Splitteraenderung aktualisieren 670*cdf0e10cSrcweir |* 671*cdf0e10cSrcweir \************************************************************************/ 672*cdf0e10cSrcweir 673*cdf0e10cSrcweir IMPL_LINK( DrawViewShell, TabSplitHdl, TabBar *, pTab ) 674*cdf0e10cSrcweir { 675*cdf0e10cSrcweir const long int nMax = maViewSize.Width() - maScrBarWH.Width() 676*cdf0e10cSrcweir - maTabControl.GetPosPixel().X() ; 677*cdf0e10cSrcweir 678*cdf0e10cSrcweir Size aTabSize = maTabControl.GetSizePixel(); 679*cdf0e10cSrcweir aTabSize.Width() = Min(pTab->GetSplitSize(), (long)(nMax-1)); 680*cdf0e10cSrcweir 681*cdf0e10cSrcweir maTabControl.SetSizePixel(aTabSize); 682*cdf0e10cSrcweir GetLayerTabControl()->SetSizePixel(aTabSize); 683*cdf0e10cSrcweir 684*cdf0e10cSrcweir Point aPos = maTabControl.GetPosPixel(); 685*cdf0e10cSrcweir aPos.X() += aTabSize.Width(); 686*cdf0e10cSrcweir 687*cdf0e10cSrcweir Size aScrSize(nMax - aTabSize.Width(), maScrBarWH.Height()); 688*cdf0e10cSrcweir mpHorizontalScrollBar->SetPosSizePixel(aPos, aScrSize); 689*cdf0e10cSrcweir 690*cdf0e10cSrcweir return 0; 691*cdf0e10cSrcweir } 692*cdf0e10cSrcweir 693*cdf0e10cSrcweir /// inherited from sd::ViewShell 694*cdf0e10cSrcweir SdPage* DrawViewShell::getCurrentPage() const 695*cdf0e10cSrcweir { 696*cdf0e10cSrcweir const sal_Int32 nPageCount = (meEditMode == EM_PAGE)? 697*cdf0e10cSrcweir GetDoc()->GetSdPageCount(mePageKind): 698*cdf0e10cSrcweir GetDoc()->GetMasterSdPageCount(mePageKind); 699*cdf0e10cSrcweir 700*cdf0e10cSrcweir sal_Int32 nCurrentPage = maTabControl.GetCurPageId() - 1; 701*cdf0e10cSrcweir DBG_ASSERT( (nPageCount>0) && (nCurrentPage<nPageCount), "sd::DrawViewShell::getCurrentPage(), illegal page index!" ); 702*cdf0e10cSrcweir if( (nPageCount < 0) || (nCurrentPage>=nPageCount) ) 703*cdf0e10cSrcweir nCurrentPage = 0; // play safe here 704*cdf0e10cSrcweir 705*cdf0e10cSrcweir if (meEditMode == EM_PAGE) 706*cdf0e10cSrcweir { 707*cdf0e10cSrcweir return GetDoc()->GetSdPage((sal_uInt16)nCurrentPage, mePageKind); 708*cdf0e10cSrcweir } 709*cdf0e10cSrcweir else // EM_MASTERPAGE 710*cdf0e10cSrcweir { 711*cdf0e10cSrcweir return GetDoc()->GetMasterSdPage((sal_uInt16)nCurrentPage, mePageKind); 712*cdf0e10cSrcweir } 713*cdf0e10cSrcweir } 714*cdf0e10cSrcweir 715*cdf0e10cSrcweir /************************************************************************* 716*cdf0e10cSrcweir |* 717*cdf0e10cSrcweir |* neue aktuelle Seite auswaehlen, falls sich die Seitenfolge geaendert 718*cdf0e10cSrcweir |* hat (z. B. durch Undo) 719*cdf0e10cSrcweir |* 720*cdf0e10cSrcweir \************************************************************************/ 721*cdf0e10cSrcweir 722*cdf0e10cSrcweir void DrawViewShell::ResetActualPage() 723*cdf0e10cSrcweir { 724*cdf0e10cSrcweir sal_uInt16 nCurrentPage = maTabControl.GetCurPageId() - 1; 725*cdf0e10cSrcweir sal_uInt16 nPageCount = (meEditMode == EM_PAGE)?GetDoc()->GetSdPageCount(mePageKind):GetDoc()->GetMasterSdPageCount(mePageKind); 726*cdf0e10cSrcweir if (nPageCount > 0) 727*cdf0e10cSrcweir nCurrentPage = Min((sal_uInt16)(nPageCount - 1), nCurrentPage); 728*cdf0e10cSrcweir else 729*cdf0e10cSrcweir nCurrentPage = 0; 730*cdf0e10cSrcweir 731*cdf0e10cSrcweir if (meEditMode == EM_PAGE) 732*cdf0e10cSrcweir { 733*cdf0e10cSrcweir 734*cdf0e10cSrcweir // Update fuer TabControl 735*cdf0e10cSrcweir maTabControl.Clear(); 736*cdf0e10cSrcweir 737*cdf0e10cSrcweir SdPage* pPage = NULL; 738*cdf0e10cSrcweir String aPageName; 739*cdf0e10cSrcweir 740*cdf0e10cSrcweir for (sal_uInt16 i = 0; i < nPageCount; i++) 741*cdf0e10cSrcweir { 742*cdf0e10cSrcweir pPage = GetDoc()->GetSdPage(i, mePageKind); 743*cdf0e10cSrcweir aPageName = pPage->GetName(); 744*cdf0e10cSrcweir maTabControl.InsertPage(i + 1, aPageName); 745*cdf0e10cSrcweir 746*cdf0e10cSrcweir // Selektionskennungen der Seiten korrigieren 747*cdf0e10cSrcweir GetDoc()->SetSelected(pPage, i == nCurrentPage); 748*cdf0e10cSrcweir } 749*cdf0e10cSrcweir 750*cdf0e10cSrcweir maTabControl.SetCurPageId(nCurrentPage + 1); 751*cdf0e10cSrcweir } 752*cdf0e10cSrcweir else // EM_MASTERPAGE 753*cdf0e10cSrcweir { 754*cdf0e10cSrcweir SdPage* pActualPage = GetDoc()->GetMasterSdPage(nCurrentPage, mePageKind); 755*cdf0e10cSrcweir maTabControl.Clear(); 756*cdf0e10cSrcweir sal_uInt16 nActualMasterPageNum = 0; 757*cdf0e10cSrcweir 758*cdf0e10cSrcweir sal_uInt16 nMasterPageCnt = GetDoc()->GetMasterSdPageCount(mePageKind); 759*cdf0e10cSrcweir for (sal_uInt16 i = 0; i < nMasterPageCnt; i++) 760*cdf0e10cSrcweir { 761*cdf0e10cSrcweir SdPage* pMaster = GetDoc()->GetMasterSdPage(i, mePageKind); 762*cdf0e10cSrcweir String aLayoutName(pMaster->GetLayoutName()); 763*cdf0e10cSrcweir aLayoutName.Erase(aLayoutName.SearchAscii(SD_LT_SEPARATOR)); 764*cdf0e10cSrcweir maTabControl.InsertPage(i + 1, aLayoutName); 765*cdf0e10cSrcweir 766*cdf0e10cSrcweir if (pActualPage == pMaster) 767*cdf0e10cSrcweir nActualMasterPageNum = i; 768*cdf0e10cSrcweir } 769*cdf0e10cSrcweir 770*cdf0e10cSrcweir maTabControl.SetCurPageId(nActualMasterPageNum + 1); 771*cdf0e10cSrcweir SwitchPage(nActualMasterPageNum); 772*cdf0e10cSrcweir } 773*cdf0e10cSrcweir 774*cdf0e10cSrcweir GetViewFrame()->GetDispatcher()->Execute(SID_SWITCHPAGE, 775*cdf0e10cSrcweir SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD); 776*cdf0e10cSrcweir } 777*cdf0e10cSrcweir 778*cdf0e10cSrcweir /************************************************************************* 779*cdf0e10cSrcweir |* 780*cdf0e10cSrcweir |* Verb auf OLE-Objekt anwenden 781*cdf0e10cSrcweir |* 782*cdf0e10cSrcweir \************************************************************************/ 783*cdf0e10cSrcweir 784*cdf0e10cSrcweir 785*cdf0e10cSrcweir ErrCode DrawViewShell::DoVerb(long nVerb) 786*cdf0e10cSrcweir { 787*cdf0e10cSrcweir if ( mpDrawView->AreObjectsMarked() ) 788*cdf0e10cSrcweir { 789*cdf0e10cSrcweir const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); 790*cdf0e10cSrcweir 791*cdf0e10cSrcweir if (rMarkList.GetMarkCount() == 1) 792*cdf0e10cSrcweir { 793*cdf0e10cSrcweir SdrMark* pMark = rMarkList.GetMark(0); 794*cdf0e10cSrcweir SdrObject* pObj = pMark->GetMarkedSdrObj(); 795*cdf0e10cSrcweir 796*cdf0e10cSrcweir sal_uInt32 nInv = pObj->GetObjInventor(); 797*cdf0e10cSrcweir sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier(); 798*cdf0e10cSrcweir 799*cdf0e10cSrcweir if (nInv == SdrInventor && nSdrObjKind == OBJ_OLE2) 800*cdf0e10cSrcweir { 801*cdf0e10cSrcweir ActivateObject( (SdrOle2Obj*) pObj, nVerb); 802*cdf0e10cSrcweir } 803*cdf0e10cSrcweir #ifdef STARIMAGE_AVAILABLE 804*cdf0e10cSrcweir else if (nInv = SdrInventor && nSdrObjKind == OBJ_GRAF && 805*cdf0e10cSrcweir ((SdrGrafObj*) pObj)->GetGraphicType() == GRAPHIC_BITMAP && 806*cdf0e10cSrcweir SFX_APP()->HasFeature(SFX_FEATURE_SIMAGE)) 807*cdf0e10cSrcweir { 808*cdf0e10cSrcweir SdrGrafObj* pSdrGrafObj = (SdrGrafObj*) pObj; 809*cdf0e10cSrcweir short nOK = RET_YES; 810*cdf0e10cSrcweir 811*cdf0e10cSrcweir if ( pSdrGrafObj->GetFileName().Len() ) 812*cdf0e10cSrcweir { 813*cdf0e10cSrcweir // Graphik ist gelinkt, soll der Link aufgehoben werden? 814*cdf0e10cSrcweir QueryBox aBox(pWindow, WB_YES_NO | WB_DEF_YES, 815*cdf0e10cSrcweir String( SdResId(STR_REMOVE_LINK) ) ); 816*cdf0e10cSrcweir nOK = aBox.Execute(); 817*cdf0e10cSrcweir 818*cdf0e10cSrcweir if (nOK == RET_YES) 819*cdf0e10cSrcweir { 820*cdf0e10cSrcweir // Link aufheben (File- und Filtername zuruecksetzen) 821*cdf0e10cSrcweir pSdrGrafObj->SetGraphicLink(String(), String()); 822*cdf0e10cSrcweir } 823*cdf0e10cSrcweir } 824*cdf0e10cSrcweir 825*cdf0e10cSrcweir if (nOK == RET_YES) 826*cdf0e10cSrcweir { 827*cdf0e10cSrcweir /************************************************************** 828*cdf0e10cSrcweir * OLE-Objekt erzeugen, StarImage starten 829*cdf0e10cSrcweir * Grafik-Objekt loeschen (durch OLE-Objekt ersetzt) 830*cdf0e10cSrcweir **************************************************************/ 831*cdf0e10cSrcweir //HMHmpDrView->HideMarkHdl(); 832*cdf0e10cSrcweir 833*cdf0e10cSrcweir SvStorageRef aStor = new SvStorage(String()); 834*cdf0e10cSrcweir SvInPlaceObjectRef aNewIPObj = &((SvFactory*)SvInPlaceObject::ClassFactory()) 835*cdf0e10cSrcweir ->CreateAndInit(SimModuleDummy::GetID(SOFFICE_FILEFORMAT_CURRENT), aStor); 836*cdf0e10cSrcweir if ( aNewIPObj.Is() ) 837*cdf0e10cSrcweir { 838*cdf0e10cSrcweir SdrGrafObj* pTempSdrGrafObj = (SdrGrafObj*) pSdrGrafObj->Clone (); 839*cdf0e10cSrcweir 840*cdf0e10cSrcweir SvEmbeddedInfoObject * pInfo; 841*cdf0e10cSrcweir pInfo = GetViewFrame()->GetObjectShell()-> 842*cdf0e10cSrcweir InsertObject( aNewIPObj, String() ); 843*cdf0e10cSrcweir 844*cdf0e10cSrcweir String aName; 845*cdf0e10cSrcweir if (pInfo) 846*cdf0e10cSrcweir { 847*cdf0e10cSrcweir aName = pInfo->GetObjName(); 848*cdf0e10cSrcweir } 849*cdf0e10cSrcweir 850*cdf0e10cSrcweir Rectangle aRect = pObj->GetLogicRect(); 851*cdf0e10cSrcweir SdrOle2Obj* pSdrOle2Obj = new SdrOle2Obj( aNewIPObj, 852*cdf0e10cSrcweir aName, aRect ); 853*cdf0e10cSrcweir 854*cdf0e10cSrcweir SdrPageView* pPV = mpDrawView->GetSdrPageView(); 855*cdf0e10cSrcweir 856*cdf0e10cSrcweir pPV->GetObjList()->InsertObject( pSdrOle2Obj ); 857*cdf0e10cSrcweir mpDrawView->ReplaceObjectAtView( pObj, *pPV, pTempSdrGrafObj ); 858*cdf0e10cSrcweir 859*cdf0e10cSrcweir pSdrOle2Obj->SetLogicRect(aRect); 860*cdf0e10cSrcweir aNewIPObj->SetVisAreaSize(aRect.GetSize()); 861*cdf0e10cSrcweir 862*cdf0e10cSrcweir SimDLL::Update(aNewIPObj, pTempSdrGrafObj->GetGraphic(), pWindow); 863*cdf0e10cSrcweir ActivateObject(pSdrOle2Obj, SVVERB_SHOW); 864*cdf0e10cSrcweir 865*cdf0e10cSrcweir Client* pClient = (Client*) GetIPClient(); 866*cdf0e10cSrcweir 867*cdf0e10cSrcweir if (pClient) 868*cdf0e10cSrcweir pClient->SetSdrGrafObj( pTempSdrGrafObj ); 869*cdf0e10cSrcweir } 870*cdf0e10cSrcweir } 871*cdf0e10cSrcweir } 872*cdf0e10cSrcweir #endif 873*cdf0e10cSrcweir } 874*cdf0e10cSrcweir } 875*cdf0e10cSrcweir 876*cdf0e10cSrcweir return 0; 877*cdf0e10cSrcweir } 878*cdf0e10cSrcweir 879*cdf0e10cSrcweir 880*cdf0e10cSrcweir /************************************************************************* 881*cdf0e10cSrcweir |* 882*cdf0e10cSrcweir |* OLE-Object aktivieren 883*cdf0e10cSrcweir |* 884*cdf0e10cSrcweir \************************************************************************/ 885*cdf0e10cSrcweir 886*cdf0e10cSrcweir sal_Bool DrawViewShell::ActivateObject(SdrOle2Obj* pObj, long nVerb) 887*cdf0e10cSrcweir { 888*cdf0e10cSrcweir sal_Bool bActivated = sal_False; 889*cdf0e10cSrcweir 890*cdf0e10cSrcweir if ( !GetDocSh()->IsUIActive() ) 891*cdf0e10cSrcweir { 892*cdf0e10cSrcweir ToolBarManager::UpdateLock aLock (GetViewShellBase().GetToolBarManager()); 893*cdf0e10cSrcweir 894*cdf0e10cSrcweir bActivated = ViewShell::ActivateObject(pObj, nVerb); 895*cdf0e10cSrcweir 896*cdf0e10cSrcweir OSL_ASSERT(GetViewShell()!=NULL); 897*cdf0e10cSrcweir Client* pClient = static_cast<Client*>(GetViewShell()->GetIPClient()); 898*cdf0e10cSrcweir if (pClient) 899*cdf0e10cSrcweir pClient->SetSdrGrafObj(NULL); 900*cdf0e10cSrcweir } 901*cdf0e10cSrcweir 902*cdf0e10cSrcweir return(bActivated); 903*cdf0e10cSrcweir } 904*cdf0e10cSrcweir 905*cdf0e10cSrcweir /************************************************************************* 906*cdf0e10cSrcweir |* 907*cdf0e10cSrcweir |* Auf gewuenschte Seite schalten 908*cdf0e10cSrcweir |* Der Parameter nSelectedPage bezieht sich auf den aktuellen EditMode 909*cdf0e10cSrcweir |* 910*cdf0e10cSrcweir \************************************************************************/ 911*cdf0e10cSrcweir 912*cdf0e10cSrcweir void LclResetFlag (bool& rbFlag) {rbFlag = false;} 913*cdf0e10cSrcweir 914*cdf0e10cSrcweir sal_Bool DrawViewShell::SwitchPage(sal_uInt16 nSelectedPage) 915*cdf0e10cSrcweir { 916*cdf0e10cSrcweir /** Under some circumstances there are nested calls to SwitchPage() and 917*cdf0e10cSrcweir may crash the application (activation of form controls when the 918*cdf0e10cSrcweir shell of the edit view is not on top of the shell stack, see issue 919*cdf0e10cSrcweir 83888 for details.) Therefore the nested calls are ignored (they 920*cdf0e10cSrcweir would jump to the wrong page anyway.) 921*cdf0e10cSrcweir */ 922*cdf0e10cSrcweir if (mbIsInSwitchPage) 923*cdf0e10cSrcweir return sal_False; 924*cdf0e10cSrcweir mbIsInSwitchPage = true; 925*cdf0e10cSrcweir comphelper::ScopeGuard aGuard (::boost::bind(LclResetFlag, ::boost::ref(mbIsInSwitchPage))); 926*cdf0e10cSrcweir 927*cdf0e10cSrcweir if (GetActiveWindow()->IsInPaint()) 928*cdf0e10cSrcweir { 929*cdf0e10cSrcweir // Switching the current page while a Paint is being executed is 930*cdf0e10cSrcweir // dangerous. So, post it for later execution and return. 931*cdf0e10cSrcweir maAsynchronousSwitchPageCall.Post(::boost::bind( 932*cdf0e10cSrcweir ::std::mem_fun(&DrawViewShell::SwitchPage), 933*cdf0e10cSrcweir this, 934*cdf0e10cSrcweir nSelectedPage)); 935*cdf0e10cSrcweir return sal_False; 936*cdf0e10cSrcweir } 937*cdf0e10cSrcweir 938*cdf0e10cSrcweir sal_Bool bOK = sal_False; 939*cdf0e10cSrcweir 940*cdf0e10cSrcweir // With the current implementation of FuSlideShow there is a problem 941*cdf0e10cSrcweir // when it dsplays the show in a window: When the show is stopped it 942*cdf0e10cSrcweir // returns at one point in time SDRPAGE_NOTFOUND as current page index. 943*cdf0e10cSrcweir // Because FuSlideShow is currently being rewritten this bug is fixed 944*cdf0e10cSrcweir // here. 945*cdf0e10cSrcweir // This is not as bad a hack as it may look because making SwitchPage() 946*cdf0e10cSrcweir // more robust with respect to invalid page numbers is a good thing 947*cdf0e10cSrcweir // anyway. 948*cdf0e10cSrcweir if (nSelectedPage == SDRPAGE_NOTFOUND) 949*cdf0e10cSrcweir { 950*cdf0e10cSrcweir nSelectedPage = 0; 951*cdf0e10cSrcweir } 952*cdf0e10cSrcweir else 953*cdf0e10cSrcweir { 954*cdf0e10cSrcweir // Make sure that the given page index points to an existing page. Move 955*cdf0e10cSrcweir // the index into the valid range if necessary. 956*cdf0e10cSrcweir sal_uInt16 nPageCount = (meEditMode == EM_PAGE) 957*cdf0e10cSrcweir ? GetDoc()->GetSdPageCount(mePageKind) 958*cdf0e10cSrcweir : GetDoc()->GetMasterSdPageCount(mePageKind); 959*cdf0e10cSrcweir if (nSelectedPage >= nPageCount) 960*cdf0e10cSrcweir nSelectedPage = nPageCount-1; 961*cdf0e10cSrcweir } 962*cdf0e10cSrcweir 963*cdf0e10cSrcweir if (IsSwitchPageAllowed()) 964*cdf0e10cSrcweir { 965*cdf0e10cSrcweir ModifyGuard aGuard2( GetDoc() ); 966*cdf0e10cSrcweir 967*cdf0e10cSrcweir bOK = sal_True; 968*cdf0e10cSrcweir 969*cdf0e10cSrcweir if (mpActualPage) 970*cdf0e10cSrcweir { 971*cdf0e10cSrcweir SdPage* pNewPage = NULL; 972*cdf0e10cSrcweir 973*cdf0e10cSrcweir if (meEditMode == EM_MASTERPAGE) 974*cdf0e10cSrcweir { 975*cdf0e10cSrcweir if( GetDoc()->GetMasterSdPageCount(mePageKind) > nSelectedPage ) 976*cdf0e10cSrcweir pNewPage = GetDoc()->GetMasterSdPage(nSelectedPage, mePageKind); 977*cdf0e10cSrcweir 978*cdf0e10cSrcweir if( pNewPage ) 979*cdf0e10cSrcweir { 980*cdf0e10cSrcweir SdrPageView* pPV = mpDrawView->GetSdrPageView(); 981*cdf0e10cSrcweir 982*cdf0e10cSrcweir String sPageText (pNewPage->GetLayoutName()); 983*cdf0e10cSrcweir sPageText.Erase(sPageText.SearchAscii(SD_LT_SEPARATOR)); 984*cdf0e10cSrcweir if (pPV 985*cdf0e10cSrcweir && pNewPage == dynamic_cast< SdPage* >( pPV->GetPage() ) 986*cdf0e10cSrcweir && sPageText == maTabControl.GetPageText(nSelectedPage+1)) 987*cdf0e10cSrcweir { 988*cdf0e10cSrcweir // this slide is already visible 989*cdf0e10cSrcweir return sal_True; 990*cdf0e10cSrcweir } 991*cdf0e10cSrcweir } 992*cdf0e10cSrcweir } 993*cdf0e10cSrcweir else 994*cdf0e10cSrcweir { 995*cdf0e10cSrcweir OSL_ASSERT(mpFrameView!=NULL); 996*cdf0e10cSrcweir mpFrameView->SetSelectedPage(nSelectedPage); 997*cdf0e10cSrcweir 998*cdf0e10cSrcweir if (GetDoc()->GetSdPageCount(mePageKind) > nSelectedPage) 999*cdf0e10cSrcweir pNewPage = GetDoc()->GetSdPage(nSelectedPage, mePageKind); 1000*cdf0e10cSrcweir 1001*cdf0e10cSrcweir if (mpActualPage == pNewPage) 1002*cdf0e10cSrcweir { 1003*cdf0e10cSrcweir SdrPageView* pPV = mpDrawView->GetSdrPageView(); 1004*cdf0e10cSrcweir 1005*cdf0e10cSrcweir SdPage* pCurrentPage = dynamic_cast< SdPage* >( pPV->GetPage()); 1006*cdf0e10cSrcweir if (pPV 1007*cdf0e10cSrcweir && pNewPage == pCurrentPage 1008*cdf0e10cSrcweir && pNewPage->GetName() == maTabControl.GetPageText(nSelectedPage+1)) 1009*cdf0e10cSrcweir { 1010*cdf0e10cSrcweir // this slide is already visible 1011*cdf0e10cSrcweir return sal_True; 1012*cdf0e10cSrcweir } 1013*cdf0e10cSrcweir } 1014*cdf0e10cSrcweir } 1015*cdf0e10cSrcweir } 1016*cdf0e10cSrcweir 1017*cdf0e10cSrcweir if( mpDrawView ) 1018*cdf0e10cSrcweir mpDrawView->SdrEndTextEdit(); 1019*cdf0e10cSrcweir 1020*cdf0e10cSrcweir mpActualPage = NULL; 1021*cdf0e10cSrcweir 1022*cdf0e10cSrcweir if (meEditMode == EM_PAGE) 1023*cdf0e10cSrcweir { 1024*cdf0e10cSrcweir mpActualPage = GetDoc()->GetSdPage(nSelectedPage, mePageKind); 1025*cdf0e10cSrcweir } 1026*cdf0e10cSrcweir else 1027*cdf0e10cSrcweir { 1028*cdf0e10cSrcweir SdPage* pMaster = GetDoc()->GetMasterSdPage(nSelectedPage, mePageKind); 1029*cdf0e10cSrcweir 1030*cdf0e10cSrcweir // Passt die selektierte Seite zur MasterPage? 1031*cdf0e10cSrcweir sal_uInt16 nPageCount = GetDoc()->GetSdPageCount(mePageKind); 1032*cdf0e10cSrcweir for (sal_uInt16 i = 0; i < nPageCount; i++) 1033*cdf0e10cSrcweir { 1034*cdf0e10cSrcweir SdPage* pPage = GetDoc()->GetSdPage(i, mePageKind); 1035*cdf0e10cSrcweir if(pPage && pPage->IsSelected() && pMaster == &(pPage->TRG_GetMasterPage())) 1036*cdf0e10cSrcweir { 1037*cdf0e10cSrcweir mpActualPage = pPage; 1038*cdf0e10cSrcweir break; 1039*cdf0e10cSrcweir } 1040*cdf0e10cSrcweir } 1041*cdf0e10cSrcweir 1042*cdf0e10cSrcweir if (!mpActualPage) 1043*cdf0e10cSrcweir { 1044*cdf0e10cSrcweir // Die erste Seite nehmen, welche zur MasterPage passt 1045*cdf0e10cSrcweir for (sal_uInt16 i = 0; i < nPageCount; i++) 1046*cdf0e10cSrcweir { 1047*cdf0e10cSrcweir SdPage* pPage = GetDoc()->GetSdPage(i, mePageKind); 1048*cdf0e10cSrcweir if(pPage && pMaster == &(pPage->TRG_GetMasterPage())) 1049*cdf0e10cSrcweir { 1050*cdf0e10cSrcweir mpActualPage = pPage; 1051*cdf0e10cSrcweir break; 1052*cdf0e10cSrcweir } 1053*cdf0e10cSrcweir } 1054*cdf0e10cSrcweir } 1055*cdf0e10cSrcweir } 1056*cdf0e10cSrcweir 1057*cdf0e10cSrcweir for (sal_uInt16 i = 0; i < GetDoc()->GetSdPageCount(mePageKind); i++) 1058*cdf0e10cSrcweir { 1059*cdf0e10cSrcweir // Alle Seiten deselektieren 1060*cdf0e10cSrcweir GetDoc()->SetSelected( GetDoc()->GetSdPage(i, mePageKind), sal_False); 1061*cdf0e10cSrcweir } 1062*cdf0e10cSrcweir 1063*cdf0e10cSrcweir if (!mpActualPage) 1064*cdf0e10cSrcweir { 1065*cdf0e10cSrcweir // Sofern es keine mpActualPage gibt, wird die erste genommen 1066*cdf0e10cSrcweir mpActualPage = GetDoc()->GetSdPage(0, mePageKind); 1067*cdf0e10cSrcweir } 1068*cdf0e10cSrcweir 1069*cdf0e10cSrcweir // diese Seite auch selektieren (mpActualPage zeigt immer auf Zeichenseite, 1070*cdf0e10cSrcweir // nie auf eine Masterpage) 1071*cdf0e10cSrcweir GetDoc()->SetSelected(mpActualPage, sal_True); 1072*cdf0e10cSrcweir 1073*cdf0e10cSrcweir rtl::Reference< sd::SlideShow > xSlideshow( SlideShow::GetSlideShow( GetDoc() ) ); 1074*cdf0e10cSrcweir if( !xSlideshow.is() || !xSlideshow->isRunning() || ( xSlideshow->getAnimationMode() != ANIMATIONMODE_SHOW ) ) 1075*cdf0e10cSrcweir { 1076*cdf0e10cSrcweir // VisArea zuziehen, um ggf. Objekte zu deaktivieren 1077*cdf0e10cSrcweir // !!! only if we are not in presentation mode (#96279) !!! 1078*cdf0e10cSrcweir OSL_ASSERT (GetViewShell()!=NULL); 1079*cdf0e10cSrcweir GetViewShell()->DisconnectAllClients(); 1080*cdf0e10cSrcweir VisAreaChanged(Rectangle(Point(), Size(1, 1))); 1081*cdf0e10cSrcweir } 1082*cdf0e10cSrcweir 1083*cdf0e10cSrcweir if (meEditMode == EM_PAGE) 1084*cdf0e10cSrcweir { 1085*cdf0e10cSrcweir /********************************************************************** 1086*cdf0e10cSrcweir * PAGEMODE 1087*cdf0e10cSrcweir **********************************************************************/ 1088*cdf0e10cSrcweir GetDoc()->SetSelected(mpActualPage, sal_True); 1089*cdf0e10cSrcweir 1090*cdf0e10cSrcweir SdrPageView* pPageView = mpDrawView->GetSdrPageView(); 1091*cdf0e10cSrcweir 1092*cdf0e10cSrcweir if (pPageView) 1093*cdf0e10cSrcweir { 1094*cdf0e10cSrcweir mpFrameView->SetVisibleLayers( pPageView->GetVisibleLayers() ); 1095*cdf0e10cSrcweir mpFrameView->SetPrintableLayers( pPageView->GetPrintableLayers() ); 1096*cdf0e10cSrcweir mpFrameView->SetLockedLayers( pPageView->GetLockedLayers() ); 1097*cdf0e10cSrcweir 1098*cdf0e10cSrcweir if (mePageKind == PK_NOTES) 1099*cdf0e10cSrcweir { 1100*cdf0e10cSrcweir mpFrameView->SetNotesHelpLines( pPageView->GetHelpLines() ); 1101*cdf0e10cSrcweir } 1102*cdf0e10cSrcweir else if (mePageKind == PK_HANDOUT) 1103*cdf0e10cSrcweir { 1104*cdf0e10cSrcweir mpFrameView->SetHandoutHelpLines( pPageView->GetHelpLines() ); 1105*cdf0e10cSrcweir } 1106*cdf0e10cSrcweir else 1107*cdf0e10cSrcweir { 1108*cdf0e10cSrcweir mpFrameView->SetStandardHelpLines( pPageView->GetHelpLines() ); 1109*cdf0e10cSrcweir } 1110*cdf0e10cSrcweir } 1111*cdf0e10cSrcweir 1112*cdf0e10cSrcweir mpDrawView->HideSdrPage(); 1113*cdf0e10cSrcweir mpDrawView->ShowSdrPage(mpActualPage); 1114*cdf0e10cSrcweir GetViewShellBase().GetDrawController().FireSwitchCurrentPage(mpActualPage); 1115*cdf0e10cSrcweir 1116*cdf0e10cSrcweir SdrPageView* pNewPageView = mpDrawView->GetSdrPageView(); 1117*cdf0e10cSrcweir 1118*cdf0e10cSrcweir if (pNewPageView) 1119*cdf0e10cSrcweir { 1120*cdf0e10cSrcweir pNewPageView->SetVisibleLayers( mpFrameView->GetVisibleLayers() ); 1121*cdf0e10cSrcweir pNewPageView->SetPrintableLayers( mpFrameView->GetPrintableLayers() ); 1122*cdf0e10cSrcweir pNewPageView->SetLockedLayers( mpFrameView->GetLockedLayers() ); 1123*cdf0e10cSrcweir 1124*cdf0e10cSrcweir if (mePageKind == PK_NOTES) 1125*cdf0e10cSrcweir { 1126*cdf0e10cSrcweir pNewPageView->SetHelpLines( mpFrameView->GetNotesHelpLines() ); 1127*cdf0e10cSrcweir } 1128*cdf0e10cSrcweir else if (mePageKind == PK_HANDOUT) 1129*cdf0e10cSrcweir { 1130*cdf0e10cSrcweir pNewPageView->SetHelpLines( mpFrameView->GetHandoutHelpLines() ); 1131*cdf0e10cSrcweir } 1132*cdf0e10cSrcweir else 1133*cdf0e10cSrcweir { 1134*cdf0e10cSrcweir pNewPageView->SetHelpLines( mpFrameView->GetStandardHelpLines() ); 1135*cdf0e10cSrcweir } 1136*cdf0e10cSrcweir } 1137*cdf0e10cSrcweir 1138*cdf0e10cSrcweir maTabControl.SetCurPageId(nSelectedPage+1); 1139*cdf0e10cSrcweir String aPageName = mpActualPage->GetName(); 1140*cdf0e10cSrcweir 1141*cdf0e10cSrcweir if (maTabControl.GetPageText(nSelectedPage+1) != aPageName) 1142*cdf0e10cSrcweir { 1143*cdf0e10cSrcweir maTabControl.SetPageText(nSelectedPage+1, aPageName); 1144*cdf0e10cSrcweir } 1145*cdf0e10cSrcweir } 1146*cdf0e10cSrcweir else 1147*cdf0e10cSrcweir { 1148*cdf0e10cSrcweir /********************************************************************** 1149*cdf0e10cSrcweir * MASTERPAGE 1150*cdf0e10cSrcweir **********************************************************************/ 1151*cdf0e10cSrcweir SdrPageView* pPageView = mpDrawView->GetSdrPageView(); 1152*cdf0e10cSrcweir 1153*cdf0e10cSrcweir if (pPageView) 1154*cdf0e10cSrcweir { 1155*cdf0e10cSrcweir mpFrameView->SetVisibleLayers( pPageView->GetVisibleLayers() ); 1156*cdf0e10cSrcweir mpFrameView->SetPrintableLayers( pPageView->GetPrintableLayers() ); 1157*cdf0e10cSrcweir mpFrameView->SetLockedLayers( pPageView->GetLockedLayers() ); 1158*cdf0e10cSrcweir 1159*cdf0e10cSrcweir if (mePageKind == PK_NOTES) 1160*cdf0e10cSrcweir { 1161*cdf0e10cSrcweir mpFrameView->SetNotesHelpLines( pPageView->GetHelpLines() ); 1162*cdf0e10cSrcweir } 1163*cdf0e10cSrcweir else if (mePageKind == PK_HANDOUT) 1164*cdf0e10cSrcweir { 1165*cdf0e10cSrcweir mpFrameView->SetHandoutHelpLines( pPageView->GetHelpLines() ); 1166*cdf0e10cSrcweir } 1167*cdf0e10cSrcweir else 1168*cdf0e10cSrcweir { 1169*cdf0e10cSrcweir mpFrameView->SetStandardHelpLines( pPageView->GetHelpLines() ); 1170*cdf0e10cSrcweir } 1171*cdf0e10cSrcweir } 1172*cdf0e10cSrcweir 1173*cdf0e10cSrcweir mpDrawView->HideSdrPage(); 1174*cdf0e10cSrcweir 1175*cdf0e10cSrcweir SdPage* pMaster = GetDoc()->GetMasterSdPage(nSelectedPage, mePageKind); 1176*cdf0e10cSrcweir 1177*cdf0e10cSrcweir if( !pMaster ) // Falls es diese Page nicht geben sollte 1178*cdf0e10cSrcweir pMaster = GetDoc()->GetMasterSdPage(0, mePageKind); 1179*cdf0e10cSrcweir 1180*cdf0e10cSrcweir sal_uInt16 nNum = pMaster->GetPageNum(); 1181*cdf0e10cSrcweir mpDrawView->ShowSdrPage(mpDrawView->GetModel()->GetMasterPage(nNum)); 1182*cdf0e10cSrcweir 1183*cdf0e10cSrcweir GetViewShellBase().GetDrawController().FireSwitchCurrentPage(pMaster); 1184*cdf0e10cSrcweir 1185*cdf0e10cSrcweir SdrPageView* pNewPageView = mpDrawView->GetSdrPageView(); 1186*cdf0e10cSrcweir 1187*cdf0e10cSrcweir if (pNewPageView) 1188*cdf0e10cSrcweir { 1189*cdf0e10cSrcweir pNewPageView->SetVisibleLayers( mpFrameView->GetVisibleLayers() ); 1190*cdf0e10cSrcweir pNewPageView->SetPrintableLayers( mpFrameView->GetPrintableLayers() ); 1191*cdf0e10cSrcweir pNewPageView->SetLockedLayers( mpFrameView->GetLockedLayers() ); 1192*cdf0e10cSrcweir 1193*cdf0e10cSrcweir if (mePageKind == PK_NOTES) 1194*cdf0e10cSrcweir { 1195*cdf0e10cSrcweir pNewPageView->SetHelpLines( mpFrameView->GetNotesHelpLines() ); 1196*cdf0e10cSrcweir } 1197*cdf0e10cSrcweir else if (mePageKind == PK_HANDOUT) 1198*cdf0e10cSrcweir { 1199*cdf0e10cSrcweir pNewPageView->SetHelpLines( mpFrameView->GetHandoutHelpLines() ); 1200*cdf0e10cSrcweir } 1201*cdf0e10cSrcweir else 1202*cdf0e10cSrcweir { 1203*cdf0e10cSrcweir pNewPageView->SetHelpLines( mpFrameView->GetStandardHelpLines() ); 1204*cdf0e10cSrcweir } 1205*cdf0e10cSrcweir } 1206*cdf0e10cSrcweir 1207*cdf0e10cSrcweir String aLayoutName(pMaster->GetLayoutName()); 1208*cdf0e10cSrcweir aLayoutName.Erase(aLayoutName.SearchAscii(SD_LT_SEPARATOR)); 1209*cdf0e10cSrcweir 1210*cdf0e10cSrcweir maTabControl.SetCurPageId(nSelectedPage+1); 1211*cdf0e10cSrcweir 1212*cdf0e10cSrcweir if (maTabControl.GetPageText(nSelectedPage+1) != aLayoutName) 1213*cdf0e10cSrcweir { 1214*cdf0e10cSrcweir maTabControl.SetPageText(nSelectedPage+1, aLayoutName); 1215*cdf0e10cSrcweir } 1216*cdf0e10cSrcweir 1217*cdf0e10cSrcweir if( mePageKind == PK_HANDOUT ) 1218*cdf0e10cSrcweir { 1219*cdf0e10cSrcweir // set pages for all available handout presentation objects 1220*cdf0e10cSrcweir sd::ShapeList& rShapeList = pMaster->GetPresentationShapeList(); 1221*cdf0e10cSrcweir SdrObject* pObj = 0; 1222*cdf0e10cSrcweir 1223*cdf0e10cSrcweir while( (pObj = rShapeList.getNextShape(pObj)) != 0 ) 1224*cdf0e10cSrcweir { 1225*cdf0e10cSrcweir if( pMaster->GetPresObjKind(pObj) == PRESOBJ_HANDOUT ) 1226*cdf0e10cSrcweir { 1227*cdf0e10cSrcweir // #i105146# We want no content to be displayed for PK_HANDOUT, 1228*cdf0e10cSrcweir // so just never set a page as content 1229*cdf0e10cSrcweir static_cast<SdrPageObj*>(pObj)->SetReferencedPage(0); 1230*cdf0e10cSrcweir } 1231*cdf0e10cSrcweir } 1232*cdf0e10cSrcweir } 1233*cdf0e10cSrcweir } 1234*cdf0e10cSrcweir 1235*cdf0e10cSrcweir Size aVisSizePixel = GetActiveWindow()->GetOutputSizePixel(); 1236*cdf0e10cSrcweir Rectangle aVisAreaWin = GetActiveWindow()->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); 1237*cdf0e10cSrcweir VisAreaChanged(aVisAreaWin); 1238*cdf0e10cSrcweir mpDrawView->VisAreaChanged(GetActiveWindow()); 1239*cdf0e10cSrcweir 1240*cdf0e10cSrcweir // Damit der Navigator (und das Effekte-Window) das mitbekommt (/-men) 1241*cdf0e10cSrcweir SfxBindings& rBindings = GetViewFrame()->GetBindings(); 1242*cdf0e10cSrcweir rBindings.Invalidate(SID_NAVIGATOR_PAGENAME, sal_True, sal_False); 1243*cdf0e10cSrcweir rBindings.Invalidate(SID_STATUS_PAGE, sal_True, sal_False); 1244*cdf0e10cSrcweir rBindings.Invalidate(SID_DELETE_MASTER_PAGE, sal_True, sal_False); 1245*cdf0e10cSrcweir rBindings.Invalidate(SID_DELETE_PAGE, sal_True, sal_False); 1246*cdf0e10cSrcweir rBindings.Invalidate(SID_ASSIGN_LAYOUT,sal_True,sal_False); 1247*cdf0e10cSrcweir rBindings.Invalidate(SID_INSERTPAGE,sal_True,sal_False); 1248*cdf0e10cSrcweir UpdatePreview( mpActualPage ); 1249*cdf0e10cSrcweir 1250*cdf0e10cSrcweir mpDrawView->AdjustMarkHdl(); 1251*cdf0e10cSrcweir } 1252*cdf0e10cSrcweir 1253*cdf0e10cSrcweir return (bOK); 1254*cdf0e10cSrcweir } 1255*cdf0e10cSrcweir 1256*cdf0e10cSrcweir 1257*cdf0e10cSrcweir /************************************************************************* 1258*cdf0e10cSrcweir |* 1259*cdf0e10cSrcweir |* Pruefen, ob ein Seitenwechsel erlaubt ist 1260*cdf0e10cSrcweir |* 1261*cdf0e10cSrcweir \************************************************************************/ 1262*cdf0e10cSrcweir 1263*cdf0e10cSrcweir sal_Bool DrawViewShell::IsSwitchPageAllowed() const 1264*cdf0e10cSrcweir { 1265*cdf0e10cSrcweir bool bOK = true; 1266*cdf0e10cSrcweir 1267*cdf0e10cSrcweir FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell(); 1268*cdf0e10cSrcweir if (pFormShell!=NULL && !pFormShell->PrepareClose (sal_False)) 1269*cdf0e10cSrcweir bOK = false; 1270*cdf0e10cSrcweir 1271*cdf0e10cSrcweir return bOK; 1272*cdf0e10cSrcweir } 1273*cdf0e10cSrcweir 1274*cdf0e10cSrcweir /************************************************************************* 1275*cdf0e10cSrcweir |* 1276*cdf0e10cSrcweir |* neue aktuelle Seite auswaehlen, falls sich die Seitenfolge geaendert 1277*cdf0e10cSrcweir |* hat (z. B. durch Undo) 1278*cdf0e10cSrcweir |* 1279*cdf0e10cSrcweir \************************************************************************/ 1280*cdf0e10cSrcweir 1281*cdf0e10cSrcweir void DrawViewShell::ResetActualLayer() 1282*cdf0e10cSrcweir { 1283*cdf0e10cSrcweir LayerTabBar* pLayerBar = GetLayerTabControl(); 1284*cdf0e10cSrcweir if (pLayerBar != NULL) 1285*cdf0e10cSrcweir { 1286*cdf0e10cSrcweir // remember old layer cound and current layer id 1287*cdf0e10cSrcweir // this is needed when one layer is renamed to 1288*cdf0e10cSrcweir // restore current layer 1289*cdf0e10cSrcweir sal_uInt16 nOldLayerCnt = pLayerBar->GetPageCount(); 1290*cdf0e10cSrcweir sal_uInt16 nOldLayerId = pLayerBar->GetCurPageId(); 1291*cdf0e10cSrcweir 1292*cdf0e10cSrcweir /************************************************************* 1293*cdf0e10cSrcweir * Update fuer LayerTab 1294*cdf0e10cSrcweir *************************************************************/ 1295*cdf0e10cSrcweir pLayerBar->Clear(); 1296*cdf0e10cSrcweir 1297*cdf0e10cSrcweir String aName; 1298*cdf0e10cSrcweir String aActiveLayer = mpDrawView->GetActiveLayer(); 1299*cdf0e10cSrcweir String aBackgroundLayer( SdResId(STR_LAYER_BCKGRND) ); 1300*cdf0e10cSrcweir String aBackgroundObjLayer( SdResId(STR_LAYER_BCKGRNDOBJ) ); 1301*cdf0e10cSrcweir String aLayoutLayer( SdResId(STR_LAYER_LAYOUT) ); 1302*cdf0e10cSrcweir String aControlsLayer( SdResId(STR_LAYER_CONTROLS) ); 1303*cdf0e10cSrcweir String aMeasureLinesLayer( SdResId(STR_LAYER_MEASURELINES) ); 1304*cdf0e10cSrcweir sal_uInt16 nActiveLayer = SDRLAYER_NOTFOUND; 1305*cdf0e10cSrcweir SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin(); 1306*cdf0e10cSrcweir sal_uInt16 nLayerCnt = rLayerAdmin.GetLayerCount(); 1307*cdf0e10cSrcweir 1308*cdf0e10cSrcweir for ( sal_uInt16 nLayer = 0; nLayer < nLayerCnt; nLayer++ ) 1309*cdf0e10cSrcweir { 1310*cdf0e10cSrcweir aName = rLayerAdmin.GetLayer(nLayer)->GetName(); 1311*cdf0e10cSrcweir 1312*cdf0e10cSrcweir if ( aName == aActiveLayer ) 1313*cdf0e10cSrcweir { 1314*cdf0e10cSrcweir nActiveLayer = nLayer; 1315*cdf0e10cSrcweir } 1316*cdf0e10cSrcweir 1317*cdf0e10cSrcweir if ( aName != aBackgroundLayer ) 1318*cdf0e10cSrcweir { 1319*cdf0e10cSrcweir if (meEditMode == EM_MASTERPAGE) 1320*cdf0e10cSrcweir { 1321*cdf0e10cSrcweir // Layer der Page nicht auf MasterPage anzeigen 1322*cdf0e10cSrcweir if (aName != aLayoutLayer && 1323*cdf0e10cSrcweir aName != aControlsLayer && 1324*cdf0e10cSrcweir aName != aMeasureLinesLayer) 1325*cdf0e10cSrcweir { 1326*cdf0e10cSrcweir pLayerBar->InsertPage(nLayer+1, aName); 1327*cdf0e10cSrcweir 1328*cdf0e10cSrcweir TabBarPageBits nBits = 0; 1329*cdf0e10cSrcweir SdrPageView* pPV = mpDrawView->GetSdrPageView(); 1330*cdf0e10cSrcweir 1331*cdf0e10cSrcweir if (pPV && !pPV->IsLayerVisible(aName)) 1332*cdf0e10cSrcweir { 1333*cdf0e10cSrcweir // Unsichtbare Layer werden anders dargestellt 1334*cdf0e10cSrcweir nBits = TPB_SPECIAL; 1335*cdf0e10cSrcweir } 1336*cdf0e10cSrcweir 1337*cdf0e10cSrcweir pLayerBar->SetPageBits(nLayer+1, nBits); 1338*cdf0e10cSrcweir } 1339*cdf0e10cSrcweir } 1340*cdf0e10cSrcweir else 1341*cdf0e10cSrcweir { 1342*cdf0e10cSrcweir // Layer der MasterPage nicht auf Page anzeigen 1343*cdf0e10cSrcweir if ( aName != aBackgroundObjLayer ) 1344*cdf0e10cSrcweir { 1345*cdf0e10cSrcweir pLayerBar->InsertPage(nLayer+1, aName); 1346*cdf0e10cSrcweir 1347*cdf0e10cSrcweir TabBarPageBits nBits = 0; 1348*cdf0e10cSrcweir 1349*cdf0e10cSrcweir if (!mpDrawView->GetSdrPageView()->IsLayerVisible(aName)) 1350*cdf0e10cSrcweir { 1351*cdf0e10cSrcweir // Unsichtbare Layer werden anders dargestellt 1352*cdf0e10cSrcweir nBits = TPB_SPECIAL; 1353*cdf0e10cSrcweir } 1354*cdf0e10cSrcweir 1355*cdf0e10cSrcweir pLayerBar->SetPageBits(nLayer+1, nBits); 1356*cdf0e10cSrcweir } 1357*cdf0e10cSrcweir } 1358*cdf0e10cSrcweir } 1359*cdf0e10cSrcweir } 1360*cdf0e10cSrcweir 1361*cdf0e10cSrcweir if ( nActiveLayer == SDRLAYER_NOTFOUND ) 1362*cdf0e10cSrcweir { 1363*cdf0e10cSrcweir if( nOldLayerCnt == pLayerBar->GetPageCount() ) 1364*cdf0e10cSrcweir { 1365*cdf0e10cSrcweir nActiveLayer = nOldLayerId - 1; 1366*cdf0e10cSrcweir } 1367*cdf0e10cSrcweir else 1368*cdf0e10cSrcweir { 1369*cdf0e10cSrcweir nActiveLayer = ( meEditMode == EM_MASTERPAGE ) ? 2 : 0; 1370*cdf0e10cSrcweir } 1371*cdf0e10cSrcweir 1372*cdf0e10cSrcweir mpDrawView->SetActiveLayer( pLayerBar->GetPageText(nActiveLayer + 1) ); 1373*cdf0e10cSrcweir } 1374*cdf0e10cSrcweir 1375*cdf0e10cSrcweir pLayerBar->SetCurPageId(nActiveLayer + 1); 1376*cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate( SID_MODIFYLAYER ); 1377*cdf0e10cSrcweir GetViewFrame()->GetBindings().Invalidate( SID_DELETE_LAYER ); 1378*cdf0e10cSrcweir } 1379*cdf0e10cSrcweir } 1380*cdf0e10cSrcweir 1381*cdf0e10cSrcweir /************************************************************************* 1382*cdf0e10cSrcweir |* 1383*cdf0e10cSrcweir |* Verzoegertes Close ausfuehren 1384*cdf0e10cSrcweir |* 1385*cdf0e10cSrcweir \************************************************************************/ 1386*cdf0e10cSrcweir 1387*cdf0e10cSrcweir IMPL_LINK( DrawViewShell, CloseHdl, Timer*, pTimer ) 1388*cdf0e10cSrcweir { 1389*cdf0e10cSrcweir pTimer->Stop(); 1390*cdf0e10cSrcweir GetViewFrame()->GetBindings().Execute( SID_CLOSEWIN ); 1391*cdf0e10cSrcweir return 0L; 1392*cdf0e10cSrcweir } 1393*cdf0e10cSrcweir 1394*cdf0e10cSrcweir /************************************************************************* 1395*cdf0e10cSrcweir |* 1396*cdf0e10cSrcweir |* AcceptDrop 1397*cdf0e10cSrcweir |* 1398*cdf0e10cSrcweir \************************************************************************/ 1399*cdf0e10cSrcweir 1400*cdf0e10cSrcweir sal_Int8 DrawViewShell::AcceptDrop ( 1401*cdf0e10cSrcweir const AcceptDropEvent& rEvt, 1402*cdf0e10cSrcweir DropTargetHelper& rTargetHelper, 1403*cdf0e10cSrcweir ::sd::Window* pTargetWindow, 1404*cdf0e10cSrcweir sal_uInt16 nPage, 1405*cdf0e10cSrcweir sal_uInt16 nLayer ) 1406*cdf0e10cSrcweir { 1407*cdf0e10cSrcweir if( nPage != SDRPAGE_NOTFOUND ) 1408*cdf0e10cSrcweir nPage = GetDoc()->GetSdPage( nPage, mePageKind )->GetPageNum(); 1409*cdf0e10cSrcweir 1410*cdf0e10cSrcweir if( SlideShow::IsRunning( GetViewShellBase() ) ) 1411*cdf0e10cSrcweir return DND_ACTION_NONE; 1412*cdf0e10cSrcweir 1413*cdf0e10cSrcweir return mpDrawView->AcceptDrop( rEvt, rTargetHelper, pTargetWindow, nPage, nLayer ); 1414*cdf0e10cSrcweir } 1415*cdf0e10cSrcweir 1416*cdf0e10cSrcweir /************************************************************************* 1417*cdf0e10cSrcweir |* 1418*cdf0e10cSrcweir |* ExecuteDrop 1419*cdf0e10cSrcweir |* 1420*cdf0e10cSrcweir \************************************************************************/ 1421*cdf0e10cSrcweir 1422*cdf0e10cSrcweir sal_Int8 DrawViewShell::ExecuteDrop ( 1423*cdf0e10cSrcweir const ExecuteDropEvent& rEvt, 1424*cdf0e10cSrcweir DropTargetHelper& rTargetHelper, 1425*cdf0e10cSrcweir ::sd::Window* pTargetWindow, 1426*cdf0e10cSrcweir sal_uInt16 nPage, 1427*cdf0e10cSrcweir sal_uInt16 nLayer) 1428*cdf0e10cSrcweir { 1429*cdf0e10cSrcweir if( nPage != SDRPAGE_NOTFOUND ) 1430*cdf0e10cSrcweir nPage = GetDoc()->GetSdPage( nPage, mePageKind )->GetPageNum(); 1431*cdf0e10cSrcweir 1432*cdf0e10cSrcweir if( SlideShow::IsRunning( GetViewShellBase() ) ) 1433*cdf0e10cSrcweir return DND_ACTION_NONE; 1434*cdf0e10cSrcweir 1435*cdf0e10cSrcweir Broadcast(ViewShellHint(ViewShellHint::HINT_COMPLEX_MODEL_CHANGE_START)); 1436*cdf0e10cSrcweir sal_Int8 nResult (mpDrawView->ExecuteDrop( rEvt, rTargetHelper, pTargetWindow, nPage, nLayer )); 1437*cdf0e10cSrcweir Broadcast(ViewShellHint(ViewShellHint::HINT_COMPLEX_MODEL_CHANGE_END)); 1438*cdf0e10cSrcweir 1439*cdf0e10cSrcweir return nResult; 1440*cdf0e10cSrcweir } 1441*cdf0e10cSrcweir 1442*cdf0e10cSrcweir } // end of namespace sd 1443*cdf0e10cSrcweir 1444*cdf0e10cSrcweir #ifdef _MSC_VER 1445*cdf0e10cSrcweir #if (_MSC_VER < 1400) 1446*cdf0e10cSrcweir #pragma optimize ( "", on ) 1447*cdf0e10cSrcweir #endif 1448*cdf0e10cSrcweir #endif 1449*cdf0e10cSrcweir 1450