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

Generated by: LCOV version 1.10