1*b3f79822SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*b3f79822SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*b3f79822SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*b3f79822SAndrew Rist * distributed with this work for additional information
6*b3f79822SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*b3f79822SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*b3f79822SAndrew Rist * "License"); you may not use this file except in compliance
9*b3f79822SAndrew Rist * with the License. You may obtain a copy of the License at
10*b3f79822SAndrew Rist *
11*b3f79822SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*b3f79822SAndrew Rist *
13*b3f79822SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*b3f79822SAndrew Rist * software distributed under the License is distributed on an
15*b3f79822SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b3f79822SAndrew Rist * KIND, either express or implied. See the License for the
17*b3f79822SAndrew Rist * specific language governing permissions and limitations
18*b3f79822SAndrew Rist * under the License.
19*b3f79822SAndrew Rist *
20*b3f79822SAndrew Rist *************************************************************/
21*b3f79822SAndrew Rist
22*b3f79822SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sc.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "scitems.hxx"
28cdf0e10cSrcweir #include <editeng/eeitem.hxx>
29cdf0e10cSrcweir
30cdf0e10cSrcweir #include <editeng/editobj.hxx>
31cdf0e10cSrcweir #include <svl/zforlist.hxx>
32cdf0e10cSrcweir #include <sfx2/app.hxx>
33cdf0e10cSrcweir
34cdf0e10cSrcweir #include "undocell.hxx"
35cdf0e10cSrcweir #include "document.hxx"
36cdf0e10cSrcweir #include "docpool.hxx"
37cdf0e10cSrcweir #include "patattr.hxx"
38cdf0e10cSrcweir #include "docsh.hxx"
39cdf0e10cSrcweir #include "tabvwsh.hxx"
40cdf0e10cSrcweir #include "globstr.hrc"
41cdf0e10cSrcweir #include "global.hxx"
42cdf0e10cSrcweir #include "cell.hxx"
43cdf0e10cSrcweir #include "target.hxx"
44cdf0e10cSrcweir #include "undoolk.hxx"
45cdf0e10cSrcweir #include "detdata.hxx"
46cdf0e10cSrcweir #include "stlpool.hxx"
47cdf0e10cSrcweir #include "printfun.hxx"
48cdf0e10cSrcweir #include "rangenam.hxx"
49cdf0e10cSrcweir #include "chgtrack.hxx"
50cdf0e10cSrcweir #include "sc.hrc"
51cdf0e10cSrcweir #include "docuno.hxx"
52cdf0e10cSrcweir
53cdf0e10cSrcweir // STATIC DATA -----------------------------------------------------------
54cdf0e10cSrcweir
55cdf0e10cSrcweir TYPEINIT1(ScUndoCursorAttr, ScSimpleUndo);
56cdf0e10cSrcweir TYPEINIT1(ScUndoEnterData, ScSimpleUndo);
57cdf0e10cSrcweir TYPEINIT1(ScUndoEnterValue, ScSimpleUndo);
58cdf0e10cSrcweir TYPEINIT1(ScUndoPutCell, ScSimpleUndo);
59cdf0e10cSrcweir TYPEINIT1(ScUndoPageBreak, ScSimpleUndo);
60cdf0e10cSrcweir TYPEINIT1(ScUndoPrintZoom, ScSimpleUndo);
61cdf0e10cSrcweir TYPEINIT1(ScUndoThesaurus, ScSimpleUndo);
62cdf0e10cSrcweir TYPEINIT1(ScUndoReplaceNote, ScSimpleUndo);
63cdf0e10cSrcweir TYPEINIT1(ScUndoShowHideNote, ScSimpleUndo);
64cdf0e10cSrcweir TYPEINIT1(ScUndoDetective, ScSimpleUndo);
65cdf0e10cSrcweir TYPEINIT1(ScUndoRangeNames, ScSimpleUndo);
66cdf0e10cSrcweir
67cdf0e10cSrcweir
68cdf0e10cSrcweir // -----------------------------------------------------------------------
69cdf0e10cSrcweir //
70cdf0e10cSrcweir // Attribute auf Cursor anwenden
71cdf0e10cSrcweir //
72cdf0e10cSrcweir
ScUndoCursorAttr(ScDocShell * pNewDocShell,SCCOL nNewCol,SCROW nNewRow,SCTAB nNewTab,const ScPatternAttr * pOldPat,const ScPatternAttr * pNewPat,const ScPatternAttr * pApplyPat,sal_Bool bAutomatic)73cdf0e10cSrcweir ScUndoCursorAttr::ScUndoCursorAttr( ScDocShell* pNewDocShell,
74cdf0e10cSrcweir SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab,
75cdf0e10cSrcweir const ScPatternAttr* pOldPat, const ScPatternAttr* pNewPat,
76cdf0e10cSrcweir const ScPatternAttr* pApplyPat, sal_Bool bAutomatic ) :
77cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ),
78cdf0e10cSrcweir nCol( nNewCol ),
79cdf0e10cSrcweir nRow( nNewRow ),
80cdf0e10cSrcweir nTab( nNewTab ),
81cdf0e10cSrcweir bIsAutomatic( bAutomatic )
82cdf0e10cSrcweir {
83cdf0e10cSrcweir ScDocumentPool* pPool = pDocShell->GetDocument()->GetPool();
84cdf0e10cSrcweir pNewPattern = (ScPatternAttr*) &pPool->Put( *pNewPat );
85cdf0e10cSrcweir pOldPattern = (ScPatternAttr*) &pPool->Put( *pOldPat );
86cdf0e10cSrcweir pApplyPattern = (ScPatternAttr*) &pPool->Put( *pApplyPat );
87cdf0e10cSrcweir }
88cdf0e10cSrcweir
~ScUndoCursorAttr()89cdf0e10cSrcweir __EXPORT ScUndoCursorAttr::~ScUndoCursorAttr()
90cdf0e10cSrcweir {
91cdf0e10cSrcweir ScDocumentPool* pPool = pDocShell->GetDocument()->GetPool();
92cdf0e10cSrcweir pPool->Remove(*pNewPattern);
93cdf0e10cSrcweir pPool->Remove(*pOldPattern);
94cdf0e10cSrcweir pPool->Remove(*pApplyPattern);
95cdf0e10cSrcweir }
96cdf0e10cSrcweir
GetComment() const97cdf0e10cSrcweir String __EXPORT ScUndoCursorAttr::GetComment() const
98cdf0e10cSrcweir {
99cdf0e10cSrcweir //! eigener Text fuer automatische Attributierung
100cdf0e10cSrcweir
101cdf0e10cSrcweir sal_uInt16 nId = STR_UNDO_CURSORATTR; // "Attribute"
102cdf0e10cSrcweir return ScGlobal::GetRscString( nId );
103cdf0e10cSrcweir }
104cdf0e10cSrcweir
DoChange(const ScPatternAttr * pWhichPattern) const105cdf0e10cSrcweir void ScUndoCursorAttr::DoChange( const ScPatternAttr* pWhichPattern ) const
106cdf0e10cSrcweir {
107cdf0e10cSrcweir pDocShell->GetDocument()->SetPattern( nCol, nRow, nTab, *pWhichPattern, sal_True );
108cdf0e10cSrcweir
109cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
110cdf0e10cSrcweir if (pViewShell)
111cdf0e10cSrcweir {
112cdf0e10cSrcweir pViewShell->SetTabNo( nTab );
113cdf0e10cSrcweir pViewShell->MoveCursorAbs( nCol, nRow, SC_FOLLOW_JUMP, sal_False, sal_False );
114cdf0e10cSrcweir pViewShell->AdjustBlockHeight();
115cdf0e10cSrcweir }
116cdf0e10cSrcweir
117cdf0e10cSrcweir const SfxItemSet& rApplySet = pApplyPattern->GetItemSet();
118cdf0e10cSrcweir sal_Bool bPaintExt = ( rApplySet.GetItemState( ATTR_SHADOW, sal_True ) != SFX_ITEM_DEFAULT ||
119cdf0e10cSrcweir rApplySet.GetItemState( ATTR_CONDITIONAL, sal_True ) != SFX_ITEM_DEFAULT );
120cdf0e10cSrcweir sal_Bool bPaintRows = ( rApplySet.GetItemState( ATTR_HOR_JUSTIFY, sal_True ) != SFX_ITEM_DEFAULT );
121cdf0e10cSrcweir
122cdf0e10cSrcweir sal_uInt16 nFlags = SC_PF_TESTMERGE;
123cdf0e10cSrcweir if (bPaintExt)
124cdf0e10cSrcweir nFlags |= SC_PF_LINES;
125cdf0e10cSrcweir if (bPaintRows)
126cdf0e10cSrcweir nFlags |= SC_PF_WHOLEROWS;
127cdf0e10cSrcweir pDocShell->PostPaint( nCol,nRow,nTab, nCol,nRow,nTab, PAINT_GRID, nFlags );
128cdf0e10cSrcweir }
129cdf0e10cSrcweir
Undo()130cdf0e10cSrcweir void __EXPORT ScUndoCursorAttr::Undo()
131cdf0e10cSrcweir {
132cdf0e10cSrcweir BeginUndo();
133cdf0e10cSrcweir DoChange(pOldPattern);
134cdf0e10cSrcweir
135cdf0e10cSrcweir if ( bIsAutomatic )
136cdf0e10cSrcweir {
137cdf0e10cSrcweir // wenn automatische Formatierung rueckgaengig gemacht wird,
138cdf0e10cSrcweir // soll auch nicht weiter automatisch formatiert werden:
139cdf0e10cSrcweir
140cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
141cdf0e10cSrcweir if (pViewShell)
142cdf0e10cSrcweir pViewShell->ForgetFormatArea();
143cdf0e10cSrcweir }
144cdf0e10cSrcweir
145cdf0e10cSrcweir EndUndo();
146cdf0e10cSrcweir }
147cdf0e10cSrcweir
Redo()148cdf0e10cSrcweir void __EXPORT ScUndoCursorAttr::Redo()
149cdf0e10cSrcweir {
150cdf0e10cSrcweir BeginRedo();
151cdf0e10cSrcweir DoChange(pNewPattern);
152cdf0e10cSrcweir EndRedo();
153cdf0e10cSrcweir }
154cdf0e10cSrcweir
Repeat(SfxRepeatTarget & rTarget)155cdf0e10cSrcweir void __EXPORT ScUndoCursorAttr::Repeat(SfxRepeatTarget& rTarget)
156cdf0e10cSrcweir {
157cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget))
158cdf0e10cSrcweir ((ScTabViewTarget&)rTarget).GetViewShell()->ApplySelectionPattern( *pApplyPattern );
159cdf0e10cSrcweir }
160cdf0e10cSrcweir
CanRepeat(SfxRepeatTarget & rTarget) const161cdf0e10cSrcweir sal_Bool __EXPORT ScUndoCursorAttr::CanRepeat(SfxRepeatTarget& rTarget) const
162cdf0e10cSrcweir {
163cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget));
164cdf0e10cSrcweir }
165cdf0e10cSrcweir
166cdf0e10cSrcweir
167cdf0e10cSrcweir // -----------------------------------------------------------------------
168cdf0e10cSrcweir //
169cdf0e10cSrcweir // Daten eingeben
170cdf0e10cSrcweir //
171cdf0e10cSrcweir
ScUndoEnterData(ScDocShell * pNewDocShell,SCCOL nNewCol,SCROW nNewRow,SCTAB nNewTab,SCTAB nNewCount,SCTAB * pNewTabs,ScBaseCell ** ppOldData,sal_Bool * pHasForm,sal_uLong * pOldForm,const String & rNewStr,EditTextObject * pObj)172cdf0e10cSrcweir ScUndoEnterData::ScUndoEnterData( ScDocShell* pNewDocShell,
173cdf0e10cSrcweir SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab,
174cdf0e10cSrcweir SCTAB nNewCount, SCTAB* pNewTabs, ScBaseCell** ppOldData,
175cdf0e10cSrcweir sal_Bool* pHasForm, sal_uLong* pOldForm,
176cdf0e10cSrcweir const String& rNewStr, EditTextObject* pObj ) :
177cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ),
178cdf0e10cSrcweir aNewString( rNewStr ),
179cdf0e10cSrcweir pTabs( pNewTabs ),
180cdf0e10cSrcweir ppOldCells( ppOldData ),
181cdf0e10cSrcweir pHasFormat( pHasForm ),
182cdf0e10cSrcweir pOldFormats( pOldForm ),
183cdf0e10cSrcweir pNewEditData( pObj ),
184cdf0e10cSrcweir nCol( nNewCol ),
185cdf0e10cSrcweir nRow( nNewRow ),
186cdf0e10cSrcweir nTab( nNewTab ),
187cdf0e10cSrcweir nCount( nNewCount )
188cdf0e10cSrcweir {
189cdf0e10cSrcweir SetChangeTrack();
190cdf0e10cSrcweir }
191cdf0e10cSrcweir
~ScUndoEnterData()192cdf0e10cSrcweir __EXPORT ScUndoEnterData::~ScUndoEnterData()
193cdf0e10cSrcweir {
194cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++)
195cdf0e10cSrcweir if (ppOldCells[i])
196cdf0e10cSrcweir ppOldCells[i]->Delete();
197cdf0e10cSrcweir delete[] ppOldCells;
198cdf0e10cSrcweir
199cdf0e10cSrcweir delete[] pHasFormat;
200cdf0e10cSrcweir delete[] pOldFormats;
201cdf0e10cSrcweir delete[] pTabs;
202cdf0e10cSrcweir
203cdf0e10cSrcweir delete pNewEditData;
204cdf0e10cSrcweir }
205cdf0e10cSrcweir
GetComment() const206cdf0e10cSrcweir String __EXPORT ScUndoEnterData::GetComment() const
207cdf0e10cSrcweir {
208cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_ENTERDATA ); // "Eingabe"
209cdf0e10cSrcweir }
210cdf0e10cSrcweir
DoChange() const211cdf0e10cSrcweir void ScUndoEnterData::DoChange() const
212cdf0e10cSrcweir {
213cdf0e10cSrcweir // Zeilenhoehe anpassen
214cdf0e10cSrcweir //! nur wenn noetig (alte oder neue EditZelle, oder Attribute) ??
215cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++)
216cdf0e10cSrcweir pDocShell->AdjustRowHeight( nRow, nRow, pTabs[i] );
217cdf0e10cSrcweir
218cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
219cdf0e10cSrcweir if (pViewShell)
220cdf0e10cSrcweir {
221cdf0e10cSrcweir pViewShell->SetTabNo( nTab );
222cdf0e10cSrcweir pViewShell->MoveCursorAbs( nCol, nRow, SC_FOLLOW_JUMP, sal_False, sal_False );
223cdf0e10cSrcweir }
224cdf0e10cSrcweir
225cdf0e10cSrcweir pDocShell->PostDataChanged();
226cdf0e10cSrcweir }
227cdf0e10cSrcweir
SetChangeTrack()228cdf0e10cSrcweir void ScUndoEnterData::SetChangeTrack()
229cdf0e10cSrcweir {
230cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack();
231cdf0e10cSrcweir if ( pChangeTrack )
232cdf0e10cSrcweir {
233cdf0e10cSrcweir nEndChangeAction = pChangeTrack->GetActionMax() + 1;
234cdf0e10cSrcweir ScAddress aPos( nCol, nRow, nTab );
235cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++)
236cdf0e10cSrcweir {
237cdf0e10cSrcweir aPos.SetTab( pTabs[i] );
238cdf0e10cSrcweir sal_uLong nFormat = 0;
239cdf0e10cSrcweir if ( pHasFormat && pOldFormats )
240cdf0e10cSrcweir {
241cdf0e10cSrcweir if ( pHasFormat[i] )
242cdf0e10cSrcweir nFormat = pOldFormats[i];
243cdf0e10cSrcweir }
244cdf0e10cSrcweir pChangeTrack->AppendContent( aPos, ppOldCells[i], nFormat );
245cdf0e10cSrcweir }
246cdf0e10cSrcweir if ( nEndChangeAction > pChangeTrack->GetActionMax() )
247cdf0e10cSrcweir nEndChangeAction = 0; // nichts appended
248cdf0e10cSrcweir }
249cdf0e10cSrcweir else
250cdf0e10cSrcweir nEndChangeAction = 0;
251cdf0e10cSrcweir }
252cdf0e10cSrcweir
Undo()253cdf0e10cSrcweir void __EXPORT ScUndoEnterData::Undo()
254cdf0e10cSrcweir {
255cdf0e10cSrcweir BeginUndo();
256cdf0e10cSrcweir
257cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
258cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++)
259cdf0e10cSrcweir {
260cdf0e10cSrcweir ScBaseCell* pNewCell = ppOldCells[i] ? ppOldCells[i]->CloneWithoutNote( *pDoc, SC_CLONECELL_STARTLISTENING ) : 0;
261cdf0e10cSrcweir pDoc->PutCell( nCol, nRow, pTabs[i], pNewCell );
262cdf0e10cSrcweir
263cdf0e10cSrcweir if (pHasFormat && pOldFormats)
264cdf0e10cSrcweir {
265cdf0e10cSrcweir if ( pHasFormat[i] )
266cdf0e10cSrcweir pDoc->ApplyAttr( nCol, nRow, pTabs[i],
267cdf0e10cSrcweir SfxUInt32Item( ATTR_VALUE_FORMAT, pOldFormats[i] ) );
268cdf0e10cSrcweir else
269cdf0e10cSrcweir {
270cdf0e10cSrcweir ScPatternAttr aPattern( *pDoc->GetPattern( nCol, nRow, pTabs[i] ) );
271cdf0e10cSrcweir aPattern.GetItemSet().ClearItem( ATTR_VALUE_FORMAT );
272cdf0e10cSrcweir pDoc->SetPattern( nCol, nRow, pTabs[i], aPattern, sal_True );
273cdf0e10cSrcweir }
274cdf0e10cSrcweir }
275cdf0e10cSrcweir pDocShell->PostPaintCell( nCol, nRow, pTabs[i] );
276cdf0e10cSrcweir }
277cdf0e10cSrcweir
278cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
279cdf0e10cSrcweir if ( pChangeTrack && nEndChangeAction >= sal::static_int_cast<sal_uLong>(nCount) )
280cdf0e10cSrcweir pChangeTrack->Undo( nEndChangeAction - nCount + 1, nEndChangeAction );
281cdf0e10cSrcweir
282cdf0e10cSrcweir DoChange();
283cdf0e10cSrcweir EndUndo();
284cdf0e10cSrcweir
285cdf0e10cSrcweir // #i97876# Spreadsheet data changes are not notified
286cdf0e10cSrcweir ScModelObj* pModelObj = ScModelObj::getImplementation( pDocShell->GetModel() );
287cdf0e10cSrcweir if ( pModelObj && pModelObj->HasChangesListeners() )
288cdf0e10cSrcweir {
289cdf0e10cSrcweir ScRangeList aChangeRanges;
290cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nCount; ++i )
291cdf0e10cSrcweir {
292cdf0e10cSrcweir aChangeRanges.Append( ScRange( nCol, nRow, pTabs[i] ) );
293cdf0e10cSrcweir }
294cdf0e10cSrcweir pModelObj->NotifyChanges( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cell-change" ) ), aChangeRanges );
295cdf0e10cSrcweir }
296cdf0e10cSrcweir }
297cdf0e10cSrcweir
Redo()298cdf0e10cSrcweir void __EXPORT ScUndoEnterData::Redo()
299cdf0e10cSrcweir {
300cdf0e10cSrcweir BeginRedo();
301cdf0e10cSrcweir
302cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
303cdf0e10cSrcweir for (sal_uInt16 i=0; i<nCount; i++)
304cdf0e10cSrcweir {
305cdf0e10cSrcweir if (pNewEditData)
306cdf0e10cSrcweir pDoc->PutCell( nCol, nRow, pTabs[i], new ScEditCell( pNewEditData,
307cdf0e10cSrcweir pDoc, NULL ) );
308cdf0e10cSrcweir else
309cdf0e10cSrcweir pDoc->SetString( nCol, nRow, pTabs[i], aNewString );
310cdf0e10cSrcweir pDocShell->PostPaintCell( nCol, nRow, pTabs[i] );
311cdf0e10cSrcweir }
312cdf0e10cSrcweir
313cdf0e10cSrcweir SetChangeTrack();
314cdf0e10cSrcweir
315cdf0e10cSrcweir DoChange();
316cdf0e10cSrcweir EndRedo();
317cdf0e10cSrcweir
318cdf0e10cSrcweir // #i97876# Spreadsheet data changes are not notified
319cdf0e10cSrcweir ScModelObj* pModelObj = ScModelObj::getImplementation( pDocShell->GetModel() );
320cdf0e10cSrcweir if ( pModelObj && pModelObj->HasChangesListeners() )
321cdf0e10cSrcweir {
322cdf0e10cSrcweir ScRangeList aChangeRanges;
323cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < nCount; ++i )
324cdf0e10cSrcweir {
325cdf0e10cSrcweir aChangeRanges.Append( ScRange( nCol, nRow, pTabs[i] ) );
326cdf0e10cSrcweir }
327cdf0e10cSrcweir pModelObj->NotifyChanges( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cell-change" ) ), aChangeRanges );
328cdf0e10cSrcweir }
329cdf0e10cSrcweir }
330cdf0e10cSrcweir
Repeat(SfxRepeatTarget & rTarget)331cdf0e10cSrcweir void __EXPORT ScUndoEnterData::Repeat(SfxRepeatTarget& rTarget)
332cdf0e10cSrcweir {
333cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget))
334cdf0e10cSrcweir {
335cdf0e10cSrcweir String aTemp = aNewString;
336cdf0e10cSrcweir ((ScTabViewTarget&)rTarget).GetViewShell()->EnterDataAtCursor( aTemp );
337cdf0e10cSrcweir }
338cdf0e10cSrcweir }
339cdf0e10cSrcweir
CanRepeat(SfxRepeatTarget & rTarget) const340cdf0e10cSrcweir sal_Bool __EXPORT ScUndoEnterData::CanRepeat(SfxRepeatTarget& rTarget) const
341cdf0e10cSrcweir {
342cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget));
343cdf0e10cSrcweir }
344cdf0e10cSrcweir
345cdf0e10cSrcweir
346cdf0e10cSrcweir // -----------------------------------------------------------------------
347cdf0e10cSrcweir //
348cdf0e10cSrcweir // Wert aendern
349cdf0e10cSrcweir //
350cdf0e10cSrcweir
ScUndoEnterValue(ScDocShell * pNewDocShell,const ScAddress & rNewPos,ScBaseCell * pUndoCell,double nVal,sal_Bool bHeight)351cdf0e10cSrcweir ScUndoEnterValue::ScUndoEnterValue( ScDocShell* pNewDocShell, const ScAddress& rNewPos,
352cdf0e10cSrcweir ScBaseCell* pUndoCell, double nVal, sal_Bool bHeight ) :
353cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ),
354cdf0e10cSrcweir aPos ( rNewPos ),
355cdf0e10cSrcweir pOldCell ( pUndoCell ),
356cdf0e10cSrcweir nValue ( nVal ),
357cdf0e10cSrcweir bNeedHeight ( bHeight )
358cdf0e10cSrcweir {
359cdf0e10cSrcweir SetChangeTrack();
360cdf0e10cSrcweir }
361cdf0e10cSrcweir
~ScUndoEnterValue()362cdf0e10cSrcweir __EXPORT ScUndoEnterValue::~ScUndoEnterValue()
363cdf0e10cSrcweir {
364cdf0e10cSrcweir if (pOldCell)
365cdf0e10cSrcweir pOldCell->Delete();
366cdf0e10cSrcweir }
367cdf0e10cSrcweir
GetComment() const368cdf0e10cSrcweir String __EXPORT ScUndoEnterValue::GetComment() const
369cdf0e10cSrcweir {
370cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_ENTERDATA ); // "Eingabe"
371cdf0e10cSrcweir }
372cdf0e10cSrcweir
SetChangeTrack()373cdf0e10cSrcweir void ScUndoEnterValue::SetChangeTrack()
374cdf0e10cSrcweir {
375cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
376cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
377cdf0e10cSrcweir if ( pChangeTrack )
378cdf0e10cSrcweir {
379cdf0e10cSrcweir nEndChangeAction = pChangeTrack->GetActionMax() + 1;
380cdf0e10cSrcweir pChangeTrack->AppendContent( aPos, pOldCell );
381cdf0e10cSrcweir if ( nEndChangeAction > pChangeTrack->GetActionMax() )
382cdf0e10cSrcweir nEndChangeAction = 0; // nichts appended
383cdf0e10cSrcweir }
384cdf0e10cSrcweir else
385cdf0e10cSrcweir nEndChangeAction = 0;
386cdf0e10cSrcweir }
387cdf0e10cSrcweir
Undo()388cdf0e10cSrcweir void __EXPORT ScUndoEnterValue::Undo()
389cdf0e10cSrcweir {
390cdf0e10cSrcweir BeginUndo();
391cdf0e10cSrcweir
392cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
393cdf0e10cSrcweir ScBaseCell* pNewCell = pOldCell ? pOldCell->CloneWithoutNote( *pDoc, SC_CLONECELL_STARTLISTENING ) : 0;
394cdf0e10cSrcweir
395cdf0e10cSrcweir pDoc->PutCell( aPos, pNewCell );
396cdf0e10cSrcweir
397cdf0e10cSrcweir pDocShell->PostPaintCell( aPos );
398cdf0e10cSrcweir
399cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
400cdf0e10cSrcweir if ( pChangeTrack )
401cdf0e10cSrcweir pChangeTrack->Undo( nEndChangeAction, nEndChangeAction );
402cdf0e10cSrcweir
403cdf0e10cSrcweir EndUndo();
404cdf0e10cSrcweir }
405cdf0e10cSrcweir
Redo()406cdf0e10cSrcweir void __EXPORT ScUndoEnterValue::Redo()
407cdf0e10cSrcweir {
408cdf0e10cSrcweir BeginRedo();
409cdf0e10cSrcweir
410cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
411cdf0e10cSrcweir pDoc->SetValue( aPos.Col(), aPos.Row(), aPos.Tab(), nValue );
412cdf0e10cSrcweir pDocShell->PostPaintCell( aPos );
413cdf0e10cSrcweir
414cdf0e10cSrcweir SetChangeTrack();
415cdf0e10cSrcweir
416cdf0e10cSrcweir EndRedo();
417cdf0e10cSrcweir }
418cdf0e10cSrcweir
Repeat(SfxRepeatTarget &)419cdf0e10cSrcweir void __EXPORT ScUndoEnterValue::Repeat(SfxRepeatTarget& /* rTarget */)
420cdf0e10cSrcweir {
421cdf0e10cSrcweir // gippsnich
422cdf0e10cSrcweir }
423cdf0e10cSrcweir
CanRepeat(SfxRepeatTarget &) const424cdf0e10cSrcweir sal_Bool __EXPORT ScUndoEnterValue::CanRepeat(SfxRepeatTarget& /* rTarget */) const
425cdf0e10cSrcweir {
426cdf0e10cSrcweir return sal_False;
427cdf0e10cSrcweir }
428cdf0e10cSrcweir
429cdf0e10cSrcweir
430cdf0e10cSrcweir // -----------------------------------------------------------------------
431cdf0e10cSrcweir //
432cdf0e10cSrcweir // Beliebige Zelle eingeben
433cdf0e10cSrcweir //
434cdf0e10cSrcweir
ScUndoPutCell(ScDocShell * pNewDocShell,const ScAddress & rNewPos,ScBaseCell * pUndoCell,ScBaseCell * pRedoCell,sal_Bool bHeight)435cdf0e10cSrcweir ScUndoPutCell::ScUndoPutCell( ScDocShell* pNewDocShell, const ScAddress& rNewPos,
436cdf0e10cSrcweir ScBaseCell* pUndoCell, ScBaseCell* pRedoCell, sal_Bool bHeight ) :
437cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ),
438cdf0e10cSrcweir aPos ( rNewPos ),
439cdf0e10cSrcweir pOldCell ( pUndoCell ),
440cdf0e10cSrcweir pEnteredCell( pRedoCell ),
441cdf0e10cSrcweir bNeedHeight ( bHeight )
442cdf0e10cSrcweir {
443cdf0e10cSrcweir SetChangeTrack();
444cdf0e10cSrcweir }
445cdf0e10cSrcweir
~ScUndoPutCell()446cdf0e10cSrcweir __EXPORT ScUndoPutCell::~ScUndoPutCell()
447cdf0e10cSrcweir {
448cdf0e10cSrcweir if (pOldCell)
449cdf0e10cSrcweir pOldCell->Delete();
450cdf0e10cSrcweir if (pEnteredCell)
451cdf0e10cSrcweir pEnteredCell->Delete();
452cdf0e10cSrcweir }
453cdf0e10cSrcweir
GetComment() const454cdf0e10cSrcweir String __EXPORT ScUndoPutCell::GetComment() const
455cdf0e10cSrcweir {
456cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_ENTERDATA ); // "Eingabe"
457cdf0e10cSrcweir }
458cdf0e10cSrcweir
SetChangeTrack()459cdf0e10cSrcweir void ScUndoPutCell::SetChangeTrack()
460cdf0e10cSrcweir {
461cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
462cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
463cdf0e10cSrcweir if ( pChangeTrack )
464cdf0e10cSrcweir {
465cdf0e10cSrcweir nEndChangeAction = pChangeTrack->GetActionMax() + 1;
466cdf0e10cSrcweir pChangeTrack->AppendContent( aPos, pOldCell );
467cdf0e10cSrcweir if ( nEndChangeAction > pChangeTrack->GetActionMax() )
468cdf0e10cSrcweir nEndChangeAction = 0; // nichts appended
469cdf0e10cSrcweir }
470cdf0e10cSrcweir else
471cdf0e10cSrcweir nEndChangeAction = 0;
472cdf0e10cSrcweir }
473cdf0e10cSrcweir
Undo()474cdf0e10cSrcweir void __EXPORT ScUndoPutCell::Undo()
475cdf0e10cSrcweir {
476cdf0e10cSrcweir BeginUndo();
477cdf0e10cSrcweir
478cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
479cdf0e10cSrcweir ScBaseCell* pNewCell = pOldCell ? pOldCell->CloneWithoutNote( *pDoc, aPos, SC_CLONECELL_STARTLISTENING ) : 0;
480cdf0e10cSrcweir
481cdf0e10cSrcweir pDoc->PutCell( aPos.Col(), aPos.Row(), aPos.Tab(), pNewCell );
482cdf0e10cSrcweir
483cdf0e10cSrcweir pDocShell->PostPaintCell( aPos );
484cdf0e10cSrcweir
485cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
486cdf0e10cSrcweir if ( pChangeTrack )
487cdf0e10cSrcweir pChangeTrack->Undo( nEndChangeAction, nEndChangeAction );
488cdf0e10cSrcweir
489cdf0e10cSrcweir EndUndo();
490cdf0e10cSrcweir }
491cdf0e10cSrcweir
Redo()492cdf0e10cSrcweir void __EXPORT ScUndoPutCell::Redo()
493cdf0e10cSrcweir {
494cdf0e10cSrcweir BeginRedo();
495cdf0e10cSrcweir
496cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
497cdf0e10cSrcweir ScBaseCell* pNewCell = pEnteredCell ? pEnteredCell->CloneWithoutNote( *pDoc, aPos, SC_CLONECELL_STARTLISTENING ) : 0;
498cdf0e10cSrcweir
499cdf0e10cSrcweir pDoc->PutCell( aPos.Col(), aPos.Row(), aPos.Tab(), pNewCell );
500cdf0e10cSrcweir
501cdf0e10cSrcweir pDocShell->PostPaintCell( aPos );
502cdf0e10cSrcweir
503cdf0e10cSrcweir SetChangeTrack();
504cdf0e10cSrcweir
505cdf0e10cSrcweir EndRedo();
506cdf0e10cSrcweir }
507cdf0e10cSrcweir
Repeat(SfxRepeatTarget &)508cdf0e10cSrcweir void __EXPORT ScUndoPutCell::Repeat(SfxRepeatTarget& /* rTarget */)
509cdf0e10cSrcweir {
510cdf0e10cSrcweir // gippsnich
511cdf0e10cSrcweir }
512cdf0e10cSrcweir
CanRepeat(SfxRepeatTarget &) const513cdf0e10cSrcweir sal_Bool __EXPORT ScUndoPutCell::CanRepeat(SfxRepeatTarget& /* rTarget */) const
514cdf0e10cSrcweir {
515cdf0e10cSrcweir return sal_False;
516cdf0e10cSrcweir }
517cdf0e10cSrcweir
518cdf0e10cSrcweir
519cdf0e10cSrcweir // -----------------------------------------------------------------------
520cdf0e10cSrcweir //
521cdf0e10cSrcweir // Seitenumbrueche
522cdf0e10cSrcweir //
523cdf0e10cSrcweir
ScUndoPageBreak(ScDocShell * pNewDocShell,SCCOL nNewCol,SCROW nNewRow,SCTAB nNewTab,sal_Bool bNewColumn,sal_Bool bNewInsert)524cdf0e10cSrcweir ScUndoPageBreak::ScUndoPageBreak( ScDocShell* pNewDocShell,
525cdf0e10cSrcweir SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab,
526cdf0e10cSrcweir sal_Bool bNewColumn, sal_Bool bNewInsert ) :
527cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ),
528cdf0e10cSrcweir nCol( nNewCol ),
529cdf0e10cSrcweir nRow( nNewRow ),
530cdf0e10cSrcweir nTab( nNewTab ),
531cdf0e10cSrcweir bColumn( bNewColumn ),
532cdf0e10cSrcweir bInsert( bNewInsert )
533cdf0e10cSrcweir {
534cdf0e10cSrcweir }
535cdf0e10cSrcweir
~ScUndoPageBreak()536cdf0e10cSrcweir __EXPORT ScUndoPageBreak::~ScUndoPageBreak()
537cdf0e10cSrcweir {
538cdf0e10cSrcweir }
539cdf0e10cSrcweir
GetComment() const540cdf0e10cSrcweir String __EXPORT ScUndoPageBreak::GetComment() const
541cdf0e10cSrcweir {
542cdf0e10cSrcweir //"Spaltenumbruch" | "Zeilenumbruch" "einfuegen" | "loeschen"
543cdf0e10cSrcweir return String ( bColumn ?
544cdf0e10cSrcweir ( bInsert ?
545cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_INSCOLBREAK ) :
546cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_DELCOLBREAK )
547cdf0e10cSrcweir ) :
548cdf0e10cSrcweir ( bInsert ?
549cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_INSROWBREAK ) :
550cdf0e10cSrcweir ScGlobal::GetRscString( STR_UNDO_DELROWBREAK )
551cdf0e10cSrcweir ) );
552cdf0e10cSrcweir }
553cdf0e10cSrcweir
DoChange(sal_Bool bInsertP) const554cdf0e10cSrcweir void ScUndoPageBreak::DoChange( sal_Bool bInsertP ) const
555cdf0e10cSrcweir {
556cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
557cdf0e10cSrcweir
558cdf0e10cSrcweir if (pViewShell)
559cdf0e10cSrcweir {
560cdf0e10cSrcweir pViewShell->SetTabNo( nTab );
561cdf0e10cSrcweir pViewShell->MoveCursorAbs( nCol, nRow, SC_FOLLOW_JUMP, sal_False, sal_False );
562cdf0e10cSrcweir
563cdf0e10cSrcweir if (bInsertP)
564cdf0e10cSrcweir pViewShell->InsertPageBreak(bColumn, sal_False);
565cdf0e10cSrcweir else
566cdf0e10cSrcweir pViewShell->DeletePageBreak(bColumn, sal_False);
567cdf0e10cSrcweir
568cdf0e10cSrcweir pDocShell->GetDocument()->InvalidatePageBreaks(nTab);
569cdf0e10cSrcweir }
570cdf0e10cSrcweir }
571cdf0e10cSrcweir
Undo()572cdf0e10cSrcweir void __EXPORT ScUndoPageBreak::Undo()
573cdf0e10cSrcweir {
574cdf0e10cSrcweir BeginUndo();
575cdf0e10cSrcweir DoChange(!bInsert);
576cdf0e10cSrcweir EndUndo();
577cdf0e10cSrcweir }
578cdf0e10cSrcweir
Redo()579cdf0e10cSrcweir void __EXPORT ScUndoPageBreak::Redo()
580cdf0e10cSrcweir {
581cdf0e10cSrcweir BeginRedo();
582cdf0e10cSrcweir DoChange(bInsert);
583cdf0e10cSrcweir EndRedo();
584cdf0e10cSrcweir }
585cdf0e10cSrcweir
Repeat(SfxRepeatTarget & rTarget)586cdf0e10cSrcweir void __EXPORT ScUndoPageBreak::Repeat(SfxRepeatTarget& rTarget)
587cdf0e10cSrcweir {
588cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget))
589cdf0e10cSrcweir {
590cdf0e10cSrcweir ScTabViewShell& rViewShell = *((ScTabViewTarget&)rTarget).GetViewShell();
591cdf0e10cSrcweir
592cdf0e10cSrcweir if (bInsert)
593cdf0e10cSrcweir rViewShell.InsertPageBreak(bColumn, sal_True);
594cdf0e10cSrcweir else
595cdf0e10cSrcweir rViewShell.DeletePageBreak(bColumn, sal_True);
596cdf0e10cSrcweir }
597cdf0e10cSrcweir }
598cdf0e10cSrcweir
CanRepeat(SfxRepeatTarget & rTarget) const599cdf0e10cSrcweir sal_Bool __EXPORT ScUndoPageBreak::CanRepeat(SfxRepeatTarget& rTarget) const
600cdf0e10cSrcweir {
601cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget));
602cdf0e10cSrcweir }
603cdf0e10cSrcweir
604cdf0e10cSrcweir // -----------------------------------------------------------------------
605cdf0e10cSrcweir //
606cdf0e10cSrcweir // Druck-Skalierung
607cdf0e10cSrcweir //
608cdf0e10cSrcweir
ScUndoPrintZoom(ScDocShell * pNewDocShell,SCTAB nT,sal_uInt16 nOS,sal_uInt16 nOP,sal_uInt16 nNS,sal_uInt16 nNP)609cdf0e10cSrcweir ScUndoPrintZoom::ScUndoPrintZoom( ScDocShell* pNewDocShell,
610cdf0e10cSrcweir SCTAB nT, sal_uInt16 nOS, sal_uInt16 nOP, sal_uInt16 nNS, sal_uInt16 nNP ) :
611cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ),
612cdf0e10cSrcweir nTab( nT ),
613cdf0e10cSrcweir nOldScale( nOS ),
614cdf0e10cSrcweir nOldPages( nOP ),
615cdf0e10cSrcweir nNewScale( nNS ),
616cdf0e10cSrcweir nNewPages( nNP )
617cdf0e10cSrcweir {
618cdf0e10cSrcweir }
619cdf0e10cSrcweir
~ScUndoPrintZoom()620cdf0e10cSrcweir __EXPORT ScUndoPrintZoom::~ScUndoPrintZoom()
621cdf0e10cSrcweir {
622cdf0e10cSrcweir }
623cdf0e10cSrcweir
GetComment() const624cdf0e10cSrcweir String __EXPORT ScUndoPrintZoom::GetComment() const
625cdf0e10cSrcweir {
626cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_PRINTSCALE );
627cdf0e10cSrcweir }
628cdf0e10cSrcweir
DoChange(sal_Bool bUndo)629cdf0e10cSrcweir void ScUndoPrintZoom::DoChange( sal_Bool bUndo )
630cdf0e10cSrcweir {
631cdf0e10cSrcweir sal_uInt16 nScale = bUndo ? nOldScale : nNewScale;
632cdf0e10cSrcweir sal_uInt16 nPages = bUndo ? nOldPages : nNewPages;
633cdf0e10cSrcweir
634cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
635cdf0e10cSrcweir String aStyleName = pDoc->GetPageStyle( nTab );
636cdf0e10cSrcweir ScStyleSheetPool* pStylePool = pDoc->GetStyleSheetPool();
637cdf0e10cSrcweir SfxStyleSheetBase* pStyleSheet = pStylePool->Find( aStyleName, SFX_STYLE_FAMILY_PAGE );
638cdf0e10cSrcweir DBG_ASSERT( pStyleSheet, "PageStyle not found" );
639cdf0e10cSrcweir if ( pStyleSheet )
640cdf0e10cSrcweir {
641cdf0e10cSrcweir SfxItemSet& rSet = pStyleSheet->GetItemSet();
642cdf0e10cSrcweir rSet.Put( SfxUInt16Item( ATTR_PAGE_SCALE, nScale ) );
643cdf0e10cSrcweir rSet.Put( SfxUInt16Item( ATTR_PAGE_SCALETOPAGES, nPages ) );
644cdf0e10cSrcweir
645cdf0e10cSrcweir ScPrintFunc aPrintFunc( pDocShell, pDocShell->GetPrinter(), nTab );
646cdf0e10cSrcweir aPrintFunc.UpdatePages();
647cdf0e10cSrcweir }
648cdf0e10cSrcweir }
649cdf0e10cSrcweir
Undo()650cdf0e10cSrcweir void __EXPORT ScUndoPrintZoom::Undo()
651cdf0e10cSrcweir {
652cdf0e10cSrcweir BeginUndo();
653cdf0e10cSrcweir DoChange(sal_True);
654cdf0e10cSrcweir EndUndo();
655cdf0e10cSrcweir }
656cdf0e10cSrcweir
Redo()657cdf0e10cSrcweir void __EXPORT ScUndoPrintZoom::Redo()
658cdf0e10cSrcweir {
659cdf0e10cSrcweir BeginRedo();
660cdf0e10cSrcweir DoChange(sal_False);
661cdf0e10cSrcweir EndRedo();
662cdf0e10cSrcweir }
663cdf0e10cSrcweir
Repeat(SfxRepeatTarget & rTarget)664cdf0e10cSrcweir void __EXPORT ScUndoPrintZoom::Repeat(SfxRepeatTarget& rTarget)
665cdf0e10cSrcweir {
666cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget))
667cdf0e10cSrcweir {
668cdf0e10cSrcweir ScTabViewShell& rViewShell = *((ScTabViewTarget&)rTarget).GetViewShell();
669cdf0e10cSrcweir ScViewData* pViewData = rViewShell.GetViewData();
670cdf0e10cSrcweir pViewData->GetDocShell()->SetPrintZoom( pViewData->GetTabNo(), nNewScale, nNewPages );
671cdf0e10cSrcweir }
672cdf0e10cSrcweir }
673cdf0e10cSrcweir
CanRepeat(SfxRepeatTarget & rTarget) const674cdf0e10cSrcweir sal_Bool __EXPORT ScUndoPrintZoom::CanRepeat(SfxRepeatTarget& rTarget) const
675cdf0e10cSrcweir {
676cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget));
677cdf0e10cSrcweir }
678cdf0e10cSrcweir
679cdf0e10cSrcweir
680cdf0e10cSrcweir // -----------------------------------------------------------------------
681cdf0e10cSrcweir //
682cdf0e10cSrcweir // Thesaurus
683cdf0e10cSrcweir //
684cdf0e10cSrcweir
ScUndoThesaurus(ScDocShell * pNewDocShell,SCCOL nNewCol,SCROW nNewRow,SCTAB nNewTab,const String & rNewUndoStr,const EditTextObject * pUndoTObj,const String & rNewRedoStr,const EditTextObject * pRedoTObj)685cdf0e10cSrcweir ScUndoThesaurus::ScUndoThesaurus( ScDocShell* pNewDocShell,
686cdf0e10cSrcweir SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab,
687cdf0e10cSrcweir const String& rNewUndoStr, const EditTextObject* pUndoTObj,
688cdf0e10cSrcweir const String& rNewRedoStr, const EditTextObject* pRedoTObj) :
689cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ),
690cdf0e10cSrcweir nCol( nNewCol ),
691cdf0e10cSrcweir nRow( nNewRow ),
692cdf0e10cSrcweir nTab( nNewTab ),
693cdf0e10cSrcweir aUndoStr( rNewUndoStr ),
694cdf0e10cSrcweir aRedoStr( rNewRedoStr )
695cdf0e10cSrcweir {
696cdf0e10cSrcweir pUndoTObject = (pUndoTObj) ? pUndoTObj->Clone() : NULL;
697cdf0e10cSrcweir pRedoTObject = (pRedoTObj) ? pRedoTObj->Clone() : NULL;
698cdf0e10cSrcweir
699cdf0e10cSrcweir ScBaseCell* pOldCell;
700cdf0e10cSrcweir if ( pUndoTObject )
701cdf0e10cSrcweir pOldCell = new ScEditCell( pUndoTObject, pDocShell->GetDocument(), NULL );
702cdf0e10cSrcweir else
703cdf0e10cSrcweir pOldCell = new ScStringCell( aUndoStr );
704cdf0e10cSrcweir SetChangeTrack( pOldCell );
705cdf0e10cSrcweir pOldCell->Delete();
706cdf0e10cSrcweir }
707cdf0e10cSrcweir
~ScUndoThesaurus()708cdf0e10cSrcweir __EXPORT ScUndoThesaurus::~ScUndoThesaurus()
709cdf0e10cSrcweir {
710cdf0e10cSrcweir delete pUndoTObject;
711cdf0e10cSrcweir delete pRedoTObject;
712cdf0e10cSrcweir }
713cdf0e10cSrcweir
GetComment() const714cdf0e10cSrcweir String __EXPORT ScUndoThesaurus::GetComment() const
715cdf0e10cSrcweir {
716cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_THESAURUS ); // "Thesaurus"
717cdf0e10cSrcweir }
718cdf0e10cSrcweir
SetChangeTrack(ScBaseCell * pOldCell)719cdf0e10cSrcweir void ScUndoThesaurus::SetChangeTrack( ScBaseCell* pOldCell )
720cdf0e10cSrcweir {
721cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack();
722cdf0e10cSrcweir if ( pChangeTrack )
723cdf0e10cSrcweir {
724cdf0e10cSrcweir nEndChangeAction = pChangeTrack->GetActionMax() + 1;
725cdf0e10cSrcweir pChangeTrack->AppendContent( ScAddress( nCol, nRow, nTab ), pOldCell );
726cdf0e10cSrcweir if ( nEndChangeAction > pChangeTrack->GetActionMax() )
727cdf0e10cSrcweir nEndChangeAction = 0; // nichts appended
728cdf0e10cSrcweir }
729cdf0e10cSrcweir else
730cdf0e10cSrcweir nEndChangeAction = 0;
731cdf0e10cSrcweir }
732cdf0e10cSrcweir
DoChange(sal_Bool bUndo,const String & rStr,const EditTextObject * pTObj)733cdf0e10cSrcweir void __EXPORT ScUndoThesaurus::DoChange( sal_Bool bUndo, const String& rStr,
734cdf0e10cSrcweir const EditTextObject* pTObj )
735cdf0e10cSrcweir {
736cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
737cdf0e10cSrcweir
738cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
739cdf0e10cSrcweir if (pViewShell)
740cdf0e10cSrcweir {
741cdf0e10cSrcweir pViewShell->SetTabNo( nTab );
742cdf0e10cSrcweir pViewShell->MoveCursorAbs( nCol, nRow, SC_FOLLOW_JUMP, sal_False, sal_False );
743cdf0e10cSrcweir }
744cdf0e10cSrcweir
745cdf0e10cSrcweir if (pTObj)
746cdf0e10cSrcweir {
747cdf0e10cSrcweir ScBaseCell* pCell;
748cdf0e10cSrcweir pDoc->GetCell( nCol, nRow, nTab, pCell );
749cdf0e10cSrcweir if (pCell)
750cdf0e10cSrcweir {
751cdf0e10cSrcweir if (pCell->GetCellType() == CELLTYPE_EDIT )
752cdf0e10cSrcweir {
753cdf0e10cSrcweir ScEditCell* pNewCell = new ScEditCell( pTObj, pDoc, NULL );
754cdf0e10cSrcweir pDoc->PutCell( nCol, nRow, nTab, pNewCell );
755cdf0e10cSrcweir if ( !bUndo )
756cdf0e10cSrcweir SetChangeTrack( pCell );
757cdf0e10cSrcweir }
758cdf0e10cSrcweir else
759cdf0e10cSrcweir {
760cdf0e10cSrcweir DBG_ERROR("Nicht CELLTYPE_EDIT bei Un/RedoThesaurus");
761cdf0e10cSrcweir }
762cdf0e10cSrcweir }
763cdf0e10cSrcweir }
764cdf0e10cSrcweir else
765cdf0e10cSrcweir {
766cdf0e10cSrcweir ScBaseCell* pCell = NULL;
767cdf0e10cSrcweir if ( !bUndo )
768cdf0e10cSrcweir pDoc->GetCell( nCol, nRow, nTab, pCell );
769cdf0e10cSrcweir pDoc->SetString( nCol, nRow, nTab, rStr );
770cdf0e10cSrcweir if ( !bUndo )
771cdf0e10cSrcweir SetChangeTrack( pCell );
772cdf0e10cSrcweir }
773cdf0e10cSrcweir
774cdf0e10cSrcweir pDocShell->PostPaintCell( nCol, nRow, nTab );
775cdf0e10cSrcweir }
776cdf0e10cSrcweir
Undo()777cdf0e10cSrcweir void __EXPORT ScUndoThesaurus::Undo()
778cdf0e10cSrcweir {
779cdf0e10cSrcweir BeginUndo();
780cdf0e10cSrcweir DoChange( sal_True, aUndoStr, pUndoTObject );
781cdf0e10cSrcweir ScChangeTrack* pChangeTrack = pDocShell->GetDocument()->GetChangeTrack();
782cdf0e10cSrcweir if ( pChangeTrack )
783cdf0e10cSrcweir pChangeTrack->Undo( nEndChangeAction, nEndChangeAction );
784cdf0e10cSrcweir EndUndo();
785cdf0e10cSrcweir }
786cdf0e10cSrcweir
Redo()787cdf0e10cSrcweir void __EXPORT ScUndoThesaurus::Redo()
788cdf0e10cSrcweir {
789cdf0e10cSrcweir BeginRedo();
790cdf0e10cSrcweir DoChange( sal_False, aRedoStr, pRedoTObject );
791cdf0e10cSrcweir EndRedo();
792cdf0e10cSrcweir }
793cdf0e10cSrcweir
Repeat(SfxRepeatTarget & rTarget)794cdf0e10cSrcweir void __EXPORT ScUndoThesaurus::Repeat(SfxRepeatTarget& rTarget)
795cdf0e10cSrcweir {
796cdf0e10cSrcweir if (rTarget.ISA(ScTabViewTarget))
797cdf0e10cSrcweir ((ScTabViewTarget&)rTarget).GetViewShell()->DoThesaurus( sal_True );
798cdf0e10cSrcweir }
799cdf0e10cSrcweir
CanRepeat(SfxRepeatTarget & rTarget) const800cdf0e10cSrcweir sal_Bool __EXPORT ScUndoThesaurus::CanRepeat(SfxRepeatTarget& rTarget) const
801cdf0e10cSrcweir {
802cdf0e10cSrcweir return (rTarget.ISA(ScTabViewTarget));
803cdf0e10cSrcweir }
804cdf0e10cSrcweir
805cdf0e10cSrcweir
806cdf0e10cSrcweir // ============================================================================
807cdf0e10cSrcweir
ScUndoReplaceNote(ScDocShell & rDocShell,const ScAddress & rPos,const ScNoteData & rNoteData,bool bInsert,SdrUndoAction * pDrawUndo)808cdf0e10cSrcweir ScUndoReplaceNote::ScUndoReplaceNote( ScDocShell& rDocShell, const ScAddress& rPos,
809cdf0e10cSrcweir const ScNoteData& rNoteData, bool bInsert, SdrUndoAction* pDrawUndo ) :
810cdf0e10cSrcweir ScSimpleUndo( &rDocShell ),
811cdf0e10cSrcweir maPos( rPos ),
812cdf0e10cSrcweir mpDrawUndo( pDrawUndo )
813cdf0e10cSrcweir {
814cdf0e10cSrcweir DBG_ASSERT( rNoteData.mpCaption, "ScUndoReplaceNote::ScUndoReplaceNote - missing note caption" );
815cdf0e10cSrcweir (bInsert ? maNewData : maOldData) = rNoteData;
816cdf0e10cSrcweir }
817cdf0e10cSrcweir
ScUndoReplaceNote(ScDocShell & rDocShell,const ScAddress & rPos,const ScNoteData & rOldData,const ScNoteData & rNewData,SdrUndoAction * pDrawUndo)818cdf0e10cSrcweir ScUndoReplaceNote::ScUndoReplaceNote( ScDocShell& rDocShell, const ScAddress& rPos,
819cdf0e10cSrcweir const ScNoteData& rOldData, const ScNoteData& rNewData, SdrUndoAction* pDrawUndo ) :
820cdf0e10cSrcweir ScSimpleUndo( &rDocShell ),
821cdf0e10cSrcweir maPos( rPos ),
822cdf0e10cSrcweir maOldData( rOldData ),
823cdf0e10cSrcweir maNewData( rNewData ),
824cdf0e10cSrcweir mpDrawUndo( pDrawUndo )
825cdf0e10cSrcweir {
826cdf0e10cSrcweir DBG_ASSERT( maOldData.mpCaption || maNewData.mpCaption, "ScUndoReplaceNote::ScUndoReplaceNote - missing note captions" );
827cdf0e10cSrcweir DBG_ASSERT( !maOldData.mxInitData.get() && !maNewData.mxInitData.get(), "ScUndoReplaceNote::ScUndoReplaceNote - unexpected unitialized note" );
828cdf0e10cSrcweir }
829cdf0e10cSrcweir
~ScUndoReplaceNote()830cdf0e10cSrcweir ScUndoReplaceNote::~ScUndoReplaceNote()
831cdf0e10cSrcweir {
832cdf0e10cSrcweir DeleteSdrUndoAction( mpDrawUndo );
833cdf0e10cSrcweir }
834cdf0e10cSrcweir
Undo()835cdf0e10cSrcweir void ScUndoReplaceNote::Undo()
836cdf0e10cSrcweir {
837cdf0e10cSrcweir BeginUndo();
838cdf0e10cSrcweir DoSdrUndoAction( mpDrawUndo, pDocShell->GetDocument() );
839cdf0e10cSrcweir /* Undo insert -> remove new note.
840cdf0e10cSrcweir Undo remove -> insert old note.
841cdf0e10cSrcweir Undo replace -> remove new note, insert old note. */
842cdf0e10cSrcweir DoRemoveNote( maNewData );
843cdf0e10cSrcweir DoInsertNote( maOldData );
844cdf0e10cSrcweir pDocShell->PostPaintCell( maPos );
845cdf0e10cSrcweir EndUndo();
846cdf0e10cSrcweir }
847cdf0e10cSrcweir
Redo()848cdf0e10cSrcweir void ScUndoReplaceNote::Redo()
849cdf0e10cSrcweir {
850cdf0e10cSrcweir BeginRedo();
851cdf0e10cSrcweir RedoSdrUndoAction( mpDrawUndo );
852cdf0e10cSrcweir /* Redo insert -> insert new note.
853cdf0e10cSrcweir Redo remove -> remove old note.
854cdf0e10cSrcweir Redo replace -> remove old note, insert new note. */
855cdf0e10cSrcweir DoRemoveNote( maOldData );
856cdf0e10cSrcweir DoInsertNote( maNewData );
857cdf0e10cSrcweir pDocShell->PostPaintCell( maPos );
858cdf0e10cSrcweir EndRedo();
859cdf0e10cSrcweir }
860cdf0e10cSrcweir
Repeat(SfxRepeatTarget &)861cdf0e10cSrcweir void ScUndoReplaceNote::Repeat( SfxRepeatTarget& /*rTarget*/ )
862cdf0e10cSrcweir {
863cdf0e10cSrcweir }
864cdf0e10cSrcweir
CanRepeat(SfxRepeatTarget &) const865cdf0e10cSrcweir sal_Bool ScUndoReplaceNote::CanRepeat( SfxRepeatTarget& /*rTarget*/ ) const
866cdf0e10cSrcweir {
867cdf0e10cSrcweir return sal_False;
868cdf0e10cSrcweir }
869cdf0e10cSrcweir
GetComment() const870cdf0e10cSrcweir String ScUndoReplaceNote::GetComment() const
871cdf0e10cSrcweir {
872cdf0e10cSrcweir return ScGlobal::GetRscString( maNewData.mpCaption ?
873cdf0e10cSrcweir (maOldData.mpCaption ? STR_UNDO_EDITNOTE : STR_UNDO_INSERTNOTE) : STR_UNDO_DELETENOTE );
874cdf0e10cSrcweir }
875cdf0e10cSrcweir
DoInsertNote(const ScNoteData & rNoteData)876cdf0e10cSrcweir void ScUndoReplaceNote::DoInsertNote( const ScNoteData& rNoteData )
877cdf0e10cSrcweir {
878cdf0e10cSrcweir if( rNoteData.mpCaption )
879cdf0e10cSrcweir {
880cdf0e10cSrcweir ScDocument& rDoc = *pDocShell->GetDocument();
881cdf0e10cSrcweir DBG_ASSERT( !rDoc.GetNote( maPos ), "ScUndoReplaceNote::DoInsertNote - unexpected cell note" );
882cdf0e10cSrcweir ScPostIt* pNote = new ScPostIt( rDoc, maPos, rNoteData, false );
883cdf0e10cSrcweir rDoc.TakeNote( maPos, pNote );
884cdf0e10cSrcweir }
885cdf0e10cSrcweir }
886cdf0e10cSrcweir
DoRemoveNote(const ScNoteData & rNoteData)887cdf0e10cSrcweir void ScUndoReplaceNote::DoRemoveNote( const ScNoteData& rNoteData )
888cdf0e10cSrcweir {
889cdf0e10cSrcweir if( rNoteData.mpCaption )
890cdf0e10cSrcweir {
891cdf0e10cSrcweir ScDocument& rDoc = *pDocShell->GetDocument();
892cdf0e10cSrcweir DBG_ASSERT( rDoc.GetNote( maPos ), "ScUndoReplaceNote::DoRemoveNote - missing cell note" );
893cdf0e10cSrcweir if( ScPostIt* pNote = rDoc.ReleaseNote( maPos ) )
894cdf0e10cSrcweir {
895cdf0e10cSrcweir /* Forget pointer to caption object to suppress removing the
896cdf0e10cSrcweir caption object from the drawing layer while deleting pNote
897cdf0e10cSrcweir (removing the caption is done by a drawing undo action). */
898cdf0e10cSrcweir pNote->ForgetCaption();
899cdf0e10cSrcweir delete pNote;
900cdf0e10cSrcweir }
901cdf0e10cSrcweir }
902cdf0e10cSrcweir }
903cdf0e10cSrcweir
904cdf0e10cSrcweir // ============================================================================
905cdf0e10cSrcweir
ScUndoShowHideNote(ScDocShell & rDocShell,const ScAddress & rPos,bool bShow)906cdf0e10cSrcweir ScUndoShowHideNote::ScUndoShowHideNote( ScDocShell& rDocShell, const ScAddress& rPos, bool bShow ) :
907cdf0e10cSrcweir ScSimpleUndo( &rDocShell ),
908cdf0e10cSrcweir maPos( rPos ),
909cdf0e10cSrcweir mbShown( bShow )
910cdf0e10cSrcweir {
911cdf0e10cSrcweir }
912cdf0e10cSrcweir
~ScUndoShowHideNote()913cdf0e10cSrcweir ScUndoShowHideNote::~ScUndoShowHideNote()
914cdf0e10cSrcweir {
915cdf0e10cSrcweir }
916cdf0e10cSrcweir
Undo()917cdf0e10cSrcweir void ScUndoShowHideNote::Undo()
918cdf0e10cSrcweir {
919cdf0e10cSrcweir BeginUndo();
920cdf0e10cSrcweir if( ScPostIt* pNote = pDocShell->GetDocument()->GetNote( maPos ) )
921cdf0e10cSrcweir pNote->ShowCaption( maPos, !mbShown );
922cdf0e10cSrcweir EndUndo();
923cdf0e10cSrcweir }
924cdf0e10cSrcweir
Redo()925cdf0e10cSrcweir void ScUndoShowHideNote::Redo()
926cdf0e10cSrcweir {
927cdf0e10cSrcweir BeginRedo();
928cdf0e10cSrcweir if( ScPostIt* pNote = pDocShell->GetDocument()->GetNote( maPos ) )
929cdf0e10cSrcweir pNote->ShowCaption( maPos, mbShown );
930cdf0e10cSrcweir EndRedo();
931cdf0e10cSrcweir }
932cdf0e10cSrcweir
Repeat(SfxRepeatTarget &)933cdf0e10cSrcweir void ScUndoShowHideNote::Repeat( SfxRepeatTarget& /*rTarget*/ )
934cdf0e10cSrcweir {
935cdf0e10cSrcweir }
936cdf0e10cSrcweir
CanRepeat(SfxRepeatTarget &) const937cdf0e10cSrcweir sal_Bool ScUndoShowHideNote::CanRepeat( SfxRepeatTarget& /*rTarget*/ ) const
938cdf0e10cSrcweir {
939cdf0e10cSrcweir return sal_False;
940cdf0e10cSrcweir }
941cdf0e10cSrcweir
GetComment() const942cdf0e10cSrcweir String ScUndoShowHideNote::GetComment() const
943cdf0e10cSrcweir {
944cdf0e10cSrcweir return ScGlobal::GetRscString( mbShown ? STR_UNDO_SHOWNOTE : STR_UNDO_HIDENOTE );
945cdf0e10cSrcweir }
946cdf0e10cSrcweir
947cdf0e10cSrcweir // ============================================================================
948cdf0e10cSrcweir
949cdf0e10cSrcweir // -----------------------------------------------------------------------
950cdf0e10cSrcweir //
951cdf0e10cSrcweir // Detektiv
952cdf0e10cSrcweir //
953cdf0e10cSrcweir
ScUndoDetective(ScDocShell * pNewDocShell,SdrUndoAction * pDraw,const ScDetOpData * pOperation,ScDetOpList * pUndoList)954cdf0e10cSrcweir ScUndoDetective::ScUndoDetective( ScDocShell* pNewDocShell,
955cdf0e10cSrcweir SdrUndoAction* pDraw, const ScDetOpData* pOperation,
956cdf0e10cSrcweir ScDetOpList* pUndoList ) :
957cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ),
958cdf0e10cSrcweir pOldList ( pUndoList ),
959cdf0e10cSrcweir nAction ( 0 ),
960cdf0e10cSrcweir pDrawUndo ( pDraw )
961cdf0e10cSrcweir {
962cdf0e10cSrcweir bIsDelete = ( pOperation == NULL );
963cdf0e10cSrcweir if (!bIsDelete)
964cdf0e10cSrcweir {
965cdf0e10cSrcweir nAction = (sal_uInt16) pOperation->GetOperation();
966cdf0e10cSrcweir aPos = pOperation->GetPos();
967cdf0e10cSrcweir }
968cdf0e10cSrcweir }
969cdf0e10cSrcweir
~ScUndoDetective()970cdf0e10cSrcweir __EXPORT ScUndoDetective::~ScUndoDetective()
971cdf0e10cSrcweir {
972cdf0e10cSrcweir DeleteSdrUndoAction( pDrawUndo );
973cdf0e10cSrcweir delete pOldList;
974cdf0e10cSrcweir }
975cdf0e10cSrcweir
GetComment() const976cdf0e10cSrcweir String __EXPORT ScUndoDetective::GetComment() const
977cdf0e10cSrcweir {
978cdf0e10cSrcweir sal_uInt16 nId = STR_UNDO_DETDELALL;
979cdf0e10cSrcweir if ( !bIsDelete )
980cdf0e10cSrcweir switch ( (ScDetOpType) nAction )
981cdf0e10cSrcweir {
982cdf0e10cSrcweir case SCDETOP_ADDSUCC: nId = STR_UNDO_DETADDSUCC; break;
983cdf0e10cSrcweir case SCDETOP_DELSUCC: nId = STR_UNDO_DETDELSUCC; break;
984cdf0e10cSrcweir case SCDETOP_ADDPRED: nId = STR_UNDO_DETADDPRED; break;
985cdf0e10cSrcweir case SCDETOP_DELPRED: nId = STR_UNDO_DETDELPRED; break;
986cdf0e10cSrcweir case SCDETOP_ADDERROR: nId = STR_UNDO_DETADDERROR; break;
987cdf0e10cSrcweir }
988cdf0e10cSrcweir
989cdf0e10cSrcweir return ScGlobal::GetRscString( nId );
990cdf0e10cSrcweir }
991cdf0e10cSrcweir
992cdf0e10cSrcweir
Undo()993cdf0e10cSrcweir void __EXPORT ScUndoDetective::Undo()
994cdf0e10cSrcweir {
995cdf0e10cSrcweir BeginUndo();
996cdf0e10cSrcweir
997cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
998cdf0e10cSrcweir DoSdrUndoAction(pDrawUndo, pDoc);
999cdf0e10cSrcweir
1000cdf0e10cSrcweir if (bIsDelete)
1001cdf0e10cSrcweir {
1002cdf0e10cSrcweir if ( pOldList )
1003cdf0e10cSrcweir pDoc->SetDetOpList( new ScDetOpList(*pOldList) );
1004cdf0e10cSrcweir }
1005cdf0e10cSrcweir else
1006cdf0e10cSrcweir {
1007cdf0e10cSrcweir // Eintrag aus der Liste loeschen
1008cdf0e10cSrcweir
1009cdf0e10cSrcweir ScDetOpList* pList = pDoc->GetDetOpList();
1010cdf0e10cSrcweir if (pList && pList->Count())
1011cdf0e10cSrcweir {
1012cdf0e10cSrcweir sal_uInt16 nPos = pList->Count() - 1;
1013cdf0e10cSrcweir ScDetOpData* pData = (*pList)[nPos];
1014cdf0e10cSrcweir if ( pData->GetOperation() == (ScDetOpType) nAction && pData->GetPos() == aPos )
1015cdf0e10cSrcweir pList->DeleteAndDestroy( nPos, 1 );
1016cdf0e10cSrcweir else
1017cdf0e10cSrcweir {
1018cdf0e10cSrcweir DBG_ERROR("Detektiv-Eintrag in der Liste nicht gefunden");
1019cdf0e10cSrcweir }
1020cdf0e10cSrcweir }
1021cdf0e10cSrcweir }
1022cdf0e10cSrcweir
1023cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
1024cdf0e10cSrcweir if (pViewShell)
1025cdf0e10cSrcweir pViewShell->RecalcPPT(); //! use broadcast instead?
1026cdf0e10cSrcweir
1027cdf0e10cSrcweir EndUndo();
1028cdf0e10cSrcweir }
1029cdf0e10cSrcweir
Redo()1030cdf0e10cSrcweir void __EXPORT ScUndoDetective::Redo()
1031cdf0e10cSrcweir {
1032cdf0e10cSrcweir BeginRedo();
1033cdf0e10cSrcweir
1034cdf0e10cSrcweir RedoSdrUndoAction(pDrawUndo);
1035cdf0e10cSrcweir
1036cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
1037cdf0e10cSrcweir
1038cdf0e10cSrcweir if (bIsDelete)
1039cdf0e10cSrcweir pDoc->ClearDetectiveOperations();
1040cdf0e10cSrcweir else
1041cdf0e10cSrcweir pDoc->AddDetectiveOperation( ScDetOpData( aPos, (ScDetOpType) nAction ) );
1042cdf0e10cSrcweir
1043cdf0e10cSrcweir ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
1044cdf0e10cSrcweir if (pViewShell)
1045cdf0e10cSrcweir pViewShell->RecalcPPT(); //! use broadcast instead?
1046cdf0e10cSrcweir
1047cdf0e10cSrcweir EndRedo();
1048cdf0e10cSrcweir }
1049cdf0e10cSrcweir
Repeat(SfxRepeatTarget &)1050cdf0e10cSrcweir void __EXPORT ScUndoDetective::Repeat(SfxRepeatTarget& /* rTarget */)
1051cdf0e10cSrcweir {
1052cdf0e10cSrcweir // hammanich
1053cdf0e10cSrcweir }
1054cdf0e10cSrcweir
CanRepeat(SfxRepeatTarget &) const1055cdf0e10cSrcweir sal_Bool __EXPORT ScUndoDetective::CanRepeat(SfxRepeatTarget& /* rTarget */) const
1056cdf0e10cSrcweir {
1057cdf0e10cSrcweir return sal_False;
1058cdf0e10cSrcweir }
1059cdf0e10cSrcweir
1060cdf0e10cSrcweir // -----------------------------------------------------------------------
1061cdf0e10cSrcweir //
1062cdf0e10cSrcweir // Benannte Bereiche
1063cdf0e10cSrcweir //
1064cdf0e10cSrcweir
ScUndoRangeNames(ScDocShell * pNewDocShell,ScRangeName * pOld,ScRangeName * pNew)1065cdf0e10cSrcweir ScUndoRangeNames::ScUndoRangeNames( ScDocShell* pNewDocShell,
1066cdf0e10cSrcweir ScRangeName* pOld, ScRangeName* pNew ) :
1067cdf0e10cSrcweir ScSimpleUndo( pNewDocShell ),
1068cdf0e10cSrcweir pOldRanges ( pOld ),
1069cdf0e10cSrcweir pNewRanges ( pNew )
1070cdf0e10cSrcweir {
1071cdf0e10cSrcweir }
1072cdf0e10cSrcweir
~ScUndoRangeNames()1073cdf0e10cSrcweir __EXPORT ScUndoRangeNames::~ScUndoRangeNames()
1074cdf0e10cSrcweir {
1075cdf0e10cSrcweir delete pOldRanges;
1076cdf0e10cSrcweir delete pNewRanges;
1077cdf0e10cSrcweir }
1078cdf0e10cSrcweir
GetComment() const1079cdf0e10cSrcweir String __EXPORT ScUndoRangeNames::GetComment() const
1080cdf0e10cSrcweir {
1081cdf0e10cSrcweir return ScGlobal::GetRscString( STR_UNDO_RANGENAMES );
1082cdf0e10cSrcweir }
1083cdf0e10cSrcweir
DoChange(sal_Bool bUndo)1084cdf0e10cSrcweir void ScUndoRangeNames::DoChange( sal_Bool bUndo )
1085cdf0e10cSrcweir {
1086cdf0e10cSrcweir ScDocument* pDoc = pDocShell->GetDocument();
1087cdf0e10cSrcweir pDoc->CompileNameFormula( sal_True ); // CreateFormulaString
1088cdf0e10cSrcweir
1089cdf0e10cSrcweir if ( bUndo )
1090cdf0e10cSrcweir pDoc->SetRangeName( new ScRangeName( *pOldRanges ) );
1091cdf0e10cSrcweir else
1092cdf0e10cSrcweir pDoc->SetRangeName( new ScRangeName( *pNewRanges ) );
1093cdf0e10cSrcweir
1094cdf0e10cSrcweir pDoc->CompileNameFormula( sal_False ); // CompileFormulaString
1095cdf0e10cSrcweir
1096cdf0e10cSrcweir SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_AREAS_CHANGED ) );
1097cdf0e10cSrcweir }
1098cdf0e10cSrcweir
Undo()1099cdf0e10cSrcweir void __EXPORT ScUndoRangeNames::Undo()
1100cdf0e10cSrcweir {
1101cdf0e10cSrcweir BeginUndo();
1102cdf0e10cSrcweir DoChange( sal_True );
1103cdf0e10cSrcweir EndUndo();
1104cdf0e10cSrcweir }
1105cdf0e10cSrcweir
Redo()1106cdf0e10cSrcweir void __EXPORT ScUndoRangeNames::Redo()
1107cdf0e10cSrcweir {
1108cdf0e10cSrcweir BeginRedo();
1109cdf0e10cSrcweir DoChange( sal_False );
1110cdf0e10cSrcweir EndRedo();
1111cdf0e10cSrcweir }
1112cdf0e10cSrcweir
Repeat(SfxRepeatTarget &)1113cdf0e10cSrcweir void __EXPORT ScUndoRangeNames::Repeat(SfxRepeatTarget& /* rTarget */)
1114cdf0e10cSrcweir {
1115cdf0e10cSrcweir // hammanich
1116cdf0e10cSrcweir }
1117cdf0e10cSrcweir
CanRepeat(SfxRepeatTarget &) const1118cdf0e10cSrcweir sal_Bool __EXPORT ScUndoRangeNames::CanRepeat(SfxRepeatTarget& /* rTarget */) const
1119cdf0e10cSrcweir {
1120cdf0e10cSrcweir return sal_False;
1121cdf0e10cSrcweir }
1122cdf0e10cSrcweir
1123cdf0e10cSrcweir
1124cdf0e10cSrcweir
1125cdf0e10cSrcweir
1126