LCOV - code coverage report
Current view: top level - libreoffice/sd/source/ui/view - drviewsa.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 340 0.3 %
Date: 2012-12-27 Functions: 2 21 9.5 %
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 "DrawViewShell.hxx"
      22             : #include <cppuhelper/implbase1.hxx>
      23             : #include <comphelper/processfactory.hxx>
      24             : #ifndef _SVX_SIZEITEM
      25             : #include <editeng/sizeitem.hxx>
      26             : #endif
      27             : #include <svx/svdlayer.hxx>
      28             : #ifndef _SVX_ZOOMITEM
      29             : #include <sfx2/zoomitem.hxx>
      30             : #endif
      31             : #include <svx/svdpagv.hxx>
      32             : #include <svl/ptitem.hxx>
      33             : #include <svl/stritem.hxx>
      34             : #include <sfx2/request.hxx>
      35             : #include <sfx2/dispatch.hxx>
      36             : #include <svx/svdopath.hxx>
      37             : #include <sfx2/docfile.hxx>
      38             : #include <svx/zoomslideritem.hxx>
      39             : #include <svl/eitem.hxx>
      40             : 
      41             : #include <svx/dialogs.hrc>
      42             : #include <svx/extrusionbar.hxx>
      43             : #include <svx/fontworkbar.hxx>
      44             : #include <svx/clipfmtitem.hxx>
      45             : 
      46             : 
      47             : #include <sfx2/viewfrm.hxx>
      48             : #include <svx/fmshell.hxx>
      49             : #include <svtools/cliplistener.hxx>
      50             : #include <svx/float3d.hxx>
      51             : #include "helpids.h"
      52             : 
      53             : #include "view/viewoverlaymanager.hxx"
      54             : #include "app.hrc"
      55             : #include "strings.hrc"
      56             : #include "res_bmp.hrc"
      57             : #include "sdpage.hxx"
      58             : #include "FrameView.hxx"
      59             : #include "drawdoc.hxx"
      60             : #include "sdresid.hxx"
      61             : #include "DrawDocShell.hxx"
      62             : #include "Window.hxx"
      63             : #include "fupoor.hxx"
      64             : #include "fusel.hxx"
      65             : #include "drawview.hxx"
      66             : #include "SdUnoDrawView.hxx"
      67             : #include "ViewShellBase.hxx"
      68             : #include "slideshow.hxx"
      69             : #include "ToolBarManager.hxx"
      70             : #include "annotationmanager.hxx"
      71             : 
      72             : using namespace ::rtl;
      73             : using namespace ::com::sun::star;
      74             : using namespace ::com::sun::star::uno;
      75             : 
      76             : namespace sd {
      77             : 
      78             : sal_Bool DrawViewShell::mbPipette = sal_False;
      79             : 
      80             : // ------------------------
      81             : // - ScannerEventListener -
      82             : // ------------------------
      83             : 
      84             : class ScannerEventListener : public ::cppu::WeakImplHelper1< ::com::sun::star::lang::XEventListener >
      85             : {
      86             : private:
      87             : 
      88             :     DrawViewShell*      mpParent;
      89             : 
      90             : public:
      91             : 
      92           0 :                             ScannerEventListener( DrawViewShell* pParent ) : mpParent( pParent )  {};
      93             :                             ~ScannerEventListener();
      94             : 
      95             :     // XEventListener
      96             :     virtual void SAL_CALL   disposing( const ::com::sun::star::lang::EventObject& rEventObject ) throw (::com::sun::star::uno::RuntimeException);
      97             : 
      98           0 :     void                    ParentDestroyed() { mpParent = NULL; }
      99             : };
     100             : 
     101             : // -----------------------------------------------------------------------------
     102             : 
     103           0 : ScannerEventListener::~ScannerEventListener()
     104             : {
     105           0 : }
     106             : 
     107             : // -----------------------------------------------------------------------------
     108             : 
     109           0 : void SAL_CALL ScannerEventListener::disposing( const ::com::sun::star::lang::EventObject& rEventObject ) throw (::com::sun::star::uno::RuntimeException)
     110             : {
     111           0 :     if( mpParent )
     112           0 :         mpParent->ScannerEvent( rEventObject );
     113           0 : }
     114             : 
     115             : /*************************************************************************
     116             : |*
     117             : |* Standard-Konstruktor
     118             : |*
     119             : \************************************************************************/
     120             : 
     121           0 : DrawViewShell::DrawViewShell( SfxViewFrame* pFrame, ViewShellBase& rViewShellBase, ::Window* pParentWindow, PageKind ePageKind, FrameView* pFrameViewArgument )
     122             : : ViewShell (pFrame, pParentWindow, rViewShellBase)
     123             : , maTabControl(this, pParentWindow)
     124             : , mbIsLayerModeActive(false)
     125           0 : , mbIsInSwitchPage(false)
     126             : {
     127           0 :     if (pFrameViewArgument != NULL)
     128           0 :         mpFrameView = pFrameViewArgument;
     129             :     else
     130           0 :         mpFrameView = new FrameView(GetDoc());
     131           0 :     Construct(GetDocSh(), ePageKind);
     132           0 :     doShow();
     133           0 : }
     134             : 
     135             : /*************************************************************************
     136             : |*
     137             : |* Destruktor
     138             : |*
     139             : \************************************************************************/
     140             : 
     141           0 : DrawViewShell::~DrawViewShell()
     142             : {
     143           0 :     mpAnnotationManager.reset();
     144           0 :     mpViewOverlayManager.reset();
     145             : 
     146             :     OSL_ASSERT (GetViewShell()!=NULL);
     147             : 
     148           0 :     if( mxScannerListener.is() )
     149           0 :         static_cast< ScannerEventListener* >( mxScannerListener.get() )->ParentDestroyed();
     150             : 
     151             :     // Remove references to items within Svx3DWin
     152             :     // (maybe do a listening sometime in Svx3DWin)
     153           0 :     sal_uInt16 nId = Svx3DChildWindow::GetChildWindowId();
     154           0 :     SfxChildWindow* pWindow = GetViewFrame() ? GetViewFrame()->GetChildWindow(nId) : NULL;
     155           0 :     if(pWindow)
     156             :     {
     157           0 :         Svx3DWin* p3DWin = static_cast< Svx3DWin* > (pWindow->GetWindow());
     158           0 :         if(p3DWin)
     159           0 :             p3DWin->DocumentReload();
     160             :     }
     161             : 
     162           0 :     EndListening (*GetDoc());
     163           0 :     EndListening (*GetDocSh());
     164             : 
     165           0 :     if( SlideShow::IsRunning(*this) )
     166           0 :         StopSlideShow(false);
     167             : 
     168           0 :     DisposeFunctions();
     169             : 
     170             :     SdPage* pPage;
     171           0 :     sal_uInt16 aPageCnt = GetDoc()->GetSdPageCount(mePageKind);
     172             : 
     173           0 :     for (sal_uInt16 i = 0; i < aPageCnt; i++)
     174             :     {
     175           0 :         pPage = GetDoc()->GetSdPage(i, mePageKind);
     176             : 
     177           0 :         if (pPage == mpActualPage)
     178             :         {
     179           0 :             GetDoc()->SetSelected(pPage, sal_True);
     180             :         }
     181             :         else
     182             :         {
     183           0 :             GetDoc()->SetSelected(pPage, sal_False);
     184             :         }
     185             :     }
     186             : 
     187           0 :     if ( mpClipEvtLstnr )
     188             :     {
     189           0 :         mpClipEvtLstnr->AddRemoveListener( GetActiveWindow(), sal_False );
     190           0 :         mpClipEvtLstnr->ClearCallbackLink();        // prevent callback if another thread is waiting
     191           0 :         mpClipEvtLstnr->release();
     192             :     }
     193             : 
     194           0 :     delete mpDrawView;
     195             :     // Set mpView to NULL so that the destructor of the ViewShell base class
     196             :     // does not access it.
     197           0 :     mpView = mpDrawView = NULL;
     198             : 
     199           0 :     mpFrameView->Disconnect();
     200           0 :     delete [] mpSlotArray;
     201           0 : }
     202             : 
     203             : /*************************************************************************
     204             : |*
     205             : |* gemeinsamer Initialisierungsanteil der beiden Konstruktoren
     206             : |*
     207             : \************************************************************************/
     208             : 
     209           0 : void DrawViewShell::Construct(DrawDocShell* pDocSh, PageKind eInitialPageKind)
     210             : {
     211           0 :     mpActualPage = 0;
     212           0 :     mbMousePosFreezed = sal_False;
     213           0 :     mbReadOnly = GetDocSh()->IsReadOnly();
     214           0 :     mpSlotArray = 0;
     215           0 :     mpClipEvtLstnr = 0;
     216           0 :     mbPastePossible = sal_False;
     217           0 :     mbIsLayerModeActive = false;
     218             : 
     219           0 :     mpFrameView->Connect();
     220             : 
     221             :     OSL_ASSERT (GetViewShell()!=NULL);
     222             : 
     223             :     // Array fuer Slot-/ImageMapping:
     224             :     // Gerader Eintrag: Haupt-/ToolboxSlot
     225             :     // Ungerader Eintrag: gemappter Slot
     226             :     // Achtung: Anpassen von GetIdBySubId() !!!
     227             :     // Reihenfolge (insbesondere Zoom) darf nicht geaendert werden !!!
     228           0 :     mpSlotArray = new sal_uInt16[ SLOTARRAY_COUNT ];
     229           0 :     mpSlotArray[ 0 ]  = SID_OBJECT_CHOOSE_MODE;
     230           0 :     mpSlotArray[ 1 ]  = SID_OBJECT_ROTATE;
     231           0 :     mpSlotArray[ 2 ]  = SID_OBJECT_ALIGN;
     232           0 :     mpSlotArray[ 3 ]  = SID_OBJECT_ALIGN_LEFT;
     233           0 :     mpSlotArray[ 4 ]  = SID_ZOOM_TOOLBOX;
     234           0 :     mpSlotArray[ 5 ]  = SID_ZOOM_TOOLBOX;
     235           0 :     mpSlotArray[ 6 ]  = SID_DRAWTBX_TEXT;
     236           0 :     mpSlotArray[ 7 ]  = SID_ATTR_CHAR;
     237           0 :     mpSlotArray[ 8 ]  = SID_DRAWTBX_RECTANGLES;
     238           0 :     mpSlotArray[ 9 ]  = SID_DRAW_RECT;
     239           0 :     mpSlotArray[ 10 ] = SID_DRAWTBX_ELLIPSES;
     240           0 :     mpSlotArray[ 11 ] = SID_DRAW_ELLIPSE;
     241           0 :     mpSlotArray[ 12 ] = SID_DRAWTBX_LINES;
     242           0 :     mpSlotArray[ 13 ] = SID_DRAW_FREELINE_NOFILL;
     243           0 :     mpSlotArray[ 14 ] = SID_DRAWTBX_3D_OBJECTS;
     244           0 :     mpSlotArray[ 15 ] = SID_3D_CUBE;
     245           0 :     mpSlotArray[ 16 ] = SID_DRAWTBX_INSERT;
     246           0 :     mpSlotArray[ 17 ] = SID_INSERT_DIAGRAM;
     247           0 :     mpSlotArray[ 18 ] = SID_POSITION;
     248           0 :     mpSlotArray[ 19 ] = SID_FRAME_TO_TOP;
     249           0 :     mpSlotArray[ 20 ] = SID_DRAWTBX_CONNECTORS;
     250           0 :     mpSlotArray[ 21 ] = SID_TOOL_CONNECTOR;
     251           0 :     mpSlotArray[ 22 ] = SID_DRAWTBX_ARROWS;
     252           0 :     mpSlotArray[ 23 ] = SID_LINE_ARROW_END;
     253             : 
     254           0 :     SetPool( &GetDoc()->GetPool() );
     255             : 
     256           0 :     GetDoc()->CreateFirstPages();
     257             : 
     258           0 :     mpDrawView = new DrawView(pDocSh, GetActiveWindow(), this);
     259           0 :     mpView = mpDrawView;             // Pointer der Basisklasse ViewShell
     260           0 :     mpDrawView->SetSwapAsynchron(sal_True); // Asynchrones Laden von Graphiken
     261             : 
     262             :     // We do not read the page kind from the frame view anymore so we have
     263             :     // to set it in order to resync frame view and this view.
     264           0 :     mpFrameView->SetPageKind(eInitialPageKind);
     265           0 :     mePageKind = eInitialPageKind;
     266           0 :     meEditMode = EM_PAGE;
     267           0 :     DocumentType eDocType = GetDoc()->GetDocumentType(); // RTTI fasst hier noch nicht
     268           0 :     switch (mePageKind)
     269             :     {
     270             :         case PK_STANDARD:
     271           0 :             meShellType = ST_IMPRESS;
     272           0 :             break;
     273             : 
     274             :         case PK_NOTES:
     275           0 :             meShellType = ST_NOTES;
     276           0 :             break;
     277             : 
     278             :         case PK_HANDOUT:
     279           0 :             meShellType = ST_HANDOUT;
     280           0 :             break;
     281             :     }
     282             : 
     283           0 :     Size aPageSize( GetDoc()->GetSdPage(0, mePageKind)->GetSize() );
     284           0 :     Point aPageOrg( aPageSize.Width(), aPageSize.Height() / 2);
     285           0 :     Size aSize(aPageSize.Width() * 3, aPageSize.Height() * 2);
     286           0 :     InitWindows(aPageOrg, aSize, Point(-1, -1));
     287             : 
     288           0 :     Point aVisAreaPos;
     289             : 
     290           0 :     if ( pDocSh->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
     291             :     {
     292           0 :         aVisAreaPos = pDocSh->GetVisArea(ASPECT_CONTENT).TopLeft();
     293             :     }
     294             : 
     295           0 :     mpDrawView->SetWorkArea(Rectangle(Point() - aVisAreaPos - aPageOrg, aSize));
     296             : 
     297             :     // Objekte koennen max. so gross wie die ViewSize werden
     298           0 :     GetDoc()->SetMaxObjSize(aSize);
     299             : 
     300             :     // Split-Handler fuer TabControls
     301           0 :     maTabControl.SetSplitHdl( LINK( this, DrawViewShell, TabSplitHdl ) );
     302             : 
     303             :     // Damit der richtige EditMode von der FrameView komplett eingestellt
     304             :     // werden kann, wird hier ein aktuell anderer gewaehlt (kleiner Trick)
     305           0 :     if (mpFrameView->GetViewShEditMode(mePageKind) == EM_PAGE)
     306             :     {
     307           0 :         meEditMode = EM_MASTERPAGE;
     308             :     }
     309             :     else
     310             :     {
     311           0 :         meEditMode = EM_PAGE;
     312             :     }
     313             : 
     314             :     // Einstellungen der FrameView uebernehmen
     315           0 :     ReadFrameViewData(mpFrameView);
     316             : 
     317           0 :     if( eDocType == DOCUMENT_TYPE_DRAW )
     318             :     {
     319           0 :         SetHelpId( SD_IF_SDGRAPHICVIEWSHELL );
     320           0 :         GetActiveWindow()->SetHelpId( HID_SDGRAPHICVIEWSHELL );
     321           0 :         GetActiveWindow()->SetUniqueId( HID_SDGRAPHICVIEWSHELL );
     322             :     }
     323             :     else
     324             :     {
     325           0 :         if (mePageKind == PK_NOTES)
     326             :         {
     327           0 :             SetHelpId( SID_NOTESMODE );
     328           0 :             GetActiveWindow()->SetHelpId( CMD_SID_NOTESMODE );
     329           0 :             GetActiveWindow()->SetUniqueId( CMD_SID_NOTESMODE );
     330             : 
     331             :             // AutoLayouts muessen erzeugt sein
     332           0 :             GetDoc()->StopWorkStartupDelay();
     333             :         }
     334           0 :         else if (mePageKind == PK_HANDOUT)
     335             :         {
     336           0 :             SetHelpId( SID_HANDOUTMODE );
     337           0 :             GetActiveWindow()->SetHelpId( CMD_SID_HANDOUTMODE );
     338           0 :             GetActiveWindow()->SetUniqueId( CMD_SID_HANDOUTMODE );
     339             : 
     340             :             // AutoLayouts muessen erzeugt sein
     341           0 :             GetDoc()->StopWorkStartupDelay();
     342             :         }
     343             :         else
     344             :         {
     345           0 :             SetHelpId( SD_IF_SDDRAWVIEWSHELL );
     346           0 :             GetActiveWindow()->SetHelpId( HID_SDDRAWVIEWSHELL );
     347           0 :             GetActiveWindow()->SetUniqueId( HID_SDDRAWVIEWSHELL );
     348             :         }
     349             :     }
     350             : 
     351             :     // Selektionsfunktion starten
     352           0 :     SfxRequest aReq(SID_OBJECT_SELECT, 0, GetDoc()->GetItemPool());
     353           0 :     FuPermanent(aReq);
     354           0 :     mpDrawView->SetFrameDragSingles(sal_True);
     355             : 
     356           0 :     if (pDocSh->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED)
     357             :     {
     358           0 :         mbZoomOnPage = sal_False;
     359             :     }
     360             :     else
     361             :     {
     362           0 :         mbZoomOnPage = sal_True;
     363             :     }
     364             : 
     365           0 :     mbIsRulerDrag = sal_False;
     366             : 
     367           0 :     rtl::OUString aName( "DrawViewShell" );
     368           0 :     SetName (aName);
     369             : 
     370           0 :     mnLockCount = 0UL;
     371             : 
     372           0 :     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() );
     373             : 
     374           0 :     if( xMgr.is() )
     375             :     {
     376             :         mxScannerManager = ::com::sun::star::uno::Reference< ::com::sun::star::scanner::XScannerManager2 >(
     377           0 :                            xMgr->createInstance( "com.sun.star.scanner.ScannerManager" ),
     378           0 :                            ::com::sun::star::uno::UNO_QUERY );
     379             : 
     380           0 :         if( mxScannerManager.is() )
     381             :         {
     382             :             mxScannerListener = ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >(
     383           0 :                                 static_cast< ::cppu::OWeakObject* >( new ScannerEventListener( this ) ),
     384           0 :                                 ::com::sun::star::uno::UNO_QUERY );
     385             :         }
     386             :     }
     387             : 
     388           0 :     mpAnnotationManager.reset( new AnnotationManager( GetViewShellBase() ) );
     389           0 :     mpViewOverlayManager.reset( new ViewOverlayManager( GetViewShellBase() ) );
     390           0 : }
     391             : 
     392             : 
     393             : 
     394             : 
     395           0 : void DrawViewShell::Init (bool bIsMainViewShell)
     396             : {
     397           0 :     ViewShell::Init(bIsMainViewShell);
     398             : 
     399           0 :     StartListening (*GetDocSh());
     400           0 : }
     401             : 
     402             : 
     403             : 
     404             : 
     405           0 : void DrawViewShell::Shutdown (void)
     406             : {
     407           0 :     ViewShell::Shutdown();
     408             : 
     409           0 :     if(SlideShow::IsRunning( GetViewShellBase() ) )
     410             :     {
     411             :         // Turn off effects.
     412           0 :         GetDrawView()->SetAnimationMode(SDR_ANIMATION_DISABLE);
     413             :     }
     414           0 : }
     415             : 
     416             : 
     417             : 
     418             : 
     419           0 : css::uno::Reference<css::drawing::XDrawSubController> DrawViewShell::CreateSubController (void)
     420             : {
     421           0 :     css::uno::Reference<css::drawing::XDrawSubController> xSubController;
     422             : 
     423           0 :     if (IsMainViewShell())
     424             :     {
     425             :         // Create uno sub controller for the main view shell.
     426             :         xSubController = css::uno::Reference<css::drawing::XDrawSubController>(
     427             :             new SdUnoDrawView (
     428             :                 *this,
     429           0 :                 *GetView()));
     430             :     }
     431             : 
     432           0 :     return xSubController;
     433             : }
     434             : 
     435             : 
     436             : 
     437             : 
     438           0 : bool DrawViewShell::RelocateToParentWindow (::Window* pParentWindow)
     439             : {
     440             :     // DrawViewShells can not be relocated to a new parent window at the
     441             :     // moment, so return <FALSE/> except when the given parent window is the
     442             :     // parent window that is already in use.
     443           0 :     return pParentWindow==GetParentWindow();
     444             : }
     445             : 
     446             : 
     447             : 
     448             : 
     449             : /*************************************************************************
     450             : |*
     451             : |* pruefe ob linienzuege gezeichnet werden muessen
     452             : |*
     453             : \************************************************************************/
     454             : 
     455             : /*
     456             :     linienzuege werden ueber makros als folge von
     457             :         MoveTo (x, y)
     458             :         LineTo (x, y)   [oder BezierTo (x, y)]
     459             :         LineTo (x, y)
     460             :             :
     461             :     dargestellt. einen endbefehl fuer die linienzuege
     462             :     gibt es nicht, also muessen alle befehle in den
     463             :     requests nach LineTo (BezierTo) abgetestet und die
     464             :     punktparameter gesammelt werden.
     465             :     der erste nicht-LineTo fuehrt dann dazu, dass aus
     466             :     den gesammelten punkten der linienzug erzeugt wird
     467             : */
     468             : 
     469           0 : void DrawViewShell::CheckLineTo(SfxRequest& rReq)
     470             : {
     471             :     (void)rReq;
     472             : #ifdef DBG_UTIL
     473             :     if(rReq.IsAPI())
     474             :     {
     475             :         if(SID_LINETO == rReq.GetSlot() || SID_BEZIERTO == rReq.GetSlot() || SID_MOVETO == rReq.GetSlot() )
     476             :         {
     477             :             OSL_FAIL("DrawViewShell::CheckLineTo: slots SID_LINETO, SID_BEZIERTO, SID_MOVETO no longer supported.");
     478             :         }
     479             :     }
     480             : #endif
     481             : 
     482           0 :     rReq.Ignore ();
     483           0 : }
     484             : 
     485             : /*************************************************************************
     486             : |*
     487             : |* veraendere die seitemparameter, wenn SID_PAGESIZE oder SID_PAGEMARGIN
     488             : |*
     489             : \************************************************************************/
     490             : 
     491           0 : void DrawViewShell::SetupPage (Size &rSize,
     492             :                                  long nLeft,
     493             :                                  long nRight,
     494             :                                  long nUpper,
     495             :                                  long nLower,
     496             :                                  sal_Bool bSize,
     497             :                                  sal_Bool bMargin,
     498             :                                  sal_Bool bScaleAll)
     499             : {
     500           0 :     sal_uInt16 nPageCnt = GetDoc()->GetMasterSdPageCount(mePageKind);
     501             :     sal_uInt16 i;
     502             : 
     503           0 :     for (i = 0; i < nPageCnt; i++)
     504             :     {
     505             :         /**********************************************************************
     506             :         * Erst alle MasterPages bearbeiten
     507             :         **********************************************************************/
     508           0 :         SdPage *pPage = GetDoc()->GetMasterSdPage(i, mePageKind);
     509             : 
     510           0 :         if( pPage )
     511             :         {
     512           0 :             if( bSize )
     513             :             {
     514           0 :                 Rectangle aBorderRect(nLeft, nUpper, nRight, nLower);
     515           0 :                 pPage->ScaleObjects(rSize, aBorderRect, bScaleAll);
     516           0 :                 pPage->SetSize(rSize);
     517             : 
     518             :             }
     519           0 :             if( bMargin )
     520             :             {
     521           0 :                 pPage->SetLftBorder(nLeft);
     522           0 :                 pPage->SetRgtBorder(nRight);
     523           0 :                 pPage->SetUppBorder(nUpper);
     524           0 :                 pPage->SetLwrBorder(nLower);
     525             :             }
     526             : 
     527           0 :             if ( mePageKind == PK_STANDARD )
     528             :             {
     529           0 :                 GetDoc()->GetMasterSdPage(i, PK_NOTES)->CreateTitleAndLayout();
     530             :             }
     531             : 
     532           0 :             pPage->CreateTitleAndLayout();
     533             :         }
     534             :     }
     535             : 
     536           0 :     nPageCnt = GetDoc()->GetSdPageCount(mePageKind);
     537             : 
     538           0 :     for (i = 0; i < nPageCnt; i++)
     539             :     {
     540             :         /**********************************************************************
     541             :         * Danach alle Pages bearbeiten
     542             :         **********************************************************************/
     543           0 :         SdPage *pPage = GetDoc()->GetSdPage(i, mePageKind);
     544             : 
     545           0 :         if( pPage )
     546             :         {
     547           0 :             if( bSize )
     548             :             {
     549           0 :                 Rectangle aBorderRect(nLeft, nUpper, nRight, nLower);
     550           0 :                 pPage->ScaleObjects(rSize, aBorderRect, bScaleAll);
     551           0 :                 pPage->SetSize(rSize);
     552             :             }
     553           0 :             if( bMargin )
     554             :             {
     555           0 :                 pPage->SetLftBorder(nLeft);
     556           0 :                 pPage->SetRgtBorder(nRight);
     557           0 :                 pPage->SetUppBorder(nUpper);
     558           0 :                 pPage->SetLwrBorder(nLower);
     559             :             }
     560             : 
     561           0 :             if ( mePageKind == PK_STANDARD )
     562             :             {
     563           0 :                 SdPage* pNotesPage = GetDoc()->GetSdPage(i, PK_NOTES);
     564           0 :                 pNotesPage->SetAutoLayout( pNotesPage->GetAutoLayout() );
     565             :             }
     566             : 
     567           0 :             pPage->SetAutoLayout( pPage->GetAutoLayout() );
     568             :         }
     569             :     }
     570             : 
     571           0 :     if ( mePageKind == PK_STANDARD )
     572             :     {
     573           0 :         SdPage* pHandoutPage = GetDoc()->GetSdPage(0, PK_HANDOUT);
     574           0 :         pHandoutPage->CreateTitleAndLayout(sal_True);
     575             :     }
     576             : 
     577           0 :     long nWidth = mpActualPage->GetSize().Width();
     578           0 :     long nHeight = mpActualPage->GetSize().Height();
     579             : 
     580           0 :     Point aPageOrg(nWidth, nHeight / 2);
     581           0 :     Size aSize( nWidth * 3, nHeight * 2);
     582             : 
     583           0 :     InitWindows(aPageOrg, aSize, Point(-1, -1), sal_True);
     584             : 
     585           0 :     Point aVisAreaPos;
     586             : 
     587           0 :     if ( GetDocSh()->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED )
     588             :     {
     589           0 :         aVisAreaPos = GetDocSh()->GetVisArea(ASPECT_CONTENT).TopLeft();
     590             :     }
     591             : 
     592           0 :     GetView()->SetWorkArea(Rectangle(Point() - aVisAreaPos - aPageOrg, aSize));
     593             : 
     594           0 :     UpdateScrollBars();
     595             : 
     596           0 :     Point aNewOrigin(mpActualPage->GetLftBorder(), mpActualPage->GetUppBorder());
     597           0 :     GetView()->GetSdrPageView()->SetPageOrigin(aNewOrigin);
     598             : 
     599           0 :     GetViewFrame()->GetBindings().Invalidate(SID_RULER_NULL_OFFSET);
     600             : 
     601             :     // auf (neue) Seitengroesse zoomen
     602             :     GetViewFrame()->GetDispatcher()->Execute(SID_SIZE_PAGE,
     603           0 :                         SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
     604           0 : }
     605             : 
     606             : /*************************************************************************
     607             : |*
     608             : |* Statuswerte der Statusbar zurueckgeben
     609             : |*
     610             : \************************************************************************/
     611             : 
     612           0 : void DrawViewShell::GetStatusBarState(SfxItemSet& rSet)
     613             : {
     614             :     // Zoom-Item
     615             :     // Hier sollte der entsprechende Wert (Optimal ?, Seitenbreite oder
     616             :     // Seite) mit Hilfe des ZoomItems weitergegeben werden !!!
     617           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_ZOOM ) )
     618             :     {
     619           0 :         if (GetDocSh()->IsUIActive() || (SlideShow::IsRunning(GetViewShellBase())) )
     620             :         {
     621           0 :             rSet.DisableItem( SID_ATTR_ZOOM );
     622             :         }
     623             :         else
     624             :         {
     625             :             SvxZoomItem* pZoomItem;
     626           0 :             sal_uInt16 nZoom = (sal_uInt16) GetActiveWindow()->GetZoom();
     627             : 
     628           0 :             if( mbZoomOnPage )
     629           0 :                 pZoomItem = new SvxZoomItem( SVX_ZOOM_WHOLEPAGE, nZoom );
     630             :             else
     631           0 :                 pZoomItem = new SvxZoomItem( SVX_ZOOM_PERCENT, nZoom );
     632             : 
     633             :             // Bereich einschraenken
     634           0 :             sal_uInt16 nZoomValues = SVX_ZOOM_ENABLE_ALL;
     635           0 :             SdrPageView* pPageView = mpDrawView->GetSdrPageView();
     636             : 
     637           0 :             if( ( pPageView && pPageView->GetObjList()->GetObjCount() == 0 ) )
     638             :                 // || ( mpDrawView->GetMarkedObjectList().GetMarkCount() == 0 ) )
     639             :             {
     640           0 :                 nZoomValues &= ~SVX_ZOOM_ENABLE_OPTIMAL;
     641             :             }
     642             : 
     643           0 :             pZoomItem->SetValueSet( nZoomValues );
     644           0 :             rSet.Put( *pZoomItem );
     645           0 :             delete pZoomItem;
     646             :         }
     647             :     }
     648           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_ZOOMSLIDER ) )
     649             :     {
     650           0 :         rtl::Reference< sd::SlideShow > xSlideshow( SlideShow::GetSlideShow( GetDoc() ) );
     651           0 :         if (GetDocSh()->IsUIActive() || (xSlideshow.is() && xSlideshow->isRunning()) || !GetActiveWindow() )
     652             :         {
     653           0 :             rSet.DisableItem( SID_ATTR_ZOOMSLIDER );
     654             :         }
     655             :         else
     656             :         {
     657           0 :             sd::Window * pActiveWindow = GetActiveWindow();
     658           0 :             SvxZoomSliderItem aZoomItem( (sal_uInt16) pActiveWindow->GetZoom(), (sal_uInt16)pActiveWindow->GetMinZoom(), (sal_uInt16)pActiveWindow->GetMaxZoom() ) ;
     659             : 
     660           0 :             SdrPageView* pPageView = mpDrawView->GetSdrPageView();
     661           0 :             if( pPageView )
     662             :             {
     663           0 :                 Point aPagePos(0, 0);
     664           0 :                 Size aPageSize = pPageView->GetPage()->GetSize();
     665             : 
     666           0 :                 aPagePos.X() += aPageSize.Width()  / 2;
     667           0 :                 aPageSize.Width() = (long) (aPageSize.Width() * 1.03);
     668             : 
     669           0 :                 aPagePos.Y() += aPageSize.Height() / 2;
     670           0 :                 aPageSize.Height() = (long) (aPageSize.Height() * 1.03);
     671           0 :                 aPagePos.Y() -= aPageSize.Height() / 2;
     672             : 
     673           0 :                 aPagePos.X() -= aPageSize.Width()  / 2;
     674             : 
     675           0 :                 Rectangle aFullPageZoomRect( aPagePos, aPageSize );
     676           0 :                 aZoomItem.AddSnappingPoint( pActiveWindow->GetZoomForRect( aFullPageZoomRect ) );
     677             :             }
     678           0 :             aZoomItem.AddSnappingPoint(100);
     679           0 :             rSet.Put( aZoomItem );
     680           0 :         }
     681             :     }
     682             : 
     683           0 :     Point aPos = GetActiveWindow()->PixelToLogic(maMousePos);
     684           0 :     mpDrawView->GetSdrPageView()->LogicToPagePos(aPos);
     685           0 :     Fraction aUIScale(GetDoc()->GetUIScale());
     686           0 :     aPos.X() = Fraction(aPos.X()) / aUIScale;
     687           0 :     aPos.Y() = Fraction(aPos.Y()) / aUIScale;
     688             : 
     689             :     // Position- und Groesse-Items
     690           0 :     if ( mpDrawView->IsAction() )
     691             :     {
     692           0 :         Rectangle aRect;
     693           0 :         mpDrawView->TakeActionRect( aRect );
     694             : 
     695           0 :         if ( aRect.IsEmpty() )
     696           0 :             rSet.Put( SfxPointItem(SID_ATTR_POSITION, aPos) );
     697             :         else
     698             :         {
     699           0 :             mpDrawView->GetSdrPageView()->LogicToPagePos(aRect);
     700           0 :             aPos = aRect.TopLeft();
     701           0 :             aPos.X() = Fraction(aPos.X()) / aUIScale;
     702           0 :             aPos.Y() = Fraction(aPos.Y()) / aUIScale;
     703           0 :             rSet.Put( SfxPointItem( SID_ATTR_POSITION, aPos) );
     704           0 :             Size aSize( aRect.Right() - aRect.Left(), aRect.Bottom() - aRect.Top() );
     705           0 :             aSize.Height() = Fraction(aSize.Height()) / aUIScale;
     706           0 :             aSize.Width()  = Fraction(aSize.Width())  / aUIScale;
     707           0 :             rSet.Put( SvxSizeItem( SID_ATTR_SIZE, aSize) );
     708             :         }
     709             :     }
     710             :     else
     711             :     {
     712           0 :         if ( mpDrawView->AreObjectsMarked() )
     713             :         {
     714           0 :             Rectangle aRect = mpDrawView->GetAllMarkedRect();
     715           0 :             mpDrawView->GetSdrPageView()->LogicToPagePos(aRect);
     716             : 
     717             :             // Show the position of the selected shape(s)
     718           0 :             Point aShapePosition (aRect.TopLeft());
     719           0 :             aShapePosition.X() = Fraction(aShapePosition.X()) / aUIScale;
     720           0 :             aShapePosition.Y() = Fraction(aShapePosition.Y()) / aUIScale;
     721           0 :             rSet.Put (SfxPointItem(SID_ATTR_POSITION, aShapePosition));
     722             : 
     723           0 :             Size aSize( aRect.Right() - aRect.Left(), aRect.Bottom() - aRect.Top() );
     724           0 :             aSize.Height() = Fraction(aSize.Height()) / aUIScale;
     725           0 :             aSize.Width()  = Fraction(aSize.Width())  / aUIScale;
     726           0 :             rSet.Put( SvxSizeItem( SID_ATTR_SIZE, aSize) );
     727             :         }
     728             :         else
     729             :         {
     730           0 :             rSet.Put( SfxPointItem(SID_ATTR_POSITION, aPos) );
     731           0 :             rSet.Put( SvxSizeItem( SID_ATTR_SIZE, Size( 0, 0 ) ) );
     732             :         }
     733             :     }
     734             : 
     735             :     // Display of current page and layer.
     736           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_STATUS_PAGE ) )
     737             :     {
     738             :         // Allways show the slide/page number.
     739           0 :         OUString aOUString = SD_RESSTR(STR_SD_PAGE);
     740           0 :         aOUString += " ";
     741           0 :         aOUString += OUString::valueOf( sal_Int32(maTabControl.GetCurPageId()) );
     742           0 :         aOUString += " / " ;
     743           0 :         aOUString += OUString::valueOf( sal_Int32(GetDoc()->GetSdPageCount(mePageKind)) );
     744             : 
     745             :         // If in layer mode additionally show the layer that contains all
     746             :         // selected shapes of the page.  If the shapes are distributed on
     747             :         // more than one layer, no layer name is shown.
     748           0 :         if (IsLayerModeActive())
     749             :         {
     750           0 :             SdrLayerAdmin& rLayerAdmin = GetDoc()->GetLayerAdmin();
     751           0 :             SdrLayerID nLayer = 0, nOldLayer = 0;
     752           0 :             SdrLayer*  pLayer = NULL;
     753           0 :             SdrObject* pObj = NULL;
     754           0 :             const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
     755           0 :             sal_uLong nMarkCount = rMarkList.GetMarkCount();
     756           0 :             bool bOneLayer = true;
     757             : 
     758             :             // Use the first ten selected shapes as a (hopefully
     759             :             // representative) sample of all shapes of the current page.
     760             :             // Detect whether they belong to the same layer.
     761           0 :             for( sal_uLong j = 0; j < nMarkCount && bOneLayer && j < 10; j++ )
     762             :             {
     763           0 :                 pObj = rMarkList.GetMark( j )->GetMarkedSdrObj();
     764           0 :                 if( pObj )
     765             :                 {
     766           0 :                     nLayer = pObj->GetLayer();
     767             : 
     768           0 :                     if( j != 0 && nLayer != nOldLayer )
     769           0 :                         bOneLayer = sal_False;
     770             : 
     771           0 :                     nOldLayer = nLayer;
     772             :                 }
     773             :             }
     774             : 
     775             :             // Append the layer name to the current page number.
     776           0 :             if( bOneLayer && nMarkCount )
     777             :             {
     778           0 :                 pLayer = rLayerAdmin.GetLayerPerID( nLayer );
     779           0 :                 if( pLayer )
     780             :                 {
     781           0 :                     aOUString += " (" ;
     782           0 :                     aOUString += pLayer->GetName();
     783           0 :                     aOUString += ")";
     784             :                 }
     785             :             }
     786             :         }
     787             : 
     788           0 :         rSet.Put (SfxStringItem (SID_STATUS_PAGE, aOUString));
     789             :     }
     790             :     // Layout
     791           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_STATUS_LAYOUT ) )
     792             :     {
     793           0 :         String aString = mpActualPage->GetLayoutName();
     794           0 :         aString.Erase( aString.SearchAscii( SD_LT_SEPARATOR ) );
     795           0 :         rSet.Put( SfxStringItem( SID_STATUS_LAYOUT, aString ) );
     796             :     }
     797           0 : }
     798             : 
     799             : 
     800             : 
     801           0 : void DrawViewShell::Notify (SfxBroadcaster&, const SfxHint& rHint)
     802             : {
     803           0 :     const SfxSimpleHint* pSimple = dynamic_cast< const SfxSimpleHint* >(&rHint);
     804           0 :     if (pSimple!=NULL && pSimple->GetId()==SFX_HINT_MODECHANGED)
     805             :     {
     806             :         // Change to selection when turning on read-only mode.
     807           0 :         if(GetDocSh()->IsReadOnly() && dynamic_cast< FuSelection* >( GetCurrentFunction().get() ) )
     808             :         {
     809           0 :             SfxRequest aReq(SID_OBJECT_SELECT, 0, GetDoc()->GetItemPool());
     810           0 :             FuPermanent(aReq);
     811             :         }
     812             : 
     813             :         // Turn on design mode when document is not read-only.
     814           0 :         if (GetDocSh()->IsReadOnly() != mbReadOnly )
     815             :         {
     816           0 :             mbReadOnly = GetDocSh()->IsReadOnly();
     817             : 
     818           0 :             SfxBoolItem aItem( SID_FM_DESIGN_MODE, !mbReadOnly );
     819             :             GetViewFrame()->GetDispatcher()->Execute( SID_FM_DESIGN_MODE,
     820           0 :                 SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L );
     821             :         }
     822             :     }
     823             : 
     824           0 : }
     825             : 
     826           0 : void DrawViewShell::ExecuteAnnotation (SfxRequest& rRequest)
     827             : {
     828           0 :     if( mpAnnotationManager.get() )
     829           0 :         mpAnnotationManager->ExecuteAnnotation( rRequest );
     830           0 : }
     831             : 
     832             : // --------------------------------------------------------------------
     833             : 
     834           0 : void DrawViewShell::GetAnnotationState (SfxItemSet& rItemSet )
     835             : {
     836           0 :     if( mpAnnotationManager.get() )
     837           0 :         mpAnnotationManager->GetAnnotationState( rItemSet );
     838           0 : }
     839             : 
     840             : 
     841           9 : } // end of namespace sd
     842             : 
     843             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10