LCOV - code coverage report
Current view: top level - sd/source/ui/view - viewshel.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 477 747 63.9 %
Date: 2015-06-13 12:38:46 Functions: 52 74 70.3 %
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 "ViewShell.hxx"
      21             : #include "ViewShellImplementation.hxx"
      22             : #include "createtableobjectbar.hxx"
      23             : 
      24             : #include <com/sun/star/embed/EmbedStates.hpp>
      25             : #include "ViewShellBase.hxx"
      26             : #include "ShellFactory.hxx"
      27             : #include "DrawController.hxx"
      28             : #include "LayerTabBar.hxx"
      29             : 
      30             : #include <sfx2/viewfrm.hxx>
      31             : #include <sfx2/bindings.hxx>
      32             : #include <sfx2/dispatch.hxx>
      33             : #include <vcl/scrbar.hxx>
      34             : #include <svl/eitem.hxx>
      35             : #include <svx/ruler.hxx>
      36             : #include <svx/svxids.hrc>
      37             : #include <svx/fmshell.hxx>
      38             : #include "WindowUpdater.hxx"
      39             : #include "GraphicViewShell.hxx"
      40             : #include <sfx2/childwin.hxx>
      41             : #include <sdxfer.hxx>
      42             : 
      43             : #include "app.hrc"
      44             : #include "helpids.h"
      45             : #include "strings.hrc"
      46             : #include "res_bmp.hrc"
      47             : #include "OutlineView.hxx"
      48             : #include "Client.hxx"
      49             : #include "sdresid.hxx"
      50             : #include "DrawDocShell.hxx"
      51             : #include "slideshow.hxx"
      52             : #include "drawdoc.hxx"
      53             : #include "sdpage.hxx"
      54             : #include "zoomlist.hxx"
      55             : #include "FrameView.hxx"
      56             : #include "optsitem.hxx"
      57             : #include "BezierObjectBar.hxx"
      58             : #include "TextObjectBar.hxx"
      59             : #include "GraphicObjectBar.hxx"
      60             : #include "MediaObjectBar.hxx"
      61             : #include "ViewShellManager.hxx"
      62             : #include "FormShellManager.hxx"
      63             : #include <svx/dialogs.hrc>
      64             : #include <svx/extrusionbar.hxx>
      65             : #include <svx/fontworkbar.hxx>
      66             : #include <svx/svdoutl.hxx>
      67             : #include <tools/diagnose_ex.h>
      68             : 
      69             : #include <svl/slstitm.hxx>
      70             : #include <sfx2/request.hxx>
      71             : #include "SpellDialogChildWindow.hxx"
      72             : 
      73             : #include <basegfx/tools/zoomtools.hxx>
      74             : 
      75             : #include "Window.hxx"
      76             : #include "fupoor.hxx"
      77             : 
      78             : #include <editeng/numitem.hxx>
      79             : #include <editeng/eeitem.hxx>
      80             : #include <editeng/editview.hxx>
      81             : #include <svl/poolitem.hxx>
      82             : #include <glob.hrc>
      83             : #include "AccessibleDocumentViewBase.hxx"
      84             : 
      85             : using namespace ::com::sun::star;
      86             : using namespace ::com::sun::star::uno;
      87             : using namespace ::com::sun::star::presentation;
      88             : 
      89             : namespace {
      90             : 
      91             : class ViewShellObjectBarFactory
      92             :     : public ::sd::ShellFactory<SfxShell>
      93             : {
      94             : public:
      95             :     ViewShellObjectBarFactory (::sd::ViewShell& rViewShell);
      96             :     virtual ~ViewShellObjectBarFactory();
      97             :     virtual SfxShell* CreateShell (
      98             :         ::sd::ShellId nId,
      99             :         vcl::Window* pParentWindow,
     100             :         ::sd::FrameView* pFrameView) SAL_OVERRIDE;
     101             :     virtual void ReleaseShell (SfxShell* pShell) SAL_OVERRIDE;
     102             : private:
     103             :     ::sd::ViewShell& mrViewShell;
     104             :     /** This cache holds the already created object bars.
     105             :     */
     106             :     typedef ::std::map< ::sd::ShellId,SfxShell*> ShellCache;
     107             :     ShellCache maShellCache;
     108             : };
     109             : 
     110             : } // end of anonymous namespace
     111             : 
     112             : namespace sd {
     113             : 
     114         901 : bool ViewShell::IsPageFlipMode() const
     115             : {
     116        1802 :     return this->ISA(DrawViewShell) && mpContentWindow.get() != NULL &&
     117        1802 :         mpContentWindow->GetVisibleHeight() >= 1.0;
     118             : }
     119             : 
     120       15888 : SfxViewFrame* ViewShell::GetViewFrame() const
     121             : {
     122       15888 :     const SfxViewShell* pViewShell = GetViewShell();
     123       15888 :     if (pViewShell != NULL)
     124             :     {
     125       15888 :         return pViewShell->GetViewFrame();
     126             :     }
     127             :     else
     128             :     {
     129             :         OSL_ASSERT (GetViewShell()!=NULL);
     130           0 :         return NULL;
     131             :     }
     132             : }
     133             : 
     134             : /// declare SFX-Slotmap and standard interface
     135        3980 : TYPEINIT1(ViewShell, SfxShell);
     136             : 
     137         197 : ViewShell::ViewShell( SfxViewFrame*, vcl::Window* pParentWindow, ViewShellBase& rViewShellBase, bool bAllowCenter)
     138             : :   SfxShell(&rViewShellBase)
     139             : ,   mbCenterAllowed(bAllowCenter)
     140         197 : ,   mpParentWindow(pParentWindow)
     141             : {
     142         197 :     construct();
     143         197 : }
     144             : 
     145         394 : ViewShell::~ViewShell()
     146             : {
     147             :     // Keep the content window from accessing in its destructor the
     148             :     // WindowUpdater.
     149         197 :     if (mpContentWindow)
     150         197 :         mpContentWindow->SetViewShell(NULL);
     151             : 
     152         197 :     delete mpZoomList;
     153             : 
     154         197 :     mpLayerTabBar.disposeAndClear();
     155             : 
     156         197 :     if (mpImpl->mpSubShellFactory.get() != NULL)
     157         197 :         GetViewShellBase().GetViewShellManager()->RemoveSubShellFactory(
     158         394 :             this,mpImpl->mpSubShellFactory);
     159             : 
     160         197 :     if (mpContentWindow)
     161             :     {
     162             :         SAL_INFO(
     163             :             "sd.ui",
     164             :             "destroying mpContentWindow at " << mpContentWindow.get()
     165             :                 << " with parent " << mpContentWindow->GetParent());
     166         197 :         mpContentWindow.disposeAndClear();
     167             :     }
     168             : 
     169         197 :     mpScrollBarBox.disposeAndClear();
     170         197 :     mpVerticalRuler.disposeAndClear();
     171         197 :     mpHorizontalRuler.disposeAndClear();
     172         197 :     mpVerticalScrollBar.disposeAndClear();
     173         197 :     mpHorizontalScrollBar.disposeAndClear();
     174         197 : }
     175             : 
     176             : /**
     177             :  * common initialization part of both constructors
     178             :  */
     179         197 : void ViewShell::construct()
     180             : {
     181         197 :     mbHasRulers = false;
     182         197 :     mpActiveWindow = 0;
     183         197 :     mpView = 0;
     184         197 :     mpFrameView = 0;
     185         197 :     mpZoomList = 0;
     186         197 :     mbStartShowWithDialog = false;
     187         197 :     mnPrintedHandoutPageNum = 1;
     188         197 :     mnPrintedHandoutPageCount = 0;
     189         197 :     mpWindowUpdater.reset( new ::sd::WindowUpdater() );
     190         197 :     mpImpl.reset(new Implementation(*this));
     191         197 :     meShellType = ST_NONE;
     192             : 
     193             :     OSL_ASSERT (GetViewShell()!=NULL);
     194             : 
     195         197 :     if (IsMainViewShell())
     196           0 :         GetDocSh()->Connect (this);
     197             : 
     198         197 :     mpZoomList = new ZoomList( this );
     199             : 
     200         197 :     mpContentWindow.reset(VclPtr< ::sd::Window >::Create(GetParentWindow()));
     201         197 :     SetActiveWindow (mpContentWindow.get());
     202             : 
     203         197 :     GetParentWindow()->SetBackground (Wallpaper());
     204         197 :     mpContentWindow->SetBackground (Wallpaper());
     205         197 :     mpContentWindow->SetCenterAllowed(mbCenterAllowed);
     206         197 :     mpContentWindow->SetViewShell(this);
     207         197 :     mpContentWindow->SetPosSizePixel(
     208         197 :         GetParentWindow()->GetPosPixel(),GetParentWindow()->GetSizePixel());
     209             : 
     210         197 :     if ( ! GetDocSh()->IsPreview())
     211             :     {
     212             :         // Create scroll bars and the filler between the scroll bars.
     213         197 :         mpHorizontalScrollBar.reset (VclPtr<ScrollBar>::Create(GetParentWindow(), WinBits(WB_HSCROLL | WB_DRAG)));
     214         197 :         mpHorizontalScrollBar->EnableRTL (false);
     215         197 :         mpHorizontalScrollBar->SetRange(Range(0, 32000));
     216         197 :         mpHorizontalScrollBar->SetScrollHdl(LINK(this, ViewShell, HScrollHdl));
     217             : 
     218         197 :         mpVerticalScrollBar.reset (VclPtr<ScrollBar>::Create(GetParentWindow(), WinBits(WB_VSCROLL | WB_DRAG)));
     219         197 :         mpVerticalScrollBar->SetRange(Range(0, 32000));
     220         197 :         mpVerticalScrollBar->SetScrollHdl(LINK(this, ViewShell, VScrollHdl));
     221             : 
     222         197 :         mpScrollBarBox.reset(VclPtr<ScrollBarBox>::Create(GetParentWindow(), WB_SIZEABLE));
     223             :     }
     224             : 
     225         197 :     OUString aName( "ViewShell" );
     226         197 :     SetName (aName);
     227             : 
     228         197 :     GetDoc()->StartOnlineSpelling(false);
     229             : 
     230         197 :     mpWindowUpdater->SetViewShell (*this);
     231         197 :     mpWindowUpdater->SetDocument (GetDoc());
     232             : 
     233             :     // Re-initialize the spell dialog.
     234             :     ::sd::SpellDialogChildWindow* pSpellDialog =
     235             :           static_cast< ::sd::SpellDialogChildWindow*> (
     236             :               GetViewFrame()->GetChildWindow (
     237         197 :                   ::sd::SpellDialogChildWindow::GetChildWindowId()));
     238         197 :     if (pSpellDialog != NULL)
     239           0 :         pSpellDialog->InvalidateSpellDialog();
     240             : 
     241             :     // Register the sub shell factory.
     242         197 :     mpImpl->mpSubShellFactory.reset(new ViewShellObjectBarFactory(*this));
     243         197 :     GetViewShellBase().GetViewShellManager()->AddSubShellFactory(this,mpImpl->mpSubShellFactory);
     244         197 : }
     245             : 
     246         197 : void ViewShell::doShow()
     247             : {
     248         197 :     mpContentWindow->Show();
     249         197 :     static_cast< vcl::Window*>(mpContentWindow.get())->Resize();
     250             :     SAL_INFO(
     251             :         "sd.view",
     252             :         "content window has size " << mpContentWindow->GetSizePixel().Width()
     253             :             << " " << mpContentWindow->GetSizePixel().Height());
     254             : 
     255         197 :     if ( ! GetDocSh()->IsPreview())
     256             :     {
     257             :         // Show scroll bars
     258         197 :         mpHorizontalScrollBar->Show();
     259             : 
     260         197 :         mpVerticalScrollBar->Show();
     261             :         maScrBarWH = Size(
     262         394 :             mpVerticalScrollBar->GetSizePixel().Width(),
     263         591 :             mpHorizontalScrollBar->GetSizePixel().Height());
     264             : 
     265         197 :         mpScrollBarBox->Show();
     266             :     }
     267             : 
     268         197 :     GetParentWindow()->Show();
     269         197 : }
     270             : 
     271         197 : void ViewShell::Init (bool bIsMainViewShell)
     272             : {
     273         197 :     mpImpl->mbIsInitialized = true;
     274         197 :     SetIsMainViewShell(bIsMainViewShell);
     275         197 :     if (bIsMainViewShell)
     276         133 :         SetActiveWindow (mpContentWindow.get());
     277         197 : }
     278             : 
     279         197 : void ViewShell::Exit()
     280             : {
     281         197 :     sd::View* pView = GetView();
     282         197 :     if (pView!=NULL && pView->IsTextEdit())
     283             :     {
     284           0 :         pView->SdrEndTextEdit();
     285           0 :         pView->UnmarkAll();
     286             :     }
     287             : 
     288         197 :     Deactivate (true);
     289             : 
     290         197 :     if (IsMainViewShell())
     291         133 :         GetDocSh()->Disconnect(this);
     292             : 
     293         197 :     SetIsMainViewShell(false);
     294         197 : }
     295             : 
     296             : /**
     297             :  * set focus to working window
     298             :  */
     299         266 : void ViewShell::Activate(bool bIsMDIActivate)
     300             : {
     301             :     // Do not forward to SfxShell::Activate()
     302             : 
     303             :     /* According to MI, nobody is allowed to call GrabFocus, who does not
     304             :        exactly know from which window the focus is grabbed. Since Activate()
     305             :        is sent sometimes asynchronous,  it can happen, that the wrong window
     306             :        gets the focus. */
     307             : 
     308         266 :     if (mpHorizontalRuler.get() != NULL)
     309         137 :         mpHorizontalRuler->SetActive(true);
     310         266 :     if (mpVerticalRuler.get() != NULL)
     311         137 :         mpVerticalRuler->SetActive(true);
     312             : 
     313         266 :     if (bIsMDIActivate)
     314             :     {
     315             :         // thus, the Navigator will also get a current status
     316         266 :         SfxBoolItem aItem( SID_NAVIGATOR_INIT, true );
     317         266 :         if (GetDispatcher() != NULL)
     318             :             GetDispatcher()->Execute(
     319             :                 SID_NAVIGATOR_INIT,
     320             :                 SfxCallMode::ASYNCHRON | SfxCallMode::RECORD,
     321             :                 &aItem,
     322         266 :                 0L);
     323             : 
     324         266 :         SfxViewShell* pViewShell = GetViewShell();
     325             :         OSL_ASSERT (pViewShell!=NULL);
     326         266 :         SfxBindings& rBindings = pViewShell->GetViewFrame()->GetBindings();
     327         266 :         rBindings.Invalidate( SID_3D_STATE, true, false );
     328             : 
     329         532 :         rtl::Reference< SlideShow > xSlideShow( SlideShow::GetSlideShow( GetViewShellBase() ) );
     330         266 :         if(xSlideShow.is() && xSlideShow->isRunning() )
     331           0 :             xSlideShow->activate(GetViewShellBase());
     332             : 
     333         266 :         if(HasCurrentFunction())
     334         266 :             GetCurrentFunction()->Activate();
     335             : 
     336         266 :         if(!GetDocSh()->IsUIActive())
     337         532 :             UpdatePreview( GetActualPage(), true );
     338             :     }
     339             : 
     340         266 :     ReadFrameViewData( mpFrameView );
     341             : 
     342         266 :     if (IsMainViewShell())
     343         202 :         GetDocSh()->Connect(this);
     344         266 : }
     345             : 
     346           0 : void ViewShell::UIActivating( SfxInPlaceClient*  )
     347             : {
     348             :     OSL_ASSERT (GetViewShell()!=NULL);
     349           0 :     GetViewShellBase().GetToolBarManager()->ToolBarsDestroyed();
     350           0 : }
     351             : 
     352           0 : void ViewShell::UIDeactivated( SfxInPlaceClient*  )
     353             : {
     354             :     OSL_ASSERT (GetViewShell()!=NULL);
     355           0 :     GetViewShellBase().GetToolBarManager()->ToolBarsDestroyed();
     356           0 :     if ( GetDrawView() )
     357           0 :         GetViewShellBase().GetToolBarManager()->SelectionHasChanged(*this, *GetDrawView());
     358           0 : }
     359             : 
     360         531 : void ViewShell::Deactivate(bool bIsMDIActivate)
     361             : {
     362             :     // remove view from a still active drag'n'drop session
     363         531 :     SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
     364             : 
     365         531 :     if (IsMainViewShell())
     366         519 :         GetDocSh()->Disconnect(this);
     367             : 
     368         531 :     if( pDragTransferable )
     369           0 :         pDragTransferable->SetView( NULL );
     370             : 
     371             :     OSL_ASSERT (GetViewShell()!=NULL);
     372             : 
     373             :     // remember view attributes of FrameView
     374         531 :     WriteFrameViewData();
     375             : 
     376         531 :     if (bIsMDIActivate)
     377             :     {
     378         531 :         rtl::Reference< SlideShow > xSlideShow( SlideShow::GetSlideShow( GetViewShellBase() ) );
     379         531 :         if(xSlideShow.is() && xSlideShow->isRunning() )
     380           0 :             xSlideShow->deactivate(GetViewShellBase());
     381             : 
     382         531 :         if(HasCurrentFunction())
     383         160 :             GetCurrentFunction()->Deactivate();
     384             :     }
     385             : 
     386         531 :     if (mpHorizontalRuler.get() != NULL)
     387         360 :         mpHorizontalRuler->SetActive(false);
     388         531 :     if (mpVerticalRuler.get() != NULL)
     389         360 :         mpVerticalRuler->SetActive(false);
     390             : 
     391         531 :     SfxShell::Deactivate(bIsMDIActivate);
     392         531 : }
     393             : 
     394         197 : void ViewShell::Shutdown()
     395             : {
     396         197 :     Exit ();
     397         197 : }
     398             : 
     399           1 : bool ViewShell::KeyInput(const KeyEvent& rKEvt, ::sd::Window* pWin)
     400             : {
     401           1 :     bool bReturn(false);
     402             : 
     403           1 :     if(pWin)
     404           1 :         SetActiveWindow(pWin);
     405             : 
     406           1 :     if(!bReturn)
     407             :     {
     408             :         // give key input first to SfxViewShell to give CTRL+Key
     409             :         // (e.g. CTRL+SHIFT+'+', to front) priority.
     410             :         OSL_ASSERT (GetViewShell()!=NULL);
     411           1 :         bReturn = GetViewShell()->KeyInput(rKEvt);
     412             :     }
     413             : 
     414           1 :     const size_t OriCount = GetView()->GetMarkedObjectList().GetMarkCount();
     415           1 :     if(!bReturn)
     416             :     {
     417           1 :         rtl::Reference< SlideShow > xSlideShow( SlideShow::GetSlideShow( GetViewShellBase() ) );
     418           1 :         if(xSlideShow.is() && xSlideShow->isRunning())
     419             :         {
     420           0 :             bReturn = xSlideShow->keyInput(rKEvt);
     421             :         }
     422             :         else
     423             :         {
     424           1 :             bool bConsumed = false;
     425           1 :             if( GetView() )
     426           1 :                 bConsumed = GetView()->getSmartTags().KeyInput(rKEvt);
     427             : 
     428           1 :             if( !bConsumed )
     429             :             {
     430           1 :                 rtl::Reference< sdr::SelectionController > xSelectionController( GetView()->getSelectionController() );
     431           1 :                 if( !xSelectionController.is() || !xSelectionController->onKeyInput( rKEvt, pWin ) )
     432             :                 {
     433           1 :                     if(HasCurrentFunction())
     434           1 :                         bReturn = GetCurrentFunction()->KeyInput(rKEvt);
     435             :                 }
     436             :                 else
     437             :                 {
     438           0 :                     bReturn = true;
     439           1 :                 }
     440             :             }
     441           1 :         }
     442             :     }
     443           1 :     const size_t EndCount = GetView()->GetMarkedObjectList().GetMarkCount();
     444             :     // Here, oriCount or endCount must have one value=0, another value > 0, then to switch focus between Document and shape objects
     445           1 :     if(bReturn &&  (OriCount + EndCount > 0) && (OriCount * EndCount == 0))
     446           0 :         SwitchActiveViewFireFocus();
     447             : 
     448           1 :     if(!bReturn && GetActiveWindow())
     449             :     {
     450           0 :         vcl::KeyCode aKeyCode = rKEvt.GetKeyCode();
     451             : 
     452           0 :         if (aKeyCode.IsMod1() && aKeyCode.IsShift()
     453           0 :             && aKeyCode.GetCode() == KEY_R)
     454             :         {
     455           0 :             InvalidateWindows();
     456           0 :             bReturn = true;
     457             :         }
     458             :     }
     459             : 
     460           1 :     return bReturn;
     461             : }
     462             : 
     463           2 : void ViewShell::MouseButtonDown(const MouseEvent& rMEvt, ::sd::Window* pWin)
     464             : {
     465             :     // We have to lock tool bar updates while the mouse button is pressed in
     466             :     // order to prevent the shape under the mouse to be moved (this happens
     467             :     // when the number of docked tool bars changes as result of a changed
     468             :     // selection;  this changes the window size and thus the mouse position
     469             :     // in model coordinates: with respect to model coordinates the mouse
     470             :     // moves.)
     471             :     OSL_ASSERT(mpImpl->mpUpdateLockForMouse.expired());
     472           4 :     mpImpl->mpUpdateLockForMouse = ViewShell::Implementation::ToolBarManagerLock::Create(
     473           4 :         GetViewShellBase().GetToolBarManager());
     474             : 
     475           2 :     if ( pWin && !pWin->HasFocus() )
     476             :     {
     477           0 :         pWin->GrabFocus();
     478           0 :         SetActiveWindow(pWin);
     479             :     }
     480             : 
     481             :     // insert MouseEvent into E3dView
     482           2 :     if (GetView() != NULL)
     483           2 :         GetView()->SetMouseEvent(rMEvt);
     484             : 
     485           2 :     bool bConsumed = false;
     486           2 :     if( GetView() )
     487           2 :         bConsumed = GetView()->getSmartTags().MouseButtonDown( rMEvt );
     488             : 
     489           2 :     if( !bConsumed )
     490             :     {
     491           2 :         rtl::Reference< sdr::SelectionController > xSelectionController( GetView()->getSelectionController() );
     492           2 :         if( !xSelectionController.is() || !xSelectionController->onMouseButtonDown( rMEvt, pWin ) )
     493             :         {
     494           2 :             if(HasCurrentFunction())
     495           2 :                 GetCurrentFunction()->MouseButtonDown(rMEvt);
     496           2 :         }
     497             :     }
     498           2 : }
     499             : 
     500           1 : void ViewShell::LogicMouseButtonDown(const MouseEvent& rMouseEvent)
     501             : {
     502             :     // When we're not doing tiled rendering, then positions must be passed as pixels.
     503             :     assert(GetDoc()->isTiledRendering());
     504             : 
     505           1 :     Point aPoint = mpActiveWindow->GetPointerPosPixel();
     506           1 :     mpActiveWindow->SetLastMousePos(rMouseEvent.GetPosPixel());
     507             : 
     508           1 :     MouseButtonDown(rMouseEvent, 0);
     509             : 
     510           1 :     mpActiveWindow->SetPointerPosPixel(aPoint);
     511           1 : }
     512             : 
     513           1 : void ViewShell::LogicMouseButtonUp(const MouseEvent& rMouseEvent)
     514             : {
     515             :     // When we're not doing tiled rendering, then positions must be passed as pixels.
     516             :     assert(GetDoc()->isTiledRendering());
     517             : 
     518           1 :     Point aPoint = mpActiveWindow->GetPointerPosPixel();
     519           1 :     mpActiveWindow->SetLastMousePos(rMouseEvent.GetPosPixel());
     520             : 
     521           1 :     MouseButtonUp(rMouseEvent, 0);
     522             : 
     523           1 :     mpActiveWindow->SetPointerPosPixel(aPoint);
     524           1 : }
     525             : 
     526           1 : void ViewShell::SetCursorMm100Position(const Point& rPosition, bool bPoint, bool bClearMark)
     527             : {
     528           1 :     if (SdrView* pSdrView = GetView())
     529             :     {
     530           1 :         rtl::Reference<sdr::SelectionController> xSelectionController(GetView()->getSelectionController());
     531           1 :         if (!xSelectionController.is() || !xSelectionController->setCursorLogicPosition(rPosition, bPoint))
     532             :         {
     533           1 :             if (pSdrView->GetTextEditObject())
     534             :             {
     535           1 :                 EditView& rEditView = pSdrView->GetTextEditOutlinerView()->GetEditView();
     536           1 :                 rEditView.SetCursorLogicPosition(rPosition, bPoint, bClearMark);
     537             :             }
     538           1 :         }
     539             :     }
     540           1 : }
     541             : 
     542           2 : void ViewShell::SetGraphicMm100Position(bool bStart, const Point& rPosition)
     543             : {
     544           2 :     if (bStart)
     545             :     {
     546           1 :         MouseEvent aClickEvent(rPosition, 1, MouseEventModifiers::SIMPLECLICK, MOUSE_LEFT);
     547           1 :         MouseButtonDown(aClickEvent, 0);
     548           1 :         MouseEvent aMoveEvent(Point(rPosition.getX(), rPosition.getY()), 0, MouseEventModifiers::SIMPLEMOVE, MOUSE_LEFT);
     549           1 :         MouseMove(aMoveEvent, 0);
     550             :     }
     551             :     else
     552             :     {
     553           1 :         MouseEvent aMoveEvent(Point(rPosition.getX(), rPosition.getY()), 0, MouseEventModifiers::SIMPLEMOVE, MOUSE_LEFT);
     554           1 :         MouseMove(aMoveEvent, 0);
     555           1 :         MouseEvent aClickEvent(rPosition, 1, MouseEventModifiers::SIMPLECLICK, MOUSE_LEFT);
     556           1 :         MouseButtonUp(aClickEvent, 0);
     557             :     }
     558           2 : }
     559             : 
     560           2 : void ViewShell::MouseMove(const MouseEvent& rMEvt, ::sd::Window* pWin)
     561             : {
     562           2 :     if (rMEvt.IsLeaveWindow())
     563             :     {
     564           0 :         if ( ! mpImpl->mpUpdateLockForMouse.expired())
     565             :         {
     566             :             ::boost::shared_ptr<ViewShell::Implementation::ToolBarManagerLock> pLock(
     567           0 :                 mpImpl->mpUpdateLockForMouse);
     568           0 :             if (pLock.get() != NULL)
     569           0 :                 pLock->Release();
     570             :         }
     571             :     }
     572             : 
     573           2 :     if ( pWin )
     574             :     {
     575           0 :         SetActiveWindow(pWin);
     576             :     }
     577             : 
     578             :     // insert MouseEvent into E3dView
     579           2 :     if (GetView() != NULL)
     580           2 :         GetView()->SetMouseEvent(rMEvt);
     581             : 
     582           2 :     if(HasCurrentFunction())
     583             :     {
     584           2 :         rtl::Reference< sdr::SelectionController > xSelectionController( GetView()->getSelectionController() );
     585           2 :         if( !xSelectionController.is() || !xSelectionController->onMouseMove( rMEvt, pWin ) )
     586             :         {
     587           2 :             if(HasCurrentFunction())
     588           2 :                 GetCurrentFunction()->MouseMove(rMEvt);
     589           2 :         }
     590             :     }
     591           2 : }
     592             : 
     593           2 : void ViewShell::MouseButtonUp(const MouseEvent& rMEvt, ::sd::Window* pWin)
     594             : {
     595           2 :     if ( pWin )
     596           0 :         SetActiveWindow(pWin);
     597             : 
     598             :     // insert MouseEvent into E3dView
     599           2 :     if (GetView() != NULL)
     600           2 :         GetView()->SetMouseEvent(rMEvt);
     601             : 
     602           2 :     if( HasCurrentFunction())
     603             :     {
     604           2 :         rtl::Reference< sdr::SelectionController > xSelectionController( GetView()->getSelectionController() );
     605           2 :         if( !xSelectionController.is() || !xSelectionController->onMouseButtonUp( rMEvt, pWin ) )
     606             :         {
     607           2 :             if(HasCurrentFunction())
     608           2 :                 GetCurrentFunction()->MouseButtonUp(rMEvt);
     609           2 :         }
     610             :     }
     611             : 
     612           2 :     if ( ! mpImpl->mpUpdateLockForMouse.expired())
     613             :     {
     614             :         ::boost::shared_ptr<ViewShell::Implementation::ToolBarManagerLock> pLock(
     615           2 :             mpImpl->mpUpdateLockForMouse);
     616           2 :         if (pLock.get() != NULL)
     617           2 :             pLock->Release();
     618             :     }
     619           2 : }
     620             : 
     621           0 : void ViewShell::Command(const CommandEvent& rCEvt, ::sd::Window* pWin)
     622             : {
     623           0 :     bool bDone = HandleScrollCommand (rCEvt, pWin);
     624             : 
     625           0 :     if( !bDone )
     626             :     {
     627           0 :         if( rCEvt.GetCommand() == CommandEventId::InputLanguageChange )
     628             :         {
     629             :             //#i42732# update state of fontname if input language changes
     630           0 :             GetViewFrame()->GetBindings().Invalidate( SID_ATTR_CHAR_FONT );
     631           0 :             GetViewFrame()->GetBindings().Invalidate( SID_ATTR_CHAR_FONTHEIGHT );
     632             :         }
     633             :         else
     634             :         {
     635           0 :             bool bConsumed = false;
     636           0 :             if( GetView() )
     637           0 :                 bConsumed = GetView()->getSmartTags().Command(rCEvt);
     638             : 
     639           0 :             if( !bConsumed && HasCurrentFunction())
     640           0 :                 GetCurrentFunction()->Command(rCEvt);
     641             :         }
     642             :     }
     643           0 : }
     644             : 
     645         106 : bool ViewShell::Notify(NotifyEvent& rNEvt, ::sd::Window* pWin)
     646             : {
     647             :     // handle scroll commands when they arrived at child windows
     648         106 :     bool nRet = false;
     649         106 :     if( rNEvt.GetType() == MouseNotifyEvent::COMMAND )
     650             :     {
     651             :         // note: dynamic_cast is not possible as GetData() returns a void*
     652           0 :         CommandEvent* pCmdEvent = static_cast< CommandEvent* >(rNEvt.GetData());
     653           0 :         nRet = HandleScrollCommand(*pCmdEvent, pWin);
     654             :     }
     655         106 :     return nRet;
     656             : }
     657             : 
     658           0 : bool ViewShell::HandleScrollCommand(const CommandEvent& rCEvt, ::sd::Window* pWin)
     659             : {
     660           0 :     bool bDone = false;
     661             : 
     662           0 :     switch( rCEvt.GetCommand() )
     663             :     {
     664             :         case CommandEventId::Swipe:
     665             :             {
     666           0 :                 rtl::Reference< SlideShow > xSlideShow( SlideShow::GetSlideShow( GetViewShellBase() ) );
     667           0 :                 if (xSlideShow.is())
     668             :                 {
     669           0 :                     const CommandSwipeData* pSwipeData = rCEvt.GetSwipeData();
     670           0 :                     bDone = xSlideShow->swipe(*pSwipeData);
     671           0 :                 }
     672             :             }
     673           0 :             break;
     674             :         case CommandEventId::LongPress:
     675             :             {
     676           0 :                 rtl::Reference< SlideShow > xSlideShow( SlideShow::GetSlideShow( GetViewShellBase() ) );
     677           0 :                 if (xSlideShow.is())
     678             :                 {
     679           0 :                     const CommandLongPressData* pLongPressData = rCEvt.GetLongPressData();
     680           0 :                     bDone = xSlideShow->longpress(*pLongPressData);
     681           0 :                 }
     682             :             }
     683           0 :             break;
     684             : 
     685             :         case CommandEventId::Wheel:
     686             :             {
     687           0 :                 Reference< XSlideShowController > xSlideShowController( SlideShow::GetSlideShowController(GetViewShellBase() ) );
     688           0 :                 if( xSlideShowController.is() )
     689             :                 {
     690             :                     // We ignore zooming with control+mouse wheel.
     691           0 :                     const CommandWheelData* pData = rCEvt.GetWheelData();
     692           0 :                     if( pData && !pData->GetModifier() && ( pData->GetMode() == CommandWheelMode::SCROLL ) && !pData->IsHorz() )
     693             :                     {
     694           0 :                         long nDelta = pData->GetDelta();
     695           0 :                         if( nDelta > 0 )
     696           0 :                             xSlideShowController->gotoPreviousSlide();
     697           0 :                         else if( nDelta < 0 )
     698           0 :                             xSlideShowController->gotoNextEffect();
     699             :                     }
     700           0 :                     break;
     701           0 :                 }
     702             :             }
     703             :             // fall through when not running slideshow
     704             :         case CommandEventId::StartAutoScroll:
     705             :         case CommandEventId::AutoScroll:
     706             :         {
     707           0 :             const CommandWheelData* pData = rCEvt.GetWheelData();
     708             : 
     709           0 :             if (pData != NULL)
     710             :             {
     711           0 :                 if (pData->IsMod1())
     712             :                 {
     713           0 :                     if( !GetDocSh()->IsUIActive() )
     714             :                     {
     715           0 :                         const long  nOldZoom = GetActiveWindow()->GetZoom();
     716             :                         long        nNewZoom;
     717           0 :                         Point aOldMousePos = GetActiveWindow()->PixelToLogic(rCEvt.GetMousePosPixel());
     718             : 
     719           0 :                         if( pData->GetDelta() < 0L )
     720           0 :                             nNewZoom = std::max( (long) pWin->GetMinZoom(), basegfx::zoomtools::zoomOut( nOldZoom ));
     721             :                         else
     722           0 :                             nNewZoom = std::min( (long) pWin->GetMaxZoom(), basegfx::zoomtools::zoomIn( nOldZoom ));
     723             : 
     724           0 :                         SetZoom( nNewZoom );
     725             :                         // Keep mouse at same doc point before zoom
     726           0 :                         Point aNewMousePos = GetActiveWindow()->PixelToLogic(rCEvt.GetMousePosPixel());
     727           0 :                         SetWinViewPos(GetWinViewPos() - (aNewMousePos - aOldMousePos), true);
     728             : 
     729           0 :                         Invalidate( SID_ATTR_ZOOM );
     730           0 :                         Invalidate( SID_ATTR_ZOOMSLIDER );
     731             : 
     732           0 :                         bDone = true;
     733             :                     }
     734             :                 }
     735             :                 else
     736             :                 {
     737           0 :                     if( mpContentWindow.get() == pWin )
     738             :                     {
     739           0 :                         sal_uLong nScrollLines = pData->GetScrollLines();
     740           0 :                         if(IsPageFlipMode())
     741           0 :                             nScrollLines = COMMAND_WHEEL_PAGESCROLL;
     742             :                         CommandWheelData aWheelData( pData->GetDelta(),pData->GetNotchDelta(),
     743           0 :                             nScrollLines,pData->GetMode(),pData->GetModifier(),pData->IsHorz() );
     744           0 :                         CommandEvent aReWrite( rCEvt.GetMousePosPixel(),rCEvt.GetCommand(),
     745           0 :                             rCEvt.IsMouseEvent(),static_cast<const void *>(&aWheelData) );
     746             :                         bDone = pWin->HandleScrollCommand( aReWrite,
     747             :                             mpHorizontalScrollBar.get(),
     748           0 :                             mpVerticalScrollBar.get());
     749             :                     }
     750             :                 }
     751             :             }
     752             :         }
     753           0 :         break;
     754             : 
     755             :         default:
     756           0 :         break;
     757             :     }
     758             : 
     759           0 :     return bDone;
     760             : }
     761             : 
     762        1104 : void ViewShell::SetupRulers()
     763             : {
     764        1104 :     if(mbHasRulers && (mpContentWindow.get() != NULL) && !SlideShow::IsRunning(GetViewShellBase()))
     765             :     {
     766         628 :         long nHRulerOfs = 0;
     767             : 
     768         628 :         if ( mpVerticalRuler.get() == NULL )
     769             :         {
     770          86 :             mpVerticalRuler.reset(CreateVRuler(GetActiveWindow()));
     771          86 :             if ( mpVerticalRuler.get() != NULL )
     772             :             {
     773          86 :                 nHRulerOfs = mpVerticalRuler->GetSizePixel().Width();
     774          86 :                 mpVerticalRuler->SetActive(true);
     775          86 :                 mpVerticalRuler->Show();
     776             :             }
     777             :         }
     778         628 :         if ( mpHorizontalRuler.get() == NULL )
     779             :         {
     780          86 :             mpHorizontalRuler.reset(CreateHRuler(GetActiveWindow(), true));
     781          86 :             if ( mpHorizontalRuler.get() != NULL )
     782             :             {
     783          86 :                 mpHorizontalRuler->SetWinPos(nHRulerOfs);
     784          86 :                 mpHorizontalRuler->SetActive(true);
     785          86 :                 mpHorizontalRuler->Show();
     786             :             }
     787             :         }
     788             :     }
     789        1104 : }
     790             : 
     791           0 : const SfxPoolItem* ViewShell::GetNumBulletItem(SfxItemSet& aNewAttr, sal_uInt16& nNumItemId)
     792             : {
     793           0 :     const SfxPoolItem* pTmpItem = NULL;
     794             : 
     795           0 :     if(aNewAttr.GetItemState(nNumItemId, false, &pTmpItem) == SfxItemState::SET)
     796             :     {
     797           0 :         return pTmpItem;
     798             :     }
     799             :     else
     800             :     {
     801           0 :         nNumItemId = aNewAttr.GetPool()->GetWhich(SID_ATTR_NUMBERING_RULE);
     802           0 :         SfxItemState eState = aNewAttr.GetItemState(nNumItemId, false, &pTmpItem);
     803           0 :         if (eState == SfxItemState::SET)
     804           0 :             return pTmpItem;
     805             :         else
     806             :         {
     807           0 :             bool bOutliner = false;
     808           0 :             bool bTitle = false;
     809             : 
     810           0 :             if( mpView )
     811             :             {
     812           0 :                 const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
     813           0 :                 const size_t nCount = rMarkList.GetMarkCount();
     814             : 
     815           0 :                 for(size_t nNum = 0; nNum < nCount; ++nNum)
     816             :                 {
     817           0 :                     SdrObject* pObj = rMarkList.GetMark(nNum)->GetMarkedSdrObj();
     818           0 :                     if( pObj->GetObjInventor() == SdrInventor )
     819             :                     {
     820           0 :                         switch(pObj->GetObjIdentifier())
     821             :                         {
     822             :                         case OBJ_TITLETEXT:
     823           0 :                             bTitle = true;
     824           0 :                             break;
     825             :                         case OBJ_OUTLINETEXT:
     826           0 :                             bOutliner = true;
     827           0 :                             break;
     828             :                         }
     829             :                     }
     830             :                 }
     831             :             }
     832             : 
     833           0 :             const SvxNumBulletItem *pItem = NULL;
     834           0 :             if(bOutliner)
     835             :             {
     836           0 :                 SfxStyleSheetBasePool* pSSPool = mpView->GetDocSh()->GetStyleSheetPool();
     837           0 :                 OUString aStyleName(SD_RESSTR(STR_LAYOUT_OUTLINE) + " 1");
     838           0 :                 SfxStyleSheetBase* pFirstStyleSheet = pSSPool->Find( aStyleName, SD_STYLE_FAMILY_PSEUDO);
     839           0 :                 if( pFirstStyleSheet )
     840           0 :                     pFirstStyleSheet->GetItemSet().GetItemState(EE_PARA_NUMBULLET, false, reinterpret_cast<const SfxPoolItem**>(&pItem));
     841             :             }
     842             : 
     843           0 :             if( pItem == NULL )
     844           0 :                 pItem = static_cast<const SvxNumBulletItem*>( aNewAttr.GetPool()->GetSecondaryPool()->GetPoolDefaultItem(EE_PARA_NUMBULLET) );
     845             : 
     846           0 :             aNewAttr.Put(*pItem, EE_PARA_NUMBULLET);
     847             : 
     848           0 :             if(bTitle && aNewAttr.GetItemState(EE_PARA_NUMBULLET,true) == SfxItemState::SET )
     849             :             {
     850           0 :                 const SvxNumBulletItem* pBulletItem = static_cast<const SvxNumBulletItem*>(aNewAttr.GetItem(EE_PARA_NUMBULLET,true));
     851           0 :                 SvxNumRule* pRule = pBulletItem->GetNumRule();
     852           0 :                 if(pRule)
     853             :                 {
     854           0 :                     SvxNumRule aNewRule( *pRule );
     855           0 :                     aNewRule.SetFeatureFlag( SvxNumRuleFlags::NO_NUMBERS, true );
     856             : 
     857           0 :                     SvxNumBulletItem aNewItem( aNewRule, EE_PARA_NUMBULLET );
     858           0 :                     aNewAttr.Put(aNewItem);
     859             :                 }
     860             :             }
     861             : 
     862           0 :             SfxItemState eNumState = aNewAttr.GetItemState(nNumItemId, false, &pTmpItem);
     863           0 :             if (eNumState == SfxItemState::SET)
     864           0 :                 return pTmpItem;
     865             : 
     866             :         }
     867             :     }
     868           0 :     return pTmpItem;
     869             : }
     870             : 
     871         790 : void ViewShell::Resize()
     872             : {
     873         790 :     SetupRulers ();
     874             : 
     875         790 :     if (mpParentWindow == nullptr)
     876         299 :         return;
     877             : 
     878             :     // Make sure that the new size is not degenerate.
     879         790 :     const Size aSize (mpParentWindow->GetSizePixel());
     880         790 :     if (aSize.Width()==0 || aSize.Height()==0)
     881         299 :         return;
     882             : 
     883             :     // Remember the new position and size.
     884         491 :     maViewPos = Point(0,0);
     885         491 :     maViewSize = aSize;
     886             : 
     887             :     // Rearrange the UI elements to take care of the new position and size.
     888         491 :     ArrangeGUIElements ();
     889             :     // end of included AdjustPosSizePixel.
     890             : 
     891         491 :     ::sd::View* pView = GetView();
     892             : 
     893         491 :     if (pView)
     894         491 :         pView->VisAreaChanged(GetActiveWindow());
     895             : }
     896             : 
     897         499 : SvBorder ViewShell::GetBorder (bool )
     898             : {
     899         499 :     SvBorder aBorder;
     900             : 
     901             :     // Horizontal scrollbar.
     902         998 :     if (mpHorizontalScrollBar.get()!=NULL
     903         499 :         && mpHorizontalScrollBar->IsVisible())
     904             :     {
     905         499 :         aBorder.Bottom() = maScrBarWH.Height();
     906             :     }
     907             : 
     908             :     // Vertical scrollbar.
     909         998 :     if (mpVerticalScrollBar.get()!=NULL
     910         499 :         && mpVerticalScrollBar->IsVisible())
     911             :     {
     912         499 :         aBorder.Right() = maScrBarWH.Width();
     913             :     }
     914             : 
     915             :     // Place horizontal ruler below tab bar.
     916         499 :     if (mbHasRulers && mpContentWindow.get() != NULL)
     917             :     {
     918         314 :         SetupRulers();
     919         314 :         if (mpHorizontalRuler.get() != NULL)
     920         314 :             aBorder.Top() = mpHorizontalRuler->GetSizePixel().Height();
     921         314 :         if (mpVerticalRuler.get() != NULL)
     922         314 :             aBorder.Left() = mpVerticalRuler->GetSizePixel().Width();
     923             :     }
     924             : 
     925         499 :     return aBorder;
     926             : }
     927             : 
     928         427 : void ViewShell::ArrangeGUIElements()
     929             : {
     930         427 :     if (mpImpl->mbArrangeActive)
     931         427 :         return;
     932         427 :     mpImpl->mbArrangeActive = true;
     933             : 
     934             :     // Calculate border for in-place editing.
     935         427 :     long nLeft = maViewPos.X();
     936         427 :     long nTop  = maViewPos.Y();
     937         427 :     long nRight = maViewPos.X() + maViewSize.Width();
     938         427 :     long nBottom = maViewPos.Y() + maViewSize.Height();
     939             : 
     940             :     // Horizontal scrollbar.
     941         854 :     if (mpHorizontalScrollBar.get()!=NULL
     942         427 :         && mpHorizontalScrollBar->IsVisible())
     943             :     {
     944         427 :         nBottom -= maScrBarWH.Height();
     945         427 :         if (mpLayerTabBar.get()!=NULL && mpLayerTabBar->IsVisible())
     946         230 :             nBottom -= mpLayerTabBar->GetSizePixel().Height();
     947         427 :         mpHorizontalScrollBar->SetPosSizePixel (
     948             :             Point(nLeft, nBottom),
     949         427 :             Size(nRight - nLeft - maScrBarWH.Width(), maScrBarWH.Height()));
     950             :     }
     951             : 
     952             :     // Vertical scrollbar.
     953         854 :     if (mpVerticalScrollBar.get()!=NULL
     954         427 :         && mpVerticalScrollBar->IsVisible())
     955             :     {
     956         427 :         nRight -= maScrBarWH.Width();
     957         427 :         mpVerticalScrollBar->SetPosSizePixel (
     958             :             Point(nRight,nTop),
     959         427 :             Size (maScrBarWH.Width(), nBottom-nTop));
     960             :     }
     961             : 
     962             :     // Filler in the lower right corner.
     963         427 :     if (mpScrollBarBox.get() != NULL)
     964             :     {
     965         854 :         if (mpHorizontalScrollBar.get()!=NULL
     966         427 :             && mpHorizontalScrollBar->IsVisible()
     967         427 :             && mpVerticalScrollBar.get()!=NULL
     968         854 :             && mpVerticalScrollBar->IsVisible())
     969             :         {
     970         427 :             mpScrollBarBox->Show();
     971         427 :             mpScrollBarBox->SetPosSizePixel(Point(nRight, nBottom), maScrBarWH);
     972             :         }
     973             :         else
     974           0 :             mpScrollBarBox->Hide();
     975             :     }
     976             : 
     977             :     // Place horizontal ruler below tab bar.
     978         427 :     if (mbHasRulers && mpContentWindow.get() != NULL)
     979             :     {
     980         230 :         if (mpHorizontalRuler.get() != NULL)
     981             :         {
     982         230 :             Size aRulerSize = mpHorizontalRuler->GetSizePixel();
     983         230 :             aRulerSize.Width() = nRight - nLeft;
     984         230 :             mpHorizontalRuler->SetPosSizePixel (
     985         230 :                 Point(nLeft,nTop), aRulerSize);
     986         230 :             if (mpVerticalRuler.get() != NULL)
     987         230 :                 mpHorizontalRuler->SetBorderPos(
     988         460 :                     mpVerticalRuler->GetSizePixel().Width()-1);
     989         230 :             nTop += aRulerSize.Height();
     990             :         }
     991         230 :         if (mpVerticalRuler.get() != NULL)
     992             :         {
     993         230 :             Size aRulerSize = mpVerticalRuler->GetSizePixel();
     994         230 :             aRulerSize.Height() = nBottom  - nTop;
     995         230 :             mpVerticalRuler->SetPosSizePixel (
     996         230 :                 Point (nLeft,nTop), aRulerSize);
     997         230 :             nLeft += aRulerSize.Width();
     998             :         }
     999             :     }
    1000             : 
    1001         427 :     rtl::Reference< SlideShow > xSlideShow( SlideShow::GetSlideShow( GetViewShellBase() ) );
    1002             : 
    1003             :     // The size of the window of the center pane is set differently from
    1004             :     // that of the windows in the docking windows.
    1005         427 :     bool bSlideShowActive = (xSlideShow.is() && xSlideShow->isRunning()) && !xSlideShow->isFullScreen() && xSlideShow->getAnimationMode() == ANIMATIONMODE_SHOW;
    1006         427 :     if ( !bSlideShowActive)
    1007             :     {
    1008             :         OSL_ASSERT (GetViewShell()!=NULL);
    1009             : 
    1010         427 :         if (mpContentWindow)
    1011         427 :             mpContentWindow->SetPosSizePixel(
    1012             :                 Point(nLeft,nTop),
    1013         427 :                 Size(nRight-nLeft,nBottom-nTop));
    1014             :     }
    1015             : 
    1016             :     // Windows in the center and rulers at the left and top side.
    1017             :     maAllWindowRectangle = Rectangle(
    1018             :         maViewPos,
    1019         854 :         Size(maViewSize.Width()-maScrBarWH.Width(),
    1020        1281 :             maViewSize.Height()-maScrBarWH.Height()));
    1021             : 
    1022         427 :     if (mpContentWindow.get() != NULL)
    1023         427 :         mpContentWindow->UpdateMapOrigin();
    1024             : 
    1025         427 :     UpdateScrollBars();
    1026             : 
    1027         427 :     mpImpl->mbArrangeActive = false;
    1028             : }
    1029             : 
    1030           0 : void ViewShell::SetUIUnit(FieldUnit eUnit)
    1031             : {
    1032             :     // Set unit at horizontal and vertical rulers.
    1033           0 :     if (mpHorizontalRuler.get() != NULL)
    1034           0 :         mpHorizontalRuler->SetUnit(eUnit);
    1035             : 
    1036           0 :     if (mpVerticalRuler.get() != NULL)
    1037           0 :         mpVerticalRuler->SetUnit(eUnit);
    1038           0 : }
    1039             : 
    1040             : /**
    1041             :  * set DefTab at horizontal rulers
    1042             :  */
    1043           0 : void ViewShell::SetDefTabHRuler( sal_uInt16 nDefTab )
    1044             : {
    1045           0 :     if (mpHorizontalRuler.get() != NULL)
    1046           0 :         mpHorizontalRuler->SetDefTabDist( nDefTab );
    1047           0 : }
    1048             : 
    1049             : /** Tell the FmFormShell that the view shell is closing.  Give it the
    1050             :     opportunity to prevent that.
    1051             : */
    1052         207 : bool ViewShell::PrepareClose (bool bUI)
    1053             : {
    1054         207 :     bool nResult = true;
    1055             : 
    1056         207 :     FmFormShell* pFormShell = GetViewShellBase().GetFormShellManager()->GetFormShell();
    1057         207 :     if (pFormShell != NULL)
    1058         207 :         nResult = pFormShell->PrepareClose (bUI);
    1059             : 
    1060         207 :     return nResult;
    1061             : }
    1062             : 
    1063         501 : void ViewShell::UpdatePreview (SdPage*, bool )
    1064             : {
    1065             :     // Do nothing.  After the actual preview has been removed,
    1066             :     // OutlineViewShell::UpdatePreview() is the place where something
    1067             :     // useful is still done.
    1068         501 : }
    1069             : 
    1070         266 : ::svl::IUndoManager* ViewShell::ImpGetUndoManager() const
    1071             : {
    1072         266 :     const ViewShell* pMainViewShell = GetViewShellBase().GetMainViewShell().get();
    1073             : 
    1074         266 :     if( pMainViewShell == 0 )
    1075           0 :         pMainViewShell = this;
    1076             : 
    1077         266 :     ::sd::View* pView = pMainViewShell->GetView();
    1078             : 
    1079             :     // check for text edit our outline view
    1080         266 :     if( pView )
    1081             :     {
    1082         266 :         if( pMainViewShell->GetShellType() == ViewShell::ST_OUTLINE )
    1083             :         {
    1084           0 :             OutlineView* pOlView = dynamic_cast< OutlineView* >( pView );
    1085           0 :             if( pOlView )
    1086             :             {
    1087           0 :                 ::Outliner& rOutl = pOlView->GetOutliner();
    1088           0 :                 return &rOutl.GetUndoManager();
    1089             :             }
    1090             :         }
    1091         266 :         else if( pView->IsTextEdit() )
    1092             :         {
    1093           0 :             SdrOutliner* pOL = pView->GetTextEditOutliner();
    1094           0 :             if( pOL )
    1095           0 :                 return &pOL->GetUndoManager();
    1096             :         }
    1097             :     }
    1098             : 
    1099         266 :     if( GetDocSh() )
    1100         266 :         return GetDocSh()->GetUndoManager();
    1101             : 
    1102           0 :     return NULL;
    1103             : }
    1104             : 
    1105           0 : void ViewShell::ImpGetUndoStrings(SfxItemSet &rSet) const
    1106             : {
    1107           0 :     ::svl::IUndoManager* pUndoManager = ImpGetUndoManager();
    1108           0 :     if(pUndoManager)
    1109             :     {
    1110           0 :         sal_uInt16 nCount(pUndoManager->GetUndoActionCount());
    1111           0 :         if(nCount)
    1112             :         {
    1113             :             // prepare list
    1114           0 :             std::vector<OUString> aStringList;
    1115             : 
    1116           0 :             for (sal_uInt16 a = 0; a < nCount; ++a)
    1117             :             {
    1118             :                 // generate one String in list per undo step
    1119           0 :                 aStringList.push_back( pUndoManager->GetUndoActionComment(a) );
    1120             :             }
    1121             : 
    1122             :             // set item
    1123           0 :             rSet.Put(SfxStringListItem(SID_GETUNDOSTRINGS, &aStringList));
    1124             :         }
    1125             :         else
    1126             :         {
    1127           0 :             rSet.DisableItem(SID_GETUNDOSTRINGS);
    1128             :         }
    1129             :     }
    1130           0 : }
    1131             : 
    1132           0 : void ViewShell::ImpGetRedoStrings(SfxItemSet &rSet) const
    1133             : {
    1134           0 :     ::svl::IUndoManager* pUndoManager = ImpGetUndoManager();
    1135           0 :     if(pUndoManager)
    1136             :     {
    1137           0 :         sal_uInt16 nCount(pUndoManager->GetRedoActionCount());
    1138           0 :         if(nCount)
    1139             :         {
    1140             :             // prepare list
    1141           0 :             ::std::vector< OUString > aStringList;
    1142             :             sal_uInt16 a;
    1143             : 
    1144           0 :             for( a = 0; a < nCount; a++)
    1145             :                 // generate one String in list per undo step
    1146           0 :                 aStringList.push_back( pUndoManager->GetRedoActionComment(a) );
    1147             : 
    1148             :             // set item
    1149           0 :             rSet.Put(SfxStringListItem(SID_GETREDOSTRINGS, &aStringList));
    1150             :         }
    1151             :         else
    1152             :         {
    1153           0 :             rSet.DisableItem(SID_GETREDOSTRINGS);
    1154             :         }
    1155             :     }
    1156           0 : }
    1157             : 
    1158           6 : void ViewShell::ImpSidUndo(bool, SfxRequest& rReq)
    1159             : {
    1160           6 :     ::svl::IUndoManager* pUndoManager = ImpGetUndoManager();
    1161           6 :     sal_uInt16 nNumber(1);
    1162           6 :     const SfxItemSet* pReqArgs = rReq.GetArgs();
    1163             : 
    1164           6 :     if(pReqArgs)
    1165             :     {
    1166           0 :         const SfxUInt16Item* pUIntItem = static_cast<const SfxUInt16Item*>(&pReqArgs->Get(SID_UNDO));
    1167           0 :         nNumber = pUIntItem->GetValue();
    1168             :     }
    1169             : 
    1170           6 :     if(nNumber && pUndoManager)
    1171             :     {
    1172           6 :         sal_uInt16 nCount(pUndoManager->GetUndoActionCount());
    1173           6 :         if(nCount >= nNumber)
    1174             :         {
    1175             :             try
    1176             :             {
    1177             :                 // when UndoStack is cleared by ModifyPageUndoAction
    1178             :                 // the nCount may have changed, so test GetUndoActionCount()
    1179          16 :                 while(nNumber-- && pUndoManager->GetUndoActionCount())
    1180           6 :                     pUndoManager->Undo();
    1181             :             }
    1182           2 :             catch( const Exception& )
    1183             :             {
    1184             :                 // no need to handle. By definition, the UndoManager handled this by clearing the
    1185             :                 // Undo/Redo stacks
    1186             :             }
    1187             :         }
    1188             : 
    1189             :         // refresh rulers, maybe UNDO was move of TAB marker in ruler
    1190           6 :         if (mbHasRulers)
    1191           3 :             Invalidate(SID_ATTR_TABSTOP);
    1192             :     }
    1193             : 
    1194             :     // This one is corresponding to the default handling
    1195             :     // of SID_UNDO in sfx2
    1196           6 :     GetViewFrame()->GetBindings().InvalidateAll(false);
    1197             : 
    1198           6 :     rReq.Done();
    1199           6 : }
    1200             : 
    1201           2 : void ViewShell::ImpSidRedo(bool, SfxRequest& rReq)
    1202             : {
    1203           2 :     ::svl::IUndoManager* pUndoManager = ImpGetUndoManager();
    1204           2 :     sal_uInt16 nNumber(1);
    1205           2 :     const SfxItemSet* pReqArgs = rReq.GetArgs();
    1206             : 
    1207           2 :     if(pReqArgs)
    1208             :     {
    1209           0 :         const SfxUInt16Item* pUIntItem = static_cast<const SfxUInt16Item*>(&pReqArgs->Get(SID_REDO));
    1210           0 :         nNumber = pUIntItem->GetValue();
    1211             :     }
    1212             : 
    1213           2 :     if(nNumber && pUndoManager)
    1214             :     {
    1215           2 :         sal_uInt16 nCount(pUndoManager->GetRedoActionCount());
    1216           2 :         if(nCount >= nNumber)
    1217             :         {
    1218             :             try
    1219             :             {
    1220             :                 // when UndoStack is cleared by ModifyPageRedoAction
    1221             :                 // the nCount may have changed, so test GetRedoActionCount()
    1222           4 :                 while(nNumber-- && pUndoManager->GetRedoActionCount())
    1223           2 :                     pUndoManager->Redo();
    1224             :             }
    1225           2 :             catch( const Exception& )
    1226             :             {
    1227             :                 // no need to handle. By definition, the UndoManager handled this by clearing the
    1228             :                 // Undo/Redo stacks
    1229             :             }
    1230             :         }
    1231             : 
    1232             :         // refresh rulers, maybe REDO was move of TAB marker in ruler
    1233           2 :         if (mbHasRulers)
    1234             :         {
    1235           1 :             Invalidate(SID_ATTR_TABSTOP);
    1236             :         }
    1237             :     }
    1238             : 
    1239             :     // This one is corresponding to the default handling
    1240             :     // of SID_UNDO in sfx2
    1241           2 :     GetViewFrame()->GetBindings().InvalidateAll(false);
    1242             : 
    1243           2 :     rReq.Done();
    1244           2 : }
    1245             : 
    1246           4 : void ViewShell::ExecReq( SfxRequest& rReq )
    1247             : {
    1248           4 :     sal_uInt16 nSlot = rReq.GetSlot();
    1249           4 :     switch( nSlot )
    1250             :     {
    1251             :         case SID_MAIL_SCROLLBODY_PAGEDOWN:
    1252             :         {
    1253           0 :             rtl::Reference<FuPoor> xFunc( GetCurrentFunction() );
    1254           0 :             if( xFunc.is() )
    1255           0 :                 ScrollLines( 0, -1 );
    1256             : 
    1257           0 :             rReq.Done();
    1258             :         }
    1259           0 :         break;
    1260             : 
    1261             :         case SID_OUTPUT_QUALITY_COLOR:
    1262             :         case SID_OUTPUT_QUALITY_GRAYSCALE:
    1263             :         case SID_OUTPUT_QUALITY_BLACKWHITE:
    1264             :         case SID_OUTPUT_QUALITY_CONTRAST:
    1265             :         {
    1266           0 :             DrawModeFlags nMode = OUTPUT_DRAWMODE_COLOR;
    1267             : 
    1268           0 :             switch( nSlot )
    1269             :             {
    1270           0 :                 case SID_OUTPUT_QUALITY_COLOR: nMode = OUTPUT_DRAWMODE_COLOR; break;
    1271           0 :                 case SID_OUTPUT_QUALITY_GRAYSCALE: nMode = OUTPUT_DRAWMODE_GRAYSCALE; break;
    1272           0 :                 case SID_OUTPUT_QUALITY_BLACKWHITE: nMode = OUTPUT_DRAWMODE_BLACKWHITE; break;
    1273           0 :                 case SID_OUTPUT_QUALITY_CONTRAST: nMode = OUTPUT_DRAWMODE_CONTRAST; break;
    1274             :             }
    1275             : 
    1276           0 :             GetActiveWindow()->SetDrawMode( nMode );
    1277           0 :             mpFrameView->SetDrawMode( nMode );
    1278             : 
    1279           0 :             GetActiveWindow()->Invalidate();
    1280             : 
    1281           0 :             Invalidate();
    1282           0 :             rReq.Done();
    1283           0 :             break;
    1284             :         }
    1285             :     }
    1286           4 : }
    1287             : 
    1288             : /** This default implementation returns only an empty reference.  See derived
    1289             :     classes for more interesting examples.
    1290             : */
    1291             : ::com::sun::star::uno::Reference<
    1292             :     ::com::sun::star::accessibility::XAccessible>
    1293           0 : ViewShell::CreateAccessibleDocumentView (::sd::Window* )
    1294             : {
    1295             :     OSL_FAIL("ViewShell::CreateAccessibleDocumentView should not be called!, perhaps Meyers, 3rd edition, Item 9:\n");
    1296             : 
    1297             :     return ::com::sun::star::uno::Reference<
    1298           0 :         ::com::sun::star::accessibility::XAccessible> ();
    1299             : }
    1300             : 
    1301         522 : ::sd::WindowUpdater* ViewShell::GetWindowUpdater() const
    1302             : {
    1303         522 :     return mpWindowUpdater.get();
    1304             : }
    1305             : 
    1306       76611 : ViewShellBase& ViewShell::GetViewShellBase() const
    1307             : {
    1308       76611 :     return *static_cast<ViewShellBase*>(GetViewShell());
    1309             : }
    1310             : 
    1311        2463 : ViewShell::ShellType ViewShell::GetShellType() const
    1312             : {
    1313        2463 :     return meShellType;
    1314             : }
    1315             : 
    1316       20856 : DrawDocShell* ViewShell::GetDocSh() const
    1317             : {
    1318       20856 :     return GetViewShellBase().GetDocShell();
    1319             : }
    1320             : 
    1321       32004 : SdDrawDocument* ViewShell::GetDoc() const
    1322             : {
    1323       32004 :     return GetViewShellBase().GetDocument();
    1324             : }
    1325             : 
    1326           0 : ErrCode ViewShell::DoVerb (long )
    1327             : {
    1328           0 :     return ERRCODE_NONE;
    1329             : }
    1330             : 
    1331         206 : void ViewShell::SetCurrentFunction( const rtl::Reference<FuPoor>& xFunction)
    1332             : {
    1333         206 :     if( mxCurrentFunction.is() && (mxOldFunction != mxCurrentFunction) )
    1334           4 :         mxCurrentFunction->Dispose();
    1335         206 :     rtl::Reference<FuPoor> xTemp( mxCurrentFunction );
    1336         206 :     mxCurrentFunction = xFunction;
    1337         206 : }
    1338             : 
    1339         207 : void ViewShell::SetOldFunction(const rtl::Reference<FuPoor>& xFunction)
    1340             : {
    1341         207 :     if( mxOldFunction.is() && (xFunction != mxOldFunction) && (mxCurrentFunction != mxOldFunction) )
    1342           1 :         mxOldFunction->Dispose();
    1343             : 
    1344         207 :     rtl::Reference<FuPoor> xTemp( mxOldFunction );
    1345         207 :     mxOldFunction = xFunction;
    1346         207 : }
    1347             : 
    1348             : /** this method deactivates the current function. If an old function is
    1349             :     saved, this will become activated and current function.
    1350             : */
    1351           0 : void ViewShell::Cancel()
    1352             : {
    1353           0 :     if(mxCurrentFunction.is() && (mxCurrentFunction != mxOldFunction ))
    1354             :     {
    1355           0 :         rtl::Reference<FuPoor> xTemp( mxCurrentFunction );
    1356           0 :         mxCurrentFunction.clear();
    1357           0 :         xTemp->Deactivate();
    1358           0 :         xTemp->Dispose();
    1359             :     }
    1360             : 
    1361           0 :     if(mxOldFunction.is())
    1362             :     {
    1363           0 :         mxCurrentFunction = mxOldFunction;
    1364           0 :         mxCurrentFunction->Activate();
    1365             :     }
    1366           0 : }
    1367             : 
    1368         127 : void ViewShell::DeactivateCurrentFunction( bool bPermanent /* == false */ )
    1369             : {
    1370         127 :     if( mxCurrentFunction.is() )
    1371             :     {
    1372         127 :         if(bPermanent && (mxOldFunction == mxCurrentFunction))
    1373           0 :             mxOldFunction.clear();
    1374             : 
    1375         127 :         mxCurrentFunction->Deactivate();
    1376         127 :         if( mxCurrentFunction != mxOldFunction )
    1377           0 :             mxCurrentFunction->Dispose();
    1378             : 
    1379         127 :         rtl::Reference<FuPoor> xTemp( mxCurrentFunction );
    1380         127 :         mxCurrentFunction.clear();
    1381             :     }
    1382         127 : }
    1383             : 
    1384         197 : void ViewShell::DisposeFunctions()
    1385             : {
    1386         197 :     if(mxCurrentFunction.is())
    1387             :     {
    1388          71 :         rtl::Reference<FuPoor> xTemp( mxCurrentFunction );
    1389          71 :         mxCurrentFunction.clear();
    1390          71 :         xTemp->Deactivate();
    1391          71 :         xTemp->Dispose();
    1392             :     }
    1393             : 
    1394         197 :     if(mxOldFunction.is())
    1395             :     {
    1396         197 :         rtl::Reference<FuPoor> xTemp( mxOldFunction );
    1397         197 :         mxOldFunction->Dispose();
    1398         197 :         mxOldFunction.clear();
    1399             :     }
    1400         197 : }
    1401             : 
    1402        3375 : bool ViewShell::IsMainViewShell() const
    1403             : {
    1404        3375 :     return mpImpl->mbIsMainViewShell;
    1405             : }
    1406             : 
    1407         394 : void ViewShell::SetIsMainViewShell (bool bIsMainViewShell)
    1408             : {
    1409         394 :     if (bIsMainViewShell != mpImpl->mbIsMainViewShell)
    1410             :     {
    1411         266 :         mpImpl->mbIsMainViewShell = bIsMainViewShell;
    1412         266 :         if (bIsMainViewShell)
    1413         133 :             GetDocSh()->Connect (this);
    1414             :         else
    1415         133 :             GetDocSh()->Disconnect (this);
    1416             :     }
    1417         394 : }
    1418             : 
    1419        1051 : void ViewShell::PrePaint()
    1420             : {
    1421        1051 : }
    1422             : 
    1423           0 : void ViewShell::Paint (const Rectangle&, ::sd::Window* )
    1424             : {
    1425           0 : }
    1426             : 
    1427           0 : void ViewShell::ShowUIControls (bool bVisible)
    1428             : {
    1429           0 :     mpImpl->mbIsShowingUIControls = bVisible;
    1430             : 
    1431           0 :     if (mbHasRulers)
    1432             :     {
    1433           0 :         if (mpHorizontalRuler.get() != NULL)
    1434           0 :             mpHorizontalRuler->Show( bVisible );
    1435             : 
    1436           0 :         if (mpVerticalRuler.get() != NULL)
    1437           0 :             mpVerticalRuler->Show( bVisible );
    1438             :     }
    1439             : 
    1440           0 :     if (mpVerticalScrollBar.get() != NULL)
    1441           0 :         mpVerticalScrollBar->Show( bVisible );
    1442             : 
    1443           0 :     if (mpHorizontalScrollBar.get() != NULL)
    1444           0 :         mpHorizontalScrollBar->Show( bVisible );
    1445             : 
    1446           0 :     if (mpScrollBarBox.get() != NULL)
    1447           0 :         mpScrollBarBox->Show(bVisible);
    1448             : 
    1449           0 :     if (mpContentWindow.get() != NULL)
    1450           0 :         mpContentWindow->Show( bVisible );
    1451           0 : }
    1452             : 
    1453          68 : bool ViewShell::RelocateToParentWindow (vcl::Window* pParentWindow)
    1454             : {
    1455          68 :     mpParentWindow = pParentWindow;
    1456             : 
    1457          68 :     if (mpParentWindow)
    1458          68 :         mpParentWindow->SetBackground (Wallpaper());
    1459             : 
    1460          68 :     if (mpContentWindow.get() != NULL)
    1461          68 :         mpContentWindow->SetParent(pParentWindow);
    1462             : 
    1463          68 :     if (mpHorizontalScrollBar.get() != NULL)
    1464          68 :         mpHorizontalScrollBar->SetParent(mpParentWindow);
    1465          68 :     if (mpVerticalScrollBar.get() != NULL)
    1466          68 :         mpVerticalScrollBar->SetParent(mpParentWindow);
    1467          68 :     if (mpScrollBarBox.get() != NULL)
    1468          68 :         mpScrollBarBox->SetParent(mpParentWindow);
    1469             : 
    1470          68 :     return true;
    1471             : }
    1472             : 
    1473           0 : void ViewShell::SwitchViewFireFocus(::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > xAcc )
    1474             : {
    1475           0 :     if (xAcc.get())
    1476             :     {
    1477           0 :         ::accessibility::AccessibleDocumentViewBase* pBase = static_cast< ::accessibility::AccessibleDocumentViewBase* >(xAcc.get());
    1478           0 :         if (pBase)
    1479           0 :             pBase->SwitchViewActivated();
    1480             :     }
    1481           0 : }
    1482           0 : void ViewShell::SwitchActiveViewFireFocus()
    1483             : {
    1484           0 :     if (mpContentWindow)
    1485             :     {
    1486           0 :         SwitchViewFireFocus(mpContentWindow->GetAccessible(false));
    1487             :     }
    1488           0 : }
    1489             : // move these two methods from DrawViewShell.
    1490           0 : void ViewShell::fireSwitchCurrentPage(sal_Int32 pageIndex)
    1491             : {
    1492           0 :     GetViewShellBase().GetDrawController().fireSwitchCurrentPage(pageIndex);
    1493           0 : }
    1494           0 : void ViewShell::NotifyAccUpdate( )
    1495             : {
    1496           0 :     GetViewShellBase().GetDrawController().NotifyAccUpdate();
    1497           0 : }
    1498             : 
    1499             : } // end of namespace sd
    1500             : 
    1501             : //===== ViewShellObjectBarFactory =============================================
    1502             : 
    1503             : namespace {
    1504             : 
    1505         197 : ViewShellObjectBarFactory::ViewShellObjectBarFactory (
    1506             :     ::sd::ViewShell& rViewShell)
    1507         197 :     : mrViewShell (rViewShell)
    1508             : {
    1509         197 : }
    1510             : 
    1511         591 : ViewShellObjectBarFactory::~ViewShellObjectBarFactory()
    1512             : {
    1513         591 :     for (ShellCache::iterator aI(maShellCache.begin());
    1514         394 :          aI!=maShellCache.end();
    1515             :          ++aI)
    1516             :     {
    1517           0 :         delete aI->second;
    1518             :     }
    1519         394 : }
    1520             : 
    1521           3 : SfxShell* ViewShellObjectBarFactory::CreateShell (
    1522             :     ::sd::ShellId nId,
    1523             :     vcl::Window*,
    1524             :     ::sd::FrameView* )
    1525             : {
    1526           3 :     SfxShell* pShell = NULL;
    1527             : 
    1528           3 :     ShellCache::iterator aI (maShellCache.find(nId));
    1529           3 :     if (aI == maShellCache.end() || aI->second==NULL)
    1530             :     {
    1531           3 :         ::sd::View* pView = mrViewShell.GetView();
    1532           3 :         switch (nId)
    1533             :         {
    1534             :             case RID_BEZIER_TOOLBOX:
    1535           0 :                 pShell = new ::sd::BezierObjectBar(&mrViewShell, pView);
    1536           0 :                 break;
    1537             : 
    1538             :             case RID_DRAW_TEXT_TOOLBOX:
    1539             :                 pShell = new ::sd::TextObjectBar(
    1540           3 :                     &mrViewShell, mrViewShell.GetDoc()->GetPool(), pView);
    1541           3 :                 break;
    1542             : 
    1543             :             case RID_DRAW_GRAF_TOOLBOX:
    1544           0 :                 pShell = new ::sd::GraphicObjectBar(&mrViewShell, pView);
    1545           0 :                 break;
    1546             : 
    1547             :             case RID_DRAW_MEDIA_TOOLBOX:
    1548           0 :                 pShell = new ::sd::MediaObjectBar(&mrViewShell, pView);
    1549           0 :                 break;
    1550             : 
    1551             :             case RID_DRAW_TABLE_TOOLBOX:
    1552           0 :                 pShell = ::sd::ui::table::CreateTableObjectBar( mrViewShell, pView );
    1553           0 :                 break;
    1554             : 
    1555             :             case RID_SVX_EXTRUSION_BAR:
    1556             :                 pShell = new svx::ExtrusionBar(
    1557           0 :                     &mrViewShell.GetViewShellBase());
    1558           0 :                 break;
    1559             : 
    1560             :             case RID_SVX_FONTWORK_BAR:
    1561             :                 pShell = new svx::FontworkBar(
    1562           0 :                     &mrViewShell.GetViewShellBase());
    1563           0 :                 break;
    1564             : 
    1565             :             default:
    1566           0 :                 pShell = NULL;
    1567           0 :                 break;
    1568             :         }
    1569             :     }
    1570             :     else
    1571           0 :         pShell = aI->second;
    1572             : 
    1573           3 :     return pShell;
    1574             : }
    1575             : 
    1576           3 : void ViewShellObjectBarFactory::ReleaseShell (SfxShell* pShell)
    1577             : {
    1578           3 :     if (pShell != NULL)
    1579           3 :         delete pShell;
    1580           3 : }
    1581             : 
    1582          66 : } // end of anonymous namespace
    1583             : 
    1584             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11