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

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

Generated by: LCOV version 1.10