LCOV - code coverage report
Current view: top level - sc/source/ui/undo - undotab.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 172 848 20.3 %
Date: 2015-06-13 12:38:46 Functions: 49 230 21.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <sfx2/app.hxx>
      21             : #include <sfx2/bindings.hxx>
      22             : #include <sfx2/dispatch.hxx>
      23             : #include <svl/smplhint.hxx>
      24             : 
      25             : #include "undotab.hxx"
      26             : #include "document.hxx"
      27             : #include "docsh.hxx"
      28             : #include "tabvwsh.hxx"
      29             : #include "globstr.hrc"
      30             : #include "global.hxx"
      31             : #include "sc.hrc"
      32             : #include "undoolk.hxx"
      33             : #include "target.hxx"
      34             : #include "uiitems.hxx"
      35             : #include "prnsave.hxx"
      36             : #include "printfun.hxx"
      37             : #include "chgtrack.hxx"
      38             : #include "tabprotection.hxx"
      39             : #include "viewdata.hxx"
      40             : #include "progress.hxx"
      41             : #include "markdata.hxx"
      42             : 
      43             : // for ScUndoRenameObject - might me moved to another file later
      44             : #include <svx/svditer.hxx>
      45             : #include <svx/svdoole2.hxx>
      46             : #include <svx/svdpage.hxx>
      47             : #include "drwlayer.hxx"
      48             : #include "scresid.hxx"
      49             : 
      50             : #include <utility>
      51             : #include <vector>
      52             : #include <boost/scoped_ptr.hpp>
      53             : 
      54             : extern bool bDrawIsInUndo; // somewhere as member!
      55             : 
      56             : using namespace com::sun::star;
      57             : using ::com::sun::star::uno::Sequence;
      58             : using ::std::unique_ptr;
      59             : using ::std::vector;
      60             : using ::boost::shared_ptr;
      61             : 
      62           0 : TYPEINIT1(ScUndoInsertTab,      SfxUndoAction);
      63           0 : TYPEINIT1(ScUndoInsertTables,   SfxUndoAction);
      64           0 : TYPEINIT1(ScUndoDeleteTab,      SfxUndoAction);
      65           0 : TYPEINIT1(ScUndoRenameTab,      SfxUndoAction);
      66           0 : TYPEINIT1(ScUndoMoveTab,        SfxUndoAction);
      67           0 : TYPEINIT1(ScUndoCopyTab,        SfxUndoAction);
      68           0 : TYPEINIT1(ScUndoMakeScenario,   SfxUndoAction);
      69           0 : TYPEINIT1(ScUndoImportTab,      SfxUndoAction);
      70           0 : TYPEINIT1(ScUndoRemoveLink,     SfxUndoAction);
      71           0 : TYPEINIT1(ScUndoShowHideTab,    SfxUndoAction);
      72           0 : TYPEINIT1(ScUndoPrintRange,     SfxUndoAction);
      73           0 : TYPEINIT1(ScUndoScenarioFlags,  SfxUndoAction);
      74           0 : TYPEINIT1(ScUndoRenameObject,   SfxUndoAction);
      75           0 : TYPEINIT1(ScUndoLayoutRTL,      SfxUndoAction);
      76           0 : TYPEINIT1(ScUndoTabColor,  SfxUndoAction);
      77             : 
      78          37 : ScUndoInsertTab::ScUndoInsertTab( ScDocShell* pNewDocShell,
      79             :                                   SCTAB nTabNum,
      80             :                                   bool bApp,
      81             :                                   const OUString& rNewName) :
      82             :     ScSimpleUndo( pNewDocShell ),
      83             :     sNewName( rNewName ),
      84             :     pDrawUndo( NULL ),
      85             :     nTab( nTabNum ),
      86          37 :     bAppend( bApp )
      87             : {
      88          37 :     pDrawUndo = GetSdrUndoAction( &pDocShell->GetDocument() );
      89          37 :     SetChangeTrack();
      90          37 : }
      91             : 
      92         111 : ScUndoInsertTab::~ScUndoInsertTab()
      93             : {
      94          37 :     DeleteSdrUndoAction( pDrawUndo );
      95          74 : }
      96             : 
      97          53 : OUString ScUndoInsertTab::GetComment() const
      98             : {
      99          53 :     if (bAppend)
     100          12 :         return ScGlobal::GetRscString( STR_UNDO_APPEND_TAB );
     101             :     else
     102          41 :         return ScGlobal::GetRscString( STR_UNDO_INSERT_TAB );
     103             : }
     104             : 
     105          37 : void ScUndoInsertTab::SetChangeTrack()
     106             : {
     107          37 :     ScChangeTrack* pChangeTrack = pDocShell->GetDocument().GetChangeTrack();
     108          37 :     if ( pChangeTrack )
     109             :     {
     110           0 :         ScRange aRange( 0, 0, nTab, MAXCOL, MAXROW, nTab );
     111           0 :         pChangeTrack->AppendInsert( aRange );
     112           0 :         nEndChangeAction = pChangeTrack->GetActionMax();
     113             :     }
     114             :     else
     115          37 :         nEndChangeAction = 0;
     116          37 : }
     117             : 
     118           0 : void ScUndoInsertTab::Undo()
     119             : {
     120           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     121           0 :     pViewShell->SetTabNo(nTab);
     122             : 
     123           0 :     pDocShell->SetInUndo( true );               //! BeginUndo
     124           0 :     bDrawIsInUndo = true;
     125           0 :     pViewShell->DeleteTable( nTab, false );
     126           0 :     bDrawIsInUndo = false;
     127           0 :     pDocShell->SetInUndo( false );              //! EndUndo
     128             : 
     129           0 :     DoSdrUndoAction( pDrawUndo, &pDocShell->GetDocument() );
     130             : 
     131           0 :     ScChangeTrack* pChangeTrack = pDocShell->GetDocument().GetChangeTrack();
     132           0 :     if ( pChangeTrack )
     133           0 :         pChangeTrack->Undo( nEndChangeAction, nEndChangeAction );
     134             : 
     135             :     //  SetTabNo(...,sal_True) for all views to sync with drawing layer pages
     136           0 :     pDocShell->Broadcast( SfxSimpleHint( SC_HINT_FORCESETTAB ) );
     137           0 : }
     138             : 
     139           0 : void ScUndoInsertTab::Redo()
     140             : {
     141           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     142             : 
     143           0 :     RedoSdrUndoAction( pDrawUndo );             // Draw Redo first
     144             : 
     145           0 :     pDocShell->SetInUndo( true );               //! BeginRedo
     146           0 :     bDrawIsInUndo = true;
     147           0 :     if (bAppend)
     148           0 :         pViewShell->AppendTable( sNewName, false );
     149             :     else
     150             :     {
     151           0 :         pViewShell->SetTabNo(nTab);
     152           0 :         pViewShell->InsertTable( sNewName, nTab, false );
     153             :     }
     154           0 :     bDrawIsInUndo = false;
     155           0 :     pDocShell->SetInUndo( false );              //! EndRedo
     156             : 
     157           0 :     SetChangeTrack();
     158           0 : }
     159             : 
     160           0 : void ScUndoInsertTab::Repeat(SfxRepeatTarget& rTarget)
     161             : {
     162           0 :     if (rTarget.ISA(ScTabViewTarget))
     163           0 :         static_cast<ScTabViewTarget&>(rTarget).GetViewShell()->GetViewData().GetDispatcher().
     164           0 :             Execute(FID_INS_TABLE, SfxCallMode::SLOT | SfxCallMode::RECORD);
     165           0 : }
     166             : 
     167          10 : bool ScUndoInsertTab::CanRepeat(SfxRepeatTarget& rTarget) const
     168             : {
     169          10 :     return rTarget.ISA(ScTabViewTarget);
     170             : }
     171             : 
     172           0 : ScUndoInsertTables::ScUndoInsertTables( ScDocShell* pNewDocShell,
     173             :                                         SCTAB nTabNum,
     174             :                                         std::vector<OUString>& newNameList) :
     175             :     ScSimpleUndo( pNewDocShell ),
     176             :     pDrawUndo( NULL ),
     177             :     aNameList( newNameList ),
     178           0 :     nTab( nTabNum )
     179             : {
     180           0 :     pDrawUndo = GetSdrUndoAction( &pDocShell->GetDocument() );
     181             : 
     182           0 :     SetChangeTrack();
     183           0 : }
     184             : 
     185           0 : ScUndoInsertTables::~ScUndoInsertTables()
     186             : {
     187           0 :     DeleteSdrUndoAction( pDrawUndo );
     188           0 : }
     189             : 
     190           0 : OUString ScUndoInsertTables::GetComment() const
     191             : {
     192           0 :     return ScGlobal::GetRscString( STR_UNDO_INSERT_TAB );
     193             : }
     194             : 
     195           0 : void ScUndoInsertTables::SetChangeTrack()
     196             : {
     197           0 :     ScChangeTrack* pChangeTrack = pDocShell->GetDocument().GetChangeTrack();
     198           0 :     if ( pChangeTrack )
     199             :     {
     200           0 :         nStartChangeAction = pChangeTrack->GetActionMax() + 1;
     201           0 :         nEndChangeAction = 0;
     202           0 :         ScRange aRange( 0, 0, nTab, MAXCOL, MAXROW, nTab );
     203           0 :         for( size_t i = 0; i < aNameList.size(); i++ )
     204             :         {
     205           0 :             aRange.aStart.SetTab( sal::static_int_cast<SCTAB>( nTab + i ) );
     206           0 :             aRange.aEnd.SetTab( sal::static_int_cast<SCTAB>( nTab + i ) );
     207           0 :             pChangeTrack->AppendInsert( aRange );
     208           0 :             nEndChangeAction = pChangeTrack->GetActionMax();
     209             :         }
     210             :     }
     211             :     else
     212           0 :         nStartChangeAction = nEndChangeAction = 0;
     213           0 : }
     214             : 
     215           0 : void ScUndoInsertTables::Undo()
     216             : {
     217           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     218           0 :     pViewShell->SetTabNo(nTab);
     219             : 
     220           0 :     pDocShell->SetInUndo( true );               //! BeginUndo
     221           0 :     bDrawIsInUndo = true;
     222             : 
     223           0 :     pViewShell->DeleteTables( nTab, static_cast<SCTAB>(aNameList.size()) );
     224             : 
     225           0 :     bDrawIsInUndo = false;
     226           0 :     pDocShell->SetInUndo( false );              //! EndUndo
     227             : 
     228           0 :     DoSdrUndoAction( pDrawUndo, &pDocShell->GetDocument() );
     229             : 
     230           0 :     ScChangeTrack* pChangeTrack = pDocShell->GetDocument().GetChangeTrack();
     231           0 :     if ( pChangeTrack )
     232           0 :         pChangeTrack->Undo( nStartChangeAction, nEndChangeAction );
     233             : 
     234             :     //  SetTabNo(...,sal_True) for all views to sync with drawing layer pages
     235           0 :     pDocShell->Broadcast( SfxSimpleHint( SC_HINT_FORCESETTAB ) );
     236           0 : }
     237             : 
     238           0 : void ScUndoInsertTables::Redo()
     239             : {
     240           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     241             : 
     242           0 :     RedoSdrUndoAction( pDrawUndo );             // Draw Redo first
     243             : 
     244           0 :     pDocShell->SetInUndo( true );               //! BeginRedo
     245           0 :     bDrawIsInUndo = true;
     246           0 :     pViewShell->SetTabNo(nTab);
     247           0 :     pViewShell->InsertTables( aNameList, nTab, static_cast<SCTAB>(aNameList.size()),false );
     248             : 
     249           0 :     bDrawIsInUndo = false;
     250           0 :     pDocShell->SetInUndo( false );              //! EndRedo
     251             : 
     252           0 :     SetChangeTrack();
     253           0 : }
     254             : 
     255           0 : void ScUndoInsertTables::Repeat(SfxRepeatTarget& rTarget)
     256             : {
     257           0 :     if (rTarget.ISA(ScTabViewTarget))
     258           0 :         static_cast<ScTabViewTarget&>(rTarget).GetViewShell()->GetViewData().GetDispatcher().
     259           0 :             Execute(FID_INS_TABLE, SfxCallMode::SLOT | SfxCallMode::RECORD);
     260           0 : }
     261             : 
     262           0 : bool ScUndoInsertTables::CanRepeat(SfxRepeatTarget& rTarget) const
     263             : {
     264           0 :     return rTarget.ISA(ScTabViewTarget);
     265             : }
     266             : 
     267          20 : ScUndoDeleteTab::ScUndoDeleteTab( ScDocShell* pNewDocShell, const vector<SCTAB> &aTab,
     268             :                                     ScDocument* pUndoDocument, ScRefUndoData* pRefData ) :
     269          20 :     ScMoveUndo( pNewDocShell, pUndoDocument, pRefData, SC_UNDO_REFLAST )
     270             : {
     271          20 :     theTabs.insert(theTabs.end(), aTab.begin(), aTab.end() );
     272          20 :     SetChangeTrack();
     273          20 : }
     274             : 
     275          60 : ScUndoDeleteTab::~ScUndoDeleteTab()
     276             : {
     277          20 :     theTabs.clear();
     278          40 : }
     279             : 
     280          22 : OUString ScUndoDeleteTab::GetComment() const
     281             : {
     282          22 :     return ScGlobal::GetRscString( STR_UNDO_DELETE_TAB );
     283             : }
     284             : 
     285          20 : void ScUndoDeleteTab::SetChangeTrack()
     286             : {
     287          20 :     ScChangeTrack* pChangeTrack = pDocShell->GetDocument().GetChangeTrack();
     288          20 :     if ( pChangeTrack )
     289             :     {
     290             :         sal_uLong nTmpChangeAction;
     291           0 :         nStartChangeAction = pChangeTrack->GetActionMax() + 1;
     292           0 :         nEndChangeAction = 0;
     293           0 :         ScRange aRange( 0, 0, 0, MAXCOL, MAXROW, 0 );
     294           0 :         for ( size_t i = 0; i < theTabs.size(); ++i )
     295             :         {
     296           0 :             aRange.aStart.SetTab( theTabs[i] );
     297           0 :             aRange.aEnd.SetTab( theTabs[i] );
     298             :             pChangeTrack->AppendDeleteRange( aRange, pRefUndoDoc,
     299           0 :                 nTmpChangeAction, nEndChangeAction, (short) i );
     300             :         }
     301             :     }
     302             :     else
     303          20 :         nStartChangeAction = nEndChangeAction = 0;
     304          20 : }
     305             : 
     306           0 : static SCTAB lcl_GetVisibleTabBefore( ScDocument& rDoc, SCTAB nTab )
     307             : {
     308           0 :     while ( nTab > 0 && !rDoc.IsVisible( nTab ) )
     309           0 :         --nTab;
     310             : 
     311           0 :     return nTab;
     312             : }
     313             : 
     314           2 : void ScUndoDeleteTab::Undo()
     315             : {
     316           2 :     BeginUndo();
     317           2 :     unsigned int i=0;
     318           2 :     ScDocument& rDoc = pDocShell->GetDocument();
     319             : 
     320           2 :     bool bLink = false;
     321           2 :     OUString aName;
     322             : 
     323           4 :     for(i=0; i<theTabs.size(); ++i)
     324             :     {
     325           2 :         SCTAB nTab = theTabs[i];
     326           2 :         pRefUndoDoc->GetName( nTab, aName );
     327             : 
     328           2 :         bDrawIsInUndo = true;
     329           2 :         bool bOk = rDoc.InsertTab(nTab, aName, false, true);
     330           2 :         bDrawIsInUndo = false;
     331           2 :         if (bOk)
     332             :         {
     333           2 :             pRefUndoDoc->CopyToDocument(0,0,nTab, MAXCOL,MAXROW,nTab, IDF_ALL,false, &rDoc );
     334             : 
     335           2 :             OUString aOldName;
     336           2 :             pRefUndoDoc->GetName( nTab, aOldName );
     337           2 :             rDoc.RenameTab( nTab, aOldName, false );
     338           2 :             if (pRefUndoDoc->IsLinked(nTab))
     339             :             {
     340           0 :                 rDoc.SetLink( nTab, pRefUndoDoc->GetLinkMode(nTab), pRefUndoDoc->GetLinkDoc(nTab),
     341             :                                      pRefUndoDoc->GetLinkFlt(nTab), pRefUndoDoc->GetLinkOpt(nTab),
     342           0 :                                      pRefUndoDoc->GetLinkTab(nTab), pRefUndoDoc->GetLinkRefreshDelay(nTab) );
     343           0 :                 bLink = true;
     344             :             }
     345             : 
     346           2 :             if ( pRefUndoDoc->IsScenario(nTab) )
     347             :             {
     348           0 :                 rDoc.SetScenario( nTab, true );
     349           0 :                 OUString aComment;
     350           0 :                 Color  aColor;
     351             :                 sal_uInt16 nScenFlags;
     352           0 :                 pRefUndoDoc->GetScenarioData( nTab, aComment, aColor, nScenFlags );
     353           0 :                 rDoc.SetScenarioData( nTab, aComment, aColor, nScenFlags );
     354           0 :                 bool bActive = pRefUndoDoc->IsActiveScenario( nTab );
     355           0 :                 rDoc.SetActiveScenario( nTab, bActive );
     356             :             }
     357           2 :             rDoc.SetVisible( nTab, pRefUndoDoc->IsVisible( nTab ) );
     358           2 :             rDoc.SetTabBgColor( nTab, pRefUndoDoc->GetTabBgColor(nTab) );
     359           2 :             rDoc.SetSheetEvents( nTab, pRefUndoDoc->GetSheetEvents( nTab ) );
     360           2 :             rDoc.SetLayoutRTL( nTab, pRefUndoDoc->IsLayoutRTL( nTab ) );
     361             : 
     362           2 :             if ( pRefUndoDoc->IsTabProtected( nTab ) )
     363           0 :                 rDoc.SetTabProtection(nTab, pRefUndoDoc->GetTabProtection(nTab));
     364             :         }
     365             :     }
     366           2 :     if (bLink)
     367             :     {
     368           0 :         pDocShell->UpdateLinks(); // update Link Manager
     369             :     }
     370             : 
     371           2 :     EndUndo();      // Draw-Undo has to be called before Broadcast!
     372             : 
     373           2 :     ScChangeTrack* pChangeTrack = pDocShell->GetDocument().GetChangeTrack();
     374           2 :     if ( pChangeTrack )
     375           0 :         pChangeTrack->Undo( nStartChangeAction, nEndChangeAction );
     376             : 
     377           4 :     for(i=0; i<theTabs.size(); ++i)
     378             :     {
     379           2 :         pDocShell->Broadcast( ScTablesHint( SC_TAB_INSERTED, theTabs[i]) );
     380             :     }
     381           2 :     SfxApplication* pSfxApp = SfxGetpApp();                                // Navigator
     382           2 :     pSfxApp->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) );
     383           2 :     pSfxApp->Broadcast( SfxSimpleHint( SC_HINT_DBAREAS_CHANGED ) );
     384           2 :     pSfxApp->Broadcast( SfxSimpleHint( SC_HINT_AREALINKS_CHANGED ) );
     385             : 
     386           2 :     pDocShell->PostPaint(0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_ALL );  // incl. extras
     387             : 
     388             :     // not ShowTable due to SetTabNo(..., sal_True):
     389           2 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     390           2 :     if (pViewShell)
     391           0 :         pViewShell->SetTabNo( lcl_GetVisibleTabBefore( rDoc, theTabs[0] ), true );
     392           2 : }
     393             : 
     394           0 : void ScUndoDeleteTab::Redo()
     395             : {
     396           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     397           0 :     pViewShell->SetTabNo( lcl_GetVisibleTabBefore( pDocShell->GetDocument(), theTabs.front() ) );
     398             : 
     399           0 :     RedoSdrUndoAction( pDrawUndo );             // Draw Redo first
     400             : 
     401           0 :     pDocShell->SetInUndo( true );               //! BeginRedo
     402           0 :     bDrawIsInUndo = true;
     403           0 :     pViewShell->DeleteTables( theTabs, false );
     404           0 :     bDrawIsInUndo = false;
     405           0 :     pDocShell->SetInUndo( true );               //! EndRedo
     406             : 
     407           0 :     SetChangeTrack();
     408             : 
     409             :     //  SetTabNo(...,sal_True) for all views to sync with drawing layer pages
     410           0 :     pDocShell->Broadcast( SfxSimpleHint( SC_HINT_FORCESETTAB ) );
     411           0 : }
     412             : 
     413           0 : void ScUndoDeleteTab::Repeat(SfxRepeatTarget& rTarget)
     414             : {
     415           0 :     if (rTarget.ISA(ScTabViewTarget))
     416             :     {
     417           0 :         ScTabViewShell* pViewShell = static_cast<ScTabViewTarget&>(rTarget).GetViewShell();
     418           0 :         pViewShell->DeleteTable( pViewShell->GetViewData().GetTabNo(), true );
     419             :     }
     420           0 : }
     421             : 
     422           0 : bool ScUndoDeleteTab::CanRepeat(SfxRepeatTarget& rTarget) const
     423             : {
     424           0 :     return rTarget.ISA(ScTabViewTarget);
     425             : }
     426             : 
     427           3 : ScUndoRenameTab::ScUndoRenameTab( ScDocShell* pNewDocShell,
     428             :                                   SCTAB nT,
     429             :                                   const OUString& rOldName,
     430             :                                   const OUString& rNewName) :
     431             :     ScSimpleUndo( pNewDocShell ),
     432           3 :     nTab     ( nT )
     433             : {
     434           3 :     sOldName = rOldName;
     435           3 :     sNewName = rNewName;
     436           3 : }
     437             : 
     438           4 : ScUndoRenameTab::~ScUndoRenameTab()
     439             : {
     440           4 : }
     441             : 
     442           2 : OUString ScUndoRenameTab::GetComment() const
     443             : {
     444           2 :     return ScGlobal::GetRscString( STR_UNDO_RENAME_TAB );
     445             : }
     446             : 
     447           2 : void ScUndoRenameTab::DoChange( SCTAB nTabP, const OUString& rName ) const
     448             : {
     449           2 :     ScDocument& rDoc = pDocShell->GetDocument();
     450           2 :     rDoc.RenameTab( nTabP, rName );
     451             : 
     452           2 :     SfxGetpApp()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) );    // Navigator
     453             : 
     454           2 :     pDocShell->PostPaintGridAll();
     455           2 :     pDocShell->PostPaintExtras();
     456           2 :     pDocShell->PostDataChanged();
     457             : 
     458             :     // The sheet name might be used in a formula ...
     459           2 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     460           2 :     if (pViewShell)
     461           0 :         pViewShell->UpdateInputHandler();
     462           2 : }
     463             : 
     464           1 : void ScUndoRenameTab::Undo()
     465             : {
     466           1 :     DoChange(nTab, sOldName);
     467           1 : }
     468             : 
     469           1 : void ScUndoRenameTab::Redo()
     470             : {
     471           1 :     DoChange(nTab, sNewName);
     472           1 : }
     473             : 
     474           0 : void ScUndoRenameTab::Repeat(SfxRepeatTarget& /* rTarget */)
     475             : {
     476             :     // makes no sense
     477           0 : }
     478             : 
     479           0 : bool ScUndoRenameTab::CanRepeat(SfxRepeatTarget& /* rTarget */) const
     480             : {
     481           0 :     return false;
     482             : }
     483             : 
     484           0 : ScUndoMoveTab::ScUndoMoveTab(
     485             :     ScDocShell* pNewDocShell, vector<SCTAB>* pOldTabs, vector<SCTAB>* pNewTabs,
     486             :     vector<OUString>* pOldNames, vector<OUString>* pNewNames) :
     487             :     ScSimpleUndo( pNewDocShell ),
     488             :     mpOldTabs(pOldTabs), mpNewTabs(pNewTabs),
     489           0 :     mpOldNames(pOldNames), mpNewNames(pNewNames)
     490             : {
     491           0 :     if (mpOldNames && mpOldTabs->size() != mpOldNames->size())
     492             :         // The sizes differ.  Something is wrong.
     493           0 :         mpOldNames.reset();
     494             : 
     495           0 :     if (mpNewNames && mpNewTabs->size() != mpNewNames->size())
     496             :         // The sizes differ.  Something is wrong.
     497           0 :         mpNewNames.reset();
     498           0 : }
     499             : 
     500           0 : ScUndoMoveTab::~ScUndoMoveTab()
     501             : {
     502           0 : }
     503             : 
     504           0 : OUString ScUndoMoveTab::GetComment() const
     505             : {
     506           0 :     return ScGlobal::GetRscString( STR_UNDO_MOVE_TAB );
     507             : }
     508             : 
     509           0 : void ScUndoMoveTab::DoChange( bool bUndo ) const
     510             : {
     511           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     512           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     513             : 
     514           0 :     if (bUndo)                                      // UnDo
     515             :     {
     516           0 :         size_t i = mpNewTabs->size();
     517             :         boost::scoped_ptr<ScProgress> pProgress(new ScProgress(pDocShell , ScGlobal::GetRscString(STR_UNDO_MOVE_TAB),
     518           0 :                                                                i * rDoc.GetCodeCount()));
     519           0 :         for (; i > 0; --i)
     520             :         {
     521           0 :             SCTAB nDestTab = (*mpNewTabs)[i-1];
     522           0 :             SCTAB nOldTab = (*mpOldTabs)[i-1];
     523           0 :             if (nDestTab > MAXTAB)                          // appended ?
     524           0 :                 nDestTab = rDoc.GetTableCount() - 1;
     525             : 
     526           0 :             rDoc.MoveTab( nDestTab, nOldTab, pProgress.get() );
     527           0 :             pViewShell->GetViewData().MoveTab( nDestTab, nOldTab );
     528           0 :             pViewShell->SetTabNo( nOldTab, true );
     529           0 :             if (mpOldNames)
     530             :             {
     531           0 :                 const OUString& rOldName = (*mpOldNames)[i-1];
     532           0 :                 rDoc.RenameTab(nOldTab, rOldName);
     533             :             }
     534           0 :         }
     535             :     }
     536             :     else
     537             :     {
     538           0 :         size_t n = mpNewTabs->size();
     539             :         boost::scoped_ptr<ScProgress> pProgress(new ScProgress(pDocShell , ScGlobal::GetRscString(STR_UNDO_MOVE_TAB),
     540           0 :                                                                n * rDoc.GetCodeCount()));
     541           0 :         for (size_t i = 0; i < n; ++i)
     542             :         {
     543           0 :             SCTAB nDestTab = (*mpNewTabs)[i];
     544           0 :             SCTAB nNewTab = nDestTab;
     545           0 :             SCTAB nOldTab = (*mpOldTabs)[i];
     546           0 :             if (nDestTab > MAXTAB)                          // appended ?
     547           0 :                 nDestTab = rDoc.GetTableCount() - 1;
     548             : 
     549           0 :             rDoc.MoveTab( nOldTab, nNewTab, pProgress.get() );
     550           0 :             pViewShell->GetViewData().MoveTab( nOldTab, nNewTab );
     551           0 :             pViewShell->SetTabNo( nDestTab, true );
     552           0 :             if (mpNewNames)
     553             :             {
     554           0 :                 const OUString& rNewName = (*mpNewNames)[i];
     555           0 :                 rDoc.RenameTab(nNewTab, rNewName);
     556             :             }
     557           0 :         }
     558             :     }
     559             : 
     560           0 :     SfxGetpApp()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) );    // Navigator
     561             : 
     562           0 :     pDocShell->PostPaintGridAll();
     563           0 :     pDocShell->PostPaintExtras();
     564           0 :     pDocShell->PostDataChanged();
     565           0 : }
     566             : 
     567           0 : void ScUndoMoveTab::Undo()
     568             : {
     569           0 :     DoChange( true );
     570           0 : }
     571             : 
     572           0 : void ScUndoMoveTab::Redo()
     573             : {
     574           0 :     DoChange( false );
     575           0 : }
     576             : 
     577           0 : void ScUndoMoveTab::Repeat(SfxRepeatTarget& /* rTarget */)
     578             : {
     579             :         // No Repeat ! ? !
     580           0 : }
     581             : 
     582           0 : bool ScUndoMoveTab::CanRepeat(SfxRepeatTarget& /* rTarget */) const
     583             : {
     584           0 :     return false;
     585             : }
     586             : 
     587           0 : ScUndoCopyTab::ScUndoCopyTab(
     588             :     ScDocShell* pNewDocShell,
     589             :     vector<SCTAB>* pOldTabs, vector<SCTAB>* pNewTabs,
     590             :     vector<OUString>* pNewNames) :
     591             :     ScSimpleUndo( pNewDocShell ),
     592             :     mpOldTabs(pOldTabs),
     593             :     mpNewTabs(pNewTabs),
     594             :     mpNewNames(pNewNames),
     595           0 :     pDrawUndo( NULL )
     596             : {
     597           0 :     pDrawUndo = GetSdrUndoAction( &pDocShell->GetDocument() );
     598             : 
     599           0 :     if (mpNewNames && mpNewTabs->size() != mpNewNames->size())
     600             :         // The sizes differ.  Something is wrong.
     601           0 :         mpNewNames.reset();
     602           0 : }
     603             : 
     604           0 : ScUndoCopyTab::~ScUndoCopyTab()
     605             : {
     606           0 :     DeleteSdrUndoAction( pDrawUndo );
     607           0 : }
     608             : 
     609           0 : OUString ScUndoCopyTab::GetComment() const
     610             : {
     611           0 :     return ScGlobal::GetRscString( STR_UNDO_COPY_TAB );
     612             : }
     613             : 
     614           0 : void ScUndoCopyTab::DoChange() const
     615             : {
     616           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     617             : 
     618           0 :     if (pViewShell)
     619           0 :         pViewShell->SetTabNo((*mpOldTabs)[0],true);
     620             : 
     621           0 :     SfxGetpApp()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) );    // Navigator
     622             : 
     623           0 :     pDocShell->PostPaintGridAll();
     624           0 :     pDocShell->PostPaintExtras();
     625           0 :     pDocShell->PostDataChanged();
     626           0 : }
     627             : 
     628           0 : void ScUndoCopyTab::Undo()
     629             : {
     630           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     631             : 
     632           0 :     DoSdrUndoAction( pDrawUndo, &rDoc );                 // before the sheets are deleted
     633             : 
     634           0 :     vector<SCTAB>::const_reverse_iterator itr, itrEnd = mpNewTabs->rend();
     635           0 :     for (itr = mpNewTabs->rbegin(); itr != itrEnd; ++itr)
     636             :     {
     637           0 :         SCTAB nDestTab = *itr;
     638           0 :         if (nDestTab > MAXTAB)                          // append?
     639           0 :             nDestTab = rDoc.GetTableCount() - 1;
     640             : 
     641           0 :         bDrawIsInUndo = true;
     642           0 :         rDoc.DeleteTab(nDestTab);
     643           0 :         bDrawIsInUndo = false;
     644             :     }
     645             : 
     646             :     //  ScTablesHint broadcasts after all sheets have been deleted,
     647             :     //  so sheets and draw pages are in sync!
     648             : 
     649           0 :     for (itr = mpNewTabs->rbegin(); itr != itrEnd; ++itr)
     650             :     {
     651           0 :         SCTAB nDestTab = *itr;
     652           0 :         if (nDestTab > MAXTAB)                          // append?
     653           0 :             nDestTab = rDoc.GetTableCount() - 1;
     654             : 
     655           0 :         pDocShell->Broadcast( ScTablesHint( SC_TAB_DELETED, nDestTab ) );
     656             :     }
     657             : 
     658           0 :     DoChange();
     659           0 : }
     660             : 
     661           0 : void ScUndoCopyTab::Redo()
     662             : {
     663           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     664           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     665             : 
     666           0 :     SCTAB nDestTab = 0;
     667           0 :     for (size_t i = 0, n = mpNewTabs->size(); i < n; ++i)
     668             :     {
     669           0 :         nDestTab = (*mpNewTabs)[i];
     670           0 :         SCTAB nNewTab = nDestTab;
     671           0 :         SCTAB nOldTab = (*mpOldTabs)[i];
     672           0 :         if (nDestTab > MAXTAB)                          // appended ?
     673           0 :             nDestTab = rDoc.GetTableCount() - 1;
     674             : 
     675           0 :         bDrawIsInUndo = true;
     676           0 :         rDoc.CopyTab( nOldTab, nNewTab );
     677           0 :         bDrawIsInUndo = false;
     678             : 
     679           0 :         pViewShell->GetViewData().MoveTab( nOldTab, nNewTab );
     680             : 
     681           0 :         SCTAB nAdjSource = nOldTab;
     682           0 :         if ( nNewTab <= nOldTab )
     683           0 :             ++nAdjSource;               // new position of source table after CopyTab
     684             : 
     685           0 :         if ( rDoc.IsScenario(nAdjSource) )
     686             :         {
     687           0 :             rDoc.SetScenario(nNewTab, true );
     688           0 :             OUString aComment;
     689           0 :             Color  aColor;
     690             :             sal_uInt16 nScenFlags;
     691           0 :             rDoc.GetScenarioData(nAdjSource, aComment, aColor, nScenFlags );
     692           0 :             rDoc.SetScenarioData(nNewTab, aComment, aColor, nScenFlags );
     693           0 :             bool bActive = rDoc.IsActiveScenario(nAdjSource);
     694           0 :             rDoc.SetActiveScenario(nNewTab, bActive );
     695           0 :             bool bVisible = rDoc.IsVisible(nAdjSource);
     696           0 :             rDoc.SetVisible(nNewTab,bVisible );
     697             :         }
     698             : 
     699           0 :         if ( rDoc.IsTabProtected( nAdjSource ) )
     700           0 :             rDoc.CopyTabProtection(nAdjSource, nNewTab);
     701             : 
     702           0 :         if (mpNewNames)
     703             :         {
     704           0 :             const OUString& rName = (*mpNewNames)[i];
     705           0 :             rDoc.RenameTab(nNewTab, rName);
     706             :         }
     707             :     }
     708             : 
     709           0 :     RedoSdrUndoAction( pDrawUndo );             // after the sheets are inserted
     710             : 
     711           0 :     pViewShell->SetTabNo( nDestTab, true );     // after draw-undo
     712             : 
     713           0 :     DoChange();
     714             : 
     715           0 : }
     716             : 
     717           0 : void ScUndoCopyTab::Repeat(SfxRepeatTarget& /* rTarget */)
     718             : {
     719             :         // no Repeat ! ? !
     720           0 : }
     721             : 
     722           0 : bool ScUndoCopyTab::CanRepeat(SfxRepeatTarget& /* rTarget */) const
     723             : {
     724           0 :     return false;
     725             : }
     726             : 
     727           1 : ScUndoTabColor::ScUndoTabColor(
     728             :     ScDocShell* pNewDocShell, SCTAB nT, const Color& aOTabBgColor, const Color& aNTabBgColor) :
     729           1 :     ScSimpleUndo( pNewDocShell )
     730             : {
     731           1 :     ScUndoTabColorInfo aInfo(nT);
     732           1 :     aInfo.maOldTabBgColor = aOTabBgColor;
     733           1 :     aInfo.maNewTabBgColor = aNTabBgColor;
     734           1 :     aTabColorList.push_back(aInfo);
     735           1 : }
     736             : 
     737           0 : ScUndoTabColor::ScUndoTabColor(
     738             :     ScDocShell* pNewDocShell,
     739             :     const ScUndoTabColorInfo::List& rUndoTabColorList) :
     740             :     ScSimpleUndo(pNewDocShell),
     741           0 :     aTabColorList(rUndoTabColorList)
     742             : {
     743           0 : }
     744             : 
     745           0 : ScUndoTabColor::~ScUndoTabColor()
     746             : {
     747           0 : }
     748             : 
     749           0 : OUString ScUndoTabColor::GetComment() const
     750             : {
     751           0 :     if (aTabColorList.size() > 1)
     752           0 :         return ScGlobal::GetRscString(STR_UNDO_SET_MULTI_TAB_BG_COLOR);
     753           0 :     return ScGlobal::GetRscString(STR_UNDO_SET_TAB_BG_COLOR);
     754             : }
     755             : 
     756           2 : void ScUndoTabColor::DoChange(bool bUndoType) const
     757             : {
     758           2 :     ScDocument& rDoc = pDocShell->GetDocument();
     759             : 
     760           2 :     size_t nTabColorCount = aTabColorList.size();
     761           4 :     for (size_t i = 0; i < nTabColorCount; ++i)
     762             :     {
     763           2 :         const ScUndoTabColorInfo& rTabColor = aTabColorList[i];
     764             :         rDoc.SetTabBgColor(rTabColor.mnTabId,
     765           2 :             bUndoType ? rTabColor.maOldTabBgColor : rTabColor.maNewTabBgColor);
     766             :     }
     767             : 
     768           2 :     pDocShell->PostPaintExtras();
     769           2 :     ScDocShellModificator aModificator( *pDocShell );
     770           2 :     aModificator.SetDocumentModified();
     771           2 : }
     772             : 
     773           1 : void ScUndoTabColor::Undo()
     774             : {
     775           1 :     DoChange(true);
     776           1 : }
     777             : 
     778           1 : void ScUndoTabColor::Redo()
     779             : {
     780           1 :     DoChange(false);
     781           1 : }
     782             : 
     783           0 : void ScUndoTabColor::Repeat(SfxRepeatTarget& /* rTarget */)
     784             : {
     785             :     // makes no sense
     786           0 : }
     787             : 
     788           0 : bool ScUndoTabColor::CanRepeat(SfxRepeatTarget& /* rTarget */) const
     789             : {
     790           0 :     return false;
     791             : }
     792             : 
     793           1 : ScUndoMakeScenario::ScUndoMakeScenario( ScDocShell* pNewDocShell,
     794             :                         SCTAB nSrc, SCTAB nDest,
     795             :                         const OUString& rN, const OUString& rC,
     796             :                         const Color& rCol, sal_uInt16 nF,
     797             :                         const ScMarkData& rMark ) :
     798             :     ScSimpleUndo( pNewDocShell ),
     799           1 :     mpMarkData(new ScMarkData(rMark)),
     800             :     nSrcTab( nSrc ),
     801             :     nDestTab( nDest ),
     802             :     aName( rN ),
     803             :     aComment( rC ),
     804             :     aColor( rCol ),
     805             :     nFlags( nF ),
     806           2 :     pDrawUndo( NULL )
     807             : {
     808           1 :     pDrawUndo = GetSdrUndoAction( &pDocShell->GetDocument() );
     809           1 : }
     810             : 
     811           3 : ScUndoMakeScenario::~ScUndoMakeScenario()
     812             : {
     813           1 :     DeleteSdrUndoAction( pDrawUndo );
     814           2 : }
     815             : 
     816           5 : OUString ScUndoMakeScenario::GetComment() const
     817             : {
     818           5 :     return ScGlobal::GetRscString( STR_UNDO_MAKESCENARIO );
     819             : }
     820             : 
     821           0 : void ScUndoMakeScenario::Undo()
     822             : {
     823           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     824             : 
     825           0 :     pDocShell->SetInUndo( true );
     826           0 :     bDrawIsInUndo = true;
     827           0 :     rDoc.DeleteTab( nDestTab );
     828           0 :     bDrawIsInUndo = false;
     829           0 :     pDocShell->SetInUndo( false );
     830             : 
     831           0 :     DoSdrUndoAction( pDrawUndo, &rDoc );
     832             : 
     833           0 :     pDocShell->PostPaint(0,0,nDestTab,MAXCOL,MAXROW,MAXTAB, PAINT_ALL);
     834           0 :     pDocShell->PostDataChanged();
     835             : 
     836           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     837           0 :     if (pViewShell)
     838           0 :         pViewShell->SetTabNo( nSrcTab, true );
     839             : 
     840           0 :     SfxGetpApp()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) );
     841             : 
     842             :     //  SetTabNo(...,sal_True) for all views to sync with drawing layer pages
     843           0 :     pDocShell->Broadcast( SfxSimpleHint( SC_HINT_FORCESETTAB ) );
     844           0 : }
     845             : 
     846           0 : void ScUndoMakeScenario::Redo()
     847             : {
     848           0 :     SetViewMarkData(*mpMarkData);
     849             : 
     850           0 :     RedoSdrUndoAction( pDrawUndo );             // Draw Redo first
     851             : 
     852           0 :     pDocShell->SetInUndo( true );
     853           0 :     bDrawIsInUndo = true;
     854             : 
     855           0 :     pDocShell->MakeScenario( nSrcTab, aName, aComment, aColor, nFlags, *mpMarkData, false );
     856             : 
     857           0 :     bDrawIsInUndo = false;
     858           0 :     pDocShell->SetInUndo( false );
     859             : 
     860           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     861           0 :     if (pViewShell)
     862           0 :         pViewShell->SetTabNo( nDestTab, true );
     863             : 
     864           0 :     SfxGetpApp()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) );
     865           0 : }
     866             : 
     867           0 : void ScUndoMakeScenario::Repeat(SfxRepeatTarget& rTarget)
     868             : {
     869           0 :     if (rTarget.ISA(ScTabViewTarget))
     870             :     {
     871           0 :         static_cast<ScTabViewTarget&>(rTarget).GetViewShell()->MakeScenario( aName, aComment, aColor, nFlags );
     872             :     }
     873           0 : }
     874             : 
     875           2 : bool ScUndoMakeScenario::CanRepeat(SfxRepeatTarget& rTarget) const
     876             : {
     877           2 :     return rTarget.ISA(ScTabViewTarget);
     878             : }
     879             : 
     880           0 : ScUndoImportTab::ScUndoImportTab( ScDocShell* pShell,
     881             :                         SCTAB nNewTab, SCTAB nNewCount ) :
     882             :     ScSimpleUndo( pShell ),
     883             :     nTab( nNewTab ),
     884             :     nCount( nNewCount ),
     885             :     pRedoDoc( NULL ),
     886           0 :     pDrawUndo( NULL )
     887             : {
     888           0 :     pDrawUndo = GetSdrUndoAction( &pDocShell->GetDocument() );
     889           0 : }
     890             : 
     891           0 : ScUndoImportTab::~ScUndoImportTab()
     892             : {
     893           0 :     delete pRedoDoc;
     894           0 :     DeleteSdrUndoAction( pDrawUndo );
     895           0 : }
     896             : 
     897           0 : OUString ScUndoImportTab::GetComment() const
     898             : {
     899           0 :     return ScGlobal::GetRscString( STR_UNDO_INSERT_TAB );
     900             : }
     901             : 
     902           0 : void ScUndoImportTab::DoChange() const
     903             : {
     904           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
     905           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     906           0 :     SCTAB nTabCount = rDoc.GetTableCount();
     907           0 :     if (pViewShell)
     908             :     {
     909           0 :         if(nTab<nTabCount)
     910             :         {
     911           0 :             pViewShell->SetTabNo(nTab,true);
     912             :         }
     913             :         else
     914             :         {
     915           0 :             pViewShell->SetTabNo(nTab-1,true);
     916             :         }
     917             :     }
     918             : 
     919           0 :     SfxGetpApp()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) );    // Navigator
     920             :     pDocShell->PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB,
     921           0 :                                 PAINT_GRID | PAINT_TOP | PAINT_LEFT | PAINT_EXTRAS );
     922           0 : }
     923             : 
     924           0 : void ScUndoImportTab::Undo()
     925             : {
     926             :     // Inserted range names, etc.
     927             : 
     928             :     SCTAB i;
     929           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     930           0 :     bool bMakeRedo = !pRedoDoc;
     931           0 :     if (bMakeRedo)
     932             :     {
     933           0 :         pRedoDoc = new ScDocument( SCDOCMODE_UNDO );
     934           0 :         pRedoDoc->InitUndo( &rDoc, nTab,nTab+nCount-1, true,true );
     935             : 
     936           0 :         OUString aOldName;
     937           0 :         for (i=0; i<nCount; i++)
     938             :         {
     939           0 :             SCTAB nTabPos=nTab+i;
     940             : 
     941           0 :             rDoc.CopyToDocument(0,0,nTabPos, MAXCOL,MAXROW,nTabPos, IDF_ALL,false, pRedoDoc );
     942           0 :             rDoc.GetName( nTabPos, aOldName );
     943           0 :             pRedoDoc->RenameTab( nTabPos, aOldName, false );
     944           0 :             pRedoDoc->SetTabBgColor( nTabPos, rDoc.GetTabBgColor(nTabPos) );
     945             : 
     946           0 :             if ( rDoc.IsScenario(nTabPos) )
     947             :             {
     948           0 :                 pRedoDoc->SetScenario(nTabPos, true );
     949           0 :                 OUString aComment;
     950           0 :                 Color  aColor;
     951             :                 sal_uInt16 nScenFlags;
     952           0 :                 rDoc.GetScenarioData(nTabPos, aComment, aColor, nScenFlags );
     953           0 :                 pRedoDoc->SetScenarioData(nTabPos, aComment, aColor, nScenFlags );
     954           0 :                 bool bActive = rDoc.IsActiveScenario(nTabPos);
     955           0 :                 pRedoDoc->SetActiveScenario(nTabPos, bActive );
     956           0 :                 bool bVisible = rDoc.IsVisible(nTabPos);
     957           0 :                 pRedoDoc->SetVisible(nTabPos,bVisible );
     958             :             }
     959             : 
     960           0 :             if ( rDoc.IsTabProtected( nTabPos ) )
     961           0 :                 pRedoDoc->SetTabProtection(nTabPos, rDoc.GetTabProtection(nTabPos));
     962           0 :         }
     963             : 
     964             :     }
     965             : 
     966           0 :     DoSdrUndoAction( pDrawUndo, &rDoc );             // before the sheets are deleted
     967             : 
     968           0 :     bDrawIsInUndo = true;
     969           0 :     for (i=0; i<nCount; i++)
     970           0 :         rDoc.DeleteTab( nTab );
     971           0 :     bDrawIsInUndo = false;
     972             : 
     973           0 :     DoChange();
     974           0 : }
     975             : 
     976           0 : void ScUndoImportTab::Redo()
     977             : {
     978           0 :     if (!pRedoDoc)
     979             :     {
     980             :         OSL_FAIL("Where is my Redo Document?");
     981           0 :         return;
     982             :     }
     983             : 
     984           0 :     ScDocument& rDoc = pDocShell->GetDocument();
     985           0 :     OUString aName;
     986             :     SCTAB i;
     987           0 :     for (i=0; i<nCount; i++)                // first insert all sheets (#63304#)
     988             :     {
     989           0 :         SCTAB nTabPos=nTab+i;
     990           0 :         pRedoDoc->GetName(nTabPos,aName);
     991           0 :         bDrawIsInUndo = true;
     992           0 :         rDoc.InsertTab(nTabPos,aName);
     993           0 :         bDrawIsInUndo = false;
     994             :     }
     995           0 :     for (i=0; i<nCount; i++)                // then copy into inserted sheets
     996             :     {
     997           0 :         SCTAB nTabPos=nTab+i;
     998           0 :         pRedoDoc->CopyToDocument(0,0,nTabPos, MAXCOL,MAXROW,nTabPos, IDF_ALL,false, &rDoc );
     999           0 :         rDoc.SetTabBgColor( nTabPos, pRedoDoc->GetTabBgColor(nTabPos) );
    1000             : 
    1001           0 :         if ( pRedoDoc->IsScenario(nTabPos) )
    1002             :         {
    1003           0 :             rDoc.SetScenario(nTabPos, true );
    1004           0 :             OUString aComment;
    1005           0 :             Color  aColor;
    1006             :             sal_uInt16 nScenFlags;
    1007           0 :             pRedoDoc->GetScenarioData(nTabPos, aComment, aColor, nScenFlags );
    1008           0 :             rDoc.SetScenarioData(nTabPos, aComment, aColor, nScenFlags );
    1009           0 :             bool bActive = pRedoDoc->IsActiveScenario(nTabPos);
    1010           0 :             rDoc.SetActiveScenario(nTabPos, bActive );
    1011           0 :             bool bVisible=pRedoDoc->IsVisible(nTabPos);
    1012           0 :             rDoc.SetVisible(nTabPos,bVisible );
    1013             :         }
    1014             : 
    1015           0 :         if ( pRedoDoc->IsTabProtected( nTabPos ) )
    1016           0 :             rDoc.SetTabProtection(nTabPos, pRedoDoc->GetTabProtection(nTabPos));
    1017             :     }
    1018             : 
    1019           0 :     RedoSdrUndoAction( pDrawUndo );     // after the sheets are inserted
    1020             : 
    1021           0 :     DoChange();
    1022             : }
    1023             : 
    1024           0 : void ScUndoImportTab::Repeat(SfxRepeatTarget& rTarget)
    1025             : {
    1026           0 :     if (rTarget.ISA(ScTabViewTarget))
    1027           0 :         static_cast<ScTabViewTarget&>(rTarget).GetViewShell()->GetViewData().GetDispatcher().
    1028           0 :             Execute(FID_INS_TABLE, SfxCallMode::SLOT | SfxCallMode::RECORD);
    1029           0 : }
    1030             : 
    1031           0 : bool ScUndoImportTab::CanRepeat(SfxRepeatTarget& rTarget) const
    1032             : {
    1033           0 :     return rTarget.ISA(ScTabViewTarget);
    1034             : }
    1035             : 
    1036           0 : ScUndoRemoveLink::ScUndoRemoveLink( ScDocShell* pShell, const OUString& rDocName ) :
    1037             :     ScSimpleUndo( pShell ),
    1038             :     aDocName( rDocName ),
    1039             :     nRefreshDelay( 0 ),
    1040           0 :     nCount( 0 )
    1041             : {
    1042           0 :     ScDocument& rDoc = pDocShell->GetDocument();
    1043           0 :     SCTAB nTabCount = rDoc.GetTableCount();
    1044           0 :     pTabs     = new SCTAB[nTabCount];
    1045           0 :     pModes    = new sal_uInt8[nTabCount];
    1046           0 :     pTabNames = new OUString[nTabCount];
    1047             : 
    1048           0 :     for (SCTAB i=0; i<nTabCount; i++)
    1049             :     {
    1050           0 :         sal_uInt8 nMode = rDoc.GetLinkMode(i);
    1051           0 :         if (nMode)
    1052           0 :             if (rDoc.GetLinkDoc(i) == aDocName)
    1053             :             {
    1054           0 :                 if (!nCount)
    1055             :                 {
    1056           0 :                     aFltName = rDoc.GetLinkFlt(i);
    1057           0 :                     aOptions = rDoc.GetLinkOpt(i);
    1058           0 :                     nRefreshDelay = rDoc.GetLinkRefreshDelay(i);
    1059             :                 }
    1060             :                 else
    1061             :                 {
    1062             :                     OSL_ENSURE(OUString(aFltName) == rDoc.GetLinkFlt(i) &&
    1063             :                                OUString(aOptions) == rDoc.GetLinkOpt(i),
    1064             :                                     "different Filter for a Document?");
    1065             :                 }
    1066           0 :                 pTabs[nCount] = i;
    1067           0 :                 pModes[nCount] = nMode;
    1068           0 :                 pTabNames[nCount] = rDoc.GetLinkTab(i);
    1069           0 :                 ++nCount;
    1070             :             }
    1071             :     }
    1072           0 : }
    1073             : 
    1074           0 : ScUndoRemoveLink::~ScUndoRemoveLink()
    1075             : {
    1076           0 :     delete pTabs;
    1077           0 :     delete pModes;
    1078           0 :     delete[] pTabNames;
    1079           0 : }
    1080             : 
    1081           0 : OUString ScUndoRemoveLink::GetComment() const
    1082             : {
    1083           0 :     return ScGlobal::GetRscString( STR_UNDO_REMOVELINK );
    1084             : }
    1085             : 
    1086           0 : void ScUndoRemoveLink::DoChange( bool bLink ) const
    1087             : {
    1088           0 :     ScDocument& rDoc = pDocShell->GetDocument();
    1089           0 :     OUString aEmpty;
    1090           0 :     for (sal_uInt16 i=0; i<nCount; i++)
    1091           0 :         if (bLink)      // establish link
    1092           0 :             rDoc.SetLink( pTabs[i], pModes[i], aDocName, aFltName, aOptions, pTabNames[i], nRefreshDelay );
    1093             :         else            // remove link
    1094           0 :             rDoc.SetLink( pTabs[i], SC_LINK_NONE, aEmpty, aEmpty, aEmpty, aEmpty, 0 );
    1095           0 :     pDocShell->UpdateLinks();
    1096           0 : }
    1097             : 
    1098           0 : void ScUndoRemoveLink::Undo()
    1099             : {
    1100           0 :     DoChange( true );
    1101           0 : }
    1102             : 
    1103           0 : void ScUndoRemoveLink::Redo()
    1104             : {
    1105           0 :     DoChange( false );
    1106           0 : }
    1107             : 
    1108           0 : void ScUndoRemoveLink::Repeat(SfxRepeatTarget& /* rTarget */)
    1109             : {
    1110             :     // makes no sense
    1111           0 : }
    1112             : 
    1113           0 : bool ScUndoRemoveLink::CanRepeat(SfxRepeatTarget& /* rTarget */) const
    1114             : {
    1115           0 :     return false;
    1116             : }
    1117             : 
    1118           2 : ScUndoShowHideTab::ScUndoShowHideTab( ScDocShell* pShell, const std::vector<SCTAB>& newUndoTabs, bool bNewShow ) :
    1119             :     ScSimpleUndo( pShell ),
    1120             :     undoTabs( newUndoTabs ),
    1121           2 :     bShow( bNewShow )
    1122             : {
    1123           2 : }
    1124             : 
    1125           4 : ScUndoShowHideTab::~ScUndoShowHideTab()
    1126             : {
    1127           4 : }
    1128             : 
    1129           0 : void ScUndoShowHideTab::DoChange( bool bShowP ) const
    1130             : {
    1131           0 :     ScDocument& rDoc = pDocShell->GetDocument();
    1132           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
    1133             : 
    1134             :     SCTAB nTab;
    1135             : 
    1136           0 :     for(std::vector<SCTAB>::const_iterator itr = undoTabs.begin(), itrEnd = undoTabs.end(); itr != itrEnd; ++itr)
    1137             :     {
    1138           0 :         nTab = *itr;
    1139           0 :         rDoc.SetVisible( nTab, bShowP );
    1140           0 :         if (pViewShell)
    1141           0 :             pViewShell->SetTabNo(nTab,true);
    1142             :     }
    1143             : 
    1144           0 :     SfxGetpApp()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) );
    1145           0 :     pDocShell->SetDocumentModified();
    1146           0 : }
    1147             : 
    1148           0 : void ScUndoShowHideTab::Undo()
    1149             : {
    1150           0 :     DoChange(!bShow);
    1151           0 : }
    1152             : 
    1153           0 : void ScUndoShowHideTab::Redo()
    1154             : {
    1155           0 :     DoChange(bShow);
    1156           0 : }
    1157             : 
    1158           0 : void ScUndoShowHideTab::Repeat(SfxRepeatTarget& rTarget)
    1159             : {
    1160           0 :     if (rTarget.ISA(ScTabViewTarget))
    1161           0 :         static_cast<ScTabViewTarget&>(rTarget).GetViewShell()->GetViewData().GetDispatcher().
    1162             :             Execute( bShow ? FID_TABLE_SHOW : FID_TABLE_HIDE,
    1163           0 :                                 SfxCallMode::SLOT | SfxCallMode::RECORD);
    1164           0 : }
    1165             : 
    1166           2 : bool ScUndoShowHideTab::CanRepeat(SfxRepeatTarget& rTarget) const
    1167             : {
    1168           2 :     return rTarget.ISA(ScTabViewTarget);
    1169             : }
    1170             : 
    1171           6 : OUString ScUndoShowHideTab::GetComment() const
    1172             : {
    1173             :     sal_uInt16 nId;
    1174           6 :     if (undoTabs.size() > 1)
    1175             :     {
    1176           0 :         nId = bShow ? STR_UNDO_SHOWTABS : STR_UNDO_HIDETABS;
    1177             :     }
    1178             :     else
    1179             :     {
    1180           6 :         nId = bShow ? STR_UNDO_SHOWTAB : STR_UNDO_HIDETAB;
    1181             :     }
    1182             : 
    1183           6 :     return ScGlobal::GetRscString( nId );
    1184             : }
    1185             : 
    1186           2 : ScUndoDocProtect::ScUndoDocProtect(ScDocShell* pShell, unique_ptr<ScDocProtection> && pProtectSettings) :
    1187             :     ScSimpleUndo(pShell),
    1188           2 :     mpProtectSettings(std::move(pProtectSettings))
    1189             : {
    1190           2 : }
    1191             : 
    1192           4 : ScUndoDocProtect::~ScUndoDocProtect()
    1193             : {
    1194           4 : }
    1195             : 
    1196           0 : void ScUndoDocProtect::DoProtect(bool bProtect)
    1197             : {
    1198           0 :     ScDocument& rDoc = pDocShell->GetDocument();
    1199             : 
    1200           0 :     if (bProtect)
    1201             :     {
    1202             :         // set protection.
    1203           0 :         unique_ptr<ScDocProtection> pCopy(new ScDocProtection(*mpProtectSettings));
    1204           0 :         pCopy->setProtected(true);
    1205           0 :         rDoc.SetDocProtection(pCopy.get());
    1206             :     }
    1207             :     else
    1208             :     {
    1209             :         // remove protection.
    1210           0 :         rDoc.SetDocProtection(NULL);
    1211             :     }
    1212             : 
    1213           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
    1214           0 :     if (pViewShell)
    1215             :     {
    1216           0 :         pViewShell->UpdateLayerLocks();
    1217           0 :         pViewShell->UpdateInputHandler(true);   // so that input can be immediately entered again
    1218             :     }
    1219             : 
    1220           0 :     pDocShell->PostPaintGridAll();
    1221           0 : }
    1222             : 
    1223           0 : void ScUndoDocProtect::Undo()
    1224             : {
    1225           0 :     BeginUndo();
    1226           0 :     DoProtect(!mpProtectSettings->isProtected());
    1227           0 :     EndUndo();
    1228           0 : }
    1229             : 
    1230           0 : void ScUndoDocProtect::Redo()
    1231             : {
    1232           0 :     BeginRedo();
    1233           0 :     DoProtect(mpProtectSettings->isProtected());
    1234           0 :     EndRedo();
    1235           0 : }
    1236             : 
    1237           0 : void ScUndoDocProtect::Repeat(SfxRepeatTarget& /* rTarget */)
    1238             : {
    1239             :     // makes no sense
    1240           0 : }
    1241             : 
    1242           2 : bool ScUndoDocProtect::CanRepeat(SfxRepeatTarget& /* rTarget */) const
    1243             : {
    1244           2 :     return false;       // makes no sense
    1245             : }
    1246             : 
    1247           4 : OUString ScUndoDocProtect::GetComment() const
    1248             : {
    1249           4 :     sal_uInt16 nId = mpProtectSettings->isProtected() ? STR_UNDO_PROTECT_DOC : STR_UNDO_UNPROTECT_DOC;
    1250           4 :     return ScGlobal::GetRscString( nId );
    1251             : }
    1252             : 
    1253           0 : ScUndoTabProtect::ScUndoTabProtect(ScDocShell* pShell, SCTAB nTab, unique_ptr<ScTableProtection> && pProtectSettings) :
    1254             :     ScSimpleUndo(pShell),
    1255             :     mnTab(nTab),
    1256           0 :     mpProtectSettings(std::move(pProtectSettings))
    1257             : {
    1258           0 : }
    1259             : 
    1260           0 : ScUndoTabProtect::~ScUndoTabProtect()
    1261             : {
    1262           0 : }
    1263             : 
    1264           0 : void ScUndoTabProtect::DoProtect(bool bProtect)
    1265             : {
    1266           0 :     ScDocument& rDoc = pDocShell->GetDocument();
    1267             : 
    1268           0 :     if (bProtect)
    1269             :     {
    1270             :         // set protection.
    1271           0 :         unique_ptr<ScTableProtection> pCopy(new ScTableProtection(*mpProtectSettings));
    1272           0 :         pCopy->setProtected(true);
    1273           0 :         rDoc.SetTabProtection(mnTab, pCopy.get());
    1274             :     }
    1275             :     else
    1276             :     {
    1277             :         // remove protection.
    1278           0 :         rDoc.SetTabProtection(mnTab, NULL);
    1279             :     }
    1280             : 
    1281           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
    1282           0 :     if (pViewShell)
    1283             :     {
    1284           0 :         pViewShell->UpdateLayerLocks();
    1285           0 :         pViewShell->UpdateInputHandler(true);   // so that input can be immediately entered again
    1286             :     }
    1287             : 
    1288           0 :     pDocShell->PostPaintGridAll();
    1289           0 : }
    1290             : 
    1291           0 : void ScUndoTabProtect::Undo()
    1292             : {
    1293           0 :     BeginUndo();
    1294           0 :     DoProtect(!mpProtectSettings->isProtected());
    1295           0 :     EndUndo();
    1296           0 : }
    1297             : 
    1298           0 : void ScUndoTabProtect::Redo()
    1299             : {
    1300           0 :     BeginRedo();
    1301           0 :     DoProtect(mpProtectSettings->isProtected());
    1302           0 :     EndRedo();
    1303           0 : }
    1304             : 
    1305           0 : void ScUndoTabProtect::Repeat(SfxRepeatTarget& /* rTarget */)
    1306             : {
    1307             :     // makes no sense
    1308           0 : }
    1309             : 
    1310           0 : bool ScUndoTabProtect::CanRepeat(SfxRepeatTarget& /* rTarget */) const
    1311             : {
    1312           0 :     return false;       // makes no sense
    1313             : }
    1314             : 
    1315           0 : OUString ScUndoTabProtect::GetComment() const
    1316             : {
    1317           0 :     sal_uInt16 nId = mpProtectSettings->isProtected() ? STR_UNDO_PROTECT_TAB : STR_UNDO_UNPROTECT_TAB;
    1318           0 :     return ScGlobal::GetRscString( nId );
    1319             : }
    1320             : 
    1321           2 : ScUndoPrintRange::ScUndoPrintRange( ScDocShell* pShell, SCTAB nNewTab,
    1322             :                                     ScPrintRangeSaver* pOld, ScPrintRangeSaver* pNew ) :
    1323             :     ScSimpleUndo( pShell ),
    1324             :     nTab( nNewTab ),
    1325             :     pOldRanges( pOld ),
    1326           2 :     pNewRanges( pNew )
    1327             : {
    1328           2 : }
    1329             : 
    1330           6 : ScUndoPrintRange::~ScUndoPrintRange()
    1331             : {
    1332           2 :     delete pOldRanges;
    1333           2 :     delete pNewRanges;
    1334           4 : }
    1335             : 
    1336           0 : void ScUndoPrintRange::DoChange(bool bUndo)
    1337             : {
    1338           0 :     ScDocument& rDoc = pDocShell->GetDocument();
    1339           0 :     if (bUndo)
    1340           0 :         rDoc.RestorePrintRanges( *pOldRanges );
    1341             :     else
    1342           0 :         rDoc.RestorePrintRanges( *pNewRanges );
    1343             : 
    1344           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
    1345           0 :     if (pViewShell)
    1346           0 :         pViewShell->SetTabNo( nTab );
    1347             : 
    1348           0 :     ScPrintFunc( pDocShell, pDocShell->GetPrinter(), nTab ).UpdatePages();
    1349             : 
    1350           0 :     pDocShell->PostPaint( ScRange(0,0,nTab,MAXCOL,MAXROW,nTab), PAINT_GRID );
    1351           0 : }
    1352             : 
    1353           0 : void ScUndoPrintRange::Undo()
    1354             : {
    1355           0 :     BeginUndo();
    1356           0 :     DoChange( true );
    1357           0 :     EndUndo();
    1358           0 : }
    1359             : 
    1360           0 : void ScUndoPrintRange::Redo()
    1361             : {
    1362           0 :     BeginRedo();
    1363           0 :     DoChange( false );
    1364           0 :     EndRedo();
    1365           0 : }
    1366             : 
    1367           0 : void ScUndoPrintRange::Repeat(SfxRepeatTarget& /* rTarget */)
    1368             : {
    1369             :     // makes no sense
    1370           0 : }
    1371             : 
    1372           0 : bool ScUndoPrintRange::CanRepeat(SfxRepeatTarget& /* rTarget */) const
    1373             : {
    1374           0 :     return false;       // makes no sense
    1375             : }
    1376             : 
    1377           2 : OUString ScUndoPrintRange::GetComment() const
    1378             : {
    1379           2 :     return ScGlobal::GetRscString( STR_UNDO_PRINTRANGES );
    1380             : }
    1381             : 
    1382           0 : ScUndoScenarioFlags::ScUndoScenarioFlags( ScDocShell* pNewDocShell, SCTAB nT,
    1383             :                     const OUString& rON, const OUString& rNN, const OUString& rOC, const OUString& rNC,
    1384             :                     const Color& rOCol, const Color& rNCol, sal_uInt16 nOF, sal_uInt16 nNF ) :
    1385             :     ScSimpleUndo( pNewDocShell ),
    1386             :     nTab        ( nT ),
    1387             :     aOldName    ( rON ),
    1388             :     aNewName    ( rNN ),
    1389             :     aOldComment ( rOC ),
    1390             :     aNewComment ( rNC ),
    1391             :     aOldColor   ( rOCol ),
    1392             :     aNewColor   ( rNCol ),
    1393             :     nOldFlags   ( nOF ),
    1394           0 :     nNewFlags   ( nNF )
    1395             : {
    1396           0 : }
    1397             : 
    1398           0 : ScUndoScenarioFlags::~ScUndoScenarioFlags()
    1399             : {
    1400           0 : }
    1401             : 
    1402           0 : OUString ScUndoScenarioFlags::GetComment() const
    1403             : {
    1404           0 :     return ScGlobal::GetRscString( STR_UNDO_EDITSCENARIO );
    1405             : }
    1406             : 
    1407           0 : void ScUndoScenarioFlags::Undo()
    1408             : {
    1409           0 :     ScDocument& rDoc = pDocShell->GetDocument();
    1410             : 
    1411           0 :     rDoc.RenameTab( nTab, aOldName );
    1412           0 :     rDoc.SetScenarioData( nTab, aOldComment, aOldColor, nOldFlags );
    1413             : 
    1414           0 :     pDocShell->PostPaintGridAll();
    1415             :     // The sheet name might be used in a formula ...
    1416           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
    1417           0 :     if (pViewShell)
    1418           0 :         pViewShell->UpdateInputHandler();
    1419             : 
    1420           0 :     if ( aOldName != aNewName )
    1421           0 :         SfxGetpApp()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) );
    1422           0 : }
    1423             : 
    1424           0 : void ScUndoScenarioFlags::Redo()
    1425             : {
    1426           0 :     ScDocument& rDoc = pDocShell->GetDocument();
    1427             : 
    1428           0 :     rDoc.RenameTab( nTab, aNewName );
    1429           0 :     rDoc.SetScenarioData( nTab, aNewComment, aNewColor, nNewFlags );
    1430             : 
    1431           0 :     pDocShell->PostPaintGridAll();
    1432             :     // The sheet name might be used in a formula ...
    1433           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
    1434           0 :     if (pViewShell)
    1435           0 :         pViewShell->UpdateInputHandler();
    1436             : 
    1437           0 :     if ( aOldName != aNewName )
    1438           0 :         SfxGetpApp()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) );
    1439           0 : }
    1440             : 
    1441           0 : void ScUndoScenarioFlags::Repeat(SfxRepeatTarget& /* rTarget */)
    1442             : {
    1443             :     //  Repeat makes no sense
    1444           0 : }
    1445             : 
    1446           0 : bool ScUndoScenarioFlags::CanRepeat(SfxRepeatTarget& /* rTarget */) const
    1447             : {
    1448           0 :     return false;
    1449             : }
    1450             : 
    1451             : //      (move to different file?)
    1452           0 : ScUndoRenameObject::ScUndoRenameObject( ScDocShell* pNewDocShell, const OUString& rPN,
    1453             :                                         const OUString& rON, const OUString& rNN ) :
    1454             :     ScSimpleUndo( pNewDocShell ),
    1455             :     aPersistName( rPN ),
    1456             :     aOldName    ( rON ),
    1457           0 :     aNewName    ( rNN )
    1458             : {
    1459           0 : }
    1460             : 
    1461           0 : ScUndoRenameObject::~ScUndoRenameObject()
    1462             : {
    1463           0 : }
    1464             : 
    1465           0 : OUString ScUndoRenameObject::GetComment() const
    1466             : {
    1467             :     //  string resource shared with title for dialog
    1468           0 :     return OUString( ScResId(SCSTR_RENAMEOBJECT) );
    1469             : }
    1470             : 
    1471           0 : SdrObject* ScUndoRenameObject::GetObject()
    1472             : {
    1473           0 :     ScDocument& rDoc = pDocShell->GetDocument();
    1474           0 :     ScDrawLayer* pDrawLayer = rDoc.GetDrawLayer();
    1475           0 :     if ( pDrawLayer )
    1476             :     {
    1477           0 :         sal_uInt16 nCount = pDrawLayer->GetPageCount();
    1478           0 :         for (sal_uInt16 nTab=0; nTab<nCount; nTab++)
    1479             :         {
    1480           0 :             SdrPage* pPage = pDrawLayer->GetPage(nTab);
    1481             :             assert(pPage && "Page ?");
    1482             : 
    1483           0 :             SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS );
    1484           0 :             SdrObject* pObject = aIter.Next();
    1485           0 :             while (pObject)
    1486             :             {
    1487           0 :                 if ( pObject->GetObjIdentifier() == OBJ_OLE2 &&
    1488           0 :                         static_cast<SdrOle2Obj*>(pObject)->GetPersistName() == aPersistName )
    1489             :                 {
    1490           0 :                     return pObject;
    1491             :                 }
    1492             : 
    1493           0 :                 pObject = aIter.Next();
    1494             :             }
    1495           0 :         }
    1496             :     }
    1497             :     OSL_FAIL("Object not found");
    1498           0 :     return NULL;
    1499             : }
    1500             : 
    1501           0 : void ScUndoRenameObject::Undo()
    1502             : {
    1503           0 :     BeginUndo();
    1504           0 :     SdrObject* pObj = GetObject();
    1505           0 :     if ( pObj )
    1506           0 :         pObj->SetName( aOldName );
    1507           0 :     EndUndo();
    1508           0 : }
    1509             : 
    1510           0 : void ScUndoRenameObject::Redo()
    1511             : {
    1512           0 :     BeginRedo();
    1513           0 :     SdrObject* pObj = GetObject();
    1514           0 :     if ( pObj )
    1515           0 :         pObj->SetName( aNewName );
    1516           0 :     EndRedo();
    1517           0 : }
    1518             : 
    1519           0 : void ScUndoRenameObject::Repeat(SfxRepeatTarget& /* rTarget */)
    1520             : {
    1521           0 : }
    1522             : 
    1523           0 : bool ScUndoRenameObject::CanRepeat(SfxRepeatTarget& /* rTarget */) const
    1524             : {
    1525           0 :     return false;
    1526             : }
    1527             : 
    1528           4 : ScUndoLayoutRTL::ScUndoLayoutRTL( ScDocShell* pShell, SCTAB nNewTab, bool bNewRTL ) :
    1529             :     ScSimpleUndo( pShell ),
    1530             :     nTab( nNewTab ),
    1531           4 :     bRTL( bNewRTL )
    1532             : {
    1533           4 : }
    1534             : 
    1535           8 : ScUndoLayoutRTL::~ScUndoLayoutRTL()
    1536             : {
    1537           8 : }
    1538             : 
    1539           0 : void ScUndoLayoutRTL::DoChange( bool bNew )
    1540             : {
    1541           0 :     pDocShell->SetInUndo( true );
    1542             : 
    1543           0 :     ScDocument& rDoc = pDocShell->GetDocument();
    1544           0 :     rDoc.SetLayoutRTL( nTab, bNew );
    1545             : 
    1546           0 :     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
    1547           0 :     if (pViewShell)
    1548           0 :         pViewShell->SetTabNo(nTab,true);
    1549             : 
    1550           0 :     pDocShell->SetDocumentModified();
    1551             : 
    1552           0 :     pDocShell->SetInUndo( false );
    1553           0 : }
    1554             : 
    1555           0 : void ScUndoLayoutRTL::Undo()
    1556             : {
    1557           0 :     DoChange(!bRTL);
    1558           0 : }
    1559             : 
    1560           0 : void ScUndoLayoutRTL::Redo()
    1561             : {
    1562           0 :     DoChange(bRTL);
    1563           0 : }
    1564             : 
    1565           0 : void ScUndoLayoutRTL::Repeat(SfxRepeatTarget& rTarget)
    1566             : {
    1567           0 :     if (rTarget.ISA(ScTabViewTarget))
    1568           0 :         static_cast<ScTabViewTarget&>(rTarget).GetViewShell()->GetViewData().GetDispatcher().
    1569           0 :             Execute( FID_TAB_RTL, SfxCallMode::SLOT | SfxCallMode::RECORD);
    1570           0 : }
    1571             : 
    1572           2 : bool ScUndoLayoutRTL::CanRepeat(SfxRepeatTarget& rTarget) const
    1573             : {
    1574           2 :     return rTarget.ISA(ScTabViewTarget);
    1575             : }
    1576             : 
    1577           8 : OUString ScUndoLayoutRTL::GetComment() const
    1578             : {
    1579           8 :     return ScGlobal::GetRscString( STR_UNDO_TAB_RTL );
    1580         156 : }
    1581             : 
    1582             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11