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