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