LCOV - code coverage report
Current view: top level - libreoffice/sd/source/ui/view - drviews1.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 518 0.2 %
Date: 2012-12-27 Functions: 2 35 5.7 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10