LCOV - code coverage report
Current view: top level - sd/source/ui/view - outlnvsh.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 941 0.0 %
Date: 2014-04-14 Functions: 0 58 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 "OutlineViewShell.hxx"
      22             : 
      23             : #include "ViewShellImplementation.hxx"
      24             : #include "helpids.h"
      25             : #include "app.hrc"
      26             : #include <svx/hyperdlg.hxx>
      27             : #include <svx/zoomslideritem.hxx>
      28             : 
      29             : #include <sfx2/infobar.hxx>
      30             : #include <sfx2/objface.hxx>
      31             : #include <sot/exchange.hxx>
      32             : #include <svx/ruler.hxx>
      33             : #include <sfx2/zoomitem.hxx>
      34             : #include <editeng/eeitem.hxx>
      35             : #include <editeng/flditem.hxx>
      36             : #include <sfx2/shell.hxx>
      37             : #include <sfx2/templdlg.hxx>
      38             : #include <sfx2/viewfac.hxx>
      39             : #include <sfx2/request.hxx>
      40             : #include <svx/hlnkitem.hxx>
      41             : #include <svx/svdotext.hxx>
      42             : #include <sfx2/dispatch.hxx>
      43             : #include <vcl/scrbar.hxx>
      44             : #include <vcl/settings.hxx>
      45             : 
      46             : #include <svl/whiter.hxx>
      47             : #include <editeng/editstat.hxx>
      48             : #include <svl/itempool.hxx>
      49             : #include <sfx2/tplpitem.hxx>
      50             : #include <sfx2/sidebar/SidebarChildWindow.hxx>
      51             : #include <sfx2/sidebar/EnumContext.hxx>
      52             : #include <svx/svdorect.hxx>
      53             : #include <sot/formats.hxx>
      54             : #include <com/sun/star/linguistic2/XThesaurus.hpp>
      55             : #include <com/sun/star/i18n/TransliterationModules.hpp>
      56             : #include <com/sun/star/i18n/TransliterationModulesExtra.hpp>
      57             : #include <editeng/unolingu.hxx>
      58             : #include <comphelper/processfactory.hxx>
      59             : #include <editeng/outlobj.hxx>
      60             : #include <svl/cjkoptions.hxx>
      61             : #include <svtools/cliplistener.hxx>
      62             : #include <svl/srchitem.hxx>
      63             : #include <editeng/editobj.hxx>
      64             : #include "fubullet.hxx"
      65             : #include "optsitem.hxx"
      66             : 
      67             : #include "strings.hrc"
      68             : #include "glob.hrc"
      69             : #include "res_bmp.hrc"
      70             : #include "Outliner.hxx"
      71             : #include "Window.hxx"
      72             : #include "TextObjectBar.hxx"
      73             : #include "drawdoc.hxx"
      74             : #include "sdresid.hxx"
      75             : #include "sdpage.hxx"
      76             : #include "fuoltext.hxx"
      77             : #include "FrameView.hxx"
      78             : #include "zoomlist.hxx"
      79             : #include "stlsheet.hxx"
      80             : #include "slideshow.hxx"
      81             : #include "SdUnoOutlineView.hxx"
      82             : #include "SpellDialogChildWindow.hxx"
      83             : 
      84             : #include "AccessibleOutlineView.hxx"
      85             : #include "ViewShellBase.hxx"
      86             : #include "ViewShellManager.hxx"
      87             : #include "DrawController.hxx"
      88             : #include "framework/FrameworkHelper.hxx"
      89             : 
      90             : #include <boost/scoped_ptr.hpp>
      91             : 
      92             : using namespace ::com::sun::star;
      93             : using namespace ::com::sun::star::uno;
      94             : using namespace ::com::sun::star::lang;
      95             : using namespace ::com::sun::star::linguistic2;
      96             : 
      97             : using namespace sd;
      98             : #define OutlineViewShell
      99             : #include "sdslots.hxx"
     100             : 
     101             : namespace sd {
     102             : 
     103             : #define MIN_ZOOM           10      // minimum zoom factor
     104             : #define MAX_ZOOM         1000      // maximum zoom factor
     105             : 
     106             : /************************************************************************/
     107             : 
     108             : 
     109             : /**
     110             :  * Declare SFX-Slotmap and standard interface
     111             :  */
     112           0 : SFX_IMPL_INTERFACE(OutlineViewShell, SfxShell, SdResId(STR_OUTLINEVIEWSHELL))
     113             : {
     114           0 :     SFX_POPUPMENU_REGISTRATION( SdResId(RID_OUTLINE_POPUP) );
     115           0 :     SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_TOOLS | SFX_VISIBILITY_STANDARD |
     116             :                                 SFX_VISIBILITY_FULLSCREEN | SFX_VISIBILITY_SERVER,
     117           0 :                                 SdResId(RID_OUTLINE_TOOLBOX) );
     118           0 :     SFX_OBJECTBAR_REGISTRATION( SFX_OBJECTBAR_APPLICATION | SFX_VISIBILITY_DESKTOP | SFX_VISIBILITY_STANDARD | SFX_VISIBILITY_CLIENT | SFX_VISIBILITY_VIEWER | SFX_VISIBILITY_READONLYDOC,
     119           0 :                                 SdResId(RID_DRAW_VIEWER_TOOLBOX) );
     120           0 :     SFX_CHILDWINDOW_REGISTRATION( SfxTemplateDialogWrapper::GetChildWindowId() );
     121           0 :     SFX_CHILDWINDOW_REGISTRATION( SfxInfoBarContainerChild::GetChildWindowId() );
     122           0 :     SFX_CHILDWINDOW_REGISTRATION( SvxHlinkDlgWrapper::GetChildWindowId() );
     123           0 :     SFX_CHILDWINDOW_REGISTRATION( ::sd::SpellDialogChildWindow::GetChildWindowId() );
     124           0 :     SFX_CHILDWINDOW_REGISTRATION( SID_SEARCH_DLG );
     125           0 :     SFX_CHILDWINDOW_REGISTRATION(::sfx2::sidebar::SidebarChildWindow::GetChildWindowId());
     126           0 : }
     127             : 
     128             : 
     129           0 : TYPEINIT1( OutlineViewShell, ViewShell );
     130             : 
     131             : 
     132             : /**
     133             :  * common initialization part of both constructors
     134             :  */
     135           0 : void OutlineViewShell::Construct(DrawDocShell* )
     136             : {
     137           0 :     sal_Bool bModified = GetDoc()->IsChanged();
     138             : 
     139           0 :     meShellType = ST_OUTLINE;
     140           0 :     Size aSize(29700, 21000);
     141           0 :     Point aWinPos (0, 0);
     142           0 :     Point aViewOrigin(0, 0);
     143           0 :     GetActiveWindow()->SetMinZoomAutoCalc(false);
     144           0 :     GetActiveWindow()->SetMinZoom( MIN_ZOOM );
     145           0 :     GetActiveWindow()->SetMaxZoom( MAX_ZOOM );
     146           0 :     InitWindows(aViewOrigin, aSize, aWinPos);
     147           0 :     pOlView = new OutlineView(*GetDocSh(), GetActiveWindow(), *this);
     148           0 :     mpView = pOlView;            // Pointer of base class ViewShell
     149             : 
     150           0 :     SetPool( &GetDoc()->GetPool() );
     151             : 
     152           0 :     SetZoom(69);
     153             : 
     154             :     // Apply settings of FrameView
     155           0 :     ReadFrameViewData(mpFrameView);
     156             : 
     157           0 :     ::Outliner* pOutl = pOlView->GetOutliner();
     158           0 :     pOutl->SetUpdateMode(true);
     159             : 
     160           0 :     if (!bModified)
     161             :     {
     162           0 :         pOutl->ClearModifyFlag();
     163             :     }
     164             : 
     165           0 :     pLastPage = GetActualPage();
     166             : 
     167           0 :     SetName( OUString( "OutlineViewShell" ) );
     168             : 
     169           0 :     SetHelpId( SD_IF_SDOUTLINEVIEWSHELL );
     170           0 :     GetActiveWindow()->SetHelpId( HID_SDOUTLINEVIEWSHELL );
     171           0 :     GetActiveWindow()->SetUniqueId( HID_SDOUTLINEVIEWSHELL );
     172           0 : }
     173             : 
     174             : 
     175             : 
     176             : 
     177           0 : Reference<drawing::XDrawSubController> OutlineViewShell::CreateSubController (void)
     178             : {
     179           0 :     Reference<drawing::XDrawSubController> xSubController;
     180             : 
     181           0 :     if (IsMainViewShell())
     182             :     {
     183             :         // Create uno sub controller for the main view shell.
     184           0 :         xSubController = Reference<drawing::XDrawSubController>(
     185             :             new SdUnoOutlineView (
     186           0 :                 *this));
     187             :     }
     188             : 
     189           0 :     return xSubController;
     190             : }
     191             : 
     192             : 
     193             : /**
     194             :  * Default constructor, windows must not center themselves automatically
     195             :  */
     196           0 : OutlineViewShell::OutlineViewShell (
     197             :     SfxViewFrame* pFrame,
     198             :     ViewShellBase& rViewShellBase,
     199             :     ::Window* pParentWindow,
     200             :     FrameView* pFrameViewArgument)
     201             :     : ViewShell(pFrame, pParentWindow, rViewShellBase),
     202             :       pOlView(NULL),
     203             :       pLastPage( NULL ),
     204             :       pClipEvtLstnr(NULL),
     205             :       bPastePossible(false),
     206           0 :       mbInitialized(false)
     207             : 
     208             : {
     209           0 :     if (pFrameViewArgument != NULL)
     210           0 :         mpFrameView = pFrameViewArgument;
     211             :     else
     212           0 :         mpFrameView = new FrameView(GetDoc());
     213             : 
     214           0 :     mpFrameView->Connect();
     215             : 
     216           0 :     Construct(GetDocSh());
     217             : 
     218           0 :     SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_OutlineText));
     219             : 
     220           0 :     m_StrOldPageName = OUString();
     221             : 
     222           0 :     doShow();
     223           0 : }
     224             : 
     225             : 
     226           0 : OutlineViewShell::~OutlineViewShell()
     227             : {
     228           0 :     DisposeFunctions();
     229             : 
     230           0 :     delete pOlView;
     231             : 
     232           0 :     mpFrameView->Disconnect();
     233             : 
     234           0 :     if ( pClipEvtLstnr )
     235             :     {
     236           0 :         pClipEvtLstnr->AddRemoveListener( GetActiveWindow(), false );
     237           0 :         pClipEvtLstnr->ClearCallbackLink();     // prevent callback if another thread is waiting
     238           0 :         pClipEvtLstnr->release();
     239             :     }
     240           0 : }
     241             : 
     242             : 
     243             : 
     244             : 
     245           0 : void OutlineViewShell::Shutdown (void)
     246             : {
     247           0 :     ViewShell::Shutdown();
     248             : 
     249           0 :     PrepareClose();
     250           0 : }
     251             : 
     252             : 
     253             : 
     254             : 
     255             : /**
     256             :  * Paint method: the event gets forwarded from pWindow to the Viewshell
     257             :  * and the current function
     258             :  */
     259           0 : void OutlineViewShell::Paint(const Rectangle& rRect, ::sd::Window* pWin)
     260             : {
     261           0 :     if (pOlView)
     262             :     {
     263           0 :         pOlView->Paint(rRect, pWin);
     264             :     }
     265             : 
     266           0 :     if(HasCurrentFunction())
     267             :     {
     268           0 :         GetCurrentFunction()->Paint(rRect, pWin);
     269             :     }
     270           0 : }
     271             : 
     272           0 : void OutlineViewShell::ArrangeGUIElements ()
     273             : {
     274             :     // Retrieve the current size (thickness) of the scroll bars.  That is
     275             :     // the width of the vertical and the height of the horizontal scroll
     276             :     // bar.
     277             :     int nScrollBarSize =
     278           0 :         GetParentWindow()->GetSettings().GetStyleSettings().GetScrollBarSize();
     279           0 :     maScrBarWH = Size (nScrollBarSize, nScrollBarSize);
     280             : 
     281           0 :     ViewShell::ArrangeGUIElements ();
     282             : 
     283           0 :     ::sd::Window* pWindow = mpContentWindow.get();
     284           0 :     if (pWindow != NULL)
     285             :     {
     286           0 :         pWindow->SetMinZoomAutoCalc(false);
     287             : 
     288             : 
     289             :         // change OuputArea of the OutlinerView
     290           0 :         OutlinerView* pOutlinerView = pOlView->GetViewByWindow(pWindow);
     291             : 
     292           0 :         Rectangle aWin(Point(0,0), pWindow->GetOutputSizePixel());
     293             : 
     294           0 :         aWin = pWindow->PixelToLogic(aWin);
     295           0 :         pOutlinerView->SetOutputArea(aWin);
     296             : 
     297           0 :         Rectangle aVis = pOutlinerView->GetVisArea();
     298             : 
     299             :         Rectangle aText = Rectangle(Point(0,0),
     300           0 :             Size(pOlView->GetPaperWidth(),
     301           0 :                 pOlView->GetOutliner()->GetTextHeight()));
     302           0 :         if (aWin.GetHeight() > aText.Bottom())
     303           0 :             aText.Bottom() = aWin.GetHeight();
     304             : 
     305           0 :         if (!aWin.IsEmpty())            // not when opening
     306             :         {
     307           0 :             InitWindows(Point(0,0), aText.GetSize(), Point(aVis.TopLeft()));
     308           0 :             UpdateScrollBars();
     309             :         }
     310             :     }
     311           0 : }
     312             : 
     313             : /**
     314             :  * Handle SfxRequest for the Controller
     315             :  */
     316           0 : void OutlineViewShell::ExecCtrl(SfxRequest &rReq)
     317             : {
     318           0 :     sal_uInt16 nSlot = rReq.GetSlot();
     319           0 :     switch ( nSlot )
     320             :     {
     321             :         case SID_MAIL_SCROLLBODY_PAGEDOWN:
     322             :         {
     323           0 :             ExecReq( rReq );
     324           0 :             break;
     325             :         }
     326             : 
     327             :         case SID_OPT_LOCALE_CHANGED:
     328             :         {
     329           0 :             pOlView->GetOutliner()->UpdateFields();
     330           0 :             UpdatePreview( GetActualPage() );
     331           0 :             rReq.Done();
     332           0 :             break;
     333             :         }
     334             : 
     335             :         default:
     336           0 :         break;
     337             :     }
     338           0 : }
     339             : 
     340             : 
     341             : 
     342             : 
     343           0 : void OutlineViewShell::AddWindow (::sd::Window* pWin)
     344             : {
     345           0 :     pOlView->AddWindowToPaintView(pWin);
     346           0 : }
     347             : 
     348             : 
     349             : 
     350             : 
     351           0 : void OutlineViewShell::RemoveWindow (::sd::Window* pWin)
     352             : {
     353           0 :     pOlView->DeleteWindowFromPaintView(pWin);
     354           0 : }
     355             : 
     356             : 
     357             : 
     358             : 
     359             : /**
     360             :  * Activate(): during the first invocation the fields get updated
     361             :  */
     362           0 : void OutlineViewShell::Activate( bool bIsMDIActivate )
     363             : {
     364           0 :     if ( ! mbInitialized)
     365             :     {
     366           0 :         mbInitialized = true;
     367           0 :         SfxRequest aRequest (SID_EDIT_OUTLINER, 0, GetDoc()->GetItemPool());
     368           0 :         FuPermanent (aRequest);
     369             :     }
     370             : 
     371           0 :     ViewShell::Activate( bIsMDIActivate );
     372           0 :     SfxShell::BroadcastContextForActivation(true);
     373             : 
     374           0 :     pOlView->SetLinks();
     375           0 :     pOlView->ConnectToApplication();
     376             : 
     377           0 :     if( bIsMDIActivate )
     378             :     {
     379           0 :         OutlinerView* pOutlinerView = pOlView->GetViewByWindow( GetActiveWindow() );
     380           0 :         ::Outliner* pOutl = pOutlinerView->GetOutliner();
     381           0 :         pOutl->UpdateFields();
     382             :     }
     383           0 : }
     384             : 
     385           0 : void OutlineViewShell::Deactivate( bool bIsMDIActivate )
     386             : {
     387           0 :     pOlView->DisconnectFromApplication();
     388             : 
     389             :     // Links must be kept also on deactivated viewshell, to allow drag'n'drop
     390             :     // to function properly
     391           0 :     ViewShell::Deactivate( bIsMDIActivate );
     392           0 : }
     393             : 
     394             : /**
     395             :  * Set status of Controller-SfxSlots
     396             :  */
     397           0 : void OutlineViewShell::GetCtrlState(SfxItemSet &rSet)
     398             : {
     399           0 :     if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_HYPERLINK_GETLINK))
     400             :     {
     401           0 :         SvxHyperlinkItem aHLinkItem;
     402             : 
     403           0 :         OutlinerView* pOLV = pOlView->GetViewByWindow(GetActiveWindow());
     404           0 :         if (pOLV)
     405             :         {
     406           0 :             const SvxFieldItem* pFieldItem = pOLV->GetFieldAtSelection();
     407           0 :             if (pFieldItem)
     408             :             {
     409           0 :                 ESelection aSel = pOLV->GetSelection();
     410           0 :                 if ( abs( aSel.nEndPos - aSel.nStartPos ) == 1 )
     411             :                 {
     412           0 :                     const SvxFieldData* pField = pFieldItem->GetField();
     413           0 :                     if ( pField->ISA(SvxURLField) )
     414             :                     {
     415           0 :                         aHLinkItem.SetName(((const SvxURLField*) pField)->GetRepresentation());
     416           0 :                         aHLinkItem.SetURL(((const SvxURLField*) pField)->GetURL());
     417           0 :                         aHLinkItem.SetTargetFrame(((const SvxURLField*) pField)->GetTargetFrame());
     418             :                     }
     419             :                 }
     420             :             }
     421             :         }
     422           0 :         rSet.Put(aHLinkItem);
     423             :     }
     424           0 :     rSet.Put( SfxBoolItem( SID_READONLY_MODE, GetDocSh()->IsReadOnly() ) );
     425             : 
     426           0 :     if ( SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_MAIL_SCROLLBODY_PAGEDOWN) )
     427           0 :         rSet.Put( SfxBoolItem( SID_MAIL_SCROLLBODY_PAGEDOWN, true ) );
     428             : 
     429           0 :     if ( SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_TRANSLITERATE_HALFWIDTH) ||
     430           0 :          SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_TRANSLITERATE_FULLWIDTH) ||
     431           0 :          SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_TRANSLITERATE_HIRAGANA) ||
     432           0 :          SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_TRANSLITERATE_KATAGANA) )
     433             :     {
     434           0 :         SvtCJKOptions aCJKOptions;
     435           0 :         if( !aCJKOptions.IsChangeCaseMapEnabled() )
     436             :         {
     437           0 :             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, false );
     438           0 :             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, false );
     439           0 :             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, false );
     440           0 :             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, false );
     441           0 :             rSet.DisableItem( SID_TRANSLITERATE_HALFWIDTH );
     442           0 :             rSet.DisableItem( SID_TRANSLITERATE_FULLWIDTH );
     443           0 :             rSet.DisableItem( SID_TRANSLITERATE_HIRAGANA );
     444           0 :             rSet.DisableItem( SID_TRANSLITERATE_KATAGANA );
     445             :         }
     446             :         else
     447             :         {
     448           0 :             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HALFWIDTH, true );
     449           0 :             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_FULLWIDTH, true );
     450           0 :             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_HIRAGANA, true );
     451           0 :             GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, true );
     452           0 :         }
     453             :     }
     454           0 : }
     455             : 
     456             : /**
     457             :  * SfxRequests for support functions
     458             :  */
     459           0 : void OutlineViewShell::FuSupport(SfxRequest &rReq)
     460             : {
     461           0 :     if( rReq.GetSlot() == SID_STYLE_FAMILY && rReq.GetArgs())
     462           0 :         GetDocSh()->SetStyleFamily(((SfxUInt16Item&)rReq.GetArgs()->Get( SID_STYLE_FAMILY )).GetValue());
     463             : 
     464           0 :     sal_Bool bPreviewState = sal_False;
     465           0 :     sal_uLong nSlot = rReq.GetSlot();
     466             : 
     467           0 :     boost::scoped_ptr< OutlineViewModelChangeGuard > aGuard;
     468           0 :     if( pOlView && (
     469           0 :         (nSlot == SID_TRANSLITERATE_SENTENCE_CASE) ||
     470           0 :         (nSlot == SID_TRANSLITERATE_TITLE_CASE) ||
     471           0 :         (nSlot == SID_TRANSLITERATE_TOGGLE_CASE) ||
     472           0 :         (nSlot == SID_TRANSLITERATE_UPPER) ||
     473           0 :         (nSlot == SID_TRANSLITERATE_LOWER) ||
     474           0 :         (nSlot == SID_TRANSLITERATE_HALFWIDTH) ||
     475           0 :         (nSlot == SID_TRANSLITERATE_FULLWIDTH) ||
     476           0 :         (nSlot == SID_TRANSLITERATE_HIRAGANA) ||
     477           0 :         (nSlot == SID_TRANSLITERATE_KATAGANA) ||
     478           0 :         (nSlot == SID_CUT) ||
     479           0 :         (nSlot == SID_PASTE) ||
     480           0 :         (nSlot == SID_PASTE_UNFORMATTED) ||
     481             :         (nSlot == SID_DELETE)))
     482             :     {
     483           0 :         aGuard.reset( new OutlineViewModelChangeGuard( *pOlView ) );
     484             :     }
     485             : 
     486           0 :     switch ( nSlot )
     487             :     {
     488             :         case SID_CUT:
     489             :         {
     490           0 :             if(HasCurrentFunction())
     491             :             {
     492           0 :                 GetCurrentFunction()->DoCut();
     493             :             }
     494           0 :             else if (pOlView)
     495             :             {
     496           0 :                 pOlView->DoCut();
     497             :             }
     498           0 :             rReq.Done();
     499           0 :             bPreviewState = sal_True;
     500             :         }
     501           0 :         break;
     502             : 
     503             :         case SID_COPY:
     504             :         {
     505           0 :             if(HasCurrentFunction())
     506             :             {
     507           0 :                 GetCurrentFunction()->DoCopy();
     508             :             }
     509           0 :             else if (pOlView)
     510             :             {
     511           0 :                 pOlView->DoCopy();
     512             :             }
     513           0 :             rReq.Done();
     514           0 :             bPreviewState = sal_True;
     515             :         }
     516           0 :         break;
     517             : 
     518             :         case SID_PASTE:
     519             :         {
     520           0 :             OutlineViewPageChangesGuard aGuard2(pOlView);
     521             : 
     522           0 :             if(HasCurrentFunction())
     523             :             {
     524           0 :                 GetCurrentFunction()->DoPaste();
     525             :             }
     526           0 :             else if (pOlView)
     527             :             {
     528           0 :                 pOlView->DoPaste();
     529             :             }
     530           0 :             rReq.Done();
     531           0 :             bPreviewState = sal_True;
     532             :         }
     533           0 :         break;
     534             : 
     535             :         case SID_PASTE_UNFORMATTED:
     536             :         {
     537           0 :             OutlineViewPageChangesGuard aGuard2(pOlView);
     538             : 
     539           0 :             if(HasCurrentFunction())
     540             :             {
     541           0 :                 GetCurrentFunction()->DoPasteUnformatted();
     542             :             }
     543           0 :             else if(pOlView)
     544             :             {
     545           0 :                 sal_Int8 nAction = DND_ACTION_COPY;
     546           0 :                 TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( GetActiveWindow() ) );
     547           0 :                 if (aDataHelper.GetTransferable().is())
     548             :                 {
     549             :                     pOlView->InsertData( aDataHelper,
     550           0 :                                          GetActiveWindow()->PixelToLogic( Rectangle( Point(), GetActiveWindow()->GetOutputSizePixel() ).Center() ),
     551           0 :                                          nAction, sal_False, FORMAT_STRING);
     552           0 :                 }
     553             :             }
     554             : 
     555           0 :             rReq.Ignore ();
     556             :         }
     557           0 :         break;
     558             :         case SID_DELETE:
     559             :         {
     560           0 :             if( pOlView )
     561             :             {
     562           0 :                 OutlinerView* pOutlView = pOlView->GetViewByWindow(GetActiveWindow());
     563           0 :                 if (pOutlView)
     564             :                 {
     565           0 :                     OutlineViewPageChangesGuard aGuard2(pOlView);
     566             : 
     567           0 :                     KeyCode  aKCode(KEY_DELETE);
     568           0 :                     KeyEvent aKEvt( 0, aKCode );
     569           0 :                     pOutlView->PostKeyEvent(aKEvt);
     570             : 
     571           0 :                     rtl::Reference<FuPoor> xFunc( GetCurrentFunction() );
     572           0 :                     FuOutlineText* pFuOutlineText = dynamic_cast< FuOutlineText* >( xFunc.get() );
     573           0 :                     if( pFuOutlineText )
     574           0 :                         pFuOutlineText->UpdateForKeyPress (aKEvt);
     575             :                 }
     576             :             }
     577           0 :             rReq.Done();
     578           0 :             bPreviewState = sal_True;
     579             :         }
     580           0 :         break;
     581             : 
     582             :         case SID_DRAWINGMODE:
     583             :         case SID_NOTESMODE:
     584             :         case SID_HANDOUTMODE:
     585             :         case SID_DIAMODE:
     586             :         case SID_OUTLINEMODE:
     587           0 :             framework::FrameworkHelper::Instance(GetViewShellBase())->HandleModeChangeSlot(
     588             :                 nSlot,
     589           0 :                 rReq);
     590           0 :             rReq.Done();
     591           0 :             break;
     592             : 
     593             :         case SID_RULER:
     594           0 :             SetRuler( !HasRuler() );
     595           0 :             Invalidate( SID_RULER );
     596           0 :             rReq.Done();
     597           0 :         break;
     598             : 
     599             :         case SID_ZOOM_PREV:
     600             :         {
     601           0 :             if (mpZoomList->IsPreviousPossible())
     602             :             {
     603           0 :                 SetZoomRect(mpZoomList->GetPreviousZoomRect());
     604             :             }
     605           0 :             rReq.Done ();
     606             :         }
     607           0 :         break;
     608             : 
     609             :         case SID_ZOOM_NEXT:
     610             :         {
     611           0 :             if (mpZoomList->IsNextPossible())
     612             :             {
     613           0 :                 SetZoomRect(mpZoomList->GetNextZoomRect());
     614             :             }
     615           0 :             rReq.Done ();
     616             :         }
     617           0 :         break;
     618             : 
     619             :         case SID_AUTOSPELL_CHECK:
     620             :         {
     621           0 :             GetDoc()->SetOnlineSpell(!GetDoc()->GetOnlineSpell());
     622           0 :             rReq.Done ();
     623             :         }
     624           0 :         break;
     625             : 
     626             :         case SID_TRANSLITERATE_SENTENCE_CASE:
     627             :         case SID_TRANSLITERATE_TITLE_CASE:
     628             :         case SID_TRANSLITERATE_TOGGLE_CASE:
     629             :         case SID_TRANSLITERATE_UPPER:
     630             :         case SID_TRANSLITERATE_LOWER:
     631             :         case SID_TRANSLITERATE_HALFWIDTH:
     632             :         case SID_TRANSLITERATE_FULLWIDTH:
     633             :         case SID_TRANSLITERATE_HIRAGANA:
     634             :         case SID_TRANSLITERATE_KATAGANA:
     635             :         {
     636           0 :             OutlinerView* pOLV = pOlView ? pOlView->GetViewByWindow( GetActiveWindow() ) : 0;
     637           0 :             if( pOLV )
     638             :             {
     639             :                 using namespace ::com::sun::star::i18n;
     640           0 :                 sal_Int32 nType = 0;
     641             : 
     642           0 :                 switch( nSlot )
     643             :                 {
     644             :                     case SID_TRANSLITERATE_SENTENCE_CASE:
     645           0 :                         nType = TransliterationModulesExtra::SENTENCE_CASE;
     646           0 :                         break;
     647             :                     case SID_TRANSLITERATE_TITLE_CASE:
     648           0 :                         nType = TransliterationModulesExtra::TITLE_CASE;
     649           0 :                         break;
     650             :                     case SID_TRANSLITERATE_TOGGLE_CASE:
     651           0 :                         nType = TransliterationModulesExtra::TOGGLE_CASE;
     652           0 :                         break;
     653             :                     case SID_TRANSLITERATE_UPPER:
     654           0 :                         nType = TransliterationModules_LOWERCASE_UPPERCASE;
     655           0 :                         break;
     656             :                     case SID_TRANSLITERATE_LOWER:
     657           0 :                         nType = TransliterationModules_UPPERCASE_LOWERCASE;
     658           0 :                         break;
     659             :                     case SID_TRANSLITERATE_HALFWIDTH:
     660           0 :                         nType = TransliterationModules_FULLWIDTH_HALFWIDTH;
     661           0 :                         break;
     662             :                     case SID_TRANSLITERATE_FULLWIDTH:
     663           0 :                         nType = TransliterationModules_HALFWIDTH_FULLWIDTH;
     664           0 :                         break;
     665             :                     case SID_TRANSLITERATE_HIRAGANA:
     666           0 :                         nType = TransliterationModules_KATAKANA_HIRAGANA;
     667           0 :                         break;
     668             :                     case SID_TRANSLITERATE_KATAGANA:
     669           0 :                         nType = TransliterationModules_HIRAGANA_KATAKANA;
     670           0 :                         break;
     671             :                 }
     672             : 
     673           0 :                 pOLV->TransliterateText( nType );
     674             :             }
     675             : 
     676           0 :             rReq.Done();
     677           0 :             bPreviewState = sal_True;
     678             :         }
     679           0 :         break;
     680             : 
     681             :         // added Undo/Redo handling
     682             :         case SID_UNDO :
     683             :         {
     684           0 :             OutlineViewPageChangesGuard aGuard2(pOlView);
     685           0 :             ImpSidUndo(sal_False, rReq);
     686             :         }
     687           0 :         break;
     688             :         case SID_REDO :
     689             :         {
     690           0 :             OutlineViewPageChangesGuard aGuard2(pOlView);
     691           0 :             ImpSidRedo(sal_False, rReq);
     692             :         }
     693           0 :         break;
     694             : 
     695             :         default:
     696           0 :         break;
     697             :     }
     698             : 
     699           0 :     if( bPreviewState )
     700           0 :         Invalidate( SID_PREVIEW_STATE );
     701             : 
     702           0 :     Invalidate(SID_CUT);
     703           0 :     Invalidate(SID_COPY);
     704           0 :     Invalidate(SID_PASTE);
     705           0 : }
     706             : 
     707             : /**
     708             :  * SfxRequests for permanent functions
     709             :  */
     710           0 : void OutlineViewShell::FuPermanent(SfxRequest &rReq)
     711             : {
     712           0 :     if(HasCurrentFunction())
     713             :     {
     714           0 :         DeactivateCurrentFunction(true);
     715             :     }
     716             : 
     717           0 :     switch ( rReq.GetSlot() )
     718             :     {
     719             :         case SID_EDIT_OUTLINER:
     720             :         {
     721           0 :             ::Outliner* pOutl = pOlView->GetOutliner();
     722           0 :             if( pOutl )
     723             :             {
     724           0 :                 pOutl->GetUndoManager().Clear();
     725           0 :                 pOutl->UpdateFields();
     726             :             }
     727             : 
     728           0 :             SetCurrentFunction( FuOutlineText::Create(this,GetActiveWindow(),pOlView,GetDoc(),rReq) );
     729             : 
     730           0 :             rReq.Done();
     731             :         }
     732           0 :         break;
     733             : 
     734             :       default:
     735           0 :       break;
     736             :     }
     737             : 
     738           0 :     if(HasOldFunction())
     739             :     {
     740           0 :         GetOldFunction()->Deactivate();
     741           0 :         SetOldFunction(0);
     742             :     }
     743             : 
     744           0 :     if(HasCurrentFunction())
     745             :     {
     746           0 :         GetCurrentFunction()->Activate();
     747           0 :         SetOldFunction(GetCurrentFunction());
     748             :     }
     749           0 : }
     750             : 
     751             : 
     752           0 : IMPL_LINK( OutlineViewShell, ClipboardChanged, TransferableDataHelper*, pDataHelper )
     753             : {
     754           0 :     if ( pDataHelper )
     755             :     {
     756           0 :         bPastePossible = ( pDataHelper->GetFormatCount() != 0 &&
     757           0 :                             ( pDataHelper->HasFormat( FORMAT_STRING ) ||
     758           0 :                               pDataHelper->HasFormat( FORMAT_RTF ) ||
     759           0 :                               pDataHelper->HasFormat( SOT_FORMATSTR_ID_HTML ) ) );
     760             : 
     761           0 :         SfxBindings& rBindings = GetViewFrame()->GetBindings();
     762           0 :         rBindings.Invalidate( SID_PASTE );
     763           0 :         rBindings.Invalidate( SID_PASTE_SPECIAL );
     764           0 :         rBindings.Invalidate( SID_PASTE_UNFORMATTED );
     765           0 :         rBindings.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS );
     766             :     }
     767           0 :     return 0;
     768             : }
     769             : 
     770             : /**
     771             :  * Set Status (Enabled/Disabled) of Menu-SfxSlots
     772             :  */
     773           0 : void OutlineViewShell::GetMenuState( SfxItemSet &rSet )
     774             : {
     775           0 :     ViewShell::GetMenuState(rSet);
     776             : 
     777           0 :     rSet.Put(SfxBoolItem(SID_DIAMODE, false));
     778           0 :     rSet.Put(SfxBoolItem(SID_DRAWINGMODE, false));
     779           0 :     rSet.Put(SfxBoolItem(SID_OUTLINEMODE, true));
     780           0 :     rSet.Put(SfxBoolItem(SID_NOTESMODE, false));
     781           0 :     rSet.Put(SfxBoolItem(SID_HANDOUTMODE, false));
     782             : 
     783           0 :     if (!mpZoomList->IsNextPossible())
     784             :     {
     785           0 :        rSet.DisableItem(SID_ZOOM_NEXT);
     786             :     }
     787           0 :     if (!mpZoomList->IsPreviousPossible())
     788             :     {
     789           0 :        rSet.DisableItem(SID_ZOOM_PREV);
     790             :     }
     791             : 
     792           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ZOOM_IN ) ||
     793           0 :         SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ZOOM_OUT ) )
     794             :     {
     795           0 :         if( GetActiveWindow()->GetZoom() <= GetActiveWindow()->GetMinZoom() || GetDocSh()->IsUIActive() )
     796           0 :             rSet.DisableItem( SID_ZOOM_IN );
     797           0 :         if( GetActiveWindow()->GetZoom() >= GetActiveWindow()->GetMaxZoom() || GetDocSh()->IsUIActive() )
     798           0 :             rSet.DisableItem( SID_ZOOM_OUT );
     799             :     }
     800             : 
     801           0 :     ::Outliner* pOutl = pOlView->GetOutliner();
     802             :     DBG_ASSERT(pOutl, "OutlineViewShell::GetMenuState(), no outliner? Fatality!");
     803           0 :     if( !pOutl )
     804           0 :         return;
     805             : 
     806             :     // allow 'Select All'?
     807           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_SELECTALL ) )
     808             :     {
     809           0 :         sal_Int32 nParaCount = pOutl->GetParagraphCount();
     810           0 :         sal_Bool bDisable = nParaCount == 0;
     811           0 :         if (!bDisable && nParaCount == 1)
     812             :         {
     813           0 :             OUString aTest = pOutl->GetText(pOutl->GetParagraph(0));
     814           0 :             if (aTest.isEmpty())
     815             :             {
     816           0 :                 bDisable = sal_True;
     817           0 :             }
     818             :         }
     819           0 :         if (bDisable)
     820           0 :             rSet.DisableItem(SID_SELECTALL);
     821             :     }
     822             : 
     823             :     // set status of Ruler
     824           0 :     rSet.Put( SfxBoolItem( SID_RULER, HasRuler() ) );
     825             : 
     826             :     // Enable formatting?
     827           0 :     rSet.Put( SfxBoolItem( SID_OUTLINE_FORMAT, !pOutl->IsFlatMode() ) );
     828             : 
     829           0 :     if( pOutl->IsFlatMode() )
     830           0 :         rSet.DisableItem( SID_COLORVIEW );
     831             :     else
     832             :     {
     833             :         // Enable color view?
     834           0 :         sal_uLong nCntrl = pOutl->GetControlWord();
     835           0 :         sal_Bool bNoColor = sal_False;
     836           0 :         if (nCntrl & EE_CNTRL_NOCOLORS)
     837           0 :             bNoColor = sal_True;
     838             : 
     839           0 :         rSet.Put( SfxBoolItem( SID_COLORVIEW, bNoColor ) );
     840             :     }
     841             : 
     842             :     // Buttons of toolbar
     843             :     // first the selection dependent ones: COLLAPSE, EXPAND
     844           0 :     sal_Bool bDisableCollapse = sal_True;
     845           0 :     sal_Bool bDisableExpand   = sal_True;
     846           0 :     sal_Bool bUnique          = sal_True;
     847           0 :     OutlinerView* pOutlinerView = pOlView->GetViewByWindow(GetActiveWindow());
     848             : 
     849           0 :     std::vector<Paragraph*> aSelList;
     850           0 :     pOutlinerView->CreateSelectionList(aSelList);
     851             : 
     852           0 :     if (!aSelList.empty())
     853             :     {
     854           0 :         std::vector<Paragraph*>::const_iterator iter = aSelList.begin();
     855           0 :         Paragraph* pPara = *iter;
     856             : 
     857             :         sal_Int16 nDepth;
     858           0 :         sal_Int16 nTmpDepth = pOutl->GetDepth( pOutl->GetAbsPos( pPara ) );
     859           0 :         bool bPage = pOutl->HasParaFlag( pPara, PARAFLAG_ISPAGE );
     860             : 
     861           0 :         while (iter != aSelList.begin())
     862             :         {
     863           0 :             pPara = *iter;
     864             : 
     865           0 :             nDepth = pOutl->GetDepth( pOutl->GetAbsPos( pPara ) );
     866             : 
     867           0 :             if( nDepth != nTmpDepth || bPage != pOutl->HasParaFlag( pPara, PARAFLAG_ISPAGE ))
     868           0 :                 bUnique = sal_False;
     869             : 
     870           0 :             if (pOutl->HasChildren(pPara))
     871             :             {
     872           0 :                 if (!pOutl->IsExpanded(pPara))
     873           0 :                     bDisableExpand = sal_False;
     874             :                 else
     875           0 :                     bDisableCollapse = sal_False;
     876             :             }
     877             : 
     878           0 :             ++iter;
     879             :         }
     880             :     }
     881             : 
     882           0 :     if (bDisableExpand)
     883           0 :         rSet.DisableItem(SID_OUTLINE_EXPAND);
     884           0 :     if (bDisableCollapse)
     885           0 :         rSet.DisableItem(SID_OUTLINE_COLLAPSE);
     886             : 
     887             :     // does the selection provide a unique presentation layout?
     888             :     // if not, the templates must not be edited
     889           0 :     SfxItemSet aSet(*rSet.GetPool(), SID_STATUS_LAYOUT, SID_STATUS_LAYOUT);
     890           0 :     GetStatusBarState(aSet);
     891           0 :     OUString aTest = ((SfxStringItem&)aSet.Get(SID_STATUS_LAYOUT)).GetValue();
     892           0 :     if (aTest.isEmpty())
     893             :     {
     894           0 :         bUnique = sal_False;
     895           0 :         rSet.DisableItem(SID_PRESENTATION_TEMPLATES);
     896             :     }
     897             : 
     898           0 :     if (!bUnique)
     899           0 :         rSet.DisableItem( SID_PRESENTATIONOBJECT );
     900             : 
     901             :     // now the selection independent ones: COLLAPSE_ALL, EXPAND_ALL
     902           0 :     sal_Bool bDisableCollapseAll = sal_True;
     903           0 :     sal_Bool bDisableExpandAll   = sal_True;
     904             : 
     905             :     // does the selection contain something collapsable/expandable?
     906           0 :     if (!bDisableCollapse)
     907           0 :         bDisableCollapseAll = sal_False;
     908           0 :     if (!bDisableExpand)
     909           0 :         bDisableExpandAll = sal_False;
     910             : 
     911             :     // otherwise look through all paragraphs
     912           0 :     if (bDisableCollapseAll || bDisableExpandAll)
     913             :     {
     914           0 :         sal_Int32 nParaPos = 0;
     915           0 :         Paragraph* pPara = pOutl->GetParagraph( nParaPos );
     916           0 :         while (pPara && (bDisableCollapseAll || bDisableExpandAll))
     917             :         {
     918           0 :             if (!pOutl->IsExpanded(pPara) && pOutl->HasChildren(pPara))
     919           0 :                 bDisableExpandAll = sal_False;
     920             : 
     921           0 :             if (pOutl->IsExpanded(pPara) && pOutl->HasChildren(pPara))
     922           0 :                 bDisableCollapseAll = sal_False;
     923             : 
     924           0 :             pPara = pOutl->GetParagraph( ++nParaPos );
     925             :         }
     926             :     }
     927             : 
     928           0 :     if (bDisableExpandAll)
     929           0 :         rSet.DisableItem(SID_OUTLINE_EXPAND_ALL);
     930           0 :     if (bDisableCollapseAll)
     931           0 :         rSet.DisableItem(SID_OUTLINE_COLLAPSE_ALL);
     932             : 
     933           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PASTE ) )
     934             :     {
     935           0 :         if ( !pClipEvtLstnr )
     936             :         {
     937             :             // create listener
     938           0 :             pClipEvtLstnr = new TransferableClipboardListener( LINK( this, OutlineViewShell, ClipboardChanged ) );
     939           0 :             pClipEvtLstnr->acquire();
     940           0 :             pClipEvtLstnr->AddRemoveListener( GetActiveWindow(), true );
     941             : 
     942             :             // get initial state
     943           0 :             TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( GetActiveWindow() ) );
     944           0 :             bPastePossible = ( aDataHelper.GetFormatCount() != 0 &&
     945           0 :                                 ( aDataHelper.HasFormat( FORMAT_STRING ) ||
     946           0 :                                   aDataHelper.HasFormat( FORMAT_RTF ) ||
     947           0 :                                   aDataHelper.HasFormat( SOT_FORMATSTR_ID_HTML ) ) );
     948             :         }
     949             : 
     950           0 :         if( !bPastePossible )
     951             :         {
     952           0 :             rSet.DisableItem( SID_PASTE );
     953             :         }
     954             :     }
     955             : 
     956           0 :     if (!pOlView->GetViewByWindow(GetActiveWindow())->HasSelection())
     957             :     {
     958           0 :         rSet.DisableItem(SID_CUT);
     959           0 :         rSet.DisableItem(SID_COPY);
     960             :     }
     961             : 
     962           0 :     if (pOlView->GetOutliner()->IsModified())
     963             :     {
     964           0 :         GetDoc()->SetChanged(true);
     965             :     }
     966             : 
     967             :     // the status has to be set here because of overloading
     968           0 :     if( !GetDocSh()->IsModified() )
     969             :     {
     970           0 :         rSet.DisableItem( SID_SAVEDOC );
     971             :     }
     972             : 
     973           0 :     if ( GetDocSh()->IsReadOnly() )
     974             :     {
     975           0 :         rSet.DisableItem( SID_AUTOSPELL_CHECK );
     976             :     }
     977             :     else
     978             :     {
     979           0 :         if (GetDoc()->GetOnlineSpell())
     980             :         {
     981           0 :             rSet.Put(SfxBoolItem(SID_AUTOSPELL_CHECK, true));
     982             :         }
     983             :         else
     984             :         {
     985           0 :             rSet.Put(SfxBoolItem(SID_AUTOSPELL_CHECK, false));
     986             :         }
     987             :     }
     988             : 
     989             :     // field commands
     990           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_MODIFY_FIELD ) )
     991             :     {
     992           0 :         const SvxFieldItem* pFldItem = pOutlinerView->GetFieldAtSelection();
     993             : 
     994           0 :         if( !( pFldItem && (pFldItem->GetField()->ISA( SvxDateField ) ||
     995           0 :                             pFldItem->GetField()->ISA( SvxAuthorField ) ||
     996           0 :                             pFldItem->GetField()->ISA( SvxExtFileField ) ||
     997           0 :                             pFldItem->GetField()->ISA( SvxExtTimeField ) ) ) )
     998             :         {
     999           0 :             rSet.DisableItem( SID_MODIFY_FIELD );
    1000             :         }
    1001             :     }
    1002             : 
    1003           0 :     if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_EXPAND_PAGE))
    1004             :     {
    1005           0 :         sal_Bool bDisable = sal_True;
    1006           0 :         sal_uInt16 i = 0;
    1007           0 :         sal_uInt16 nCount = GetDoc()->GetSdPageCount(PK_STANDARD);
    1008           0 :         pOlView->SetSelectedPages();
    1009             : 
    1010           0 :         while (i < nCount && bDisable)
    1011             :         {
    1012           0 :             SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
    1013             : 
    1014           0 :             if (pPage->IsSelected())
    1015             :             {
    1016           0 :                 SdrObject* pObj = pPage->GetPresObj(PRESOBJ_OUTLINE);
    1017             : 
    1018           0 :                 if (pObj!=NULL )
    1019             :                 {
    1020           0 :                     if( !pObj->IsEmptyPresObj() )
    1021             :                     {
    1022           0 :                         bDisable = false;
    1023             :                     }
    1024             :                     else
    1025             :                     {
    1026             :                         // check if the object is in edit, than its temporarely not empty
    1027           0 :                         SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( pObj );
    1028           0 :                         if( pTextObj )
    1029             :                         {
    1030           0 :                             OutlinerParaObject* pParaObj = pTextObj->GetEditOutlinerParaObject();
    1031           0 :                             if( pParaObj )
    1032             :                             {
    1033           0 :                                 delete pParaObj;
    1034           0 :                                 bDisable = false;
    1035             :                             }
    1036             :                         }
    1037             :                     }
    1038             :                 }
    1039             :             }
    1040             : 
    1041           0 :             i++;
    1042             :         }
    1043             : 
    1044           0 :         if (bDisable)
    1045             :         {
    1046           0 :             rSet.DisableItem(SID_EXPAND_PAGE);
    1047             :         }
    1048             :     }
    1049             : 
    1050           0 :     if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_SUMMARY_PAGE))
    1051             :     {
    1052           0 :         sal_Bool bDisable = sal_True;
    1053           0 :         sal_uInt16 i = 0;
    1054           0 :         sal_uInt16 nCount = GetDoc()->GetSdPageCount(PK_STANDARD);
    1055           0 :         pOlView->SetSelectedPages();
    1056             : 
    1057           0 :         while (i < nCount && bDisable)
    1058             :         {
    1059           0 :             SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
    1060             : 
    1061           0 :             if (pPage->IsSelected())
    1062             :             {
    1063           0 :                 SdrObject* pObj = pPage->GetPresObj(PRESOBJ_TITLE);
    1064             : 
    1065           0 :                 if (pObj && !pObj->IsEmptyPresObj())
    1066             :                 {
    1067           0 :                     bDisable = sal_False;
    1068             :                 }
    1069             :             }
    1070             : 
    1071           0 :             i++;
    1072             :         }
    1073             : 
    1074           0 :         if (bDisable)
    1075             :         {
    1076           0 :             rSet.DisableItem(SID_SUMMARY_PAGE);
    1077             :         }
    1078             :     }
    1079             : 
    1080           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_THESAURUS ) )
    1081             :     {
    1082           0 :         if ( !pOlView->IsTextEdit() )
    1083             :         {
    1084           0 :             rSet.DisableItem( SID_THESAURUS );
    1085             :         }
    1086             :         else
    1087             :         {
    1088           0 :             LanguageType            eLang = GetDoc()->GetLanguage( EE_CHAR_LANGUAGE );
    1089           0 :             Reference< XThesaurus > xThesaurus( LinguMgr::GetThesaurus() );
    1090             : 
    1091           0 :             if (!xThesaurus.is() || eLang == LANGUAGE_NONE || !xThesaurus->hasLocale( LanguageTag::convertToLocale( eLang)))
    1092           0 :                 rSet.DisableItem( SID_THESAURUS );
    1093             :         }
    1094             :     }
    1095             : 
    1096             :     // is starting the presentation possible?
    1097           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PRESENTATION ) )
    1098             :     {
    1099           0 :         sal_Bool bDisable = sal_True;
    1100           0 :         sal_uInt16 nCount = GetDoc()->GetSdPageCount( PK_STANDARD );
    1101             : 
    1102           0 :         for( sal_uInt16 i = 0; i < nCount && bDisable; i++ )
    1103             :         {
    1104           0 :             SdPage* pPage = GetDoc()->GetSdPage(i, PK_STANDARD);
    1105             : 
    1106           0 :             if( !pPage->IsExcluded() )
    1107           0 :                 bDisable = sal_False;
    1108             :         }
    1109           0 :         if( bDisable || GetDocSh()->IsPreview())
    1110             :         {
    1111           0 :             rSet.DisableItem( SID_PRESENTATION );
    1112             :         }
    1113             :     }
    1114             : 
    1115           0 :     FuBullet::GetSlotState( rSet, this, GetViewFrame() );
    1116             : 
    1117             : }
    1118             : 
    1119             : /**
    1120             :  * gets invoked when ScrollBar is used
    1121             :  */
    1122           0 : long OutlineViewShell::VirtHScrollHdl(ScrollBar* pHScroll)
    1123             : {
    1124           0 :     long   nThumb = pHScroll->GetThumbPos();
    1125           0 :     long   nRange = pHScroll->GetRange().Len();
    1126           0 :     double fX     = (double) nThumb / nRange;
    1127             : 
    1128           0 :     Window*       pWin          = mpContentWindow.get();
    1129           0 :     OutlinerView* pOutlinerView = pOlView->GetViewByWindow(pWin);
    1130             :     long          nViewWidth    = pWin->PixelToLogic(
    1131           0 :         pWin->GetSizePixel()).Width();
    1132           0 :     long          nTextWidth    = pOlView->GetPaperWidth();
    1133           0 :     nViewWidth                  = std::max(nViewWidth, nTextWidth);
    1134           0 :     long          nCurrentPos   = pOutlinerView->GetVisArea().Left();
    1135           0 :     long          nTargetPos    = (long)(fX * nViewWidth);
    1136           0 :     long          nDelta        = nTargetPos - nCurrentPos;
    1137             : 
    1138           0 :     pOutlinerView->HideCursor();
    1139           0 :     pOutlinerView->Scroll(-nDelta, 0);
    1140           0 :     pOutlinerView->ShowCursor(false);
    1141             : 
    1142           0 :     pOlView->InvalidateSlideNumberArea();
    1143           0 :     return 0;
    1144             : }
    1145             : 
    1146           0 : long OutlineViewShell::VirtVScrollHdl(ScrollBar* pVScroll)
    1147             : {
    1148           0 :     long nThumb = pVScroll->GetThumbPos();
    1149           0 :     long nRange = pVScroll->GetRange().Len();
    1150           0 :     double fY = (double) nThumb / nRange;
    1151             : 
    1152           0 :     Window*       pWin          = mpContentWindow.get();
    1153           0 :     OutlinerView* pOutlinerView = pOlView->GetViewByWindow(pWin);
    1154             :     long          nViewHeight   = pWin->PixelToLogic(
    1155           0 :         pWin->GetSizePixel()).Height();
    1156           0 :     long          nTextHeight   = pOlView->GetOutliner()->GetTextHeight();
    1157           0 :     nViewHeight                += nTextHeight;
    1158           0 :     long          nCurrentPos   = pOutlinerView->GetVisArea().Top();
    1159           0 :     long          nTargetPos    = (long)(fY * nViewHeight);
    1160           0 :     long          nDelta        = nTargetPos - nCurrentPos;
    1161             : 
    1162           0 :     pOutlinerView->HideCursor();
    1163           0 :     pOutlinerView->Scroll(0, -nDelta);
    1164           0 :     pOutlinerView->ShowCursor(false);
    1165             : 
    1166           0 :     pOlView->InvalidateSlideNumberArea();
    1167             : 
    1168           0 :     return 0;
    1169             : }
    1170             : 
    1171             : /**
    1172             :  * PrepareClose, gets called when the Shell shall be destroyed.
    1173             :  * Forwards the invocation to the View
    1174             :  */
    1175           0 : bool OutlineViewShell::PrepareClose( sal_Bool bUI )
    1176             : {
    1177           0 :     if( !ViewShell::PrepareClose(bUI) )
    1178           0 :         return false;
    1179             : 
    1180           0 :     return pOlView == NULL || pOlView->PrepareClose(bUI);
    1181             : }
    1182             : 
    1183             : 
    1184             : /**
    1185             :  * Zoom with zoom factor. Inform OutlinerView
    1186             :  */
    1187           0 : void OutlineViewShell::SetZoom(long nZoom)
    1188             : {
    1189           0 :     ViewShell::SetZoom(nZoom);
    1190             : 
    1191           0 :     ::sd::Window* pWindow = mpContentWindow.get();
    1192           0 :     if (pWindow)
    1193             :     {
    1194             :         // change OutputArea of OutlinerView
    1195           0 :         OutlinerView* pOutlinerView = pOlView->GetViewByWindow(pWindow);
    1196           0 :         Rectangle aWin(Point(0,0), pWindow->GetOutputSizePixel());
    1197           0 :         aWin = pWindow->PixelToLogic(aWin);
    1198           0 :         pOutlinerView->SetOutputArea(aWin);
    1199             :     }
    1200             : 
    1201           0 :     GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOM );
    1202           0 :     GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER );
    1203           0 : }
    1204             : 
    1205             : /**
    1206             :  * Zoom with zoom rectangle. Inform OutlinerView
    1207             :  */
    1208           0 : void OutlineViewShell::SetZoomRect(const Rectangle& rZoomRect)
    1209             : {
    1210           0 :     ViewShell::SetZoomRect(rZoomRect);
    1211             : 
    1212           0 :     ::sd::Window* pWindow = mpContentWindow.get();
    1213           0 :     if (pWindow)
    1214             :     {
    1215             :         // change OutputArea of OutlinerView
    1216           0 :         OutlinerView* pOutlinerView = pOlView->GetViewByWindow(pWindow);
    1217           0 :         Rectangle aWin(Point(0,0), pWindow->GetOutputSizePixel());
    1218           0 :         aWin = pWindow->PixelToLogic(aWin);
    1219           0 :         pOutlinerView->SetOutputArea(aWin);
    1220             :     }
    1221             : 
    1222           0 :     GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOM );
    1223           0 :     GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER );
    1224           0 : }
    1225             : 
    1226             : /**
    1227             :  * Before saving: Update Model of the Drawing Engine, then forward the
    1228             :  * invocation to the ObjectShell.
    1229             :  */
    1230           0 : void OutlineViewShell::Execute(SfxRequest& rReq)
    1231             : {
    1232           0 :     bool bForwardCall = true;
    1233             : 
    1234           0 :     switch(rReq.GetSlot())
    1235             :     {
    1236             :         case SID_SAVEDOC:
    1237             :         case SID_SAVEASDOC:
    1238           0 :             PrepareClose();
    1239           0 :             break;
    1240             : 
    1241             :         case SID_SEARCH_ITEM:
    1242             :             // Forward this request to the common (old) code of the
    1243             :             // document shell.
    1244           0 :             GetDocSh()->Execute (rReq);
    1245           0 :             bForwardCall = false;
    1246           0 :             break;
    1247             : 
    1248             :         case SID_SPELL_DIALOG:
    1249             :         {
    1250           0 :             SfxViewFrame* pViewFrame = GetViewFrame();
    1251           0 :             if (rReq.GetArgs() != NULL)
    1252             :                 pViewFrame->SetChildWindow (SID_SPELL_DIALOG,
    1253           0 :                     ((const SfxBoolItem&) (rReq.GetArgs()->
    1254           0 :                         Get(SID_SPELL_DIALOG))).GetValue());
    1255             :             else
    1256           0 :                 pViewFrame->ToggleChildWindow(SID_SPELL_DIALOG);
    1257             : 
    1258           0 :             pViewFrame->GetBindings().Invalidate(SID_SPELL_DIALOG);
    1259           0 :             rReq.Done ();
    1260             : 
    1261           0 :             bForwardCall = false;
    1262             :         }
    1263           0 :         break;
    1264             : 
    1265             :         default:
    1266             :             OSL_TRACE ("OutlineViewShell::Execute(): can not handle slot %d", rReq.GetSlot());
    1267           0 :             break;
    1268             : 
    1269             :     }
    1270             : 
    1271           0 :     if (bForwardCall)
    1272           0 :         ((DrawDocShell*)GetViewFrame()->GetObjectShell())->ExecuteSlot( rReq );
    1273           0 : }
    1274             : 
    1275             : /**
    1276             :  * Read FrameViews data and set actual views data
    1277             :  */
    1278           0 : void OutlineViewShell::ReadFrameViewData(FrameView* pView)
    1279             : {
    1280           0 :     ::Outliner* pOutl = pOlView->GetOutliner();
    1281             : 
    1282           0 :     pOutl->SetFlatMode( pView->IsNoAttribs() );
    1283             : 
    1284           0 :     sal_uLong nCntrl = pOutl->GetControlWord();
    1285             : 
    1286           0 :     if ( pView->IsNoColors() )
    1287           0 :         pOutl->SetControlWord(nCntrl | EE_CNTRL_NOCOLORS);
    1288             :     else
    1289           0 :         pOutl->SetControlWord(nCntrl & ~EE_CNTRL_NOCOLORS);
    1290             : 
    1291           0 :     sal_uInt16 nPage = mpFrameView->GetSelectedPage();
    1292           0 :     pLastPage = GetDoc()->GetSdPage( nPage, PK_STANDARD );
    1293           0 :     pOlView->SetActualPage(pLastPage);
    1294           0 : }
    1295             : 
    1296             : 
    1297             : 
    1298             : /**
    1299             :  * Write actual views data to FrameView
    1300             :  */
    1301           0 : void OutlineViewShell::WriteFrameViewData()
    1302             : {
    1303           0 :     ::Outliner* pOutl = pOlView->GetOutliner();
    1304             : 
    1305           0 :     sal_uLong nCntrl = pOutl->GetControlWord();
    1306           0 :     sal_Bool bNoColor = sal_False;
    1307           0 :     if (nCntrl & EE_CNTRL_NOCOLORS)
    1308           0 :         bNoColor = sal_True;
    1309           0 :     mpFrameView->SetNoColors(bNoColor);
    1310           0 :     mpFrameView->SetNoAttribs( pOutl->IsFlatMode() );
    1311           0 :     SdPage* pActualPage = pOlView->GetActualPage();
    1312             :     DBG_ASSERT(pActualPage, "No current page");
    1313           0 :     if( pActualPage )
    1314           0 :         mpFrameView->SetSelectedPage((pActualPage->GetPageNum() - 1) / 2);
    1315           0 : }
    1316             : 
    1317             : 
    1318             : /**
    1319             :  * Handle SfxRequests for the StatusBar
    1320             :  */
    1321           0 : void OutlineViewShell::ExecStatusBar(SfxRequest&)
    1322             : {
    1323           0 : }
    1324             : 
    1325             : 
    1326           0 : void OutlineViewShell::GetStatusBarState(SfxItemSet& rSet)
    1327             : {
    1328             :     // Zoom-Item
    1329           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_ZOOM ) )
    1330             :     {
    1331             :         SvxZoomItem* pZoomItem;
    1332           0 :         sal_uInt16 nZoom = (sal_uInt16) GetActiveWindow()->GetZoom();
    1333             : 
    1334           0 :         pZoomItem = new SvxZoomItem( SVX_ZOOM_PERCENT, nZoom );
    1335             : 
    1336             :         // limit area
    1337           0 :         sal_uInt16 nZoomValues = SVX_ZOOM_ENABLE_ALL;
    1338           0 :         nZoomValues &= ~SVX_ZOOM_ENABLE_OPTIMAL;
    1339           0 :         nZoomValues &= ~SVX_ZOOM_ENABLE_WHOLEPAGE;
    1340           0 :         nZoomValues &= ~SVX_ZOOM_ENABLE_PAGEWIDTH;
    1341             : 
    1342           0 :         pZoomItem->SetValueSet( nZoomValues );
    1343           0 :         rSet.Put( *pZoomItem );
    1344           0 :         delete pZoomItem;
    1345             :     }
    1346             : 
    1347           0 :     if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ATTR_ZOOMSLIDER ) )
    1348             :     {
    1349           0 :         if (GetDocSh()->IsUIActive() || !GetActiveWindow() )
    1350             :         {
    1351           0 :             rSet.DisableItem( SID_ATTR_ZOOMSLIDER );
    1352             :         }
    1353             :         else
    1354             :         {
    1355           0 :             sd::Window * pActiveWindow = GetActiveWindow();
    1356           0 :             SvxZoomSliderItem aZoomItem( (sal_uInt16) pActiveWindow->GetZoom(), (sal_uInt16)pActiveWindow->GetMinZoom(), (sal_uInt16)pActiveWindow->GetMaxZoom() ) ;
    1357           0 :             aZoomItem.AddSnappingPoint(100);
    1358           0 :             rSet.Put( aZoomItem );
    1359             :         }
    1360             :     }
    1361             : 
    1362             : 
    1363             :     // page view and layout
    1364             : 
    1365           0 :     sal_uInt16  nPageCount = GetDoc()->GetSdPageCount( PK_STANDARD );
    1366           0 :     OUString  aPageStr, aLayoutStr;
    1367             : 
    1368           0 :     ::sd::Window*       pWin        = GetActiveWindow();
    1369           0 :     OutlinerView*   pActiveView = pOlView->GetViewByWindow( pWin );
    1370           0 :     ::Outliner*     pOutliner   = pOlView->GetOutliner();
    1371             : 
    1372           0 :     std::vector<Paragraph*> aSelList;
    1373           0 :     pActiveView->CreateSelectionList(aSelList);
    1374             : 
    1375           0 :     Paragraph *pFirstPara = NULL;
    1376           0 :     Paragraph *pLastPara = NULL;
    1377             : 
    1378           0 :     if (!aSelList.empty())
    1379             :     {
    1380           0 :         pFirstPara = *(aSelList.begin());
    1381           0 :         pLastPara = *(aSelList.rbegin());
    1382             :     }
    1383             : 
    1384           0 :     if( !pOutliner->HasParaFlag(pFirstPara,PARAFLAG_ISPAGE) )
    1385           0 :         pFirstPara = pOlView->GetPrevTitle( pFirstPara );
    1386             : 
    1387           0 :     if( !pOutliner->HasParaFlag(pLastPara, PARAFLAG_ISPAGE) )
    1388           0 :         pLastPara = pOlView->GetPrevTitle( pLastPara );
    1389             : 
    1390             :     // only one page selected?
    1391           0 :     if( pFirstPara == pLastPara )
    1392             :     {
    1393             :         // how many pages are we before the selected page?
    1394           0 :         sal_uLong nPos = 0L;
    1395           0 :         while( pFirstPara )
    1396             :         {
    1397           0 :             pFirstPara = pOlView->GetPrevTitle( pFirstPara );
    1398           0 :             if( pFirstPara )
    1399           0 :                 nPos++;
    1400             :         }
    1401             : 
    1402           0 :         if( nPos >= GetDoc()->GetSdPageCount( PK_STANDARD ) )
    1403           0 :             nPos = 0;
    1404             : 
    1405           0 :         SdrPage* pPage = GetDoc()->GetSdPage( (sal_uInt16) nPos, PK_STANDARD );
    1406             : 
    1407           0 :         aPageStr = SD_RESSTR(STR_SD_PAGE);
    1408           0 :         aPageStr += " ";
    1409           0 :         aPageStr += OUString::number( (sal_Int32)(nPos + 1) );   // sal_uLong -> sal_Int32
    1410           0 :         aPageStr += " / ";
    1411           0 :         aPageStr += OUString::number( nPageCount );
    1412             : 
    1413           0 :         aLayoutStr = pPage->GetLayoutName();
    1414           0 :         sal_Int32 nIndex = aLayoutStr.indexOf(SD_LT_SEPARATOR);
    1415           0 :         if (nIndex != -1)
    1416           0 :             aLayoutStr = aLayoutStr.copy(0, nIndex);
    1417             :         //Now, CurrentPage property change is already sent for DrawView and OutlineView, so it is not necessary to send again here
    1418           0 :         if(m_StrOldPageName!=aPageStr)
    1419             :         {
    1420           0 :             GetViewShellBase().GetDrawController().fireSwitchCurrentPage(nPos);
    1421           0 :             m_StrOldPageName = aPageStr;
    1422             :         }
    1423             :     }
    1424           0 :     rSet.Put( SfxStringItem( SID_STATUS_PAGE, aPageStr ) );
    1425           0 :     rSet.Put( SfxStringItem( SID_STATUS_LAYOUT, aLayoutStr ) );
    1426           0 : }
    1427             : 
    1428             : 
    1429           0 : void OutlineViewShell::Command( const CommandEvent& rCEvt, ::sd::Window* pWin )
    1430             : {
    1431           0 :     if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU )
    1432             :     {
    1433           0 :         GetActiveWindow()->ReleaseMouse();
    1434             : 
    1435           0 :         OutlinerView* pOLV = pOlView->GetViewByWindow(GetActiveWindow());
    1436           0 :         Point aPos(rCEvt.GetMousePosPixel());
    1437             : 
    1438           0 :         if (pOLV && pOLV->IsWrongSpelledWordAtPos(aPos))
    1439             :         {
    1440             :             // Popup for Online-Spelling now handled by DrawDocShell
    1441           0 :             Link aLink = LINK(GetDocSh(), DrawDocShell, OnlineSpellCallback);
    1442             : 
    1443           0 :             pOLV->ExecuteSpellPopup(aPos, &aLink);
    1444             :         }
    1445             :         else
    1446             :         {
    1447           0 :            GetViewFrame()->GetDispatcher()->ExecutePopup(SdResId(RID_OUTLINE_POPUP));
    1448             :         }
    1449             :     }
    1450             :     else
    1451             :     {
    1452           0 :         ViewShell::Command( rCEvt, pWin );
    1453             : 
    1454             :         // if necessary communicate the new context to the Preview
    1455           0 :         Invalidate( SID_PREVIEW_STATE );
    1456             : 
    1457             :     }
    1458           0 : }
    1459             : 
    1460             : 
    1461             : 
    1462           0 : sal_Bool OutlineViewShell::KeyInput(const KeyEvent& rKEvt, ::sd::Window* pWin)
    1463             : {
    1464           0 :     sal_Bool bReturn = sal_False;
    1465           0 :     OutlineViewPageChangesGuard aGuard(pOlView);
    1466             : 
    1467           0 :     if (pWin == NULL && HasCurrentFunction())
    1468             :     {
    1469           0 :         bReturn = GetCurrentFunction()->KeyInput(rKEvt);
    1470             :     }
    1471             : 
    1472             :     // no, forward to base class
    1473             :     else
    1474             :     {
    1475           0 :         bReturn = ViewShell::KeyInput(rKEvt, pWin);
    1476             :     }
    1477             : 
    1478           0 :     Invalidate(SID_STYLE_EDIT);
    1479           0 :     Invalidate(SID_STYLE_NEW);
    1480           0 :     Invalidate(SID_STYLE_DELETE);
    1481           0 :     Invalidate(SID_STYLE_HIDE);
    1482           0 :     Invalidate(SID_STYLE_SHOW);
    1483           0 :     Invalidate(SID_STYLE_UPDATE_BY_EXAMPLE);
    1484           0 :     Invalidate(SID_STYLE_NEW_BY_EXAMPLE);
    1485           0 :     Invalidate(SID_STYLE_WATERCAN);
    1486           0 :     Invalidate(SID_STYLE_FAMILY5);
    1487             : 
    1488             :     // check and distinguish cursor movements- or input-keys
    1489           0 :     KeyCode aKeyGroup( rKEvt.GetKeyCode().GetGroup() );
    1490           0 :     if( (aKeyGroup != KEYGROUP_CURSOR && aKeyGroup != KEYGROUP_FKEYS) ||
    1491           0 :         (GetActualPage() != pLastPage) )
    1492             :     {
    1493           0 :         Invalidate( SID_PREVIEW_STATE );
    1494             :     }
    1495             : 
    1496           0 :     return(bReturn);
    1497             : }
    1498             : 
    1499             : 
    1500             : /**
    1501             :  * Return text of the selection
    1502             :  */
    1503           0 : OUString OutlineViewShell::GetSelectionText(bool bCompleteWords)
    1504             : {
    1505           0 :     OUString aStrSelection;
    1506           0 :     ::Outliner* pOl = pOlView->GetOutliner();
    1507           0 :     OutlinerView* pOutlinerView = pOlView->GetViewByWindow( GetActiveWindow() );
    1508             : 
    1509           0 :     if (pOl)
    1510             :     {
    1511           0 :         if (bCompleteWords)
    1512             :         {
    1513           0 :             ESelection aSel = pOutlinerView->GetSelection();
    1514           0 :             OUString aStrCurrentDelimiters = pOl->GetWordDelimiters();
    1515             : 
    1516           0 :             pOl->SetWordDelimiters(" .,;\"'");
    1517           0 :             aStrSelection = pOl->GetWord( aSel.nEndPara, aSel.nEndPos );
    1518           0 :             pOl->SetWordDelimiters( aStrCurrentDelimiters );
    1519             :         }
    1520             :         else
    1521             :         {
    1522           0 :             aStrSelection = pOutlinerView->GetSelected();
    1523             :         }
    1524             :     }
    1525             : 
    1526           0 :     return (aStrSelection);
    1527             : }
    1528             : 
    1529             : 
    1530             : /**
    1531             :  * Is something selected?
    1532             :  */
    1533           0 : sal_Bool OutlineViewShell::HasSelection(sal_Bool bText) const
    1534             : {
    1535           0 :     sal_Bool bReturn = sal_False;
    1536             : 
    1537           0 :     if (bText)
    1538             :     {
    1539           0 :         OutlinerView* pOutlinerView = pOlView->GetViewByWindow( GetActiveWindow() );
    1540             : 
    1541           0 :         if (pOutlinerView && !pOutlinerView->GetSelected().isEmpty())
    1542             :         {
    1543           0 :             bReturn = sal_True;
    1544             :         }
    1545             :     }
    1546             : 
    1547           0 :     return bReturn;
    1548             : }
    1549             : 
    1550             : 
    1551             : /**
    1552             :  * Status of Attribute-Items
    1553             :  */
    1554           0 : void OutlineViewShell::GetAttrState( SfxItemSet& rSet )
    1555             : {
    1556           0 :     SfxWhichIter  aIter( rSet );
    1557           0 :     sal_uInt16        nWhich = aIter.FirstWhich();
    1558           0 :     SfxAllItemSet aAllSet( *rSet.GetPool() );
    1559             : 
    1560           0 :     while ( nWhich )
    1561             :     {
    1562           0 :         sal_uInt16 nSlotId = SfxItemPool::IsWhich(nWhich)
    1563           0 :             ? GetPool().GetSlotId(nWhich)
    1564           0 :             : nWhich;
    1565             : 
    1566           0 :         switch ( nSlotId )
    1567             :         {
    1568             :             case SID_STYLE_FAMILY2:
    1569             :             case SID_STYLE_FAMILY3:
    1570             :             {
    1571           0 :                 rSet.DisableItem( nWhich );
    1572             :             }
    1573           0 :             break;
    1574             : 
    1575             :             case SID_STYLE_FAMILY5:
    1576             :             {
    1577           0 :                 SfxStyleSheet* pStyleSheet = pOlView->GetViewByWindow(GetActiveWindow())->GetStyleSheet();
    1578             : 
    1579           0 :                 if( pStyleSheet )
    1580             :                 {
    1581           0 :                     pStyleSheet = ((SdStyleSheet*)pStyleSheet)->GetPseudoStyleSheet();
    1582             : 
    1583           0 :                     if (pStyleSheet)
    1584             :                     {
    1585           0 :                         SfxTemplateItem aItem( nWhich, pStyleSheet->GetName() );
    1586           0 :                         aAllSet.Put( aItem, aItem.Which()  );
    1587             :                     }
    1588             :                 }
    1589             : 
    1590           0 :                 if( !pStyleSheet )
    1591             :                 {
    1592           0 :                     SfxTemplateItem aItem( nWhich, OUString() );
    1593           0 :                     aAllSet.Put( aItem, aItem.Which() );
    1594             :                     // rSet.DisableItem( nWhich );
    1595             :                 }
    1596             :             }
    1597           0 :             break;
    1598             : 
    1599             :             case SID_STYLE_EDIT:
    1600             :             {
    1601           0 :                 ISfxTemplateCommon* pTmplCommon = SFX_APP()->GetCurrentTemplateCommon(GetViewFrame()->GetBindings());
    1602             : 
    1603           0 :                 if (pTmplCommon && pTmplCommon->GetActualFamily() == SD_STYLE_FAMILY_PSEUDO)
    1604             :                 {
    1605           0 :                     SfxItemSet aSet(*rSet.GetPool(), SID_STATUS_LAYOUT, SID_STATUS_LAYOUT);
    1606           0 :                     GetStatusBarState(aSet);
    1607           0 :                     OUString aRealStyle = ((SfxStringItem&) aSet.Get(SID_STATUS_LAYOUT)).GetValue();
    1608           0 :                     if (aRealStyle.isEmpty())
    1609             :                     {
    1610             :                         // no unique layout name found
    1611           0 :                         rSet.DisableItem(nWhich);
    1612           0 :                     }
    1613             :                 }
    1614             :             }
    1615           0 :             break;
    1616             : 
    1617             :             case SID_STYLE_UPDATE_BY_EXAMPLE:
    1618             :             {
    1619           0 :                 ::sd::Window*     pActWin = GetActiveWindow();
    1620           0 :                 OutlinerView* pOV = pOlView->GetViewByWindow(pActWin);
    1621           0 :                 ESelection aESel(pOV->GetSelection());
    1622             : 
    1623           0 :                 if (aESel.nStartPara != aESel.nEndPara ||
    1624           0 :                     aESel.nStartPos  != aESel.nEndPos)
    1625             :                     // spanned selection, i.e. StyleSheet and/or
    1626             :                     // attribution not necessarily unqiue
    1627           0 :                     rSet.DisableItem(nWhich);
    1628             :             }
    1629           0 :             break;
    1630             : 
    1631             :             case SID_STYLE_NEW:
    1632             :             case SID_STYLE_DELETE:
    1633             :             case SID_STYLE_HIDE:
    1634             :             case SID_STYLE_SHOW:
    1635             :             case SID_STYLE_NEW_BY_EXAMPLE:
    1636             :             case SID_STYLE_WATERCAN:
    1637             :             {
    1638           0 :                 rSet.DisableItem(nWhich);
    1639             :             }
    1640           0 :             break;
    1641             :         }
    1642             : 
    1643           0 :         nWhich = aIter.NextWhich();
    1644             :     }
    1645             : 
    1646           0 :     rSet.Put( aAllSet, false );
    1647           0 : }
    1648             : 
    1649             : 
    1650             : 
    1651             : 
    1652           0 : void OutlineViewShell::MouseButtonUp(const MouseEvent& rMEvt, ::sd::Window* pWin)
    1653             : {
    1654             :     // first the base classes
    1655           0 :     ViewShell::MouseButtonUp(rMEvt, pWin);
    1656             : 
    1657           0 :     Invalidate(SID_STYLE_EDIT);
    1658           0 :     Invalidate(SID_STYLE_NEW);
    1659           0 :     Invalidate(SID_STYLE_DELETE);
    1660           0 :     Invalidate(SID_STYLE_HIDE);
    1661           0 :     Invalidate(SID_STYLE_SHOW);
    1662           0 :     Invalidate(SID_STYLE_UPDATE_BY_EXAMPLE);
    1663           0 :     Invalidate(SID_STYLE_NEW_BY_EXAMPLE);
    1664           0 :     Invalidate(SID_STYLE_WATERCAN);
    1665           0 :     Invalidate(SID_STYLE_FAMILY5);
    1666             : 
    1667             :     // if necessary communicate the new context to the Preview
    1668           0 :     if( GetActualPage() != pLastPage )
    1669           0 :         Invalidate( SID_PREVIEW_STATE );
    1670           0 : }
    1671             : 
    1672             : 
    1673             : 
    1674           0 : SdPage* OutlineViewShell::getCurrentPage() const
    1675             : {
    1676             :     // since there are no master pages in outline view, we can
    1677             :     // for now use the GetActualPage method
    1678           0 :     return const_cast<OutlineViewShell*>(this)->GetActualPage();
    1679             : }
    1680             : 
    1681             : /**
    1682             :  * Returns the first selected page.
    1683             :  * If nothing is selected, the first page is returned.
    1684             :  */
    1685           0 : SdPage* OutlineViewShell::GetActualPage()
    1686             : {
    1687           0 :     return pOlView->GetActualPage();
    1688             : }
    1689             : 
    1690           0 : void OutlineViewShell::UpdatePreview( SdPage* pPage, sal_Bool )
    1691             : {
    1692           0 :     const bool bNewPage = pPage != pLastPage;
    1693           0 :     pLastPage = pPage;
    1694           0 :     if (bNewPage)
    1695             :     {
    1696           0 :         OutlineViewPageChangesGuard aGuard(pOlView);
    1697           0 :         SetCurrentPage(pPage);
    1698             :     }
    1699           0 : }
    1700             : 
    1701             : 
    1702           0 : bool OutlineViewShell::UpdateTitleObject( SdPage* pPage, Paragraph* pPara )
    1703             : {
    1704             :     DBG_ASSERT( pPage, "sd::OutlineViewShell::UpdateTitleObject(), pPage == 0?" );
    1705             :     DBG_ASSERT( pPara, "sd::OutlineViewShell::UpdateTitleObject(), pPara == 0?" );
    1706             : 
    1707           0 :     if( !pPage || !pPara )
    1708           0 :         return false;
    1709             : 
    1710           0 :     ::Outliner*             pOutliner = pOlView->GetOutliner();
    1711           0 :     SdrTextObj*         pTO  = pOlView->GetTitleTextObject( pPage );
    1712           0 :     OutlinerParaObject* pOPO = NULL;
    1713             : 
    1714           0 :     OUString aTest = pOutliner->GetText(pPara);
    1715           0 :     bool    bText = !aTest.isEmpty();
    1716           0 :     bool    bNewObject = false;
    1717             : 
    1718           0 :     if( bText )
    1719             :     {
    1720             :         // create a title object if we don't have one but have text
    1721           0 :         if( !pTO )
    1722             :         {
    1723             :             DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateTitleObject(), no undo for model change!?" );
    1724           0 :             pTO = pOlView->CreateTitleTextObject(pPage);
    1725           0 :             bNewObject = true;
    1726             :         }
    1727             : 
    1728             :         // if we have a title object and a text, set the text
    1729           0 :         if( pTO )
    1730             :         {
    1731           0 :             pOPO = pOutliner->CreateParaObject( pOutliner->GetAbsPos( pPara ), 1 );
    1732           0 :             pOPO->SetOutlinerMode( OUTLINERMODE_TITLEOBJECT );
    1733           0 :             pOPO->SetVertical( pTO->IsVerticalWriting() );
    1734           0 :             if( pTO->GetOutlinerParaObject() && (pOPO->GetTextObject() == pTO->GetOutlinerParaObject()->GetTextObject()) )
    1735             :             {
    1736             :                 // do nothing, same text already set
    1737           0 :                 delete pOPO;
    1738             :             }
    1739             :             else
    1740             :             {
    1741             :                 DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateTitleObject(), no undo for model change!?" );
    1742           0 :                 if( !bNewObject && pOlView->isRecordingUndo() )
    1743           0 :                     pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoObjectSetText(*pTO,0));
    1744             : 
    1745           0 :                 pTO->SetOutlinerParaObject( pOPO );
    1746           0 :                 pTO->SetEmptyPresObj( false );
    1747           0 :                 pTO->ActionChanged();
    1748             :             }
    1749             :         }
    1750             :     }
    1751           0 :     else if( pTO )
    1752             :     {
    1753             :         // no text but object available?
    1754             :         // outline object available, but we have no text
    1755           0 :         if(pPage->IsPresObj(pTO))
    1756             :         {
    1757             :             // if it is not already empty
    1758           0 :             if( !pTO->IsEmptyPresObj() )
    1759             :             {
    1760             :                 DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateTitleObject(), no undo for model change!?" );
    1761             : 
    1762             :                 // make it empty
    1763           0 :                 if( pOlView->isRecordingUndo() )
    1764           0 :                     pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoObjectSetText(*pTO,0));
    1765           0 :                 pPage->RestoreDefaultText( pTO );
    1766           0 :                 pTO->SetEmptyPresObj(true);
    1767           0 :                 pTO->ActionChanged();
    1768             :             }
    1769             :         }
    1770             :         else
    1771             :         {
    1772             :             DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateTitleObject(), no undo for model change!?" );
    1773             :             // outline object is not part of the layout, delete it
    1774           0 :             if( pOlView->isRecordingUndo() )
    1775           0 :                 pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoRemoveObject(*pTO));
    1776           0 :             pPage->RemoveObject(pTO->GetOrdNum());
    1777             :         }
    1778             :     }
    1779             : 
    1780           0 :     return bNewObject;
    1781             : }
    1782             : 
    1783             : 
    1784           0 : bool OutlineViewShell::UpdateOutlineObject( SdPage* pPage, Paragraph* pPara )
    1785             : {
    1786             :     DBG_ASSERT( pPage, "sd::OutlineViewShell::UpdateOutlineObject(), pPage == 0?" );
    1787             :     DBG_ASSERT( pPara, "sd::OutlineViewShell::UpdateOutlineObject(), pPara == 0?" );
    1788             : 
    1789           0 :     if( !pPage || !pPara )
    1790           0 :         return false;
    1791             : 
    1792           0 :     ::Outliner*         pOutliner = pOlView->GetOutliner();
    1793           0 :     OutlinerParaObject* pOPO = NULL;
    1794           0 :     SdrTextObj*         pTO  = NULL;
    1795             : 
    1796           0 :     sal_Bool bNewObject = sal_False;
    1797             : 
    1798           0 :     sal_uInt16 eOutlinerMode = OUTLINERMODE_TITLEOBJECT;
    1799           0 :     pTO = (SdrTextObj*)pPage->GetPresObj( PRESOBJ_TEXT );
    1800           0 :     if( !pTO )
    1801             :     {
    1802           0 :         eOutlinerMode = OUTLINERMODE_OUTLINEOBJECT;
    1803           0 :         pTO = pOlView->GetOutlineTextObject( pPage );
    1804             :     }
    1805             : 
    1806             :     // how many paragraphs in the outline?
    1807           0 :     sal_Int32 nTitlePara     = pOutliner->GetAbsPos( pPara );
    1808           0 :     sal_Int32 nPara          = nTitlePara + 1;
    1809           0 :     sal_Int32 nParasInLayout = 0L;
    1810           0 :     pPara = pOutliner->GetParagraph( nPara );
    1811           0 :     while( pPara && !pOutliner->HasParaFlag(pPara, PARAFLAG_ISPAGE) )
    1812             :     {
    1813           0 :         nParasInLayout++;
    1814           0 :         pPara = pOutliner->GetParagraph( ++nPara );
    1815             :     }
    1816           0 :     if( nParasInLayout )
    1817             :     {
    1818             :         // create an OutlinerParaObject
    1819           0 :         pPara = pOutliner->GetParagraph( nTitlePara + 1 );
    1820           0 :         pOPO  = pOutliner->CreateParaObject( nTitlePara + 1, nParasInLayout );
    1821             :     }
    1822             : 
    1823           0 :     if( pOPO )
    1824             :     {
    1825             :         DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateOutlineObject(), no undo for model change!?" );
    1826             : 
    1827             :         // do we need an outline text object?
    1828           0 :         if( !pTO )
    1829             :         {
    1830           0 :             pTO = pOlView->CreateOutlineTextObject( pPage );
    1831           0 :             bNewObject = sal_True;
    1832             :         }
    1833             : 
    1834             :         // page object, outline text in Outliner:
    1835             :         // apply text
    1836           0 :         if( pTO )
    1837             :         {
    1838           0 :             pOPO->SetVertical( pTO->IsVerticalWriting() );
    1839           0 :             pOPO->SetOutlinerMode( eOutlinerMode );
    1840           0 :             if( pTO->GetOutlinerParaObject() && (pOPO->GetTextObject() == pTO->GetOutlinerParaObject()->GetTextObject()) )
    1841             :             {
    1842             :                 // do nothing, same text already set
    1843           0 :                 delete pOPO;
    1844             :             }
    1845             :             else
    1846             :             {
    1847           0 :                 if( !bNewObject && pOlView->isRecordingUndo() )
    1848           0 :                     pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoObjectSetText(*pTO,0));
    1849             : 
    1850           0 :                 pTO->SetOutlinerParaObject( pOPO );
    1851           0 :                 pTO->SetEmptyPresObj( false );
    1852           0 :                 pTO->ActionChanged();
    1853             :             }
    1854             :         }
    1855             :         else
    1856           0 :             delete pOPO;
    1857             :     }
    1858           0 :     else if( pTO )
    1859             :     {
    1860             :         // page object but no outline text:
    1861             :         // if the object is in the outline of the page -> default text
    1862             : 
    1863             :         // otherwise delete object
    1864           0 :         if( pPage->IsPresObj(pTO) )
    1865             :         {
    1866           0 :             if( !pTO->IsEmptyPresObj() )
    1867             :             {
    1868             :                 DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateOutlineObject(), no undo for model change!?" );
    1869             : 
    1870             :                 // delete old OutlinerParaObject, too
    1871           0 :                 if( pOlView->isRecordingUndo() )
    1872           0 :                     pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoObjectSetText(*pTO,0));
    1873           0 :                 pPage->RestoreDefaultText( pTO );
    1874           0 :                 pTO->SetEmptyPresObj(true);
    1875           0 :                 pTO->ActionChanged();
    1876             :             }
    1877             :         }
    1878             :         else
    1879             :         {
    1880             :             DBG_ASSERT( pOlView->isRecordingUndo(), "sd::OutlineViewShell::UpdateOutlineObject(), no undo for model change!?" );
    1881           0 :             if( pOlView->isRecordingUndo() )
    1882           0 :                 pOlView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoRemoveObject(*pTO));
    1883           0 :             pPage->RemoveObject(pTO->GetOrdNum());
    1884             :         }
    1885             :     }
    1886             : 
    1887           0 :     return bNewObject;
    1888             : }
    1889             : 
    1890             : 
    1891             : /**
    1892             :  * Fill Outliner from Stream
    1893             :  */
    1894           0 : sal_uLong OutlineViewShell::Read(SvStream& rInput, const OUString& rBaseURL, sal_uInt16 eFormat)
    1895             : {
    1896           0 :     sal_uLong bRet = 0;
    1897             : 
    1898           0 :     ::Outliner* pOutl = pOlView->GetOutliner();
    1899             : 
    1900             :     {
    1901           0 :     OutlineViewPageChangesGuard aGuard( pOlView );
    1902           0 :     OutlineViewModelChangeGuard aGuard2( *pOlView );
    1903             : 
    1904           0 :     bRet = pOutl->Read( rInput, rBaseURL, eFormat, GetDocSh()->GetHeaderAttributes() );
    1905             : 
    1906           0 :     SdPage* pPage = GetDoc()->GetSdPage( GetDoc()->GetSdPageCount(PK_STANDARD) - 1, PK_STANDARD );;
    1907           0 :     SfxStyleSheet* pTitleSheet = pPage->GetStyleSheetForPresObj( PRESOBJ_TITLE );
    1908           0 :     SfxStyleSheet* pOutlSheet = pPage->GetStyleSheetForPresObj( PRESOBJ_OUTLINE );
    1909             : 
    1910           0 :     sal_Int32 nParaCount = pOutl->GetParagraphCount();
    1911           0 :     if ( nParaCount > 0 )
    1912             :     {
    1913           0 :         for ( sal_Int32 nPara = 0; nPara < nParaCount; nPara++ )
    1914             :         {
    1915           0 :             pOlView->UpdateParagraph( nPara );
    1916             : 
    1917           0 :             sal_Int16 nDepth = pOutl->GetDepth( nPara );
    1918             : 
    1919           0 :             if( (nDepth == 0) || !nPara )
    1920             :             {
    1921           0 :                 Paragraph* pPara = pOutl->GetParagraph( nPara );
    1922           0 :                 pOutl->SetDepth(pPara, -1);
    1923           0 :                 pOutl->SetParaFlag(pPara, PARAFLAG_ISPAGE);
    1924             : 
    1925           0 :                 pOutl->SetStyleSheet( nPara, pTitleSheet );
    1926             : 
    1927           0 :                 if( nPara ) // first slide already exists
    1928           0 :                     pOlView->InsertSlideForParagraph( pPara );
    1929             :             }
    1930             :             else
    1931             :             {
    1932           0 :                 pOutl->SetDepth( pOutl->GetParagraph( nPara ), nDepth - 1 );
    1933           0 :                 OUString aStyleSheetName = pOutlSheet->GetName();
    1934           0 :                 if (!aStyleSheetName.isEmpty())
    1935           0 :                     aStyleSheetName = aStyleSheetName.copy(0, aStyleSheetName.getLength() - 1);
    1936           0 :                 aStyleSheetName += OUString::number( nDepth );
    1937           0 :                 SfxStyleSheetBasePool* pStylePool = GetDoc()->GetStyleSheetPool();
    1938           0 :                 SfxStyleSheet* pStyle = (SfxStyleSheet*) pStylePool->Find( aStyleSheetName, pOutlSheet->GetFamily() );
    1939             :                 DBG_ASSERT( pStyle, "AutoStyleSheetName - Style not found!" );
    1940           0 :                 if ( pStyle )
    1941           0 :                     pOutl->SetStyleSheet( nPara, pStyle );
    1942             :             }
    1943             :         }
    1944           0 :     }
    1945             :     }
    1946             : 
    1947           0 :     pOutl->GetUndoManager().Clear();
    1948             : 
    1949           0 :     return( bRet );
    1950             : }
    1951             : 
    1952           0 : void OutlineViewShell::WriteUserDataSequence ( ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse )
    1953             : {
    1954           0 :     WriteFrameViewData();
    1955             : 
    1956           0 :     ViewShell::WriteUserDataSequence( rSequence, bBrowse );
    1957           0 : }
    1958             : 
    1959           0 : void OutlineViewShell::ReadUserDataSequence ( const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& rSequence, sal_Bool bBrowse )
    1960             : {
    1961           0 :     WriteFrameViewData();
    1962             : 
    1963           0 :     ViewShell::ReadUserDataSequence( rSequence, bBrowse );
    1964             : 
    1965           0 :     ReadFrameViewData( mpFrameView );
    1966           0 : }
    1967             : 
    1968           0 : void OutlineViewShell::VisAreaChanged(const Rectangle& rRect)
    1969             : {
    1970           0 :     ViewShell::VisAreaChanged( rRect );
    1971             : 
    1972           0 :     GetViewShellBase().GetDrawController().FireVisAreaChanged(rRect);
    1973           0 : }
    1974             : 
    1975             : /** If there is a valid controller then create a new instance of
    1976             :     <type>AccessibleDrawDocumentView</type>.  Otherwise return an empty
    1977             :     reference.
    1978             : */
    1979             : ::com::sun::star::uno::Reference<
    1980             :     ::com::sun::star::accessibility::XAccessible>
    1981           0 :     OutlineViewShell::CreateAccessibleDocumentView (::sd::Window* pWindow)
    1982             : {
    1983             :     OSL_ASSERT (GetViewShell()!=NULL);
    1984           0 :     if (GetViewShell()->GetController() != NULL)
    1985             :     {
    1986             :         ::accessibility::AccessibleOutlineView* pDocumentView =
    1987             :             new ::accessibility::AccessibleOutlineView (
    1988             :                 pWindow,
    1989             :                 this,
    1990             :                 GetViewShell()->GetController(),
    1991           0 :                 pWindow->GetAccessibleParentWindow()->GetAccessible());
    1992           0 :         pDocumentView->Init();
    1993             :         return ::com::sun::star::uno::Reference<
    1994             :             ::com::sun::star::accessibility::XAccessible>
    1995             :             (static_cast< ::com::sun::star::uno::XWeak*>(pDocumentView),
    1996           0 :                 ::com::sun::star::uno::UNO_QUERY);
    1997             :     }
    1998             : 
    1999             :     OSL_TRACE ("OutlineViewShell::CreateAccessibleDocumentView: no controller");
    2000           0 :     return ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >();
    2001             : }
    2002             : 
    2003             : 
    2004             : 
    2005             : 
    2006           0 : void OutlineViewShell::GetState (SfxItemSet& rSet)
    2007             : {
    2008             :     // Iterate over all requested items in the set.
    2009           0 :     SfxWhichIter aIter( rSet );
    2010           0 :     sal_uInt16 nWhich = aIter.FirstWhich();
    2011           0 :     while (nWhich)
    2012             :     {
    2013           0 :         switch (nWhich)
    2014             :         {
    2015             :             case SID_SEARCH_ITEM:
    2016             :             case SID_SEARCH_OPTIONS:
    2017             :                 // Call common (old) implementation in the document shell.
    2018           0 :                 GetDocSh()->GetState (rSet);
    2019           0 :                 break;
    2020             :             default:
    2021             :                 OSL_TRACE ("OutlineViewShell::GetState(): can not handle which id %d", nWhich);
    2022           0 :                 break;
    2023             :         }
    2024           0 :         nWhich = aIter.NextWhich();
    2025           0 :     }
    2026           0 : }
    2027             : 
    2028             : 
    2029             : 
    2030             : 
    2031           0 : void OutlineViewShell::SetCurrentPage (SdPage* pPage)
    2032             : {
    2033             :     // Adapt the selection of the model.
    2034           0 :     for (sal_uInt16 i=0; i<GetDoc()->GetSdPageCount(PK_STANDARD); i++)
    2035             :         GetDoc()->SetSelected(
    2036             :             GetDoc()->GetSdPage(i, PK_STANDARD),
    2037           0 :             sal_False);
    2038           0 :     GetDoc()->SetSelected (pPage, sal_True);
    2039             : 
    2040           0 :     DrawController& rController(GetViewShellBase().GetDrawController());
    2041           0 :     rController.FireSelectionChangeListener();
    2042           0 :     rController.FireSwitchCurrentPage (pPage);
    2043             : 
    2044           0 :     pOlView->SetActualPage(pPage);
    2045           0 : }
    2046             : 
    2047             : 
    2048           0 : } // end of namespace sd
    2049             : 
    2050             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10