xref: /aoo4110/main/sc/source/ui/undo/undoblk3.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sc.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski // INCLUDE -------------------------------------------------------------------
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include "scitems.hxx"
30*b1cdbd2cSJim Jagielski #include <editeng/boxitem.hxx>
31*b1cdbd2cSJim Jagielski #include <svl/srchitem.hxx>
32*b1cdbd2cSJim Jagielski #include <sfx2/linkmgr.hxx>
33*b1cdbd2cSJim Jagielski #include <sfx2/bindings.hxx>
34*b1cdbd2cSJim Jagielski #include <vcl/virdev.hxx>
35*b1cdbd2cSJim Jagielski #include <sfx2/app.hxx>
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski #include "undoblk.hxx"
38*b1cdbd2cSJim Jagielski #include "sc.hrc"
39*b1cdbd2cSJim Jagielski #include "globstr.hrc"
40*b1cdbd2cSJim Jagielski #include "global.hxx"
41*b1cdbd2cSJim Jagielski #include "rangenam.hxx"
42*b1cdbd2cSJim Jagielski #include "arealink.hxx"
43*b1cdbd2cSJim Jagielski #include "patattr.hxx"
44*b1cdbd2cSJim Jagielski #include "target.hxx"
45*b1cdbd2cSJim Jagielski #include "document.hxx"
46*b1cdbd2cSJim Jagielski #include "docpool.hxx"
47*b1cdbd2cSJim Jagielski #include "table.hxx"
48*b1cdbd2cSJim Jagielski #include "docsh.hxx"
49*b1cdbd2cSJim Jagielski #include "tabvwsh.hxx"
50*b1cdbd2cSJim Jagielski #include "undoolk.hxx"
51*b1cdbd2cSJim Jagielski #include "undoutil.hxx"
52*b1cdbd2cSJim Jagielski #include "chgtrack.hxx"
53*b1cdbd2cSJim Jagielski #include "dociter.hxx"
54*b1cdbd2cSJim Jagielski #include "cell.hxx"
55*b1cdbd2cSJim Jagielski #include "paramisc.hxx"
56*b1cdbd2cSJim Jagielski #include "postit.hxx"
57*b1cdbd2cSJim Jagielski #include "docuno.hxx"
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski // STATIC DATA ---------------------------------------------------------------
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoDeleteContents, 	SfxUndoAction);
62*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoFillTable,		 	SfxUndoAction);
63*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoSelectionAttr,		SfxUndoAction);
64*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoAutoFill,			SfxUndoAction);
65*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoMerge,				SfxUndoAction);
66*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoAutoFormat, 		SfxUndoAction);
67*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoReplace,			SfxUndoAction);
68*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoTabOp,				SfxUndoAction);
69*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoConversion,         SfxUndoAction);
70*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoRefConversion,      SfxUndoAction);
71*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoRefreshLink,		SfxUndoAction);
72*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoInsertAreaLink,		SfxUndoAction);
73*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoRemoveAreaLink,		SfxUndoAction);
74*b1cdbd2cSJim Jagielski TYPEINIT1(ScUndoUpdateAreaLink,		SfxUndoAction);
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski // To Do:
78*b1cdbd2cSJim Jagielski /*A*/	// SetOptimalHeight auf Dokument, wenn keine View
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski //============================================================================
82*b1cdbd2cSJim Jagielski //	class ScUndoDeleteContents
83*b1cdbd2cSJim Jagielski //
84*b1cdbd2cSJim Jagielski //	Inhalte loeschen
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
87*b1cdbd2cSJim Jagielski 
ScUndoDeleteContents(ScDocShell * pNewDocShell,const ScMarkData & rMark,const ScRange & rRange,ScDocument * pNewUndoDoc,sal_Bool bNewMulti,sal_uInt16 nNewFlags,sal_Bool bObjects)88*b1cdbd2cSJim Jagielski ScUndoDeleteContents::ScUndoDeleteContents(
89*b1cdbd2cSJim Jagielski 				ScDocShell* pNewDocShell,
90*b1cdbd2cSJim Jagielski 				const ScMarkData& rMark, const ScRange& rRange,
91*b1cdbd2cSJim Jagielski 				ScDocument* pNewUndoDoc, sal_Bool bNewMulti,
92*b1cdbd2cSJim Jagielski 				sal_uInt16 nNewFlags, sal_Bool bObjects )
93*b1cdbd2cSJim Jagielski 		//
94*b1cdbd2cSJim Jagielski 	:	ScSimpleUndo( pNewDocShell ),
95*b1cdbd2cSJim Jagielski 		//
96*b1cdbd2cSJim Jagielski 		aRange		( rRange ),
97*b1cdbd2cSJim Jagielski 		aMarkData	( rMark ),
98*b1cdbd2cSJim Jagielski 		pUndoDoc	( pNewUndoDoc ),
99*b1cdbd2cSJim Jagielski 		pDrawUndo	( NULL ),
100*b1cdbd2cSJim Jagielski 		nFlags		( nNewFlags ),
101*b1cdbd2cSJim Jagielski 		bMulti		( bNewMulti )	// ueberliquid
102*b1cdbd2cSJim Jagielski {
103*b1cdbd2cSJim Jagielski 	if (bObjects)
104*b1cdbd2cSJim Jagielski 		pDrawUndo = GetSdrUndoAction( pDocShell->GetDocument() );
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski 	if ( !(aMarkData.IsMarked() || aMarkData.IsMultiMarked()) )		// keine Zelle markiert:
107*b1cdbd2cSJim Jagielski 		aMarkData.SetMarkArea( aRange );							// Zelle unter Cursor markieren
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 	SetChangeTrack();
110*b1cdbd2cSJim Jagielski }
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
114*b1cdbd2cSJim Jagielski 
~ScUndoDeleteContents()115*b1cdbd2cSJim Jagielski __EXPORT ScUndoDeleteContents::~ScUndoDeleteContents()
116*b1cdbd2cSJim Jagielski {
117*b1cdbd2cSJim Jagielski 	delete pUndoDoc;
118*b1cdbd2cSJim Jagielski 	DeleteSdrUndoAction( pDrawUndo );
119*b1cdbd2cSJim Jagielski }
120*b1cdbd2cSJim Jagielski 
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
123*b1cdbd2cSJim Jagielski 
GetComment() const124*b1cdbd2cSJim Jagielski String __EXPORT ScUndoDeleteContents::GetComment() const
125*b1cdbd2cSJim Jagielski {
126*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( STR_UNDO_DELETECONTENTS );	 // "Loeschen"
127*b1cdbd2cSJim Jagielski }
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski 
SetChangeTrack()130*b1cdbd2cSJim Jagielski void ScUndoDeleteContents::SetChangeTrack()
131*b1cdbd2cSJim Jagielski {
132*b1cdbd2cSJim Jagielski 	ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack();
133*b1cdbd2cSJim Jagielski 	if ( pChangeTrack && (nFlags & IDF_CONTENTS) )
134*b1cdbd2cSJim Jagielski 		pChangeTrack->AppendContentRange( aRange, pUndoDoc,
135*b1cdbd2cSJim Jagielski 			nStartChangeAction, nEndChangeAction );
136*b1cdbd2cSJim Jagielski 	else
137*b1cdbd2cSJim Jagielski 		nStartChangeAction = nEndChangeAction = 0;
138*b1cdbd2cSJim Jagielski }
139*b1cdbd2cSJim Jagielski 
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
142*b1cdbd2cSJim Jagielski 
DoChange(const sal_Bool bUndo)143*b1cdbd2cSJim Jagielski void ScUndoDeleteContents::DoChange( const sal_Bool bUndo )
144*b1cdbd2cSJim Jagielski {
145*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 	SetViewMarkData( aMarkData );
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 	sal_uInt16 nExtFlags = 0;
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 	if (bUndo)	// nur Undo
152*b1cdbd2cSJim Jagielski 	{
153*b1cdbd2cSJim Jagielski 		sal_uInt16 nUndoFlags = IDF_NONE;		//	entweder alle oder keine Inhalte kopieren
154*b1cdbd2cSJim Jagielski 		if (nFlags & IDF_CONTENTS)			//	(es sind nur die richtigen ins UndoDoc kopiert worden)
155*b1cdbd2cSJim Jagielski 			nUndoFlags |= IDF_CONTENTS;
156*b1cdbd2cSJim Jagielski 		if (nFlags & IDF_ATTRIB)
157*b1cdbd2cSJim Jagielski 			nUndoFlags |= IDF_ATTRIB;
158*b1cdbd2cSJim Jagielski 		if (nFlags & IDF_EDITATTR)			// Edit-Engine-Attribute
159*b1cdbd2cSJim Jagielski 			nUndoFlags |= IDF_STRING;		// -> Zellen werden geaendert
160*b1cdbd2cSJim Jagielski         // do not create clones of note captions, they will be restored via drawing undo
161*b1cdbd2cSJim Jagielski         nUndoFlags |= IDF_NOCAPTIONS;
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski 		ScRange aCopyRange = aRange;
164*b1cdbd2cSJim Jagielski 		SCTAB nTabCount = pDoc->GetTableCount();
165*b1cdbd2cSJim Jagielski 		aCopyRange.aStart.SetTab(0);
166*b1cdbd2cSJim Jagielski 		aCopyRange.aEnd.SetTab(nTabCount-1);
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 		pUndoDoc->CopyToDocument( aCopyRange, nUndoFlags, bMulti, pDoc, &aMarkData );
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski         DoSdrUndoAction( pDrawUndo, pDoc );
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 		ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
173*b1cdbd2cSJim Jagielski 		if ( pChangeTrack )
174*b1cdbd2cSJim Jagielski 			pChangeTrack->Undo( nStartChangeAction, nEndChangeAction );
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 		pDocShell->UpdatePaintExt( nExtFlags, aRange );				// content after the change
177*b1cdbd2cSJim Jagielski 	}
178*b1cdbd2cSJim Jagielski 	else		// nur Redo
179*b1cdbd2cSJim Jagielski 	{
180*b1cdbd2cSJim Jagielski 		pDocShell->UpdatePaintExt( nExtFlags, aRange );				// content before the change
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski 		aMarkData.MarkToMulti();
183*b1cdbd2cSJim Jagielski         RedoSdrUndoAction( pDrawUndo );
184*b1cdbd2cSJim Jagielski         // do not delete objects and note captions, they have been removed via drawing undo
185*b1cdbd2cSJim Jagielski         sal_uInt16 nRedoFlags = (nFlags & ~IDF_OBJECTS) | IDF_NOCAPTIONS;
186*b1cdbd2cSJim Jagielski         pDoc->DeleteSelection( nRedoFlags, aMarkData );
187*b1cdbd2cSJim Jagielski 		aMarkData.MarkToSimple();
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski 		SetChangeTrack();
190*b1cdbd2cSJim Jagielski 	}
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
193*b1cdbd2cSJim Jagielski 	if ( !( (pViewShell) && pViewShell->AdjustRowHeight(
194*b1cdbd2cSJim Jagielski 								aRange.aStart.Row(), aRange.aEnd.Row() ) ) )
195*b1cdbd2cSJim Jagielski /*A*/	pDocShell->PostPaint( aRange, PAINT_GRID | PAINT_EXTRAS, nExtFlags );
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski 	pDocShell->PostDataChanged();
198*b1cdbd2cSJim Jagielski 	if (pViewShell)
199*b1cdbd2cSJim Jagielski 		pViewShell->CellContentChanged();
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski 	ShowTable( aRange );
202*b1cdbd2cSJim Jagielski }
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
206*b1cdbd2cSJim Jagielski 
Undo()207*b1cdbd2cSJim Jagielski void __EXPORT ScUndoDeleteContents::Undo()
208*b1cdbd2cSJim Jagielski {
209*b1cdbd2cSJim Jagielski 	BeginUndo();
210*b1cdbd2cSJim Jagielski 	DoChange( sal_True );
211*b1cdbd2cSJim Jagielski 	EndUndo();
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski     // #i97876# Spreadsheet data changes are not notified
214*b1cdbd2cSJim Jagielski     ScModelObj* pModelObj = ScModelObj::getImplementation( pDocShell->GetModel() );
215*b1cdbd2cSJim Jagielski     if ( pModelObj && pModelObj->HasChangesListeners() )
216*b1cdbd2cSJim Jagielski     {
217*b1cdbd2cSJim Jagielski         ScRangeList aChangeRanges;
218*b1cdbd2cSJim Jagielski         aChangeRanges.Append( aRange );
219*b1cdbd2cSJim Jagielski         pModelObj->NotifyChanges( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cell-change" ) ), aChangeRanges );
220*b1cdbd2cSJim Jagielski     }
221*b1cdbd2cSJim Jagielski }
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
225*b1cdbd2cSJim Jagielski 
Redo()226*b1cdbd2cSJim Jagielski void __EXPORT ScUndoDeleteContents::Redo()
227*b1cdbd2cSJim Jagielski {
228*b1cdbd2cSJim Jagielski 	BeginRedo();
229*b1cdbd2cSJim Jagielski 	DoChange( sal_False );
230*b1cdbd2cSJim Jagielski 	EndRedo();
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski     // #i97876# Spreadsheet data changes are not notified
233*b1cdbd2cSJim Jagielski     ScModelObj* pModelObj = ScModelObj::getImplementation( pDocShell->GetModel() );
234*b1cdbd2cSJim Jagielski     if ( pModelObj && pModelObj->HasChangesListeners() )
235*b1cdbd2cSJim Jagielski     {
236*b1cdbd2cSJim Jagielski         ScRangeList aChangeRanges;
237*b1cdbd2cSJim Jagielski         aChangeRanges.Append( aRange );
238*b1cdbd2cSJim Jagielski         pModelObj->NotifyChanges( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cell-change" ) ), aChangeRanges );
239*b1cdbd2cSJim Jagielski     }
240*b1cdbd2cSJim Jagielski }
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
244*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget & rTarget)245*b1cdbd2cSJim Jagielski void __EXPORT ScUndoDeleteContents::Repeat(SfxRepeatTarget& rTarget)
246*b1cdbd2cSJim Jagielski {
247*b1cdbd2cSJim Jagielski 	if (rTarget.ISA(ScTabViewTarget))
248*b1cdbd2cSJim Jagielski 		((ScTabViewTarget&)rTarget).GetViewShell()->DeleteContents( nFlags, sal_True );
249*b1cdbd2cSJim Jagielski }
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
253*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget & rTarget) const254*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoDeleteContents::CanRepeat(SfxRepeatTarget& rTarget) const
255*b1cdbd2cSJim Jagielski {
256*b1cdbd2cSJim Jagielski 	return (rTarget.ISA(ScTabViewTarget));
257*b1cdbd2cSJim Jagielski }
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski //============================================================================
261*b1cdbd2cSJim Jagielski //	class ScUndoFillTable
262*b1cdbd2cSJim Jagielski //
263*b1cdbd2cSJim Jagielski //	Tabellen ausfuellen
264*b1cdbd2cSJim Jagielski //	(Bearbeiten|Ausfuellen|...)
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
267*b1cdbd2cSJim Jagielski 
ScUndoFillTable(ScDocShell * pNewDocShell,const ScMarkData & rMark,SCCOL nStartX,SCROW nStartY,SCTAB nStartZ,SCCOL nEndX,SCROW nEndY,SCTAB nEndZ,ScDocument * pNewUndoDoc,sal_Bool bNewMulti,SCTAB nSrc,sal_uInt16 nFlg,sal_uInt16 nFunc,sal_Bool bSkip,sal_Bool bLink)268*b1cdbd2cSJim Jagielski ScUndoFillTable::ScUndoFillTable( ScDocShell* pNewDocShell,
269*b1cdbd2cSJim Jagielski 				const ScMarkData& rMark,
270*b1cdbd2cSJim Jagielski 				SCCOL nStartX, SCROW nStartY, SCTAB nStartZ,
271*b1cdbd2cSJim Jagielski 				SCCOL nEndX, SCROW nEndY, SCTAB nEndZ,
272*b1cdbd2cSJim Jagielski 				ScDocument* pNewUndoDoc, sal_Bool bNewMulti, SCTAB nSrc,
273*b1cdbd2cSJim Jagielski 				sal_uInt16 nFlg, sal_uInt16 nFunc, sal_Bool bSkip, sal_Bool bLink )
274*b1cdbd2cSJim Jagielski 		//
275*b1cdbd2cSJim Jagielski 	:	ScSimpleUndo( pNewDocShell ),
276*b1cdbd2cSJim Jagielski 		//
277*b1cdbd2cSJim Jagielski 		aRange		( nStartX, nStartY, nStartZ, nEndX, nEndY, nEndZ ),
278*b1cdbd2cSJim Jagielski 		aMarkData	( rMark ),
279*b1cdbd2cSJim Jagielski 		pUndoDoc	( pNewUndoDoc ),
280*b1cdbd2cSJim Jagielski 		nFlags		( nFlg ),
281*b1cdbd2cSJim Jagielski 		nFunction	( nFunc ),
282*b1cdbd2cSJim Jagielski 		nSrcTab		( nSrc ),
283*b1cdbd2cSJim Jagielski 		bMulti		( bNewMulti ),
284*b1cdbd2cSJim Jagielski 		bSkipEmpty	( bSkip ),
285*b1cdbd2cSJim Jagielski 		bAsLink		( bLink )
286*b1cdbd2cSJim Jagielski {
287*b1cdbd2cSJim Jagielski 	SetChangeTrack();
288*b1cdbd2cSJim Jagielski }
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski 
291*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
292*b1cdbd2cSJim Jagielski 
~ScUndoFillTable()293*b1cdbd2cSJim Jagielski __EXPORT ScUndoFillTable::~ScUndoFillTable()
294*b1cdbd2cSJim Jagielski {
295*b1cdbd2cSJim Jagielski 	delete pUndoDoc;
296*b1cdbd2cSJim Jagielski }
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
300*b1cdbd2cSJim Jagielski 
GetComment() const301*b1cdbd2cSJim Jagielski String __EXPORT ScUndoFillTable::GetComment() const
302*b1cdbd2cSJim Jagielski {
303*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( STR_FILL_TAB );
304*b1cdbd2cSJim Jagielski }
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski 
SetChangeTrack()307*b1cdbd2cSJim Jagielski void ScUndoFillTable::SetChangeTrack()
308*b1cdbd2cSJim Jagielski {
309*b1cdbd2cSJim Jagielski 	ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack();
310*b1cdbd2cSJim Jagielski 	if ( pChangeTrack )
311*b1cdbd2cSJim Jagielski 	{
312*b1cdbd2cSJim Jagielski 		SCTAB nTabCount = pDocShell->GetDocument()->GetTableCount();
313*b1cdbd2cSJim Jagielski 		ScRange aWorkRange(aRange);
314*b1cdbd2cSJim Jagielski 		nStartChangeAction = 0;
315*b1cdbd2cSJim Jagielski 		sal_uLong nTmpAction;
316*b1cdbd2cSJim Jagielski 		for ( SCTAB i = 0; i < nTabCount; i++ )
317*b1cdbd2cSJim Jagielski 		{
318*b1cdbd2cSJim Jagielski 			if (i != nSrcTab && aMarkData.GetTableSelect(i))
319*b1cdbd2cSJim Jagielski 			{
320*b1cdbd2cSJim Jagielski 				aWorkRange.aStart.SetTab(i);
321*b1cdbd2cSJim Jagielski 				aWorkRange.aEnd.SetTab(i);
322*b1cdbd2cSJim Jagielski 				pChangeTrack->AppendContentRange( aWorkRange, pUndoDoc,
323*b1cdbd2cSJim Jagielski 					nTmpAction, nEndChangeAction );
324*b1cdbd2cSJim Jagielski 				if ( !nStartChangeAction )
325*b1cdbd2cSJim Jagielski 					nStartChangeAction = nTmpAction;
326*b1cdbd2cSJim Jagielski 			}
327*b1cdbd2cSJim Jagielski 		}
328*b1cdbd2cSJim Jagielski 	}
329*b1cdbd2cSJim Jagielski 	else
330*b1cdbd2cSJim Jagielski 		nStartChangeAction = nEndChangeAction = 0;
331*b1cdbd2cSJim Jagielski }
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski 
334*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
335*b1cdbd2cSJim Jagielski 
DoChange(const sal_Bool bUndo)336*b1cdbd2cSJim Jagielski void ScUndoFillTable::DoChange( const sal_Bool bUndo )
337*b1cdbd2cSJim Jagielski {
338*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski 	SetViewMarkData( aMarkData );
341*b1cdbd2cSJim Jagielski 
342*b1cdbd2cSJim Jagielski 	if (bUndo)	// nur Undo
343*b1cdbd2cSJim Jagielski 	{
344*b1cdbd2cSJim Jagielski 		SCTAB nTabCount = pDoc->GetTableCount();
345*b1cdbd2cSJim Jagielski 		ScRange aWorkRange(aRange);
346*b1cdbd2cSJim Jagielski 		for ( SCTAB i = 0; i < nTabCount; i++ )
347*b1cdbd2cSJim Jagielski 			if (i != nSrcTab && aMarkData.GetTableSelect(i))
348*b1cdbd2cSJim Jagielski 			{
349*b1cdbd2cSJim Jagielski 				aWorkRange.aStart.SetTab(i);
350*b1cdbd2cSJim Jagielski 				aWorkRange.aEnd.SetTab(i);
351*b1cdbd2cSJim Jagielski 				if (bMulti)
352*b1cdbd2cSJim Jagielski 					pDoc->DeleteSelectionTab( i, IDF_ALL, aMarkData );
353*b1cdbd2cSJim Jagielski 				else
354*b1cdbd2cSJim Jagielski 					pDoc->DeleteAreaTab( aWorkRange, IDF_ALL );
355*b1cdbd2cSJim Jagielski 				pUndoDoc->CopyToDocument( aWorkRange, IDF_ALL, bMulti, pDoc, &aMarkData );
356*b1cdbd2cSJim Jagielski 			}
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski 		ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
359*b1cdbd2cSJim Jagielski 		if ( pChangeTrack )
360*b1cdbd2cSJim Jagielski 			pChangeTrack->Undo( nStartChangeAction, nEndChangeAction );
361*b1cdbd2cSJim Jagielski 	}
362*b1cdbd2cSJim Jagielski 	else		// nur Redo
363*b1cdbd2cSJim Jagielski 	{
364*b1cdbd2cSJim Jagielski 		aMarkData.MarkToMulti();
365*b1cdbd2cSJim Jagielski 		pDoc->FillTabMarked( nSrcTab, aMarkData, nFlags, nFunction, bSkipEmpty, bAsLink );
366*b1cdbd2cSJim Jagielski 		aMarkData.MarkToSimple();
367*b1cdbd2cSJim Jagielski 		SetChangeTrack();
368*b1cdbd2cSJim Jagielski 	}
369*b1cdbd2cSJim Jagielski 
370*b1cdbd2cSJim Jagielski 	pDocShell->PostPaint(0,0,0,MAXCOL,MAXROW,MAXTAB, PAINT_GRID|PAINT_EXTRAS);
371*b1cdbd2cSJim Jagielski 	pDocShell->PostDataChanged();
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski 	//	CellContentChanged kommt mit der Markierung
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
376*b1cdbd2cSJim Jagielski 	if (pViewShell)
377*b1cdbd2cSJim Jagielski 	{
378*b1cdbd2cSJim Jagielski 		SCTAB nTab = pViewShell->GetViewData()->GetTabNo();
379*b1cdbd2cSJim Jagielski 		if ( !aMarkData.GetTableSelect(nTab) )
380*b1cdbd2cSJim Jagielski 			pViewShell->SetTabNo( nSrcTab );
381*b1cdbd2cSJim Jagielski 
382*b1cdbd2cSJim Jagielski 		pViewShell->DoneBlockMode();	// gibt sonst Probleme, weil Markierung auf falscher Tabelle
383*b1cdbd2cSJim Jagielski 	}
384*b1cdbd2cSJim Jagielski }
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
388*b1cdbd2cSJim Jagielski 
Undo()389*b1cdbd2cSJim Jagielski void __EXPORT ScUndoFillTable::Undo()
390*b1cdbd2cSJim Jagielski {
391*b1cdbd2cSJim Jagielski 	BeginUndo();
392*b1cdbd2cSJim Jagielski 	DoChange( sal_True );
393*b1cdbd2cSJim Jagielski 	EndUndo();
394*b1cdbd2cSJim Jagielski }
395*b1cdbd2cSJim Jagielski 
396*b1cdbd2cSJim Jagielski 
397*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
398*b1cdbd2cSJim Jagielski 
Redo()399*b1cdbd2cSJim Jagielski void __EXPORT ScUndoFillTable::Redo()
400*b1cdbd2cSJim Jagielski {
401*b1cdbd2cSJim Jagielski 	BeginRedo();
402*b1cdbd2cSJim Jagielski 	DoChange( sal_False );
403*b1cdbd2cSJim Jagielski 	EndRedo();
404*b1cdbd2cSJim Jagielski }
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
408*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget & rTarget)409*b1cdbd2cSJim Jagielski void __EXPORT ScUndoFillTable::Repeat(SfxRepeatTarget& rTarget)
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski 	if (rTarget.ISA(ScTabViewTarget))
412*b1cdbd2cSJim Jagielski 		((ScTabViewTarget&)rTarget).GetViewShell()->FillTab( nFlags, nFunction, bSkipEmpty, bAsLink );
413*b1cdbd2cSJim Jagielski }
414*b1cdbd2cSJim Jagielski 
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
417*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget & rTarget) const418*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoFillTable::CanRepeat(SfxRepeatTarget& rTarget) const
419*b1cdbd2cSJim Jagielski {
420*b1cdbd2cSJim Jagielski 	return (rTarget.ISA(ScTabViewTarget));
421*b1cdbd2cSJim Jagielski }
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski //============================================================================
425*b1cdbd2cSJim Jagielski //	class ScUndoSelectionAttr
426*b1cdbd2cSJim Jagielski //
427*b1cdbd2cSJim Jagielski //	Zellformat aendern
428*b1cdbd2cSJim Jagielski 
429*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
430*b1cdbd2cSJim Jagielski 
ScUndoSelectionAttr(ScDocShell * pNewDocShell,const ScMarkData & rMark,SCCOL nStartX,SCROW nStartY,SCTAB nStartZ,SCCOL nEndX,SCROW nEndY,SCTAB nEndZ,ScDocument * pNewUndoDoc,sal_Bool bNewMulti,const ScPatternAttr * pNewApply,const SvxBoxItem * pNewOuter,const SvxBoxInfoItem * pNewInner)431*b1cdbd2cSJim Jagielski ScUndoSelectionAttr::ScUndoSelectionAttr( ScDocShell* pNewDocShell,
432*b1cdbd2cSJim Jagielski 				const ScMarkData& rMark,
433*b1cdbd2cSJim Jagielski 				SCCOL nStartX, SCROW nStartY, SCTAB nStartZ,
434*b1cdbd2cSJim Jagielski 				SCCOL nEndX, SCROW nEndY, SCTAB nEndZ,
435*b1cdbd2cSJim Jagielski 				ScDocument* pNewUndoDoc, sal_Bool bNewMulti,
436*b1cdbd2cSJim Jagielski 				const ScPatternAttr* pNewApply,
437*b1cdbd2cSJim Jagielski 				const SvxBoxItem* pNewOuter, const SvxBoxInfoItem* pNewInner )
438*b1cdbd2cSJim Jagielski 		//
439*b1cdbd2cSJim Jagielski 	:	ScSimpleUndo( pNewDocShell ),
440*b1cdbd2cSJim Jagielski 		//
441*b1cdbd2cSJim Jagielski 		aMarkData	( rMark ),
442*b1cdbd2cSJim Jagielski 		aRange		( nStartX, nStartY, nStartZ, nEndX, nEndY, nEndZ ),
443*b1cdbd2cSJim Jagielski 		pUndoDoc	( pNewUndoDoc ),
444*b1cdbd2cSJim Jagielski 		bMulti		( bNewMulti )
445*b1cdbd2cSJim Jagielski {
446*b1cdbd2cSJim Jagielski 	ScDocumentPool* pPool = pDocShell->GetDocument()->GetPool();
447*b1cdbd2cSJim Jagielski 	pApplyPattern = (ScPatternAttr*) &pPool->Put( *pNewApply );
448*b1cdbd2cSJim Jagielski 	pLineOuter = pNewOuter ? (SvxBoxItem*) &pPool->Put( *pNewOuter ) : NULL;
449*b1cdbd2cSJim Jagielski 	pLineInner = pNewInner ? (SvxBoxInfoItem*) &pPool->Put( *pNewInner ) : NULL;
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski 
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
454*b1cdbd2cSJim Jagielski 
~ScUndoSelectionAttr()455*b1cdbd2cSJim Jagielski __EXPORT ScUndoSelectionAttr::~ScUndoSelectionAttr()
456*b1cdbd2cSJim Jagielski {
457*b1cdbd2cSJim Jagielski 	ScDocumentPool* pPool = pDocShell->GetDocument()->GetPool();
458*b1cdbd2cSJim Jagielski 	pPool->Remove(*pApplyPattern);
459*b1cdbd2cSJim Jagielski 	if (pLineOuter)
460*b1cdbd2cSJim Jagielski 		pPool->Remove(*pLineOuter);
461*b1cdbd2cSJim Jagielski 	if (pLineInner)
462*b1cdbd2cSJim Jagielski 		pPool->Remove(*pLineInner);
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski 	delete pUndoDoc;
465*b1cdbd2cSJim Jagielski }
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski 
468*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
469*b1cdbd2cSJim Jagielski 
GetComment() const470*b1cdbd2cSJim Jagielski String __EXPORT ScUndoSelectionAttr::GetComment() const
471*b1cdbd2cSJim Jagielski {
472*b1cdbd2cSJim Jagielski 	//"Attribute" "/Linien"
473*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( pLineOuter ? STR_UNDO_SELATTRLINES : STR_UNDO_SELATTR );
474*b1cdbd2cSJim Jagielski }
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
478*b1cdbd2cSJim Jagielski 
DoChange(const sal_Bool bUndo)479*b1cdbd2cSJim Jagielski void ScUndoSelectionAttr::DoChange( const sal_Bool bUndo )
480*b1cdbd2cSJim Jagielski {
481*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
482*b1cdbd2cSJim Jagielski 
483*b1cdbd2cSJim Jagielski 	SetViewMarkData( aMarkData );
484*b1cdbd2cSJim Jagielski 
485*b1cdbd2cSJim Jagielski 	ScRange aEffRange( aRange );
486*b1cdbd2cSJim Jagielski 	if ( pDoc->HasAttrib( aEffRange, HASATTR_MERGED ) )			// zusammengefasste Zellen?
487*b1cdbd2cSJim Jagielski 		pDoc->ExtendMerge( aEffRange );
488*b1cdbd2cSJim Jagielski 
489*b1cdbd2cSJim Jagielski 	sal_uInt16 nExtFlags = 0;
490*b1cdbd2cSJim Jagielski 	pDocShell->UpdatePaintExt( nExtFlags, aEffRange );
491*b1cdbd2cSJim Jagielski 
492*b1cdbd2cSJim Jagielski 	if (bUndo)	// nur bei Undo
493*b1cdbd2cSJim Jagielski 	{
494*b1cdbd2cSJim Jagielski 		ScRange aCopyRange = aRange;
495*b1cdbd2cSJim Jagielski 		SCTAB nTabCount = pDoc->GetTableCount();
496*b1cdbd2cSJim Jagielski 		aCopyRange.aStart.SetTab(0);
497*b1cdbd2cSJim Jagielski 		aCopyRange.aEnd.SetTab(nTabCount-1);
498*b1cdbd2cSJim Jagielski 		pUndoDoc->CopyToDocument( aCopyRange, IDF_ATTRIB, bMulti, pDoc, &aMarkData );
499*b1cdbd2cSJim Jagielski 	}
500*b1cdbd2cSJim Jagielski 	else		// nur bei Redo
501*b1cdbd2cSJim Jagielski 	{
502*b1cdbd2cSJim Jagielski 		aMarkData.MarkToMulti();
503*b1cdbd2cSJim Jagielski 		pDoc->ApplySelectionPattern( *pApplyPattern, aMarkData );
504*b1cdbd2cSJim Jagielski 		aMarkData.MarkToSimple();
505*b1cdbd2cSJim Jagielski 
506*b1cdbd2cSJim Jagielski 		if (pLineOuter)
507*b1cdbd2cSJim Jagielski 			pDoc->ApplySelectionFrame( aMarkData, pLineOuter, pLineInner );
508*b1cdbd2cSJim Jagielski 	}
509*b1cdbd2cSJim Jagielski 
510*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
511*b1cdbd2cSJim Jagielski 	if ( !( (pViewShell) && pViewShell->AdjustBlockHeight() ) )
512*b1cdbd2cSJim Jagielski /*A*/	pDocShell->PostPaint( aEffRange, PAINT_GRID | PAINT_EXTRAS, nExtFlags );
513*b1cdbd2cSJim Jagielski 
514*b1cdbd2cSJim Jagielski 	ShowTable( aRange );
515*b1cdbd2cSJim Jagielski }
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski 
518*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
519*b1cdbd2cSJim Jagielski 
Undo()520*b1cdbd2cSJim Jagielski void __EXPORT ScUndoSelectionAttr::Undo()
521*b1cdbd2cSJim Jagielski {
522*b1cdbd2cSJim Jagielski 	BeginUndo();
523*b1cdbd2cSJim Jagielski 	DoChange( sal_True );
524*b1cdbd2cSJim Jagielski 	EndUndo();
525*b1cdbd2cSJim Jagielski }
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski 
528*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
529*b1cdbd2cSJim Jagielski 
Redo()530*b1cdbd2cSJim Jagielski void __EXPORT ScUndoSelectionAttr::Redo()
531*b1cdbd2cSJim Jagielski {
532*b1cdbd2cSJim Jagielski 	BeginRedo();
533*b1cdbd2cSJim Jagielski 	DoChange( sal_False );
534*b1cdbd2cSJim Jagielski 	EndRedo();
535*b1cdbd2cSJim Jagielski }
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski 
538*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
539*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget & rTarget)540*b1cdbd2cSJim Jagielski void __EXPORT ScUndoSelectionAttr::Repeat(SfxRepeatTarget& rTarget)
541*b1cdbd2cSJim Jagielski {
542*b1cdbd2cSJim Jagielski 	if (rTarget.ISA(ScTabViewTarget))
543*b1cdbd2cSJim Jagielski 	{
544*b1cdbd2cSJim Jagielski 		ScTabViewShell& rViewShell = *((ScTabViewTarget&)rTarget).GetViewShell();
545*b1cdbd2cSJim Jagielski 		if (pLineOuter)
546*b1cdbd2cSJim Jagielski 			rViewShell.ApplyPatternLines( *pApplyPattern, pLineOuter, pLineInner, sal_True );
547*b1cdbd2cSJim Jagielski 		else
548*b1cdbd2cSJim Jagielski 			rViewShell.ApplySelectionPattern( *pApplyPattern, sal_True );
549*b1cdbd2cSJim Jagielski 	}
550*b1cdbd2cSJim Jagielski }
551*b1cdbd2cSJim Jagielski 
552*b1cdbd2cSJim Jagielski 
553*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
554*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget & rTarget) const555*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoSelectionAttr::CanRepeat(SfxRepeatTarget& rTarget) const
556*b1cdbd2cSJim Jagielski {
557*b1cdbd2cSJim Jagielski 	return (rTarget.ISA(ScTabViewTarget));
558*b1cdbd2cSJim Jagielski }
559*b1cdbd2cSJim Jagielski 
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski //============================================================================
562*b1cdbd2cSJim Jagielski //	class ScUndoAutoFill
563*b1cdbd2cSJim Jagielski //
564*b1cdbd2cSJim Jagielski //	Auto-Fill (nur einfache Bloecke)
565*b1cdbd2cSJim Jagielski 
566*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
567*b1cdbd2cSJim Jagielski 
ScUndoAutoFill(ScDocShell * pNewDocShell,const ScRange & rRange,const ScRange & rSourceArea,ScDocument * pNewUndoDoc,const ScMarkData & rMark,FillDir eNewFillDir,FillCmd eNewFillCmd,FillDateCmd eNewFillDateCmd,double fNewStartValue,double fNewStepValue,double fNewMaxValue,sal_uInt16 nMaxShIndex)568*b1cdbd2cSJim Jagielski ScUndoAutoFill::ScUndoAutoFill( ScDocShell* pNewDocShell,
569*b1cdbd2cSJim Jagielski 				const ScRange& rRange, const ScRange& rSourceArea,
570*b1cdbd2cSJim Jagielski 				ScDocument* pNewUndoDoc, const ScMarkData& rMark,
571*b1cdbd2cSJim Jagielski 				FillDir eNewFillDir, FillCmd eNewFillCmd, FillDateCmd eNewFillDateCmd,
572*b1cdbd2cSJim Jagielski 				double fNewStartValue, double fNewStepValue, double fNewMaxValue,
573*b1cdbd2cSJim Jagielski 				sal_uInt16 nMaxShIndex )
574*b1cdbd2cSJim Jagielski 		//
575*b1cdbd2cSJim Jagielski 	:	ScBlockUndo( pNewDocShell, rRange, SC_UNDO_AUTOHEIGHT ),
576*b1cdbd2cSJim Jagielski 		//
577*b1cdbd2cSJim Jagielski 		aSource			( rSourceArea ),
578*b1cdbd2cSJim Jagielski 		aMarkData		( rMark ),
579*b1cdbd2cSJim Jagielski 		pUndoDoc		( pNewUndoDoc ),
580*b1cdbd2cSJim Jagielski 		eFillDir		( eNewFillDir ),
581*b1cdbd2cSJim Jagielski 		eFillCmd		( eNewFillCmd ),
582*b1cdbd2cSJim Jagielski 		eFillDateCmd	( eNewFillDateCmd ),
583*b1cdbd2cSJim Jagielski 		fStartValue		( fNewStartValue ),
584*b1cdbd2cSJim Jagielski 		fStepValue		( fNewStepValue ),
585*b1cdbd2cSJim Jagielski 		fMaxValue		( fNewMaxValue ),
586*b1cdbd2cSJim Jagielski 		nMaxSharedIndex	( nMaxShIndex)
587*b1cdbd2cSJim Jagielski {
588*b1cdbd2cSJim Jagielski 	SetChangeTrack();
589*b1cdbd2cSJim Jagielski }
590*b1cdbd2cSJim Jagielski 
591*b1cdbd2cSJim Jagielski 
592*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
593*b1cdbd2cSJim Jagielski 
~ScUndoAutoFill()594*b1cdbd2cSJim Jagielski __EXPORT ScUndoAutoFill::~ScUndoAutoFill()
595*b1cdbd2cSJim Jagielski {
596*b1cdbd2cSJim Jagielski 	pDocShell->GetDocument()->EraseNonUsedSharedNames(nMaxSharedIndex);
597*b1cdbd2cSJim Jagielski 	delete pUndoDoc;
598*b1cdbd2cSJim Jagielski }
599*b1cdbd2cSJim Jagielski 
600*b1cdbd2cSJim Jagielski 
601*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
602*b1cdbd2cSJim Jagielski 
GetComment() const603*b1cdbd2cSJim Jagielski String __EXPORT ScUndoAutoFill::GetComment() const
604*b1cdbd2cSJim Jagielski {
605*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( STR_UNDO_AUTOFILL ); //"Ausfuellen"
606*b1cdbd2cSJim Jagielski }
607*b1cdbd2cSJim Jagielski 
608*b1cdbd2cSJim Jagielski 
SetChangeTrack()609*b1cdbd2cSJim Jagielski void ScUndoAutoFill::SetChangeTrack()
610*b1cdbd2cSJim Jagielski {
611*b1cdbd2cSJim Jagielski 	ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack();
612*b1cdbd2cSJim Jagielski 	if ( pChangeTrack )
613*b1cdbd2cSJim Jagielski 		pChangeTrack->AppendContentRange( aBlockRange, pUndoDoc,
614*b1cdbd2cSJim Jagielski 			nStartChangeAction, nEndChangeAction );
615*b1cdbd2cSJim Jagielski 	else
616*b1cdbd2cSJim Jagielski 		nStartChangeAction = nEndChangeAction = 0;
617*b1cdbd2cSJim Jagielski }
618*b1cdbd2cSJim Jagielski 
619*b1cdbd2cSJim Jagielski 
620*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
621*b1cdbd2cSJim Jagielski 
Undo()622*b1cdbd2cSJim Jagielski void __EXPORT ScUndoAutoFill::Undo()
623*b1cdbd2cSJim Jagielski {
624*b1cdbd2cSJim Jagielski 	BeginUndo();
625*b1cdbd2cSJim Jagielski 
626*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
627*b1cdbd2cSJim Jagielski 
628*b1cdbd2cSJim Jagielski 	SCTAB nTabCount = pDoc->GetTableCount();
629*b1cdbd2cSJim Jagielski 	for (SCTAB nTab=0; nTab<nTabCount; nTab++)
630*b1cdbd2cSJim Jagielski 	{
631*b1cdbd2cSJim Jagielski 		if (aMarkData.GetTableSelect(nTab))
632*b1cdbd2cSJim Jagielski 		{
633*b1cdbd2cSJim Jagielski 			ScRange aWorkRange = aBlockRange;
634*b1cdbd2cSJim Jagielski 			aWorkRange.aStart.SetTab(nTab);
635*b1cdbd2cSJim Jagielski 			aWorkRange.aEnd.SetTab(nTab);
636*b1cdbd2cSJim Jagielski 
637*b1cdbd2cSJim Jagielski 			sal_uInt16 nExtFlags = 0;
638*b1cdbd2cSJim Jagielski 			pDocShell->UpdatePaintExt( nExtFlags, aWorkRange );
639*b1cdbd2cSJim Jagielski             pDoc->DeleteAreaTab( aWorkRange, IDF_AUTOFILL );
640*b1cdbd2cSJim Jagielski             pUndoDoc->CopyToDocument( aWorkRange, IDF_AUTOFILL, sal_False, pDoc );
641*b1cdbd2cSJim Jagielski 
642*b1cdbd2cSJim Jagielski 			pDoc->ExtendMerge( aWorkRange, sal_True );
643*b1cdbd2cSJim Jagielski 			pDocShell->PostPaint( aWorkRange, PAINT_GRID, nExtFlags );
644*b1cdbd2cSJim Jagielski 		}
645*b1cdbd2cSJim Jagielski 	}
646*b1cdbd2cSJim Jagielski 	pDocShell->PostDataChanged();
647*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
648*b1cdbd2cSJim Jagielski 	if (pViewShell)
649*b1cdbd2cSJim Jagielski 		pViewShell->CellContentChanged();
650*b1cdbd2cSJim Jagielski 
651*b1cdbd2cSJim Jagielski // Shared-Names loeschen
652*b1cdbd2cSJim Jagielski // Falls Undo ins Dokument gespeichert
653*b1cdbd2cSJim Jagielski // => automatisches Loeschen am Ende
654*b1cdbd2cSJim Jagielski // umarbeiten!!
655*b1cdbd2cSJim Jagielski 
656*b1cdbd2cSJim Jagielski 	String aName = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("___SC_"));
657*b1cdbd2cSJim Jagielski 	aName += String::CreateFromInt32(nMaxSharedIndex);
658*b1cdbd2cSJim Jagielski 	aName += '_';
659*b1cdbd2cSJim Jagielski 	ScRangeName* pRangeName = pDoc->GetRangeName();
660*b1cdbd2cSJim Jagielski 	sal_Bool bHasFound = sal_False;
661*b1cdbd2cSJim Jagielski 	for (sal_uInt16 i = 0; i < pRangeName->GetCount(); i++)
662*b1cdbd2cSJim Jagielski 	{
663*b1cdbd2cSJim Jagielski 		ScRangeData* pRangeData = (*pRangeName)[i];
664*b1cdbd2cSJim Jagielski 		if (pRangeData)
665*b1cdbd2cSJim Jagielski 		{
666*b1cdbd2cSJim Jagielski 			String aRName;
667*b1cdbd2cSJim Jagielski 			pRangeData->GetName(aRName);
668*b1cdbd2cSJim Jagielski 			if (aRName.Search(aName) != STRING_NOTFOUND)
669*b1cdbd2cSJim Jagielski 			{
670*b1cdbd2cSJim Jagielski 				pRangeName->AtFree(i);
671*b1cdbd2cSJim Jagielski 				bHasFound = sal_True;
672*b1cdbd2cSJim Jagielski 			}
673*b1cdbd2cSJim Jagielski 		}
674*b1cdbd2cSJim Jagielski 	}
675*b1cdbd2cSJim Jagielski 	if (bHasFound)
676*b1cdbd2cSJim Jagielski 		pRangeName->SetSharedMaxIndex(pRangeName->GetSharedMaxIndex()-1);
677*b1cdbd2cSJim Jagielski 
678*b1cdbd2cSJim Jagielski 	ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
679*b1cdbd2cSJim Jagielski 	if ( pChangeTrack )
680*b1cdbd2cSJim Jagielski 		pChangeTrack->Undo( nStartChangeAction, nEndChangeAction );
681*b1cdbd2cSJim Jagielski 
682*b1cdbd2cSJim Jagielski 	EndUndo();
683*b1cdbd2cSJim Jagielski }
684*b1cdbd2cSJim Jagielski 
685*b1cdbd2cSJim Jagielski 
686*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
687*b1cdbd2cSJim Jagielski 
Redo()688*b1cdbd2cSJim Jagielski void __EXPORT ScUndoAutoFill::Redo()
689*b1cdbd2cSJim Jagielski {
690*b1cdbd2cSJim Jagielski 	BeginRedo();
691*b1cdbd2cSJim Jagielski 
692*b1cdbd2cSJim Jagielski //!	Tabellen selektieren
693*b1cdbd2cSJim Jagielski 
694*b1cdbd2cSJim Jagielski     SCCOLROW nCount = 0;
695*b1cdbd2cSJim Jagielski 	switch (eFillDir)
696*b1cdbd2cSJim Jagielski 	{
697*b1cdbd2cSJim Jagielski 		case FILL_TO_BOTTOM:
698*b1cdbd2cSJim Jagielski 			nCount = aBlockRange.aEnd.Row() - aSource.aEnd.Row();
699*b1cdbd2cSJim Jagielski 			break;
700*b1cdbd2cSJim Jagielski 		case FILL_TO_RIGHT:
701*b1cdbd2cSJim Jagielski 			nCount = aBlockRange.aEnd.Col() - aSource.aEnd.Col();
702*b1cdbd2cSJim Jagielski 			break;
703*b1cdbd2cSJim Jagielski 		case FILL_TO_TOP:
704*b1cdbd2cSJim Jagielski 			nCount = aSource.aStart.Row() - aBlockRange.aStart.Row();
705*b1cdbd2cSJim Jagielski 			break;
706*b1cdbd2cSJim Jagielski 		case FILL_TO_LEFT:
707*b1cdbd2cSJim Jagielski 			nCount = aSource.aStart.Col() - aBlockRange.aStart.Col();
708*b1cdbd2cSJim Jagielski 			break;
709*b1cdbd2cSJim Jagielski 	}
710*b1cdbd2cSJim Jagielski 
711*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
712*b1cdbd2cSJim Jagielski 	if ( fStartValue != MAXDOUBLE )
713*b1cdbd2cSJim Jagielski 	{
714*b1cdbd2cSJim Jagielski 		SCCOL nValX = (eFillDir == FILL_TO_LEFT) ? aSource.aEnd.Col() : aSource.aStart.Col();
715*b1cdbd2cSJim Jagielski 		SCROW nValY = (eFillDir == FILL_TO_TOP ) ? aSource.aEnd.Row() : aSource.aStart.Row();
716*b1cdbd2cSJim Jagielski 		SCTAB nTab = aSource.aStart.Tab();
717*b1cdbd2cSJim Jagielski 		pDoc->SetValue( nValX, nValY, nTab, fStartValue );
718*b1cdbd2cSJim Jagielski 	}
719*b1cdbd2cSJim Jagielski 	pDoc->Fill( aSource.aStart.Col(), aSource.aStart.Row(),
720*b1cdbd2cSJim Jagielski 				aSource.aEnd.Col(),   aSource.aEnd.Row(),
721*b1cdbd2cSJim Jagielski 				aMarkData, nCount,
722*b1cdbd2cSJim Jagielski 				eFillDir, eFillCmd, eFillDateCmd,
723*b1cdbd2cSJim Jagielski 				fStepValue, fMaxValue );
724*b1cdbd2cSJim Jagielski 
725*b1cdbd2cSJim Jagielski 	SetChangeTrack();
726*b1cdbd2cSJim Jagielski 
727*b1cdbd2cSJim Jagielski 	pDocShell->PostPaint( aBlockRange, PAINT_GRID );
728*b1cdbd2cSJim Jagielski 	pDocShell->PostDataChanged();
729*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
730*b1cdbd2cSJim Jagielski 	if (pViewShell)
731*b1cdbd2cSJim Jagielski 		pViewShell->CellContentChanged();
732*b1cdbd2cSJim Jagielski 
733*b1cdbd2cSJim Jagielski 	EndRedo();
734*b1cdbd2cSJim Jagielski }
735*b1cdbd2cSJim Jagielski 
736*b1cdbd2cSJim Jagielski 
737*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
738*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget & rTarget)739*b1cdbd2cSJim Jagielski void __EXPORT ScUndoAutoFill::Repeat(SfxRepeatTarget& rTarget)
740*b1cdbd2cSJim Jagielski {
741*b1cdbd2cSJim Jagielski 	if (rTarget.ISA(ScTabViewTarget))
742*b1cdbd2cSJim Jagielski 	{
743*b1cdbd2cSJim Jagielski 		ScTabViewShell& rViewShell = *((ScTabViewTarget&)rTarget).GetViewShell();
744*b1cdbd2cSJim Jagielski 		if (eFillCmd==FILL_SIMPLE)
745*b1cdbd2cSJim Jagielski 			rViewShell.FillSimple( eFillDir, sal_True );
746*b1cdbd2cSJim Jagielski 		else
747*b1cdbd2cSJim Jagielski 			rViewShell.FillSeries( eFillDir, eFillCmd, eFillDateCmd,
748*b1cdbd2cSJim Jagielski 								   fStartValue, fStepValue, fMaxValue, sal_True );
749*b1cdbd2cSJim Jagielski 	}
750*b1cdbd2cSJim Jagielski }
751*b1cdbd2cSJim Jagielski 
752*b1cdbd2cSJim Jagielski 
753*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
754*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget & rTarget) const755*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoAutoFill::CanRepeat(SfxRepeatTarget& rTarget) const
756*b1cdbd2cSJim Jagielski {
757*b1cdbd2cSJim Jagielski 	return (rTarget.ISA(ScTabViewTarget));
758*b1cdbd2cSJim Jagielski }
759*b1cdbd2cSJim Jagielski 
760*b1cdbd2cSJim Jagielski 
761*b1cdbd2cSJim Jagielski //============================================================================
762*b1cdbd2cSJim Jagielski //	class ScUndoMerge
763*b1cdbd2cSJim Jagielski //
764*b1cdbd2cSJim Jagielski //	Zellen zusammenfassen / Zusammenfassung aufheben
765*b1cdbd2cSJim Jagielski 
766*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
767*b1cdbd2cSJim Jagielski 
ScUndoMerge(ScDocShell * pNewDocShell,SCCOL nStartX,SCROW nStartY,SCTAB nStartZ,SCCOL nEndX,SCROW nEndY,SCTAB nEndZ,bool bMergeContents,ScDocument * pUndoDoc,SdrUndoAction * pDrawUndo)768*b1cdbd2cSJim Jagielski ScUndoMerge::ScUndoMerge( ScDocShell* pNewDocShell,
769*b1cdbd2cSJim Jagielski 							SCCOL nStartX, SCROW nStartY, SCTAB nStartZ,
770*b1cdbd2cSJim Jagielski 							SCCOL nEndX, SCROW nEndY, SCTAB nEndZ,
771*b1cdbd2cSJim Jagielski                             bool bMergeContents, ScDocument* pUndoDoc, SdrUndoAction* pDrawUndo )
772*b1cdbd2cSJim Jagielski 		//
773*b1cdbd2cSJim Jagielski 	:	ScSimpleUndo( pNewDocShell ),
774*b1cdbd2cSJim Jagielski 		//
775*b1cdbd2cSJim Jagielski 		maRange( nStartX, nStartY, nStartZ, nEndX, nEndY, nEndZ ),
776*b1cdbd2cSJim Jagielski         mbMergeContents( bMergeContents ),
777*b1cdbd2cSJim Jagielski         mpUndoDoc( pUndoDoc ),
778*b1cdbd2cSJim Jagielski         mpDrawUndo( pDrawUndo )
779*b1cdbd2cSJim Jagielski {
780*b1cdbd2cSJim Jagielski }
781*b1cdbd2cSJim Jagielski 
782*b1cdbd2cSJim Jagielski 
783*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
784*b1cdbd2cSJim Jagielski 
~ScUndoMerge()785*b1cdbd2cSJim Jagielski ScUndoMerge::~ScUndoMerge()
786*b1cdbd2cSJim Jagielski {
787*b1cdbd2cSJim Jagielski 	delete mpUndoDoc;
788*b1cdbd2cSJim Jagielski     DeleteSdrUndoAction( mpDrawUndo );
789*b1cdbd2cSJim Jagielski }
790*b1cdbd2cSJim Jagielski 
791*b1cdbd2cSJim Jagielski 
792*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
793*b1cdbd2cSJim Jagielski 
GetComment() const794*b1cdbd2cSJim Jagielski String ScUndoMerge::GetComment() const
795*b1cdbd2cSJim Jagielski {
796*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( STR_UNDO_MERGE );
797*b1cdbd2cSJim Jagielski }
798*b1cdbd2cSJim Jagielski 
799*b1cdbd2cSJim Jagielski 
800*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
801*b1cdbd2cSJim Jagielski 
DoChange(bool bUndo) const802*b1cdbd2cSJim Jagielski void ScUndoMerge::DoChange( bool bUndo ) const
803*b1cdbd2cSJim Jagielski {
804*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
805*b1cdbd2cSJim Jagielski 
806*b1cdbd2cSJim Jagielski 	ScUndoUtil::MarkSimpleBlock( pDocShell, maRange );
807*b1cdbd2cSJim Jagielski 
808*b1cdbd2cSJim Jagielski 	if (bUndo)
809*b1cdbd2cSJim Jagielski         // remove merge (contents are copied back below from undo document)
810*b1cdbd2cSJim Jagielski 		pDoc->RemoveMerge( maRange.aStart.Col(), maRange.aStart.Row(), maRange.aStart.Tab() );
811*b1cdbd2cSJim Jagielski 	else
812*b1cdbd2cSJim Jagielski         // repeat merge, but do not remove note captions (will be done by drawing redo below)
813*b1cdbd2cSJim Jagielski /*!*/	pDoc->DoMerge( maRange.aStart.Tab(),
814*b1cdbd2cSJim Jagielski 					   maRange.aStart.Col(), maRange.aStart.Row(),
815*b1cdbd2cSJim Jagielski                        maRange.aEnd.Col(),   maRange.aEnd.Row(), false );
816*b1cdbd2cSJim Jagielski 
817*b1cdbd2cSJim Jagielski     // undo -> copy back deleted contents
818*b1cdbd2cSJim Jagielski 	if (bUndo && mpUndoDoc)
819*b1cdbd2cSJim Jagielski     {
820*b1cdbd2cSJim Jagielski         pDoc->DeleteAreaTab( maRange, IDF_CONTENTS|IDF_NOCAPTIONS );
821*b1cdbd2cSJim Jagielski         mpUndoDoc->CopyToDocument( maRange, IDF_ALL|IDF_NOCAPTIONS, sal_False, pDoc );
822*b1cdbd2cSJim Jagielski     }
823*b1cdbd2cSJim Jagielski 
824*b1cdbd2cSJim Jagielski     // redo -> merge contents again
825*b1cdbd2cSJim Jagielski     else if (!bUndo && mbMergeContents)
826*b1cdbd2cSJim Jagielski     {
827*b1cdbd2cSJim Jagielski /*!*/   pDoc->DoMergeContents( maRange.aStart.Tab(),
828*b1cdbd2cSJim Jagielski 							   maRange.aStart.Col(), maRange.aStart.Row(),
829*b1cdbd2cSJim Jagielski 							   maRange.aEnd.Col(),   maRange.aEnd.Row()   );
830*b1cdbd2cSJim Jagielski     }
831*b1cdbd2cSJim Jagielski 
832*b1cdbd2cSJim Jagielski     if (bUndo)
833*b1cdbd2cSJim Jagielski         DoSdrUndoAction( mpDrawUndo, pDoc );
834*b1cdbd2cSJim Jagielski     else
835*b1cdbd2cSJim Jagielski         RedoSdrUndoAction( mpDrawUndo );
836*b1cdbd2cSJim Jagielski 
837*b1cdbd2cSJim Jagielski 	sal_Bool bDidPaint = sal_False;
838*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
839*b1cdbd2cSJim Jagielski 	if ( pViewShell )
840*b1cdbd2cSJim Jagielski 	{
841*b1cdbd2cSJim Jagielski 		pViewShell->SetTabNo( maRange.aStart.Tab() );
842*b1cdbd2cSJim Jagielski 		bDidPaint = pViewShell->AdjustRowHeight( maRange.aStart.Row(), maRange.aEnd.Row() );
843*b1cdbd2cSJim Jagielski 	}
844*b1cdbd2cSJim Jagielski 
845*b1cdbd2cSJim Jagielski 	if (!bDidPaint)
846*b1cdbd2cSJim Jagielski 		ScUndoUtil::PaintMore( pDocShell, maRange );
847*b1cdbd2cSJim Jagielski 
848*b1cdbd2cSJim Jagielski 	ShowTable( maRange );
849*b1cdbd2cSJim Jagielski }
850*b1cdbd2cSJim Jagielski 
851*b1cdbd2cSJim Jagielski 
852*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
853*b1cdbd2cSJim Jagielski 
Undo()854*b1cdbd2cSJim Jagielski void ScUndoMerge::Undo()
855*b1cdbd2cSJim Jagielski {
856*b1cdbd2cSJim Jagielski 	BeginUndo();
857*b1cdbd2cSJim Jagielski 	DoChange( true );
858*b1cdbd2cSJim Jagielski 	EndUndo();
859*b1cdbd2cSJim Jagielski }
860*b1cdbd2cSJim Jagielski 
861*b1cdbd2cSJim Jagielski 
862*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
863*b1cdbd2cSJim Jagielski 
Redo()864*b1cdbd2cSJim Jagielski void ScUndoMerge::Redo()
865*b1cdbd2cSJim Jagielski {
866*b1cdbd2cSJim Jagielski 	BeginRedo();
867*b1cdbd2cSJim Jagielski 	DoChange( false );
868*b1cdbd2cSJim Jagielski 	EndRedo();
869*b1cdbd2cSJim Jagielski }
870*b1cdbd2cSJim Jagielski 
871*b1cdbd2cSJim Jagielski 
872*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
873*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget & rTarget)874*b1cdbd2cSJim Jagielski void ScUndoMerge::Repeat(SfxRepeatTarget& rTarget)
875*b1cdbd2cSJim Jagielski {
876*b1cdbd2cSJim Jagielski 	if (rTarget.ISA(ScTabViewTarget))
877*b1cdbd2cSJim Jagielski 	{
878*b1cdbd2cSJim Jagielski 		ScTabViewShell& rViewShell = *((ScTabViewTarget&)rTarget).GetViewShell();
879*b1cdbd2cSJim Jagielski 		sal_Bool bCont = sal_False;
880*b1cdbd2cSJim Jagielski 		rViewShell.MergeCells( sal_False, bCont, sal_True );
881*b1cdbd2cSJim Jagielski 	}
882*b1cdbd2cSJim Jagielski }
883*b1cdbd2cSJim Jagielski 
884*b1cdbd2cSJim Jagielski 
885*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
886*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget & rTarget) const887*b1cdbd2cSJim Jagielski sal_Bool ScUndoMerge::CanRepeat(SfxRepeatTarget& rTarget) const
888*b1cdbd2cSJim Jagielski {
889*b1cdbd2cSJim Jagielski 	return (rTarget.ISA(ScTabViewTarget));
890*b1cdbd2cSJim Jagielski }
891*b1cdbd2cSJim Jagielski 
892*b1cdbd2cSJim Jagielski 
893*b1cdbd2cSJim Jagielski //============================================================================
894*b1cdbd2cSJim Jagielski //	class ScUndoAutoFormat
895*b1cdbd2cSJim Jagielski //
896*b1cdbd2cSJim Jagielski //		Auto-Format (nur einfache Bloecke)
897*b1cdbd2cSJim Jagielski 
898*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
899*b1cdbd2cSJim Jagielski 
ScUndoAutoFormat(ScDocShell * pNewDocShell,const ScRange & rRange,ScDocument * pNewUndoDoc,const ScMarkData & rMark,sal_Bool bNewSize,sal_uInt16 nNewFormatNo)900*b1cdbd2cSJim Jagielski ScUndoAutoFormat::ScUndoAutoFormat( ScDocShell* pNewDocShell,
901*b1cdbd2cSJim Jagielski 						const ScRange& rRange, ScDocument* pNewUndoDoc,
902*b1cdbd2cSJim Jagielski 						const ScMarkData& rMark, sal_Bool bNewSize, sal_uInt16 nNewFormatNo )
903*b1cdbd2cSJim Jagielski 		//
904*b1cdbd2cSJim Jagielski 	:	ScBlockUndo( pNewDocShell, rRange, bNewSize ? SC_UNDO_MANUALHEIGHT : SC_UNDO_AUTOHEIGHT ),
905*b1cdbd2cSJim Jagielski 		//
906*b1cdbd2cSJim Jagielski 		pUndoDoc	( pNewUndoDoc ),
907*b1cdbd2cSJim Jagielski 		aMarkData	( rMark ),
908*b1cdbd2cSJim Jagielski 		bSize		( bNewSize ),
909*b1cdbd2cSJim Jagielski 		nFormatNo	( nNewFormatNo )
910*b1cdbd2cSJim Jagielski {
911*b1cdbd2cSJim Jagielski }
912*b1cdbd2cSJim Jagielski 
913*b1cdbd2cSJim Jagielski 
914*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
915*b1cdbd2cSJim Jagielski 
~ScUndoAutoFormat()916*b1cdbd2cSJim Jagielski __EXPORT ScUndoAutoFormat::~ScUndoAutoFormat()
917*b1cdbd2cSJim Jagielski {
918*b1cdbd2cSJim Jagielski 	delete pUndoDoc;
919*b1cdbd2cSJim Jagielski }
920*b1cdbd2cSJim Jagielski 
921*b1cdbd2cSJim Jagielski 
922*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
923*b1cdbd2cSJim Jagielski 
GetComment() const924*b1cdbd2cSJim Jagielski String __EXPORT ScUndoAutoFormat::GetComment() const
925*b1cdbd2cSJim Jagielski {
926*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( STR_UNDO_AUTOFORMAT );	//"Auto-Format"
927*b1cdbd2cSJim Jagielski }
928*b1cdbd2cSJim Jagielski 
929*b1cdbd2cSJim Jagielski 
930*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
931*b1cdbd2cSJim Jagielski 
Undo()932*b1cdbd2cSJim Jagielski void __EXPORT ScUndoAutoFormat::Undo()
933*b1cdbd2cSJim Jagielski {
934*b1cdbd2cSJim Jagielski 	BeginUndo();
935*b1cdbd2cSJim Jagielski 
936*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
937*b1cdbd2cSJim Jagielski 
938*b1cdbd2cSJim Jagielski 	// Attribute
939*b1cdbd2cSJim Jagielski //	pDoc->DeleteAreaTab( aBlockRange, IDF_ATTRIB );
940*b1cdbd2cSJim Jagielski //	pUndoDoc->CopyToDocument( aBlockRange, IDF_ATTRIB, sal_False, pDoc );
941*b1cdbd2cSJim Jagielski 
942*b1cdbd2cSJim Jagielski 	SCTAB nTabCount = pDoc->GetTableCount();
943*b1cdbd2cSJim Jagielski 	pDoc->DeleteArea( aBlockRange.aStart.Col(), aBlockRange.aStart.Row(),
944*b1cdbd2cSJim Jagielski 					  aBlockRange.aEnd.Col(), aBlockRange.aEnd.Row(),
945*b1cdbd2cSJim Jagielski 					  aMarkData, IDF_ATTRIB );
946*b1cdbd2cSJim Jagielski 	ScRange aCopyRange = aBlockRange;
947*b1cdbd2cSJim Jagielski 	aCopyRange.aStart.SetTab(0);
948*b1cdbd2cSJim Jagielski 	aCopyRange.aEnd.SetTab(nTabCount-1);
949*b1cdbd2cSJim Jagielski 	pUndoDoc->CopyToDocument( aCopyRange, IDF_ATTRIB, sal_False, pDoc, &aMarkData );
950*b1cdbd2cSJim Jagielski 
951*b1cdbd2cSJim Jagielski 	// Zellhoehen und -breiten (IDF_NONE)
952*b1cdbd2cSJim Jagielski 	if (bSize)
953*b1cdbd2cSJim Jagielski 	{
954*b1cdbd2cSJim Jagielski 		SCCOL nStartX = aBlockRange.aStart.Col();
955*b1cdbd2cSJim Jagielski 		SCROW nStartY = aBlockRange.aStart.Row();
956*b1cdbd2cSJim Jagielski 		SCTAB nStartZ = aBlockRange.aStart.Tab();
957*b1cdbd2cSJim Jagielski 		SCCOL nEndX = aBlockRange.aEnd.Col();
958*b1cdbd2cSJim Jagielski 		SCROW nEndY = aBlockRange.aEnd.Row();
959*b1cdbd2cSJim Jagielski 		SCTAB nEndZ = aBlockRange.aEnd.Tab();
960*b1cdbd2cSJim Jagielski 
961*b1cdbd2cSJim Jagielski 		pUndoDoc->CopyToDocument( nStartX, 0, 0, nEndX, MAXROW, nTabCount-1,
962*b1cdbd2cSJim Jagielski 									IDF_NONE, sal_False, pDoc, &aMarkData );
963*b1cdbd2cSJim Jagielski 		pUndoDoc->CopyToDocument( 0, nStartY, 0, MAXCOL, nEndY, nTabCount-1,
964*b1cdbd2cSJim Jagielski 									IDF_NONE, sal_False, pDoc, &aMarkData );
965*b1cdbd2cSJim Jagielski 		pDocShell->PostPaint( 0, 0, nStartZ, MAXCOL, MAXROW, nEndZ,
966*b1cdbd2cSJim Jagielski 							  PAINT_GRID | PAINT_LEFT | PAINT_TOP, SC_PF_LINES );
967*b1cdbd2cSJim Jagielski 	}
968*b1cdbd2cSJim Jagielski 	else
969*b1cdbd2cSJim Jagielski 		pDocShell->PostPaint( aBlockRange, PAINT_GRID, SC_PF_LINES );
970*b1cdbd2cSJim Jagielski 
971*b1cdbd2cSJim Jagielski 	EndUndo();
972*b1cdbd2cSJim Jagielski }
973*b1cdbd2cSJim Jagielski 
974*b1cdbd2cSJim Jagielski 
975*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
976*b1cdbd2cSJim Jagielski 
Redo()977*b1cdbd2cSJim Jagielski void __EXPORT ScUndoAutoFormat::Redo()
978*b1cdbd2cSJim Jagielski {
979*b1cdbd2cSJim Jagielski 	BeginRedo();
980*b1cdbd2cSJim Jagielski 
981*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
982*b1cdbd2cSJim Jagielski 
983*b1cdbd2cSJim Jagielski 	SCCOL nStartX = aBlockRange.aStart.Col();
984*b1cdbd2cSJim Jagielski 	SCROW nStartY = aBlockRange.aStart.Row();
985*b1cdbd2cSJim Jagielski 	SCTAB nStartZ = aBlockRange.aStart.Tab();
986*b1cdbd2cSJim Jagielski 	SCCOL nEndX = aBlockRange.aEnd.Col();
987*b1cdbd2cSJim Jagielski 	SCROW nEndY = aBlockRange.aEnd.Row();
988*b1cdbd2cSJim Jagielski 	SCTAB nEndZ = aBlockRange.aEnd.Tab();
989*b1cdbd2cSJim Jagielski 
990*b1cdbd2cSJim Jagielski 	pDoc->AutoFormat( nStartX, nStartY, nEndX, nEndY, nFormatNo, aMarkData );
991*b1cdbd2cSJim Jagielski 
992*b1cdbd2cSJim Jagielski 	if (bSize)
993*b1cdbd2cSJim Jagielski 	{
994*b1cdbd2cSJim Jagielski 		VirtualDevice aVirtDev;
995*b1cdbd2cSJim Jagielski 		Fraction aZoomX(1,1);
996*b1cdbd2cSJim Jagielski 		Fraction aZoomY = aZoomX;
997*b1cdbd2cSJim Jagielski 		double nPPTX,nPPTY;
998*b1cdbd2cSJim Jagielski 		ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
999*b1cdbd2cSJim Jagielski 		if (pViewShell)
1000*b1cdbd2cSJim Jagielski 		{
1001*b1cdbd2cSJim Jagielski 			ScViewData* pData = pViewShell->GetViewData();
1002*b1cdbd2cSJim Jagielski 			nPPTX = pData->GetPPTX();
1003*b1cdbd2cSJim Jagielski 			nPPTY = pData->GetPPTY();
1004*b1cdbd2cSJim Jagielski 			aZoomX = pData->GetZoomX();
1005*b1cdbd2cSJim Jagielski 			aZoomY = pData->GetZoomY();
1006*b1cdbd2cSJim Jagielski 		}
1007*b1cdbd2cSJim Jagielski 		else
1008*b1cdbd2cSJim Jagielski 		{
1009*b1cdbd2cSJim Jagielski 			//	Zoom auf 100 lassen
1010*b1cdbd2cSJim Jagielski 			nPPTX = ScGlobal::nScreenPPTX;
1011*b1cdbd2cSJim Jagielski 			nPPTY = ScGlobal::nScreenPPTY;
1012*b1cdbd2cSJim Jagielski 		}
1013*b1cdbd2cSJim Jagielski 
1014*b1cdbd2cSJim Jagielski 		sal_Bool bFormula = sal_False;	//! merken
1015*b1cdbd2cSJim Jagielski 
1016*b1cdbd2cSJim Jagielski 		for (SCTAB nTab=nStartZ; nTab<=nEndZ; nTab++)
1017*b1cdbd2cSJim Jagielski 		{
1018*b1cdbd2cSJim Jagielski 			ScMarkData aDestMark;
1019*b1cdbd2cSJim Jagielski 			aDestMark.SelectOneTable( nTab );
1020*b1cdbd2cSJim Jagielski 			aDestMark.SetMarkArea( ScRange( nStartX, nStartY, nTab, nEndX, nEndY, nTab ) );
1021*b1cdbd2cSJim Jagielski 			aDestMark.MarkToMulti();
1022*b1cdbd2cSJim Jagielski 
1023*b1cdbd2cSJim Jagielski 			// wie SC_SIZE_VISOPT
1024*b1cdbd2cSJim Jagielski             SCROW nLastRow = -1;
1025*b1cdbd2cSJim Jagielski 			for (SCROW nRow=nStartY; nRow<=nEndY; nRow++)
1026*b1cdbd2cSJim Jagielski 			{
1027*b1cdbd2cSJim Jagielski 				sal_uInt8 nOld = pDoc->GetRowFlags(nRow,nTab);
1028*b1cdbd2cSJim Jagielski                 bool bHidden = pDoc->RowHidden(nRow, nTab, nLastRow);
1029*b1cdbd2cSJim Jagielski 				if ( !bHidden && ( nOld & CR_MANUALSIZE ) )
1030*b1cdbd2cSJim Jagielski 					pDoc->SetRowFlags( nRow, nTab, nOld & ~CR_MANUALSIZE );
1031*b1cdbd2cSJim Jagielski 			}
1032*b1cdbd2cSJim Jagielski 			pDoc->SetOptimalHeight( nStartY, nEndY, nTab, 0, &aVirtDev,
1033*b1cdbd2cSJim Jagielski 										nPPTX, nPPTY, aZoomX, aZoomY, sal_False );
1034*b1cdbd2cSJim Jagielski 
1035*b1cdbd2cSJim Jagielski             SCCOL nLastCol = -1;
1036*b1cdbd2cSJim Jagielski 			for (SCCOL nCol=nStartX; nCol<=nEndX; nCol++)
1037*b1cdbd2cSJim Jagielski                 if (!pDoc->ColHidden(nCol, nTab, nLastCol))
1038*b1cdbd2cSJim Jagielski 				{
1039*b1cdbd2cSJim Jagielski 					sal_uInt16 nThisSize = STD_EXTRA_WIDTH + pDoc->GetOptimalColWidth( nCol, nTab,
1040*b1cdbd2cSJim Jagielski 												&aVirtDev, nPPTX, nPPTY, aZoomX, aZoomY, bFormula,
1041*b1cdbd2cSJim Jagielski 												&aDestMark );
1042*b1cdbd2cSJim Jagielski 					pDoc->SetColWidth( nCol, nTab, nThisSize );
1043*b1cdbd2cSJim Jagielski 					pDoc->ShowCol( nCol, nTab, sal_True );
1044*b1cdbd2cSJim Jagielski 				}
1045*b1cdbd2cSJim Jagielski 		}
1046*b1cdbd2cSJim Jagielski 
1047*b1cdbd2cSJim Jagielski 		pDocShell->PostPaint( 0,      0,      nStartZ,
1048*b1cdbd2cSJim Jagielski 							  MAXCOL, MAXROW, nEndZ,
1049*b1cdbd2cSJim Jagielski 							  PAINT_GRID | PAINT_LEFT | PAINT_TOP, SC_PF_LINES);
1050*b1cdbd2cSJim Jagielski 	}
1051*b1cdbd2cSJim Jagielski 	else
1052*b1cdbd2cSJim Jagielski 		pDocShell->PostPaint( aBlockRange, PAINT_GRID, SC_PF_LINES );
1053*b1cdbd2cSJim Jagielski 
1054*b1cdbd2cSJim Jagielski 	EndRedo();
1055*b1cdbd2cSJim Jagielski }
1056*b1cdbd2cSJim Jagielski 
1057*b1cdbd2cSJim Jagielski 
1058*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1059*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget & rTarget)1060*b1cdbd2cSJim Jagielski void __EXPORT ScUndoAutoFormat::Repeat(SfxRepeatTarget& rTarget)
1061*b1cdbd2cSJim Jagielski {
1062*b1cdbd2cSJim Jagielski 	if (rTarget.ISA(ScTabViewTarget))
1063*b1cdbd2cSJim Jagielski 		((ScTabViewTarget&)rTarget).GetViewShell()->AutoFormat( nFormatNo, sal_True );
1064*b1cdbd2cSJim Jagielski }
1065*b1cdbd2cSJim Jagielski 
1066*b1cdbd2cSJim Jagielski 
1067*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1068*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget & rTarget) const1069*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoAutoFormat::CanRepeat(SfxRepeatTarget& rTarget) const
1070*b1cdbd2cSJim Jagielski {
1071*b1cdbd2cSJim Jagielski 	return (rTarget.ISA(ScTabViewTarget));
1072*b1cdbd2cSJim Jagielski }
1073*b1cdbd2cSJim Jagielski 
1074*b1cdbd2cSJim Jagielski 
1075*b1cdbd2cSJim Jagielski //============================================================================
1076*b1cdbd2cSJim Jagielski //	class ScUndoReplace
1077*b1cdbd2cSJim Jagielski //
1078*b1cdbd2cSJim Jagielski //		Ersetzen
1079*b1cdbd2cSJim Jagielski 
1080*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1081*b1cdbd2cSJim Jagielski 
ScUndoReplace(ScDocShell * pNewDocShell,const ScMarkData & rMark,SCCOL nCurX,SCROW nCurY,SCTAB nCurZ,const String & rNewUndoStr,ScDocument * pNewUndoDoc,const SvxSearchItem * pItem)1082*b1cdbd2cSJim Jagielski ScUndoReplace::ScUndoReplace( ScDocShell* pNewDocShell, const ScMarkData& rMark,
1083*b1cdbd2cSJim Jagielski 									SCCOL nCurX, SCROW nCurY, SCTAB nCurZ,
1084*b1cdbd2cSJim Jagielski 									const String& rNewUndoStr, ScDocument* pNewUndoDoc,
1085*b1cdbd2cSJim Jagielski 									const SvxSearchItem* pItem )
1086*b1cdbd2cSJim Jagielski 		//
1087*b1cdbd2cSJim Jagielski 	:	ScSimpleUndo( pNewDocShell ),
1088*b1cdbd2cSJim Jagielski 		//
1089*b1cdbd2cSJim Jagielski 		aCursorPos	( nCurX, nCurY, nCurZ ),
1090*b1cdbd2cSJim Jagielski 		aMarkData	( rMark ),
1091*b1cdbd2cSJim Jagielski 		aUndoStr	( rNewUndoStr ),
1092*b1cdbd2cSJim Jagielski 		pUndoDoc	( pNewUndoDoc )
1093*b1cdbd2cSJim Jagielski {
1094*b1cdbd2cSJim Jagielski 	pSearchItem = new SvxSearchItem( *pItem );
1095*b1cdbd2cSJim Jagielski 	SetChangeTrack();
1096*b1cdbd2cSJim Jagielski }
1097*b1cdbd2cSJim Jagielski 
1098*b1cdbd2cSJim Jagielski 
1099*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1100*b1cdbd2cSJim Jagielski 
~ScUndoReplace()1101*b1cdbd2cSJim Jagielski __EXPORT ScUndoReplace::~ScUndoReplace()
1102*b1cdbd2cSJim Jagielski {
1103*b1cdbd2cSJim Jagielski 	delete pUndoDoc;
1104*b1cdbd2cSJim Jagielski 	delete pSearchItem;
1105*b1cdbd2cSJim Jagielski }
1106*b1cdbd2cSJim Jagielski 
1107*b1cdbd2cSJim Jagielski 
1108*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1109*b1cdbd2cSJim Jagielski 
SetChangeTrack()1110*b1cdbd2cSJim Jagielski void ScUndoReplace::SetChangeTrack()
1111*b1cdbd2cSJim Jagielski {
1112*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1113*b1cdbd2cSJim Jagielski 	ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
1114*b1cdbd2cSJim Jagielski 	if ( pChangeTrack )
1115*b1cdbd2cSJim Jagielski 	{
1116*b1cdbd2cSJim Jagielski 		if ( pUndoDoc )
1117*b1cdbd2cSJim Jagielski 		{	//! im UndoDoc stehen nur die geaenderten Zellen,
1118*b1cdbd2cSJim Jagielski 			// deswegen per Iterator moeglich
1119*b1cdbd2cSJim Jagielski 			pChangeTrack->AppendContentsIfInRefDoc( pUndoDoc,
1120*b1cdbd2cSJim Jagielski 				nStartChangeAction,	nEndChangeAction );
1121*b1cdbd2cSJim Jagielski 		}
1122*b1cdbd2cSJim Jagielski 		else
1123*b1cdbd2cSJim Jagielski 		{
1124*b1cdbd2cSJim Jagielski 			nStartChangeAction = pChangeTrack->GetActionMax() + 1;
1125*b1cdbd2cSJim Jagielski 			ScChangeActionContent* pContent = new ScChangeActionContent(
1126*b1cdbd2cSJim Jagielski 				ScRange( aCursorPos) );
1127*b1cdbd2cSJim Jagielski 			pContent->SetOldValue( aUndoStr, pDoc );
1128*b1cdbd2cSJim Jagielski 			pContent->SetNewValue( pDoc->GetCell( aCursorPos ), pDoc );
1129*b1cdbd2cSJim Jagielski 			pChangeTrack->Append( pContent );
1130*b1cdbd2cSJim Jagielski 			nEndChangeAction = pChangeTrack->GetActionMax();
1131*b1cdbd2cSJim Jagielski 		}
1132*b1cdbd2cSJim Jagielski 	}
1133*b1cdbd2cSJim Jagielski 	else
1134*b1cdbd2cSJim Jagielski 		nStartChangeAction = nEndChangeAction = 0;
1135*b1cdbd2cSJim Jagielski }
1136*b1cdbd2cSJim Jagielski 
1137*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1138*b1cdbd2cSJim Jagielski 
GetComment() const1139*b1cdbd2cSJim Jagielski String __EXPORT ScUndoReplace::GetComment() const
1140*b1cdbd2cSJim Jagielski {
1141*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( STR_UNDO_REPLACE );	// "Ersetzen"
1142*b1cdbd2cSJim Jagielski }
1143*b1cdbd2cSJim Jagielski 
1144*b1cdbd2cSJim Jagielski 
1145*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1146*b1cdbd2cSJim Jagielski 
Undo()1147*b1cdbd2cSJim Jagielski void __EXPORT ScUndoReplace::Undo()
1148*b1cdbd2cSJim Jagielski {
1149*b1cdbd2cSJim Jagielski 	BeginUndo();
1150*b1cdbd2cSJim Jagielski 
1151*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1152*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
1153*b1cdbd2cSJim Jagielski 
1154*b1cdbd2cSJim Jagielski 	ShowTable( aCursorPos.Tab() );
1155*b1cdbd2cSJim Jagielski 
1156*b1cdbd2cSJim Jagielski 	if (pUndoDoc)		// nur bei ReplaceAll !!
1157*b1cdbd2cSJim Jagielski 	{
1158*b1cdbd2cSJim Jagielski 		DBG_ASSERT(pSearchItem->GetCommand() == SVX_SEARCHCMD_REPLACE_ALL,
1159*b1cdbd2cSJim Jagielski 				   "ScUndoReplace:: Falscher Modus");
1160*b1cdbd2cSJim Jagielski 
1161*b1cdbd2cSJim Jagielski 	    SetViewMarkData( aMarkData );
1162*b1cdbd2cSJim Jagielski 
1163*b1cdbd2cSJim Jagielski //!	markierte Tabellen
1164*b1cdbd2cSJim Jagielski //!	Bereich merken ?
1165*b1cdbd2cSJim Jagielski 
1166*b1cdbd2cSJim Jagielski 		//	Undo-Dokument hat keine Zeilen-/Spalten-Infos, also mit bColRowFlags = FALSE
1167*b1cdbd2cSJim Jagielski 		//	kopieren, um Outline-Gruppen nicht kaputtzumachen.
1168*b1cdbd2cSJim Jagielski 
1169*b1cdbd2cSJim Jagielski 		sal_uInt16 nUndoFlags = (pSearchItem->GetPattern()) ? IDF_ATTRIB : IDF_CONTENTS;
1170*b1cdbd2cSJim Jagielski 		pUndoDoc->CopyToDocument( 0,      0,      0,
1171*b1cdbd2cSJim Jagielski 								  MAXCOL, MAXROW, MAXTAB,
1172*b1cdbd2cSJim Jagielski 								  nUndoFlags, sal_False, pDoc, NULL, sal_False );	// ohne Row-Flags
1173*b1cdbd2cSJim Jagielski 		pDocShell->PostPaintGridAll();
1174*b1cdbd2cSJim Jagielski 	}
1175*b1cdbd2cSJim Jagielski 	else if (pSearchItem->GetPattern() &&
1176*b1cdbd2cSJim Jagielski 			 pSearchItem->GetCommand() == SVX_SEARCHCMD_REPLACE)
1177*b1cdbd2cSJim Jagielski 	{
1178*b1cdbd2cSJim Jagielski 		String aTempStr = pSearchItem->GetSearchString();		// vertauschen
1179*b1cdbd2cSJim Jagielski 		pSearchItem->SetSearchString(pSearchItem->GetReplaceString());
1180*b1cdbd2cSJim Jagielski 		pSearchItem->SetReplaceString(aTempStr);
1181*b1cdbd2cSJim Jagielski 		pDoc->ReplaceStyle( *pSearchItem,
1182*b1cdbd2cSJim Jagielski 							aCursorPos.Col(), aCursorPos.Row(), aCursorPos.Tab(),
1183*b1cdbd2cSJim Jagielski 							aMarkData, sal_True);
1184*b1cdbd2cSJim Jagielski 		pSearchItem->SetReplaceString(pSearchItem->GetSearchString());
1185*b1cdbd2cSJim Jagielski 		pSearchItem->SetSearchString(aTempStr);
1186*b1cdbd2cSJim Jagielski 		if (pViewShell)
1187*b1cdbd2cSJim Jagielski 			pViewShell->MoveCursorAbs( aCursorPos.Col(), aCursorPos.Row(),
1188*b1cdbd2cSJim Jagielski 									   SC_FOLLOW_JUMP, sal_False, sal_False );
1189*b1cdbd2cSJim Jagielski 		pDocShell->PostPaintGridAll();
1190*b1cdbd2cSJim Jagielski 	}
1191*b1cdbd2cSJim Jagielski 	else if (pSearchItem->GetCellType() == SVX_SEARCHIN_NOTE)
1192*b1cdbd2cSJim Jagielski 	{
1193*b1cdbd2cSJim Jagielski         ScPostIt* pNote = pDoc->GetNote( aCursorPos );
1194*b1cdbd2cSJim Jagielski         DBG_ASSERT( pNote, "ScUndoReplace::Undo - cell does not contain a note" );
1195*b1cdbd2cSJim Jagielski         if (pNote)
1196*b1cdbd2cSJim Jagielski             pNote->SetText( aCursorPos, aUndoStr );
1197*b1cdbd2cSJim Jagielski 		if (pViewShell)
1198*b1cdbd2cSJim Jagielski 			pViewShell->MoveCursorAbs( aCursorPos.Col(), aCursorPos.Row(),
1199*b1cdbd2cSJim Jagielski 									   SC_FOLLOW_JUMP, sal_False, sal_False );
1200*b1cdbd2cSJim Jagielski 	}
1201*b1cdbd2cSJim Jagielski 	else
1202*b1cdbd2cSJim Jagielski 	{
1203*b1cdbd2cSJim Jagielski 		// #78889# aUndoStr may contain line breaks
1204*b1cdbd2cSJim Jagielski 		if ( aUndoStr.Search('\n') != STRING_NOTFOUND )
1205*b1cdbd2cSJim Jagielski 			pDoc->PutCell( aCursorPos, new ScEditCell( aUndoStr, pDoc ) );
1206*b1cdbd2cSJim Jagielski 		else
1207*b1cdbd2cSJim Jagielski 			pDoc->SetString( aCursorPos.Col(), aCursorPos.Row(), aCursorPos.Tab(), aUndoStr );
1208*b1cdbd2cSJim Jagielski 		if (pViewShell)
1209*b1cdbd2cSJim Jagielski 			pViewShell->MoveCursorAbs( aCursorPos.Col(), aCursorPos.Row(),
1210*b1cdbd2cSJim Jagielski 									   SC_FOLLOW_JUMP, sal_False, sal_False );
1211*b1cdbd2cSJim Jagielski 		pDocShell->PostPaintGridAll();
1212*b1cdbd2cSJim Jagielski 	}
1213*b1cdbd2cSJim Jagielski 
1214*b1cdbd2cSJim Jagielski 	ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
1215*b1cdbd2cSJim Jagielski 	if ( pChangeTrack )
1216*b1cdbd2cSJim Jagielski 		pChangeTrack->Undo( nStartChangeAction, nEndChangeAction );
1217*b1cdbd2cSJim Jagielski 
1218*b1cdbd2cSJim Jagielski 	EndUndo();
1219*b1cdbd2cSJim Jagielski }
1220*b1cdbd2cSJim Jagielski 
1221*b1cdbd2cSJim Jagielski 
1222*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1223*b1cdbd2cSJim Jagielski 
Redo()1224*b1cdbd2cSJim Jagielski void __EXPORT ScUndoReplace::Redo()
1225*b1cdbd2cSJim Jagielski {
1226*b1cdbd2cSJim Jagielski 	BeginRedo();
1227*b1cdbd2cSJim Jagielski 
1228*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1229*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
1230*b1cdbd2cSJim Jagielski 
1231*b1cdbd2cSJim Jagielski 	if (pViewShell)
1232*b1cdbd2cSJim Jagielski 		pViewShell->MoveCursorAbs( aCursorPos.Col(), aCursorPos.Row(),
1233*b1cdbd2cSJim Jagielski 								   SC_FOLLOW_JUMP, sal_False, sal_False );
1234*b1cdbd2cSJim Jagielski 	if (pUndoDoc)
1235*b1cdbd2cSJim Jagielski 	{
1236*b1cdbd2cSJim Jagielski 		if (pViewShell)
1237*b1cdbd2cSJim Jagielski 		{
1238*b1cdbd2cSJim Jagielski             SetViewMarkData( aMarkData );
1239*b1cdbd2cSJim Jagielski 
1240*b1cdbd2cSJim Jagielski 			pViewShell->SearchAndReplace( pSearchItem, sal_False, sal_True );
1241*b1cdbd2cSJim Jagielski 		}
1242*b1cdbd2cSJim Jagielski 	}
1243*b1cdbd2cSJim Jagielski 	else if (pSearchItem->GetPattern() &&
1244*b1cdbd2cSJim Jagielski 			 pSearchItem->GetCommand() == SVX_SEARCHCMD_REPLACE)
1245*b1cdbd2cSJim Jagielski 	{
1246*b1cdbd2cSJim Jagielski 		pDoc->ReplaceStyle( *pSearchItem,
1247*b1cdbd2cSJim Jagielski 							aCursorPos.Col(), aCursorPos.Row(), aCursorPos.Tab(),
1248*b1cdbd2cSJim Jagielski 							aMarkData, sal_True);
1249*b1cdbd2cSJim Jagielski 		pDocShell->PostPaintGridAll();
1250*b1cdbd2cSJim Jagielski 	}
1251*b1cdbd2cSJim Jagielski 	else
1252*b1cdbd2cSJim Jagielski 		if (pViewShell)
1253*b1cdbd2cSJim Jagielski 			pViewShell->SearchAndReplace( pSearchItem, sal_False, sal_True );
1254*b1cdbd2cSJim Jagielski 
1255*b1cdbd2cSJim Jagielski 	SetChangeTrack();
1256*b1cdbd2cSJim Jagielski 
1257*b1cdbd2cSJim Jagielski 	EndRedo();
1258*b1cdbd2cSJim Jagielski }
1259*b1cdbd2cSJim Jagielski 
1260*b1cdbd2cSJim Jagielski 
1261*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1262*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget & rTarget)1263*b1cdbd2cSJim Jagielski void __EXPORT ScUndoReplace::Repeat(SfxRepeatTarget& rTarget)
1264*b1cdbd2cSJim Jagielski {
1265*b1cdbd2cSJim Jagielski 	if (rTarget.ISA(ScTabViewTarget))
1266*b1cdbd2cSJim Jagielski 		((ScTabViewTarget&)rTarget).GetViewShell()->SearchAndReplace( pSearchItem, sal_True, sal_False );
1267*b1cdbd2cSJim Jagielski }
1268*b1cdbd2cSJim Jagielski 
1269*b1cdbd2cSJim Jagielski 
1270*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1271*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget & rTarget) const1272*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoReplace::CanRepeat(SfxRepeatTarget& rTarget) const
1273*b1cdbd2cSJim Jagielski {
1274*b1cdbd2cSJim Jagielski 	return (rTarget.ISA(ScTabViewTarget));
1275*b1cdbd2cSJim Jagielski }
1276*b1cdbd2cSJim Jagielski 
1277*b1cdbd2cSJim Jagielski 
1278*b1cdbd2cSJim Jagielski //============================================================================
1279*b1cdbd2cSJim Jagielski //	class ScUndoTabOp
1280*b1cdbd2cSJim Jagielski //
1281*b1cdbd2cSJim Jagielski //	Mehrfachoperation (nur einfache Bloecke)
1282*b1cdbd2cSJim Jagielski 
1283*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1284*b1cdbd2cSJim Jagielski 
ScUndoTabOp(ScDocShell * pNewDocShell,SCCOL nStartX,SCROW nStartY,SCTAB nStartZ,SCCOL nEndX,SCROW nEndY,SCTAB nEndZ,ScDocument * pNewUndoDoc,const ScRefAddress & rFormulaCell,const ScRefAddress & rFormulaEnd,const ScRefAddress & rRowCell,const ScRefAddress & rColCell,sal_uInt8 nMd)1285*b1cdbd2cSJim Jagielski ScUndoTabOp::ScUndoTabOp( ScDocShell* pNewDocShell,
1286*b1cdbd2cSJim Jagielski 				SCCOL nStartX, SCROW nStartY, SCTAB nStartZ,
1287*b1cdbd2cSJim Jagielski 				SCCOL nEndX, SCROW nEndY, SCTAB nEndZ, ScDocument* pNewUndoDoc,
1288*b1cdbd2cSJim Jagielski 				const ScRefAddress& rFormulaCell,
1289*b1cdbd2cSJim Jagielski 				const ScRefAddress& rFormulaEnd,
1290*b1cdbd2cSJim Jagielski 				const ScRefAddress& rRowCell,
1291*b1cdbd2cSJim Jagielski 				const ScRefAddress& rColCell,
1292*b1cdbd2cSJim Jagielski 				sal_uInt8 nMd )
1293*b1cdbd2cSJim Jagielski 		//
1294*b1cdbd2cSJim Jagielski 	:	ScSimpleUndo( pNewDocShell ),
1295*b1cdbd2cSJim Jagielski 		//
1296*b1cdbd2cSJim Jagielski 		aRange			( nStartX, nStartY, nStartZ, nEndX, nEndY, nEndZ ),
1297*b1cdbd2cSJim Jagielski 		pUndoDoc		( pNewUndoDoc ),
1298*b1cdbd2cSJim Jagielski 		theFormulaCell	( rFormulaCell ),
1299*b1cdbd2cSJim Jagielski 		theFormulaEnd	( rFormulaEnd ),
1300*b1cdbd2cSJim Jagielski 		theRowCell		( rRowCell ),
1301*b1cdbd2cSJim Jagielski 		theColCell		( rColCell ),
1302*b1cdbd2cSJim Jagielski 		nMode			( nMd )
1303*b1cdbd2cSJim Jagielski {
1304*b1cdbd2cSJim Jagielski }
1305*b1cdbd2cSJim Jagielski 
1306*b1cdbd2cSJim Jagielski 
1307*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1308*b1cdbd2cSJim Jagielski 
~ScUndoTabOp()1309*b1cdbd2cSJim Jagielski __EXPORT ScUndoTabOp::~ScUndoTabOp()
1310*b1cdbd2cSJim Jagielski {
1311*b1cdbd2cSJim Jagielski 	delete pUndoDoc;
1312*b1cdbd2cSJim Jagielski }
1313*b1cdbd2cSJim Jagielski 
1314*b1cdbd2cSJim Jagielski 
1315*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1316*b1cdbd2cSJim Jagielski 
GetComment() const1317*b1cdbd2cSJim Jagielski String __EXPORT ScUndoTabOp::GetComment() const
1318*b1cdbd2cSJim Jagielski {
1319*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( STR_UNDO_TABOP );	// "Mehrfachoperation"
1320*b1cdbd2cSJim Jagielski }
1321*b1cdbd2cSJim Jagielski 
1322*b1cdbd2cSJim Jagielski 
1323*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1324*b1cdbd2cSJim Jagielski 
Undo()1325*b1cdbd2cSJim Jagielski void __EXPORT ScUndoTabOp::Undo()
1326*b1cdbd2cSJim Jagielski {
1327*b1cdbd2cSJim Jagielski 	BeginUndo();
1328*b1cdbd2cSJim Jagielski 
1329*b1cdbd2cSJim Jagielski 	ScUndoUtil::MarkSimpleBlock( pDocShell, aRange );
1330*b1cdbd2cSJim Jagielski 
1331*b1cdbd2cSJim Jagielski 	sal_uInt16 nExtFlags = 0;
1332*b1cdbd2cSJim Jagielski 	pDocShell->UpdatePaintExt( nExtFlags, aRange );
1333*b1cdbd2cSJim Jagielski 
1334*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1335*b1cdbd2cSJim Jagielski     pDoc->DeleteAreaTab( aRange,IDF_ALL & ~IDF_NOTE );
1336*b1cdbd2cSJim Jagielski     pUndoDoc->CopyToDocument( aRange, IDF_ALL & ~IDF_NOTE, sal_False, pDoc );
1337*b1cdbd2cSJim Jagielski 	pDocShell->PostPaint( aRange, PAINT_GRID, nExtFlags );
1338*b1cdbd2cSJim Jagielski 	pDocShell->PostDataChanged();
1339*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
1340*b1cdbd2cSJim Jagielski 	if (pViewShell)
1341*b1cdbd2cSJim Jagielski 		pViewShell->CellContentChanged();
1342*b1cdbd2cSJim Jagielski 
1343*b1cdbd2cSJim Jagielski 	EndUndo();
1344*b1cdbd2cSJim Jagielski }
1345*b1cdbd2cSJim Jagielski 
1346*b1cdbd2cSJim Jagielski 
1347*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1348*b1cdbd2cSJim Jagielski 
Redo()1349*b1cdbd2cSJim Jagielski void __EXPORT ScUndoTabOp::Redo()
1350*b1cdbd2cSJim Jagielski {
1351*b1cdbd2cSJim Jagielski 	BeginRedo();
1352*b1cdbd2cSJim Jagielski 
1353*b1cdbd2cSJim Jagielski 	ScUndoUtil::MarkSimpleBlock( pDocShell, aRange );
1354*b1cdbd2cSJim Jagielski 
1355*b1cdbd2cSJim Jagielski 	ScTabOpParam aParam( theFormulaCell, theFormulaEnd,
1356*b1cdbd2cSJim Jagielski 						 theRowCell,     theColCell,
1357*b1cdbd2cSJim Jagielski 						 nMode );
1358*b1cdbd2cSJim Jagielski 
1359*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
1360*b1cdbd2cSJim Jagielski 	if (pViewShell)
1361*b1cdbd2cSJim Jagielski 		pViewShell->TabOp( aParam, sal_False);
1362*b1cdbd2cSJim Jagielski 
1363*b1cdbd2cSJim Jagielski 	EndRedo();
1364*b1cdbd2cSJim Jagielski }
1365*b1cdbd2cSJim Jagielski 
1366*b1cdbd2cSJim Jagielski 
1367*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1368*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget &)1369*b1cdbd2cSJim Jagielski void __EXPORT ScUndoTabOp::Repeat(SfxRepeatTarget& /* rTarget */)
1370*b1cdbd2cSJim Jagielski {
1371*b1cdbd2cSJim Jagielski }
1372*b1cdbd2cSJim Jagielski 
1373*b1cdbd2cSJim Jagielski 
1374*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1375*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget &) const1376*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoTabOp::CanRepeat(SfxRepeatTarget& /* rTarget */) const
1377*b1cdbd2cSJim Jagielski {
1378*b1cdbd2cSJim Jagielski 	return sal_False;
1379*b1cdbd2cSJim Jagielski }
1380*b1cdbd2cSJim Jagielski 
1381*b1cdbd2cSJim Jagielski 
1382*b1cdbd2cSJim Jagielski //============================================================================
1383*b1cdbd2cSJim Jagielski //  class ScUndoConversion
1384*b1cdbd2cSJim Jagielski //
1385*b1cdbd2cSJim Jagielski //	Spelling
1386*b1cdbd2cSJim Jagielski 
1387*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1388*b1cdbd2cSJim Jagielski 
ScUndoConversion(ScDocShell * pNewDocShell,const ScMarkData & rMark,SCCOL nCurX,SCROW nCurY,SCTAB nCurZ,ScDocument * pNewUndoDoc,SCCOL nNewX,SCROW nNewY,SCTAB nNewZ,ScDocument * pNewRedoDoc,const ScConversionParam & rConvParam)1389*b1cdbd2cSJim Jagielski ScUndoConversion::ScUndoConversion(
1390*b1cdbd2cSJim Jagielski         ScDocShell* pNewDocShell, const ScMarkData& rMark,
1391*b1cdbd2cSJim Jagielski         SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, ScDocument* pNewUndoDoc,
1392*b1cdbd2cSJim Jagielski         SCCOL nNewX, SCROW nNewY, SCTAB nNewZ, ScDocument* pNewRedoDoc,
1393*b1cdbd2cSJim Jagielski         const ScConversionParam& rConvParam ) :
1394*b1cdbd2cSJim Jagielski     ScSimpleUndo( pNewDocShell ),
1395*b1cdbd2cSJim Jagielski     aMarkData( rMark ),
1396*b1cdbd2cSJim Jagielski     aCursorPos( nCurX, nCurY, nCurZ ),
1397*b1cdbd2cSJim Jagielski     pUndoDoc( pNewUndoDoc ),
1398*b1cdbd2cSJim Jagielski     aNewCursorPos( nNewX, nNewY, nNewZ ),
1399*b1cdbd2cSJim Jagielski     pRedoDoc( pNewRedoDoc ),
1400*b1cdbd2cSJim Jagielski     maConvParam( rConvParam )
1401*b1cdbd2cSJim Jagielski {
1402*b1cdbd2cSJim Jagielski 	SetChangeTrack();
1403*b1cdbd2cSJim Jagielski }
1404*b1cdbd2cSJim Jagielski 
1405*b1cdbd2cSJim Jagielski 
1406*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1407*b1cdbd2cSJim Jagielski 
~ScUndoConversion()1408*b1cdbd2cSJim Jagielski __EXPORT ScUndoConversion::~ScUndoConversion()
1409*b1cdbd2cSJim Jagielski {
1410*b1cdbd2cSJim Jagielski 	delete pUndoDoc;
1411*b1cdbd2cSJim Jagielski 	delete pRedoDoc;
1412*b1cdbd2cSJim Jagielski }
1413*b1cdbd2cSJim Jagielski 
1414*b1cdbd2cSJim Jagielski 
1415*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1416*b1cdbd2cSJim Jagielski 
SetChangeTrack()1417*b1cdbd2cSJim Jagielski void ScUndoConversion::SetChangeTrack()
1418*b1cdbd2cSJim Jagielski {
1419*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1420*b1cdbd2cSJim Jagielski 	ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
1421*b1cdbd2cSJim Jagielski 	if ( pChangeTrack )
1422*b1cdbd2cSJim Jagielski 	{
1423*b1cdbd2cSJim Jagielski 		if ( pUndoDoc )
1424*b1cdbd2cSJim Jagielski 			pChangeTrack->AppendContentsIfInRefDoc( pUndoDoc,
1425*b1cdbd2cSJim Jagielski 				nStartChangeAction, nEndChangeAction );
1426*b1cdbd2cSJim Jagielski 		else
1427*b1cdbd2cSJim Jagielski 		{
1428*b1cdbd2cSJim Jagielski             DBG_ERROR( "ScUndoConversion::SetChangeTrack: kein UndoDoc" );
1429*b1cdbd2cSJim Jagielski 			nStartChangeAction = nEndChangeAction = 0;
1430*b1cdbd2cSJim Jagielski 		}
1431*b1cdbd2cSJim Jagielski 	}
1432*b1cdbd2cSJim Jagielski 	else
1433*b1cdbd2cSJim Jagielski 		nStartChangeAction = nEndChangeAction = 0;
1434*b1cdbd2cSJim Jagielski }
1435*b1cdbd2cSJim Jagielski 
1436*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1437*b1cdbd2cSJim Jagielski 
GetComment() const1438*b1cdbd2cSJim Jagielski String ScUndoConversion::GetComment() const
1439*b1cdbd2cSJim Jagielski {
1440*b1cdbd2cSJim Jagielski     String aText;
1441*b1cdbd2cSJim Jagielski     switch( maConvParam.GetType() )
1442*b1cdbd2cSJim Jagielski     {
1443*b1cdbd2cSJim Jagielski         case SC_CONVERSION_SPELLCHECK:      aText = ScGlobal::GetRscString( STR_UNDO_SPELLING );    break;
1444*b1cdbd2cSJim Jagielski         case SC_CONVERSION_HANGULHANJA:     aText = ScGlobal::GetRscString( STR_UNDO_HANGULHANJA ); break;
1445*b1cdbd2cSJim Jagielski         case SC_CONVERSION_CHINESE_TRANSL:  aText = ScGlobal::GetRscString( STR_UNDO_CHINESE_TRANSLATION ); break;
1446*b1cdbd2cSJim Jagielski         default: DBG_ERRORFILE( "ScUndoConversion::GetComment - unknown conversion type" );
1447*b1cdbd2cSJim Jagielski     }
1448*b1cdbd2cSJim Jagielski     return aText;
1449*b1cdbd2cSJim Jagielski }
1450*b1cdbd2cSJim Jagielski 
1451*b1cdbd2cSJim Jagielski 
1452*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1453*b1cdbd2cSJim Jagielski 
DoChange(ScDocument * pRefDoc,const ScAddress & rCursorPos)1454*b1cdbd2cSJim Jagielski void ScUndoConversion::DoChange( ScDocument* pRefDoc, const ScAddress& rCursorPos )
1455*b1cdbd2cSJim Jagielski {
1456*b1cdbd2cSJim Jagielski 	if (pRefDoc)
1457*b1cdbd2cSJim Jagielski 	{
1458*b1cdbd2cSJim Jagielski 		ScDocument* pDoc = pDocShell->GetDocument();
1459*b1cdbd2cSJim Jagielski 		ShowTable( rCursorPos.Tab() );
1460*b1cdbd2cSJim Jagielski 
1461*b1cdbd2cSJim Jagielski 	    SetViewMarkData( aMarkData );
1462*b1cdbd2cSJim Jagielski 
1463*b1cdbd2cSJim Jagielski 		SCTAB nTabCount = pDoc->GetTableCount();
1464*b1cdbd2cSJim Jagielski 		//	Undo/Redo-doc has only selected tables
1465*b1cdbd2cSJim Jagielski 
1466*b1cdbd2cSJim Jagielski 		sal_Bool bMulti = aMarkData.IsMultiMarked();
1467*b1cdbd2cSJim Jagielski 		pRefDoc->CopyToDocument( 0,      0,      0,
1468*b1cdbd2cSJim Jagielski 								 MAXCOL, MAXROW, nTabCount-1,
1469*b1cdbd2cSJim Jagielski 								 IDF_CONTENTS, bMulti, pDoc, &aMarkData );
1470*b1cdbd2cSJim Jagielski 		pDocShell->PostPaintGridAll();
1471*b1cdbd2cSJim Jagielski 	}
1472*b1cdbd2cSJim Jagielski 	else
1473*b1cdbd2cSJim Jagielski 	{
1474*b1cdbd2cSJim Jagielski 		DBG_ERROR("Kein Un-/RedoDoc bei Un-/RedoSpelling");
1475*b1cdbd2cSJim Jagielski 	}
1476*b1cdbd2cSJim Jagielski }
1477*b1cdbd2cSJim Jagielski 
1478*b1cdbd2cSJim Jagielski 
1479*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1480*b1cdbd2cSJim Jagielski 
Undo()1481*b1cdbd2cSJim Jagielski void ScUndoConversion::Undo()
1482*b1cdbd2cSJim Jagielski {
1483*b1cdbd2cSJim Jagielski 	BeginUndo();
1484*b1cdbd2cSJim Jagielski 	DoChange( pUndoDoc, aCursorPos );
1485*b1cdbd2cSJim Jagielski 	ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack();
1486*b1cdbd2cSJim Jagielski 	if ( pChangeTrack )
1487*b1cdbd2cSJim Jagielski 		pChangeTrack->Undo( nStartChangeAction, nEndChangeAction );
1488*b1cdbd2cSJim Jagielski 	EndUndo();
1489*b1cdbd2cSJim Jagielski }
1490*b1cdbd2cSJim Jagielski 
1491*b1cdbd2cSJim Jagielski 
1492*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1493*b1cdbd2cSJim Jagielski 
Redo()1494*b1cdbd2cSJim Jagielski void ScUndoConversion::Redo()
1495*b1cdbd2cSJim Jagielski {
1496*b1cdbd2cSJim Jagielski 	BeginRedo();
1497*b1cdbd2cSJim Jagielski 	DoChange( pRedoDoc, aNewCursorPos );
1498*b1cdbd2cSJim Jagielski 	SetChangeTrack();
1499*b1cdbd2cSJim Jagielski 	EndRedo();
1500*b1cdbd2cSJim Jagielski }
1501*b1cdbd2cSJim Jagielski 
1502*b1cdbd2cSJim Jagielski 
1503*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1504*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget & rTarget)1505*b1cdbd2cSJim Jagielski void ScUndoConversion::Repeat( SfxRepeatTarget& rTarget )
1506*b1cdbd2cSJim Jagielski {
1507*b1cdbd2cSJim Jagielski     if( rTarget.ISA( ScTabViewTarget ) )
1508*b1cdbd2cSJim Jagielski         ((ScTabViewTarget&)rTarget).GetViewShell()->DoSheetConversion( maConvParam, sal_True );
1509*b1cdbd2cSJim Jagielski }
1510*b1cdbd2cSJim Jagielski 
1511*b1cdbd2cSJim Jagielski 
1512*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1513*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget & rTarget) const1514*b1cdbd2cSJim Jagielski sal_Bool ScUndoConversion::CanRepeat(SfxRepeatTarget& rTarget) const
1515*b1cdbd2cSJim Jagielski {
1516*b1cdbd2cSJim Jagielski     return rTarget.ISA( ScTabViewTarget );
1517*b1cdbd2cSJim Jagielski }
1518*b1cdbd2cSJim Jagielski 
1519*b1cdbd2cSJim Jagielski 
1520*b1cdbd2cSJim Jagielski //============================================================================
1521*b1cdbd2cSJim Jagielski //  class ScUndoRefConversion
1522*b1cdbd2cSJim Jagielski //
1523*b1cdbd2cSJim Jagielski //	cell reference conversion
1524*b1cdbd2cSJim Jagielski 
1525*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1526*b1cdbd2cSJim Jagielski 
ScUndoRefConversion(ScDocShell * pNewDocShell,const ScRange & aMarkRange,const ScMarkData & rMark,ScDocument * pNewUndoDoc,ScDocument * pNewRedoDoc,sal_Bool bNewMulti,sal_uInt16 nNewFlag)1527*b1cdbd2cSJim Jagielski ScUndoRefConversion::ScUndoRefConversion( ScDocShell* pNewDocShell,
1528*b1cdbd2cSJim Jagielski                                          const ScRange& aMarkRange, const ScMarkData& rMark,
1529*b1cdbd2cSJim Jagielski                                          ScDocument* pNewUndoDoc, ScDocument* pNewRedoDoc, sal_Bool bNewMulti, sal_uInt16 nNewFlag) :
1530*b1cdbd2cSJim Jagielski ScSimpleUndo( pNewDocShell ),
1531*b1cdbd2cSJim Jagielski aMarkData   ( rMark ),
1532*b1cdbd2cSJim Jagielski pUndoDoc	( pNewUndoDoc ),
1533*b1cdbd2cSJim Jagielski pRedoDoc	( pNewRedoDoc ),
1534*b1cdbd2cSJim Jagielski aRange  	( aMarkRange ),
1535*b1cdbd2cSJim Jagielski bMulti      ( bNewMulti ),
1536*b1cdbd2cSJim Jagielski nFlags      ( nNewFlag )
1537*b1cdbd2cSJim Jagielski {
1538*b1cdbd2cSJim Jagielski     SetChangeTrack();
1539*b1cdbd2cSJim Jagielski }
1540*b1cdbd2cSJim Jagielski 
~ScUndoRefConversion()1541*b1cdbd2cSJim Jagielski __EXPORT ScUndoRefConversion::~ScUndoRefConversion()
1542*b1cdbd2cSJim Jagielski {
1543*b1cdbd2cSJim Jagielski     delete pUndoDoc;
1544*b1cdbd2cSJim Jagielski     delete pRedoDoc;
1545*b1cdbd2cSJim Jagielski }
1546*b1cdbd2cSJim Jagielski 
GetComment() const1547*b1cdbd2cSJim Jagielski String __EXPORT ScUndoRefConversion::GetComment() const
1548*b1cdbd2cSJim Jagielski {
1549*b1cdbd2cSJim Jagielski     return ScGlobal::GetRscString( STR_UNDO_ENTERDATA ); // "Eingabe"
1550*b1cdbd2cSJim Jagielski }
1551*b1cdbd2cSJim Jagielski 
SetChangeTrack()1552*b1cdbd2cSJim Jagielski void ScUndoRefConversion::SetChangeTrack()
1553*b1cdbd2cSJim Jagielski {
1554*b1cdbd2cSJim Jagielski     ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack();
1555*b1cdbd2cSJim Jagielski     if ( pChangeTrack && (nFlags & IDF_FORMULA) )
1556*b1cdbd2cSJim Jagielski         pChangeTrack->AppendContentsIfInRefDoc( pUndoDoc,
1557*b1cdbd2cSJim Jagielski             nStartChangeAction, nEndChangeAction );
1558*b1cdbd2cSJim Jagielski     else
1559*b1cdbd2cSJim Jagielski         nStartChangeAction = nEndChangeAction = 0;
1560*b1cdbd2cSJim Jagielski }
1561*b1cdbd2cSJim Jagielski 
DoChange(ScDocument * pRefDoc)1562*b1cdbd2cSJim Jagielski void ScUndoRefConversion::DoChange( ScDocument* pRefDoc)
1563*b1cdbd2cSJim Jagielski {
1564*b1cdbd2cSJim Jagielski     ScDocument* pDoc = pDocShell->GetDocument();
1565*b1cdbd2cSJim Jagielski 
1566*b1cdbd2cSJim Jagielski     ShowTable(aRange);
1567*b1cdbd2cSJim Jagielski 
1568*b1cdbd2cSJim Jagielski     SetViewMarkData( aMarkData );
1569*b1cdbd2cSJim Jagielski 
1570*b1cdbd2cSJim Jagielski     ScRange aCopyRange = aRange;
1571*b1cdbd2cSJim Jagielski     SCTAB nTabCount = pDoc->GetTableCount();
1572*b1cdbd2cSJim Jagielski     aCopyRange.aStart.SetTab(0);
1573*b1cdbd2cSJim Jagielski     aCopyRange.aEnd.SetTab(nTabCount-1);
1574*b1cdbd2cSJim Jagielski     pRefDoc->CopyToDocument( aCopyRange, nFlags, bMulti, pDoc, &aMarkData );
1575*b1cdbd2cSJim Jagielski     pDocShell->PostPaint( aRange, PAINT_GRID);
1576*b1cdbd2cSJim Jagielski     pDocShell->PostDataChanged();
1577*b1cdbd2cSJim Jagielski     ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
1578*b1cdbd2cSJim Jagielski     if (pViewShell)
1579*b1cdbd2cSJim Jagielski         pViewShell->CellContentChanged();
1580*b1cdbd2cSJim Jagielski }
Undo()1581*b1cdbd2cSJim Jagielski void __EXPORT ScUndoRefConversion::Undo()
1582*b1cdbd2cSJim Jagielski {
1583*b1cdbd2cSJim Jagielski     BeginUndo();
1584*b1cdbd2cSJim Jagielski     if (pUndoDoc)
1585*b1cdbd2cSJim Jagielski         DoChange(pUndoDoc);
1586*b1cdbd2cSJim Jagielski     ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack();
1587*b1cdbd2cSJim Jagielski     if ( pChangeTrack )
1588*b1cdbd2cSJim Jagielski         pChangeTrack->Undo( nStartChangeAction, nEndChangeAction );
1589*b1cdbd2cSJim Jagielski     EndUndo();
1590*b1cdbd2cSJim Jagielski }
1591*b1cdbd2cSJim Jagielski 
Redo()1592*b1cdbd2cSJim Jagielski void __EXPORT ScUndoRefConversion::Redo()
1593*b1cdbd2cSJim Jagielski {
1594*b1cdbd2cSJim Jagielski     BeginRedo();
1595*b1cdbd2cSJim Jagielski     if (pRedoDoc)
1596*b1cdbd2cSJim Jagielski         DoChange(pRedoDoc);
1597*b1cdbd2cSJim Jagielski     SetChangeTrack();
1598*b1cdbd2cSJim Jagielski     EndRedo();
1599*b1cdbd2cSJim Jagielski }
1600*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget & rTarget)1601*b1cdbd2cSJim Jagielski void __EXPORT ScUndoRefConversion::Repeat(SfxRepeatTarget& rTarget)
1602*b1cdbd2cSJim Jagielski {
1603*b1cdbd2cSJim Jagielski     if (rTarget.ISA(ScTabViewTarget))
1604*b1cdbd2cSJim Jagielski         ((ScTabViewTarget&)rTarget).GetViewShell()->DoRefConversion();
1605*b1cdbd2cSJim Jagielski }
1606*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget & rTarget) const1607*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoRefConversion::CanRepeat(SfxRepeatTarget& rTarget) const
1608*b1cdbd2cSJim Jagielski {
1609*b1cdbd2cSJim Jagielski     return (rTarget.ISA(ScTabViewTarget));
1610*b1cdbd2cSJim Jagielski }
1611*b1cdbd2cSJim Jagielski //============================================================================
1612*b1cdbd2cSJim Jagielski //	class ScUndoRefreshLink
1613*b1cdbd2cSJim Jagielski //
1614*b1cdbd2cSJim Jagielski //	Link aktualisieren / aendern
1615*b1cdbd2cSJim Jagielski 
1616*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1617*b1cdbd2cSJim Jagielski 
ScUndoRefreshLink(ScDocShell * pNewDocShell,ScDocument * pNewUndoDoc)1618*b1cdbd2cSJim Jagielski ScUndoRefreshLink::ScUndoRefreshLink( ScDocShell* pNewDocShell,
1619*b1cdbd2cSJim Jagielski 									ScDocument* pNewUndoDoc )
1620*b1cdbd2cSJim Jagielski 		//
1621*b1cdbd2cSJim Jagielski 	:	ScSimpleUndo( pNewDocShell ),
1622*b1cdbd2cSJim Jagielski 		//
1623*b1cdbd2cSJim Jagielski 		pUndoDoc( pNewUndoDoc ),
1624*b1cdbd2cSJim Jagielski 		pRedoDoc( NULL )
1625*b1cdbd2cSJim Jagielski {
1626*b1cdbd2cSJim Jagielski }
1627*b1cdbd2cSJim Jagielski 
1628*b1cdbd2cSJim Jagielski 
1629*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1630*b1cdbd2cSJim Jagielski 
~ScUndoRefreshLink()1631*b1cdbd2cSJim Jagielski __EXPORT ScUndoRefreshLink::~ScUndoRefreshLink()
1632*b1cdbd2cSJim Jagielski {
1633*b1cdbd2cSJim Jagielski 	delete pUndoDoc;
1634*b1cdbd2cSJim Jagielski 	delete pRedoDoc;
1635*b1cdbd2cSJim Jagielski }
1636*b1cdbd2cSJim Jagielski 
1637*b1cdbd2cSJim Jagielski 
1638*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1639*b1cdbd2cSJim Jagielski 
GetComment() const1640*b1cdbd2cSJim Jagielski String __EXPORT ScUndoRefreshLink::GetComment() const
1641*b1cdbd2cSJim Jagielski {
1642*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( STR_UNDO_UPDATELINK );
1643*b1cdbd2cSJim Jagielski }
1644*b1cdbd2cSJim Jagielski 
1645*b1cdbd2cSJim Jagielski 
1646*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1647*b1cdbd2cSJim Jagielski 
Undo()1648*b1cdbd2cSJim Jagielski void __EXPORT ScUndoRefreshLink::Undo()
1649*b1cdbd2cSJim Jagielski {
1650*b1cdbd2cSJim Jagielski 	BeginUndo();
1651*b1cdbd2cSJim Jagielski 
1652*b1cdbd2cSJim Jagielski 	sal_Bool bMakeRedo = !pRedoDoc;
1653*b1cdbd2cSJim Jagielski 	if (bMakeRedo)
1654*b1cdbd2cSJim Jagielski 		pRedoDoc = new ScDocument( SCDOCMODE_UNDO );
1655*b1cdbd2cSJim Jagielski 
1656*b1cdbd2cSJim Jagielski 	sal_Bool bFirst = sal_True;
1657*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1658*b1cdbd2cSJim Jagielski 	SCTAB nCount = pDoc->GetTableCount();
1659*b1cdbd2cSJim Jagielski 	for (SCTAB nTab=0; nTab<nCount; nTab++)
1660*b1cdbd2cSJim Jagielski 		if (pUndoDoc->HasTable(nTab))
1661*b1cdbd2cSJim Jagielski 		{
1662*b1cdbd2cSJim Jagielski 			ScRange aRange(0,0,nTab,MAXCOL,MAXROW,nTab);
1663*b1cdbd2cSJim Jagielski 			if (bMakeRedo)
1664*b1cdbd2cSJim Jagielski 			{
1665*b1cdbd2cSJim Jagielski 				if (bFirst)
1666*b1cdbd2cSJim Jagielski 					pRedoDoc->InitUndo( pDoc, nTab, nTab, sal_True, sal_True );
1667*b1cdbd2cSJim Jagielski 				else
1668*b1cdbd2cSJim Jagielski 					pRedoDoc->AddUndoTab( nTab, nTab, sal_True, sal_True );
1669*b1cdbd2cSJim Jagielski 				bFirst = sal_False;
1670*b1cdbd2cSJim Jagielski 				pDoc->CopyToDocument(aRange, IDF_ALL, sal_False, pRedoDoc);
1671*b1cdbd2cSJim Jagielski //				pRedoDoc->TransferDrawPage( pDoc, nTab, nTab );
1672*b1cdbd2cSJim Jagielski 				pRedoDoc->SetLink( nTab,
1673*b1cdbd2cSJim Jagielski 								   pDoc->GetLinkMode(nTab),
1674*b1cdbd2cSJim Jagielski 								   pDoc->GetLinkDoc(nTab),
1675*b1cdbd2cSJim Jagielski 								   pDoc->GetLinkFlt(nTab),
1676*b1cdbd2cSJim Jagielski 								   pDoc->GetLinkOpt(nTab),
1677*b1cdbd2cSJim Jagielski 								   pDoc->GetLinkTab(nTab),
1678*b1cdbd2cSJim Jagielski 								   pDoc->GetLinkRefreshDelay(nTab) );
1679*b1cdbd2cSJim Jagielski 				pRedoDoc->SetTabBgColor( nTab, pDoc->GetTabBgColor(nTab) );
1680*b1cdbd2cSJim Jagielski 			}
1681*b1cdbd2cSJim Jagielski 
1682*b1cdbd2cSJim Jagielski 			pDoc->DeleteAreaTab( aRange,IDF_ALL );
1683*b1cdbd2cSJim Jagielski 			pUndoDoc->CopyToDocument( aRange, IDF_ALL, sal_False, pDoc );
1684*b1cdbd2cSJim Jagielski //			pDoc->TransferDrawPage( pUndoDoc, nTab, nTab );
1685*b1cdbd2cSJim Jagielski 			pDoc->SetLink( nTab, pUndoDoc->GetLinkMode(nTab), pUndoDoc->GetLinkDoc(nTab),
1686*b1cdbd2cSJim Jagielski 								 pUndoDoc->GetLinkFlt(nTab),  pUndoDoc->GetLinkOpt(nTab),
1687*b1cdbd2cSJim Jagielski 								 pUndoDoc->GetLinkTab(nTab),
1688*b1cdbd2cSJim Jagielski 								 pUndoDoc->GetLinkRefreshDelay(nTab) );
1689*b1cdbd2cSJim Jagielski 			pDoc->SetTabBgColor( nTab, pUndoDoc->GetTabBgColor(nTab) );
1690*b1cdbd2cSJim Jagielski 		}
1691*b1cdbd2cSJim Jagielski 
1692*b1cdbd2cSJim Jagielski 	pDocShell->PostPaintGridAll();
1693*b1cdbd2cSJim Jagielski 	pDocShell->PostPaintExtras();
1694*b1cdbd2cSJim Jagielski 
1695*b1cdbd2cSJim Jagielski 	EndUndo();
1696*b1cdbd2cSJim Jagielski }
1697*b1cdbd2cSJim Jagielski 
1698*b1cdbd2cSJim Jagielski 
1699*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1700*b1cdbd2cSJim Jagielski 
Redo()1701*b1cdbd2cSJim Jagielski void __EXPORT ScUndoRefreshLink::Redo()
1702*b1cdbd2cSJim Jagielski {
1703*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pRedoDoc, "Kein RedoDoc bei ScUndoRefreshLink::Redo");
1704*b1cdbd2cSJim Jagielski 
1705*b1cdbd2cSJim Jagielski 	BeginUndo();
1706*b1cdbd2cSJim Jagielski 
1707*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1708*b1cdbd2cSJim Jagielski 	SCTAB nCount = pDoc->GetTableCount();
1709*b1cdbd2cSJim Jagielski 	for (SCTAB nTab=0; nTab<nCount; nTab++)
1710*b1cdbd2cSJim Jagielski 		if (pRedoDoc->HasTable(nTab))
1711*b1cdbd2cSJim Jagielski 		{
1712*b1cdbd2cSJim Jagielski 			ScRange aRange(0,0,nTab,MAXCOL,MAXROW,nTab);
1713*b1cdbd2cSJim Jagielski 
1714*b1cdbd2cSJim Jagielski 			pDoc->DeleteAreaTab( aRange, IDF_ALL );
1715*b1cdbd2cSJim Jagielski 			pRedoDoc->CopyToDocument( aRange, IDF_ALL, sal_False, pDoc );
1716*b1cdbd2cSJim Jagielski //			pDoc->TransferDrawPage( pRedoDoc, nTab, nTab );
1717*b1cdbd2cSJim Jagielski 			pDoc->SetLink( nTab,
1718*b1cdbd2cSJim Jagielski 						   pRedoDoc->GetLinkMode(nTab),
1719*b1cdbd2cSJim Jagielski 						   pRedoDoc->GetLinkDoc(nTab),
1720*b1cdbd2cSJim Jagielski 						   pRedoDoc->GetLinkFlt(nTab),
1721*b1cdbd2cSJim Jagielski 						   pRedoDoc->GetLinkOpt(nTab),
1722*b1cdbd2cSJim Jagielski 						   pRedoDoc->GetLinkTab(nTab),
1723*b1cdbd2cSJim Jagielski 						   pRedoDoc->GetLinkRefreshDelay(nTab) );
1724*b1cdbd2cSJim Jagielski 			pDoc->SetTabBgColor( nTab, pRedoDoc->GetTabBgColor(nTab) );
1725*b1cdbd2cSJim Jagielski 		}
1726*b1cdbd2cSJim Jagielski 
1727*b1cdbd2cSJim Jagielski 	pDocShell->PostPaintGridAll();
1728*b1cdbd2cSJim Jagielski 	pDocShell->PostPaintExtras();
1729*b1cdbd2cSJim Jagielski 
1730*b1cdbd2cSJim Jagielski 	EndUndo();
1731*b1cdbd2cSJim Jagielski }
1732*b1cdbd2cSJim Jagielski 
1733*b1cdbd2cSJim Jagielski 
1734*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1735*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget &)1736*b1cdbd2cSJim Jagielski void __EXPORT ScUndoRefreshLink::Repeat(SfxRepeatTarget& /* rTarget */)
1737*b1cdbd2cSJim Jagielski {
1738*b1cdbd2cSJim Jagielski 	//	gippsnich
1739*b1cdbd2cSJim Jagielski }
1740*b1cdbd2cSJim Jagielski 
1741*b1cdbd2cSJim Jagielski 
1742*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1743*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget &) const1744*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoRefreshLink::CanRepeat(SfxRepeatTarget& /* rTarget */) const
1745*b1cdbd2cSJim Jagielski {
1746*b1cdbd2cSJim Jagielski 	return sal_False;
1747*b1cdbd2cSJim Jagielski }
1748*b1cdbd2cSJim Jagielski 
1749*b1cdbd2cSJim Jagielski 
1750*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1751*b1cdbd2cSJim Jagielski 
lcl_FindAreaLink(sfx2::LinkManager * pLinkManager,const String & rDoc,const String & rFlt,const String & rOpt,const String & rSrc,const ScRange & rDest)1752*b1cdbd2cSJim Jagielski ScAreaLink* lcl_FindAreaLink( sfx2::LinkManager* pLinkManager, const String& rDoc,
1753*b1cdbd2cSJim Jagielski 							const String& rFlt, const String& rOpt,
1754*b1cdbd2cSJim Jagielski 							const String& rSrc, const ScRange& rDest )
1755*b1cdbd2cSJim Jagielski {
1756*b1cdbd2cSJim Jagielski     const ::sfx2::SvBaseLinks& rLinks = pLinkManager->GetLinks();
1757*b1cdbd2cSJim Jagielski 	sal_uInt16 nCount = pLinkManager->GetLinks().Count();
1758*b1cdbd2cSJim Jagielski 	for (sal_uInt16 i=0; i<nCount; i++)
1759*b1cdbd2cSJim Jagielski 	{
1760*b1cdbd2cSJim Jagielski         ::sfx2::SvBaseLink* pBase = *rLinks[i];
1761*b1cdbd2cSJim Jagielski 		if (pBase->ISA(ScAreaLink))
1762*b1cdbd2cSJim Jagielski 			if ( ((ScAreaLink*)pBase)->IsEqual( rDoc, rFlt, rOpt, rSrc, rDest ) )
1763*b1cdbd2cSJim Jagielski 				return (ScAreaLink*)pBase;
1764*b1cdbd2cSJim Jagielski 	}
1765*b1cdbd2cSJim Jagielski 
1766*b1cdbd2cSJim Jagielski 	DBG_ERROR("ScAreaLink nicht gefunden");
1767*b1cdbd2cSJim Jagielski 	return NULL;
1768*b1cdbd2cSJim Jagielski }
1769*b1cdbd2cSJim Jagielski 
1770*b1cdbd2cSJim Jagielski 
1771*b1cdbd2cSJim Jagielski //============================================================================
1772*b1cdbd2cSJim Jagielski //	class ScUndoInsertAreaLink
1773*b1cdbd2cSJim Jagielski //
1774*b1cdbd2cSJim Jagielski //	Bereichs-Verknuepfung einfuegen
1775*b1cdbd2cSJim Jagielski 
1776*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1777*b1cdbd2cSJim Jagielski 
ScUndoInsertAreaLink(ScDocShell * pShell,const String & rDoc,const String & rFlt,const String & rOpt,const String & rArea,const ScRange & rDestRange,sal_uLong nRefresh)1778*b1cdbd2cSJim Jagielski ScUndoInsertAreaLink::ScUndoInsertAreaLink( ScDocShell* pShell,
1779*b1cdbd2cSJim Jagielski 							const String& rDoc,
1780*b1cdbd2cSJim Jagielski 							const String& rFlt, const String& rOpt,
1781*b1cdbd2cSJim Jagielski 							const String& rArea, const ScRange& rDestRange,
1782*b1cdbd2cSJim Jagielski 							sal_uLong nRefresh )
1783*b1cdbd2cSJim Jagielski 		//
1784*b1cdbd2cSJim Jagielski 	:	ScSimpleUndo	( pShell ),
1785*b1cdbd2cSJim Jagielski 		//
1786*b1cdbd2cSJim Jagielski 		aDocName		( rDoc ),
1787*b1cdbd2cSJim Jagielski 		aFltName		( rFlt ),
1788*b1cdbd2cSJim Jagielski 		aOptions		( rOpt ),
1789*b1cdbd2cSJim Jagielski 		aAreaName		( rArea ),
1790*b1cdbd2cSJim Jagielski 		aRange			( rDestRange ),
1791*b1cdbd2cSJim Jagielski 		nRefreshDelay	( nRefresh )
1792*b1cdbd2cSJim Jagielski {
1793*b1cdbd2cSJim Jagielski }
1794*b1cdbd2cSJim Jagielski 
1795*b1cdbd2cSJim Jagielski 
1796*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1797*b1cdbd2cSJim Jagielski 
~ScUndoInsertAreaLink()1798*b1cdbd2cSJim Jagielski __EXPORT ScUndoInsertAreaLink::~ScUndoInsertAreaLink()
1799*b1cdbd2cSJim Jagielski {
1800*b1cdbd2cSJim Jagielski }
1801*b1cdbd2cSJim Jagielski 
1802*b1cdbd2cSJim Jagielski 
1803*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1804*b1cdbd2cSJim Jagielski 
GetComment() const1805*b1cdbd2cSJim Jagielski String __EXPORT ScUndoInsertAreaLink::GetComment() const
1806*b1cdbd2cSJim Jagielski {
1807*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( STR_UNDO_INSERTAREALINK );
1808*b1cdbd2cSJim Jagielski }
1809*b1cdbd2cSJim Jagielski 
1810*b1cdbd2cSJim Jagielski 
1811*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1812*b1cdbd2cSJim Jagielski 
Undo()1813*b1cdbd2cSJim Jagielski void __EXPORT ScUndoInsertAreaLink::Undo()
1814*b1cdbd2cSJim Jagielski {
1815*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1816*b1cdbd2cSJim Jagielski 	sfx2::LinkManager* pLinkManager = pDoc->GetLinkManager();
1817*b1cdbd2cSJim Jagielski 
1818*b1cdbd2cSJim Jagielski 	ScAreaLink* pLink = lcl_FindAreaLink( pLinkManager, aDocName, aFltName, aOptions,
1819*b1cdbd2cSJim Jagielski 											aAreaName, aRange );
1820*b1cdbd2cSJim Jagielski 	if (pLink)
1821*b1cdbd2cSJim Jagielski 		pLinkManager->Remove( pLink );
1822*b1cdbd2cSJim Jagielski 
1823*b1cdbd2cSJim Jagielski 	SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREALINKS_CHANGED ) );		// Navigator
1824*b1cdbd2cSJim Jagielski }
1825*b1cdbd2cSJim Jagielski 
1826*b1cdbd2cSJim Jagielski 
1827*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1828*b1cdbd2cSJim Jagielski 
Redo()1829*b1cdbd2cSJim Jagielski void __EXPORT ScUndoInsertAreaLink::Redo()
1830*b1cdbd2cSJim Jagielski {
1831*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1832*b1cdbd2cSJim Jagielski 	sfx2::LinkManager* pLinkManager = pDoc->GetLinkManager();
1833*b1cdbd2cSJim Jagielski 
1834*b1cdbd2cSJim Jagielski 	ScAreaLink* pLink = new ScAreaLink( pDocShell, aDocName, aFltName, aOptions,
1835*b1cdbd2cSJim Jagielski 											aAreaName, aRange.aStart, nRefreshDelay );
1836*b1cdbd2cSJim Jagielski 	pLink->SetInCreate( sal_True );
1837*b1cdbd2cSJim Jagielski 	pLink->SetDestArea( aRange );
1838*b1cdbd2cSJim Jagielski 	pLinkManager->InsertFileLink( *pLink, OBJECT_CLIENT_FILE, aDocName, &aFltName, &aAreaName );
1839*b1cdbd2cSJim Jagielski 	pLink->Update();
1840*b1cdbd2cSJim Jagielski 	pLink->SetInCreate( sal_False );
1841*b1cdbd2cSJim Jagielski 
1842*b1cdbd2cSJim Jagielski 	SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREALINKS_CHANGED ) );		// Navigator
1843*b1cdbd2cSJim Jagielski }
1844*b1cdbd2cSJim Jagielski 
1845*b1cdbd2cSJim Jagielski 
1846*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1847*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget &)1848*b1cdbd2cSJim Jagielski void __EXPORT ScUndoInsertAreaLink::Repeat(SfxRepeatTarget& /* rTarget */)
1849*b1cdbd2cSJim Jagielski {
1850*b1cdbd2cSJim Jagielski 	//!	....
1851*b1cdbd2cSJim Jagielski }
1852*b1cdbd2cSJim Jagielski 
1853*b1cdbd2cSJim Jagielski 
1854*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1855*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget &) const1856*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoInsertAreaLink::CanRepeat(SfxRepeatTarget& /* rTarget */) const
1857*b1cdbd2cSJim Jagielski {
1858*b1cdbd2cSJim Jagielski 	return sal_False;
1859*b1cdbd2cSJim Jagielski }
1860*b1cdbd2cSJim Jagielski 
1861*b1cdbd2cSJim Jagielski 
1862*b1cdbd2cSJim Jagielski //============================================================================
1863*b1cdbd2cSJim Jagielski //	class ScUndoRemoveAreaLink
1864*b1cdbd2cSJim Jagielski //
1865*b1cdbd2cSJim Jagielski //	Bereichs-Verknuepfung loeschen
1866*b1cdbd2cSJim Jagielski 
1867*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1868*b1cdbd2cSJim Jagielski 
ScUndoRemoveAreaLink(ScDocShell * pShell,const String & rDoc,const String & rFlt,const String & rOpt,const String & rArea,const ScRange & rDestRange,sal_uLong nRefresh)1869*b1cdbd2cSJim Jagielski ScUndoRemoveAreaLink::ScUndoRemoveAreaLink( ScDocShell* pShell,
1870*b1cdbd2cSJim Jagielski 							const String& rDoc, const String& rFlt, const String& rOpt,
1871*b1cdbd2cSJim Jagielski 							const String& rArea, const ScRange& rDestRange,
1872*b1cdbd2cSJim Jagielski 							sal_uLong nRefresh )
1873*b1cdbd2cSJim Jagielski 		//
1874*b1cdbd2cSJim Jagielski 	:	ScSimpleUndo	( pShell ),
1875*b1cdbd2cSJim Jagielski 		//
1876*b1cdbd2cSJim Jagielski 		aDocName		( rDoc ),
1877*b1cdbd2cSJim Jagielski 		aFltName		( rFlt ),
1878*b1cdbd2cSJim Jagielski 		aOptions		( rOpt ),
1879*b1cdbd2cSJim Jagielski 		aAreaName		( rArea ),
1880*b1cdbd2cSJim Jagielski 		aRange			( rDestRange ),
1881*b1cdbd2cSJim Jagielski 		nRefreshDelay	( nRefresh )
1882*b1cdbd2cSJim Jagielski {
1883*b1cdbd2cSJim Jagielski }
1884*b1cdbd2cSJim Jagielski 
1885*b1cdbd2cSJim Jagielski 
1886*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1887*b1cdbd2cSJim Jagielski 
~ScUndoRemoveAreaLink()1888*b1cdbd2cSJim Jagielski __EXPORT ScUndoRemoveAreaLink::~ScUndoRemoveAreaLink()
1889*b1cdbd2cSJim Jagielski {
1890*b1cdbd2cSJim Jagielski }
1891*b1cdbd2cSJim Jagielski 
1892*b1cdbd2cSJim Jagielski 
1893*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1894*b1cdbd2cSJim Jagielski 
GetComment() const1895*b1cdbd2cSJim Jagielski String __EXPORT ScUndoRemoveAreaLink::GetComment() const
1896*b1cdbd2cSJim Jagielski {
1897*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( STR_UNDO_REMOVELINK );	//! eigener Text ??
1898*b1cdbd2cSJim Jagielski }
1899*b1cdbd2cSJim Jagielski 
1900*b1cdbd2cSJim Jagielski 
1901*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1902*b1cdbd2cSJim Jagielski 
Undo()1903*b1cdbd2cSJim Jagielski void __EXPORT ScUndoRemoveAreaLink::Undo()
1904*b1cdbd2cSJim Jagielski {
1905*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1906*b1cdbd2cSJim Jagielski 	sfx2::LinkManager* pLinkManager = pDoc->GetLinkManager();
1907*b1cdbd2cSJim Jagielski 
1908*b1cdbd2cSJim Jagielski 	ScAreaLink* pLink = new ScAreaLink( pDocShell, aDocName, aFltName, aOptions,
1909*b1cdbd2cSJim Jagielski 										aAreaName, aRange.aStart, nRefreshDelay );
1910*b1cdbd2cSJim Jagielski 	pLink->SetInCreate( sal_True );
1911*b1cdbd2cSJim Jagielski 	pLink->SetDestArea( aRange );
1912*b1cdbd2cSJim Jagielski 	pLinkManager->InsertFileLink( *pLink, OBJECT_CLIENT_FILE, aDocName, &aFltName, &aAreaName );
1913*b1cdbd2cSJim Jagielski 	pLink->Update();
1914*b1cdbd2cSJim Jagielski 	pLink->SetInCreate( sal_False );
1915*b1cdbd2cSJim Jagielski 
1916*b1cdbd2cSJim Jagielski 	SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREALINKS_CHANGED ) );		// Navigator
1917*b1cdbd2cSJim Jagielski }
1918*b1cdbd2cSJim Jagielski 
1919*b1cdbd2cSJim Jagielski 
1920*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1921*b1cdbd2cSJim Jagielski 
Redo()1922*b1cdbd2cSJim Jagielski void __EXPORT ScUndoRemoveAreaLink::Redo()
1923*b1cdbd2cSJim Jagielski {
1924*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
1925*b1cdbd2cSJim Jagielski 	sfx2::LinkManager* pLinkManager = pDoc->GetLinkManager();
1926*b1cdbd2cSJim Jagielski 
1927*b1cdbd2cSJim Jagielski 	ScAreaLink* pLink = lcl_FindAreaLink( pLinkManager, aDocName, aFltName, aOptions,
1928*b1cdbd2cSJim Jagielski 											aAreaName, aRange );
1929*b1cdbd2cSJim Jagielski 	if (pLink)
1930*b1cdbd2cSJim Jagielski 		pLinkManager->Remove( pLink );
1931*b1cdbd2cSJim Jagielski 
1932*b1cdbd2cSJim Jagielski 	SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREALINKS_CHANGED ) );		// Navigator
1933*b1cdbd2cSJim Jagielski }
1934*b1cdbd2cSJim Jagielski 
1935*b1cdbd2cSJim Jagielski 
1936*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1937*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget &)1938*b1cdbd2cSJim Jagielski void __EXPORT ScUndoRemoveAreaLink::Repeat(SfxRepeatTarget& /* rTarget */)
1939*b1cdbd2cSJim Jagielski {
1940*b1cdbd2cSJim Jagielski 	//	gippsnich
1941*b1cdbd2cSJim Jagielski }
1942*b1cdbd2cSJim Jagielski 
1943*b1cdbd2cSJim Jagielski 
1944*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1945*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget &) const1946*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoRemoveAreaLink::CanRepeat(SfxRepeatTarget& /* rTarget */) const
1947*b1cdbd2cSJim Jagielski {
1948*b1cdbd2cSJim Jagielski 	return sal_False;
1949*b1cdbd2cSJim Jagielski }
1950*b1cdbd2cSJim Jagielski 
1951*b1cdbd2cSJim Jagielski 
1952*b1cdbd2cSJim Jagielski //============================================================================
1953*b1cdbd2cSJim Jagielski //	class ScUndoUpdateAreaLink
1954*b1cdbd2cSJim Jagielski //
1955*b1cdbd2cSJim Jagielski //	Bereichs-Verknuepfung aktualisieren
1956*b1cdbd2cSJim Jagielski 
1957*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1958*b1cdbd2cSJim Jagielski 
ScUndoUpdateAreaLink(ScDocShell * pShell,const String & rOldD,const String & rOldF,const String & rOldO,const String & rOldA,const ScRange & rOldR,sal_uLong nOldRD,const String & rNewD,const String & rNewF,const String & rNewO,const String & rNewA,const ScRange & rNewR,sal_uLong nNewRD,ScDocument * pUndo,ScDocument * pRedo,sal_Bool bDoInsert)1959*b1cdbd2cSJim Jagielski ScUndoUpdateAreaLink::ScUndoUpdateAreaLink( ScDocShell* pShell,
1960*b1cdbd2cSJim Jagielski 							const String& rOldD, const String& rOldF, const String& rOldO,
1961*b1cdbd2cSJim Jagielski 							const String& rOldA, const ScRange& rOldR, sal_uLong nOldRD,
1962*b1cdbd2cSJim Jagielski 							const String& rNewD, const String& rNewF, const String& rNewO,
1963*b1cdbd2cSJim Jagielski 							const String& rNewA, const ScRange& rNewR, sal_uLong nNewRD,
1964*b1cdbd2cSJim Jagielski 							ScDocument* pUndo, ScDocument* pRedo, sal_Bool bDoInsert )
1965*b1cdbd2cSJim Jagielski 		//
1966*b1cdbd2cSJim Jagielski 	:	ScSimpleUndo( pShell ),
1967*b1cdbd2cSJim Jagielski 		//
1968*b1cdbd2cSJim Jagielski 		aOldDoc		( rOldD ),
1969*b1cdbd2cSJim Jagielski 		aOldFlt		( rOldF ),
1970*b1cdbd2cSJim Jagielski 		aOldOpt		( rOldO ),
1971*b1cdbd2cSJim Jagielski 		aOldArea	( rOldA ),
1972*b1cdbd2cSJim Jagielski 		aOldRange	( rOldR ),
1973*b1cdbd2cSJim Jagielski 		aNewDoc		( rNewD ),
1974*b1cdbd2cSJim Jagielski 		aNewFlt		( rNewF ),
1975*b1cdbd2cSJim Jagielski 		aNewOpt		( rNewO ),
1976*b1cdbd2cSJim Jagielski 		aNewArea	( rNewA ),
1977*b1cdbd2cSJim Jagielski 		aNewRange	( rNewR ),
1978*b1cdbd2cSJim Jagielski 		pUndoDoc	( pUndo ),
1979*b1cdbd2cSJim Jagielski 		pRedoDoc	( pRedo ),
1980*b1cdbd2cSJim Jagielski 		nOldRefresh	( nOldRD ),
1981*b1cdbd2cSJim Jagielski 		nNewRefresh	( nNewRD ),
1982*b1cdbd2cSJim Jagielski 		bWithInsert	( bDoInsert )
1983*b1cdbd2cSJim Jagielski {
1984*b1cdbd2cSJim Jagielski 	DBG_ASSERT( aOldRange.aStart == aNewRange.aStart, "AreaLink verschoben ?" );
1985*b1cdbd2cSJim Jagielski }
1986*b1cdbd2cSJim Jagielski 
1987*b1cdbd2cSJim Jagielski 
1988*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1989*b1cdbd2cSJim Jagielski 
~ScUndoUpdateAreaLink()1990*b1cdbd2cSJim Jagielski __EXPORT ScUndoUpdateAreaLink::~ScUndoUpdateAreaLink()
1991*b1cdbd2cSJim Jagielski {
1992*b1cdbd2cSJim Jagielski 	delete pUndoDoc;
1993*b1cdbd2cSJim Jagielski 	delete pRedoDoc;
1994*b1cdbd2cSJim Jagielski }
1995*b1cdbd2cSJim Jagielski 
1996*b1cdbd2cSJim Jagielski 
1997*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
1998*b1cdbd2cSJim Jagielski 
GetComment() const1999*b1cdbd2cSJim Jagielski String __EXPORT ScUndoUpdateAreaLink::GetComment() const
2000*b1cdbd2cSJim Jagielski {
2001*b1cdbd2cSJim Jagielski 	return ScGlobal::GetRscString( STR_UNDO_UPDATELINK );	//! eigener Text ??
2002*b1cdbd2cSJim Jagielski }
2003*b1cdbd2cSJim Jagielski 
2004*b1cdbd2cSJim Jagielski 
2005*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
2006*b1cdbd2cSJim Jagielski 
DoChange(const sal_Bool bUndo) const2007*b1cdbd2cSJim Jagielski void ScUndoUpdateAreaLink::DoChange( const sal_Bool bUndo ) const
2008*b1cdbd2cSJim Jagielski {
2009*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
2010*b1cdbd2cSJim Jagielski 
2011*b1cdbd2cSJim Jagielski 	SCCOL nEndX = Max( aOldRange.aEnd.Col(), aNewRange.aEnd.Col() );
2012*b1cdbd2cSJim Jagielski 	SCROW nEndY = Max( aOldRange.aEnd.Row(), aNewRange.aEnd.Row() );
2013*b1cdbd2cSJim Jagielski 	SCTAB nEndZ = Max( aOldRange.aEnd.Tab(), aNewRange.aEnd.Tab() );	//?
2014*b1cdbd2cSJim Jagielski 
2015*b1cdbd2cSJim Jagielski 	if ( bUndo )
2016*b1cdbd2cSJim Jagielski 	{
2017*b1cdbd2cSJim Jagielski 		if ( bWithInsert )
2018*b1cdbd2cSJim Jagielski 		{
2019*b1cdbd2cSJim Jagielski 			pDoc->FitBlock( aNewRange, aOldRange );
2020*b1cdbd2cSJim Jagielski             pDoc->DeleteAreaTab( aOldRange, IDF_ALL & ~IDF_NOTE );
2021*b1cdbd2cSJim Jagielski             pUndoDoc->UndoToDocument( aOldRange, IDF_ALL & ~IDF_NOTE, sal_False, pDoc );
2022*b1cdbd2cSJim Jagielski 		}
2023*b1cdbd2cSJim Jagielski 		else
2024*b1cdbd2cSJim Jagielski 		{
2025*b1cdbd2cSJim Jagielski 			ScRange aCopyRange( aOldRange.aStart, ScAddress(nEndX,nEndY,nEndZ) );
2026*b1cdbd2cSJim Jagielski             pDoc->DeleteAreaTab( aCopyRange, IDF_ALL & ~IDF_NOTE );
2027*b1cdbd2cSJim Jagielski             pUndoDoc->CopyToDocument( aCopyRange, IDF_ALL & ~IDF_NOTE, sal_False, pDoc );
2028*b1cdbd2cSJim Jagielski 		}
2029*b1cdbd2cSJim Jagielski 	}
2030*b1cdbd2cSJim Jagielski 	else
2031*b1cdbd2cSJim Jagielski 	{
2032*b1cdbd2cSJim Jagielski 		if ( bWithInsert )
2033*b1cdbd2cSJim Jagielski 		{
2034*b1cdbd2cSJim Jagielski 			pDoc->FitBlock( aOldRange, aNewRange );
2035*b1cdbd2cSJim Jagielski             pDoc->DeleteAreaTab( aNewRange, IDF_ALL & ~IDF_NOTE );
2036*b1cdbd2cSJim Jagielski             pRedoDoc->CopyToDocument( aNewRange, IDF_ALL & ~IDF_NOTE, sal_False, pDoc );
2037*b1cdbd2cSJim Jagielski 		}
2038*b1cdbd2cSJim Jagielski 		else
2039*b1cdbd2cSJim Jagielski 		{
2040*b1cdbd2cSJim Jagielski 			ScRange aCopyRange( aOldRange.aStart, ScAddress(nEndX,nEndY,nEndZ) );
2041*b1cdbd2cSJim Jagielski             pDoc->DeleteAreaTab( aCopyRange, IDF_ALL & ~IDF_NOTE );
2042*b1cdbd2cSJim Jagielski             pRedoDoc->CopyToDocument( aCopyRange, IDF_ALL & ~IDF_NOTE, sal_False, pDoc );
2043*b1cdbd2cSJim Jagielski 		}
2044*b1cdbd2cSJim Jagielski 	}
2045*b1cdbd2cSJim Jagielski 
2046*b1cdbd2cSJim Jagielski 	ScRange aWorkRange( aNewRange.aStart, ScAddress( nEndX, nEndY, nEndZ ) );
2047*b1cdbd2cSJim Jagielski 	pDoc->ExtendMerge( aWorkRange, sal_True );
2048*b1cdbd2cSJim Jagielski 
2049*b1cdbd2cSJim Jagielski 	//	Paint
2050*b1cdbd2cSJim Jagielski 
2051*b1cdbd2cSJim Jagielski 	if ( aNewRange.aEnd.Col() != aOldRange.aEnd.Col() )
2052*b1cdbd2cSJim Jagielski 		aWorkRange.aEnd.SetCol(MAXCOL);
2053*b1cdbd2cSJim Jagielski 	if ( aNewRange.aEnd.Row() != aOldRange.aEnd.Row() )
2054*b1cdbd2cSJim Jagielski 		aWorkRange.aEnd.SetRow(MAXROW);
2055*b1cdbd2cSJim Jagielski 
2056*b1cdbd2cSJim Jagielski 	if ( !pDocShell->AdjustRowHeight( aWorkRange.aStart.Row(), aWorkRange.aEnd.Row(), aWorkRange.aStart.Tab() ) )
2057*b1cdbd2cSJim Jagielski 		pDocShell->PostPaint( aWorkRange, PAINT_GRID );
2058*b1cdbd2cSJim Jagielski 
2059*b1cdbd2cSJim Jagielski 	pDocShell->PostDataChanged();
2060*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
2061*b1cdbd2cSJim Jagielski 	if (pViewShell)
2062*b1cdbd2cSJim Jagielski 		pViewShell->CellContentChanged();
2063*b1cdbd2cSJim Jagielski }
2064*b1cdbd2cSJim Jagielski 
2065*b1cdbd2cSJim Jagielski 
2066*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
2067*b1cdbd2cSJim Jagielski 
Undo()2068*b1cdbd2cSJim Jagielski void __EXPORT ScUndoUpdateAreaLink::Undo()
2069*b1cdbd2cSJim Jagielski {
2070*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
2071*b1cdbd2cSJim Jagielski 	sfx2::LinkManager* pLinkManager = pDoc->GetLinkManager();
2072*b1cdbd2cSJim Jagielski 	ScAreaLink* pLink = lcl_FindAreaLink( pLinkManager, aNewDoc, aNewFlt, aNewOpt,
2073*b1cdbd2cSJim Jagielski 											aNewArea, aNewRange );
2074*b1cdbd2cSJim Jagielski 	if (pLink)
2075*b1cdbd2cSJim Jagielski 	{
2076*b1cdbd2cSJim Jagielski 		pLink->SetSource( aOldDoc, aOldFlt, aOldOpt, aOldArea );		// alte Werte im Link
2077*b1cdbd2cSJim Jagielski 		pLink->SetDestArea( aOldRange );
2078*b1cdbd2cSJim Jagielski 		pLink->SetRefreshDelay( nOldRefresh );
2079*b1cdbd2cSJim Jagielski 	}
2080*b1cdbd2cSJim Jagielski 
2081*b1cdbd2cSJim Jagielski 	DoChange(sal_True);
2082*b1cdbd2cSJim Jagielski }
2083*b1cdbd2cSJim Jagielski 
2084*b1cdbd2cSJim Jagielski 
2085*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
2086*b1cdbd2cSJim Jagielski 
Redo()2087*b1cdbd2cSJim Jagielski void __EXPORT ScUndoUpdateAreaLink::Redo()
2088*b1cdbd2cSJim Jagielski {
2089*b1cdbd2cSJim Jagielski 	ScDocument* pDoc = pDocShell->GetDocument();
2090*b1cdbd2cSJim Jagielski 	sfx2::LinkManager* pLinkManager = pDoc->GetLinkManager();
2091*b1cdbd2cSJim Jagielski 	ScAreaLink* pLink = lcl_FindAreaLink( pLinkManager, aOldDoc, aOldFlt, aOldOpt,
2092*b1cdbd2cSJim Jagielski 											aOldArea, aOldRange );
2093*b1cdbd2cSJim Jagielski 	if (pLink)
2094*b1cdbd2cSJim Jagielski 	{
2095*b1cdbd2cSJim Jagielski 		pLink->SetSource( aNewDoc, aNewFlt, aNewOpt, aNewArea );		// neue Werte im Link
2096*b1cdbd2cSJim Jagielski 		pLink->SetDestArea( aNewRange );
2097*b1cdbd2cSJim Jagielski 		pLink->SetRefreshDelay( nNewRefresh );
2098*b1cdbd2cSJim Jagielski 	}
2099*b1cdbd2cSJim Jagielski 
2100*b1cdbd2cSJim Jagielski 	DoChange(sal_False);
2101*b1cdbd2cSJim Jagielski }
2102*b1cdbd2cSJim Jagielski 
2103*b1cdbd2cSJim Jagielski 
2104*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
2105*b1cdbd2cSJim Jagielski 
Repeat(SfxRepeatTarget &)2106*b1cdbd2cSJim Jagielski void __EXPORT ScUndoUpdateAreaLink::Repeat(SfxRepeatTarget& /* rTarget */)
2107*b1cdbd2cSJim Jagielski {
2108*b1cdbd2cSJim Jagielski 	//	gippsnich
2109*b1cdbd2cSJim Jagielski }
2110*b1cdbd2cSJim Jagielski 
2111*b1cdbd2cSJim Jagielski 
2112*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------------
2113*b1cdbd2cSJim Jagielski 
CanRepeat(SfxRepeatTarget &) const2114*b1cdbd2cSJim Jagielski sal_Bool __EXPORT ScUndoUpdateAreaLink::CanRepeat(SfxRepeatTarget& /* rTarget */) const
2115*b1cdbd2cSJim Jagielski {
2116*b1cdbd2cSJim Jagielski 	return sal_False;
2117*b1cdbd2cSJim Jagielski }
2118*b1cdbd2cSJim Jagielski 
2119*b1cdbd2cSJim Jagielski 
2120*b1cdbd2cSJim Jagielski 
2121*b1cdbd2cSJim Jagielski 
2122