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

Generated by: LCOV version 1.10