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

Generated by: LCOV version 1.10