xref: /aoo41x/main/sc/source/ui/undo/undotab.cxx (revision cdf0e10c)
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