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

Generated by: LCOV version 1.10