1*f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*f6e50924SAndrew Rist * distributed with this work for additional information
6*f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*f6e50924SAndrew Rist * "License"); you may not use this file except in compliance
9*f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*f6e50924SAndrew Rist * software distributed under the License is distributed on an
15*f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f6e50924SAndrew Rist * KIND, either express or implied. See the License for the
17*f6e50924SAndrew Rist * specific language governing permissions and limitations
18*f6e50924SAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*f6e50924SAndrew Rist *************************************************************/
21*f6e50924SAndrew Rist
22*f6e50924SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svx.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "svx/sdr/properties/textproperties.hxx"
28cdf0e10cSrcweir #include "editeng/outlobj.hxx"
29cdf0e10cSrcweir
30cdf0e10cSrcweir #include "cell.hxx"
31cdf0e10cSrcweir #include "tableundo.hxx"
32cdf0e10cSrcweir #include "svx/svdotable.hxx"
33cdf0e10cSrcweir #include "tablerow.hxx"
34cdf0e10cSrcweir #include "tablecolumn.hxx"
35cdf0e10cSrcweir
36cdf0e10cSrcweir
37cdf0e10cSrcweir // -----------------------------------------------------------------------------
38cdf0e10cSrcweir
39cdf0e10cSrcweir using ::rtl::OUString;
40cdf0e10cSrcweir using namespace ::com::sun::star::uno;
41cdf0e10cSrcweir using namespace ::com::sun::star::table;
42cdf0e10cSrcweir
43cdf0e10cSrcweir // -----------------------------------------------------------------------------
44cdf0e10cSrcweir
45cdf0e10cSrcweir namespace sdr { namespace table {
46cdf0e10cSrcweir
CellUndo(const SdrObjectWeakRef & xObjRef,const CellRef & xCell)47cdf0e10cSrcweir CellUndo::CellUndo( const SdrObjectWeakRef& xObjRef, const CellRef& xCell )
48cdf0e10cSrcweir : SdrUndoAction( *xCell->GetModel() )
49cdf0e10cSrcweir , mxObjRef( xObjRef )
50cdf0e10cSrcweir , mxCell( xCell )
51cdf0e10cSrcweir , mbUndo( true )
52cdf0e10cSrcweir {
53cdf0e10cSrcweir if( mxCell.is() && mxObjRef.is() )
54cdf0e10cSrcweir {
55cdf0e10cSrcweir getDataFromCell( maUndoData );
56cdf0e10cSrcweir mxObjRef->AddObjectUser( *this );
57cdf0e10cSrcweir }
58cdf0e10cSrcweir }
59cdf0e10cSrcweir
~CellUndo()60cdf0e10cSrcweir CellUndo::~CellUndo()
61cdf0e10cSrcweir {
62cdf0e10cSrcweir if( mxObjRef.is() )
63cdf0e10cSrcweir mxObjRef->RemoveObjectUser( *this );
64cdf0e10cSrcweir dispose();
65cdf0e10cSrcweir }
66cdf0e10cSrcweir
dispose()67cdf0e10cSrcweir void CellUndo::dispose()
68cdf0e10cSrcweir {
69cdf0e10cSrcweir mxCell.clear();
70cdf0e10cSrcweir delete maUndoData.mpProperties;
71cdf0e10cSrcweir maUndoData.mpProperties = 0;
72cdf0e10cSrcweir delete maRedoData.mpProperties;
73cdf0e10cSrcweir maRedoData.mpProperties = 0;
74cdf0e10cSrcweir delete maUndoData.mpOutlinerParaObject;
75cdf0e10cSrcweir maUndoData.mpOutlinerParaObject = 0;
76cdf0e10cSrcweir delete maRedoData.mpOutlinerParaObject;
77cdf0e10cSrcweir maRedoData.mpOutlinerParaObject = 0;
78cdf0e10cSrcweir }
79cdf0e10cSrcweir
ObjectInDestruction(const SdrObject &)80cdf0e10cSrcweir void CellUndo::ObjectInDestruction(const SdrObject& )
81cdf0e10cSrcweir {
82cdf0e10cSrcweir dispose();
83cdf0e10cSrcweir }
84cdf0e10cSrcweir
Undo()85cdf0e10cSrcweir void CellUndo::Undo()
86cdf0e10cSrcweir {
87cdf0e10cSrcweir if( mxCell.is() && mbUndo )
88cdf0e10cSrcweir {
89cdf0e10cSrcweir if( maRedoData.mpProperties == 0 )
90cdf0e10cSrcweir getDataFromCell( maRedoData );
91cdf0e10cSrcweir
92cdf0e10cSrcweir setDataToCell( maUndoData );
93cdf0e10cSrcweir mbUndo = false;
94cdf0e10cSrcweir }
95cdf0e10cSrcweir }
96cdf0e10cSrcweir
Redo()97cdf0e10cSrcweir void CellUndo::Redo()
98cdf0e10cSrcweir {
99cdf0e10cSrcweir if( mxCell.is() && !mbUndo )
100cdf0e10cSrcweir {
101cdf0e10cSrcweir setDataToCell( maRedoData );
102cdf0e10cSrcweir mbUndo = true;
103cdf0e10cSrcweir }
104cdf0e10cSrcweir }
105cdf0e10cSrcweir
Merge(SfxUndoAction * pNextAction)106cdf0e10cSrcweir sal_Bool CellUndo::Merge( SfxUndoAction *pNextAction )
107cdf0e10cSrcweir {
108cdf0e10cSrcweir CellUndo* pNext = dynamic_cast< CellUndo* >( pNextAction );
109cdf0e10cSrcweir if( pNext && pNext->mxCell.get() == mxCell.get() )
110cdf0e10cSrcweir {
111cdf0e10cSrcweir return sal_True;
112cdf0e10cSrcweir }
113cdf0e10cSrcweir else
114cdf0e10cSrcweir {
115cdf0e10cSrcweir return sal_False;
116cdf0e10cSrcweir }
117cdf0e10cSrcweir }
118cdf0e10cSrcweir
setDataToCell(const Data & rData)119cdf0e10cSrcweir void CellUndo::setDataToCell( const Data& rData )
120cdf0e10cSrcweir {
121cdf0e10cSrcweir delete mxCell->mpProperties;
122cdf0e10cSrcweir if( rData.mpProperties )
123cdf0e10cSrcweir mxCell->mpProperties = Cell::CloneProperties( rData.mpProperties, *mxObjRef.get(), *mxCell.get() );
124cdf0e10cSrcweir else
125cdf0e10cSrcweir mxCell->mpProperties = 0;
126cdf0e10cSrcweir
127cdf0e10cSrcweir if( rData.mpOutlinerParaObject )
128cdf0e10cSrcweir mxCell->SetOutlinerParaObject( new OutlinerParaObject(*rData.mpOutlinerParaObject) );
129cdf0e10cSrcweir else
130cdf0e10cSrcweir mxCell->RemoveOutlinerParaObject();
131cdf0e10cSrcweir
132cdf0e10cSrcweir mxCell->msFormula = rData.msFormula;
133cdf0e10cSrcweir mxCell->mfValue = rData.mfValue;
134cdf0e10cSrcweir mxCell->mnError = rData.mnError;
135cdf0e10cSrcweir mxCell->mbMerged = rData.mbMerged;
136cdf0e10cSrcweir mxCell->mnRowSpan = rData.mnRowSpan;
137cdf0e10cSrcweir mxCell->mnColSpan = rData.mnColSpan;
138cdf0e10cSrcweir
139cdf0e10cSrcweir if( mxObjRef.is() )
140cdf0e10cSrcweir mxObjRef->ActionChanged();
141cdf0e10cSrcweir }
142cdf0e10cSrcweir
getDataFromCell(Data & rData)143cdf0e10cSrcweir void CellUndo::getDataFromCell( Data& rData )
144cdf0e10cSrcweir {
145cdf0e10cSrcweir if( mxObjRef.is() && mxCell.is() )
146cdf0e10cSrcweir {
147cdf0e10cSrcweir if( mxCell->mpProperties )
148cdf0e10cSrcweir rData.mpProperties = mxCell->CloneProperties( *mxObjRef.get(), *mxCell.get());
149cdf0e10cSrcweir
150cdf0e10cSrcweir if( mxCell->GetOutlinerParaObject() )
151cdf0e10cSrcweir rData.mpOutlinerParaObject = new OutlinerParaObject(*mxCell->GetOutlinerParaObject());
152cdf0e10cSrcweir else
153cdf0e10cSrcweir rData.mpOutlinerParaObject = 0;
154cdf0e10cSrcweir
155cdf0e10cSrcweir rData.mnCellContentType = mxCell->mnCellContentType;
156cdf0e10cSrcweir
157cdf0e10cSrcweir rData.msFormula = mxCell->msFormula;
158cdf0e10cSrcweir rData.mfValue = mxCell->mfValue;
159cdf0e10cSrcweir rData.mnError = mxCell->mnError;
160cdf0e10cSrcweir rData.mbMerged = mxCell->mbMerged;
161cdf0e10cSrcweir rData.mnRowSpan = mxCell->mnRowSpan;
162cdf0e10cSrcweir rData.mnColSpan = mxCell->mnColSpan;
163cdf0e10cSrcweir }
164cdf0e10cSrcweir }
165cdf0e10cSrcweir
166cdf0e10cSrcweir // -----------------------------------------------------------------------------
167cdf0e10cSrcweir // class InsertRowUndo : public SdrUndoAction
168cdf0e10cSrcweir // -----------------------------------------------------------------------------
169cdf0e10cSrcweir
Dispose(RowVector & rRows)170cdf0e10cSrcweir static void Dispose( RowVector& rRows )
171cdf0e10cSrcweir {
172cdf0e10cSrcweir RowVector::iterator aIter( rRows.begin() );
173cdf0e10cSrcweir while( aIter != rRows.end() )
174cdf0e10cSrcweir (*aIter++)->dispose();
175cdf0e10cSrcweir }
176cdf0e10cSrcweir
177cdf0e10cSrcweir // -----------------------------------------------------------------------------
178cdf0e10cSrcweir
InsertRowUndo(const TableModelRef & xTable,sal_Int32 nIndex,RowVector & aNewRows)179cdf0e10cSrcweir InsertRowUndo::InsertRowUndo( const TableModelRef& xTable, sal_Int32 nIndex, RowVector& aNewRows )
180cdf0e10cSrcweir : SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
181cdf0e10cSrcweir , mxTable( xTable )
182cdf0e10cSrcweir , mnIndex( nIndex )
183cdf0e10cSrcweir , mbUndo( true )
184cdf0e10cSrcweir {
185cdf0e10cSrcweir maRows.swap( aNewRows );
186cdf0e10cSrcweir }
187cdf0e10cSrcweir
188cdf0e10cSrcweir // -----------------------------------------------------------------------------
189cdf0e10cSrcweir
~InsertRowUndo()190cdf0e10cSrcweir InsertRowUndo::~InsertRowUndo()
191cdf0e10cSrcweir {
192cdf0e10cSrcweir if( !mbUndo )
193cdf0e10cSrcweir Dispose( maRows );
194cdf0e10cSrcweir }
195cdf0e10cSrcweir
196cdf0e10cSrcweir // -----------------------------------------------------------------------------
197cdf0e10cSrcweir
Undo()198cdf0e10cSrcweir void InsertRowUndo::Undo()
199cdf0e10cSrcweir {
200cdf0e10cSrcweir if( mxTable.is() )
201cdf0e10cSrcweir {
202cdf0e10cSrcweir mxTable->UndoInsertRows( mnIndex, sal::static_int_cast< sal_Int32 >( maRows.size() ) );
203cdf0e10cSrcweir mbUndo = false;
204cdf0e10cSrcweir }
205cdf0e10cSrcweir }
206cdf0e10cSrcweir
207cdf0e10cSrcweir // -----------------------------------------------------------------------------
208cdf0e10cSrcweir
Redo()209cdf0e10cSrcweir void InsertRowUndo::Redo()
210cdf0e10cSrcweir {
211cdf0e10cSrcweir if( mxTable.is() )
212cdf0e10cSrcweir {
213cdf0e10cSrcweir mxTable->UndoRemoveRows( mnIndex, maRows );
214cdf0e10cSrcweir mbUndo = true;
215cdf0e10cSrcweir }
216cdf0e10cSrcweir }
217cdf0e10cSrcweir
218cdf0e10cSrcweir // -----------------------------------------------------------------------------
219cdf0e10cSrcweir // class RemoveRowUndo : public SdrUndoAction
220cdf0e10cSrcweir // -----------------------------------------------------------------------------
221cdf0e10cSrcweir
RemoveRowUndo(const TableModelRef & xTable,sal_Int32 nIndex,RowVector & aRemovedRows)222cdf0e10cSrcweir RemoveRowUndo::RemoveRowUndo( const TableModelRef& xTable, sal_Int32 nIndex, RowVector& aRemovedRows )
223cdf0e10cSrcweir : SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
224cdf0e10cSrcweir , mxTable( xTable )
225cdf0e10cSrcweir , mnIndex( nIndex )
226cdf0e10cSrcweir , mbUndo( true )
227cdf0e10cSrcweir {
228cdf0e10cSrcweir maRows.swap( aRemovedRows );
229cdf0e10cSrcweir }
230cdf0e10cSrcweir
231cdf0e10cSrcweir // -----------------------------------------------------------------------------
232cdf0e10cSrcweir
~RemoveRowUndo()233cdf0e10cSrcweir RemoveRowUndo::~RemoveRowUndo()
234cdf0e10cSrcweir {
235cdf0e10cSrcweir if( mbUndo )
236cdf0e10cSrcweir Dispose( maRows );
237cdf0e10cSrcweir }
238cdf0e10cSrcweir
239cdf0e10cSrcweir // -----------------------------------------------------------------------------
240cdf0e10cSrcweir
Undo()241cdf0e10cSrcweir void RemoveRowUndo::Undo()
242cdf0e10cSrcweir {
243cdf0e10cSrcweir if( mxTable.is() )
244cdf0e10cSrcweir {
245cdf0e10cSrcweir mxTable->UndoRemoveRows( mnIndex, maRows );
246cdf0e10cSrcweir mbUndo = false;
247cdf0e10cSrcweir }
248cdf0e10cSrcweir }
249cdf0e10cSrcweir
250cdf0e10cSrcweir // -----------------------------------------------------------------------------
251cdf0e10cSrcweir
Redo()252cdf0e10cSrcweir void RemoveRowUndo::Redo()
253cdf0e10cSrcweir {
254cdf0e10cSrcweir if( mxTable.is() )
255cdf0e10cSrcweir {
256cdf0e10cSrcweir mxTable->UndoInsertRows( mnIndex, sal::static_int_cast< sal_Int32 >( maRows.size() ) );
257cdf0e10cSrcweir mbUndo = true;
258cdf0e10cSrcweir }
259cdf0e10cSrcweir }
260cdf0e10cSrcweir
261cdf0e10cSrcweir // -----------------------------------------------------------------------------
262cdf0e10cSrcweir // class InsertColUndo : public SdrUndoAction
263cdf0e10cSrcweir // -----------------------------------------------------------------------------
264cdf0e10cSrcweir
Dispose(ColumnVector & rCols)265cdf0e10cSrcweir static void Dispose( ColumnVector& rCols )
266cdf0e10cSrcweir {
267cdf0e10cSrcweir ColumnVector::iterator aIter( rCols.begin() );
268cdf0e10cSrcweir while( aIter != rCols.end() )
269cdf0e10cSrcweir (*aIter++)->dispose();
270cdf0e10cSrcweir }
271cdf0e10cSrcweir
272cdf0e10cSrcweir // -----------------------------------------------------------------------------
273cdf0e10cSrcweir
Dispose(CellVector & rCells)274cdf0e10cSrcweir static void Dispose( CellVector& rCells )
275cdf0e10cSrcweir {
276cdf0e10cSrcweir CellVector::iterator aIter( rCells.begin() );
277cdf0e10cSrcweir while( aIter != rCells.end() )
278cdf0e10cSrcweir (*aIter++)->dispose();
279cdf0e10cSrcweir }
280cdf0e10cSrcweir
281cdf0e10cSrcweir // -----------------------------------------------------------------------------
282cdf0e10cSrcweir
InsertColUndo(const TableModelRef & xTable,sal_Int32 nIndex,ColumnVector & aNewCols,CellVector & aCells)283cdf0e10cSrcweir InsertColUndo::InsertColUndo( const TableModelRef& xTable, sal_Int32 nIndex, ColumnVector& aNewCols, CellVector& aCells )
284cdf0e10cSrcweir : SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
285cdf0e10cSrcweir , mxTable( xTable )
286cdf0e10cSrcweir , mnIndex( nIndex )
287cdf0e10cSrcweir , mbUndo( true )
288cdf0e10cSrcweir {
289cdf0e10cSrcweir maColumns.swap( aNewCols );
290cdf0e10cSrcweir maCells.swap( aCells );
291cdf0e10cSrcweir }
292cdf0e10cSrcweir
293cdf0e10cSrcweir // -----------------------------------------------------------------------------
294cdf0e10cSrcweir
~InsertColUndo()295cdf0e10cSrcweir InsertColUndo::~InsertColUndo()
296cdf0e10cSrcweir {
297cdf0e10cSrcweir if( !mbUndo )
298cdf0e10cSrcweir {
299cdf0e10cSrcweir Dispose( maColumns );
300cdf0e10cSrcweir Dispose( maCells );
301cdf0e10cSrcweir }
302cdf0e10cSrcweir }
303cdf0e10cSrcweir
304cdf0e10cSrcweir // -----------------------------------------------------------------------------
305cdf0e10cSrcweir
Undo()306cdf0e10cSrcweir void InsertColUndo::Undo()
307cdf0e10cSrcweir {
308cdf0e10cSrcweir if( mxTable.is() )
309cdf0e10cSrcweir {
310cdf0e10cSrcweir mxTable->UndoInsertColumns( mnIndex, sal::static_int_cast< sal_Int32 >( maColumns.size() ) );
311cdf0e10cSrcweir mbUndo = false;
312cdf0e10cSrcweir }
313cdf0e10cSrcweir }
314cdf0e10cSrcweir
315cdf0e10cSrcweir // -----------------------------------------------------------------------------
316cdf0e10cSrcweir
Redo()317cdf0e10cSrcweir void InsertColUndo::Redo()
318cdf0e10cSrcweir {
319cdf0e10cSrcweir if( mxTable.is() )
320cdf0e10cSrcweir {
321cdf0e10cSrcweir mxTable->UndoRemoveColumns( mnIndex, maColumns, maCells );
322cdf0e10cSrcweir mbUndo = true;
323cdf0e10cSrcweir }
324cdf0e10cSrcweir }
325cdf0e10cSrcweir
326cdf0e10cSrcweir // -----------------------------------------------------------------------------
327cdf0e10cSrcweir // class RemoveColUndo : public SdrUndoAction
328cdf0e10cSrcweir // -----------------------------------------------------------------------------
329cdf0e10cSrcweir
RemoveColUndo(const TableModelRef & xTable,sal_Int32 nIndex,ColumnVector & aNewCols,CellVector & aCells)330cdf0e10cSrcweir RemoveColUndo::RemoveColUndo( const TableModelRef& xTable, sal_Int32 nIndex, ColumnVector& aNewCols, CellVector& aCells )
331cdf0e10cSrcweir : SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
332cdf0e10cSrcweir , mxTable( xTable )
333cdf0e10cSrcweir , mnIndex( nIndex )
334cdf0e10cSrcweir , mbUndo( true )
335cdf0e10cSrcweir {
336cdf0e10cSrcweir maColumns.swap( aNewCols );
337cdf0e10cSrcweir maCells.swap( aCells );
338cdf0e10cSrcweir }
339cdf0e10cSrcweir
340cdf0e10cSrcweir // -----------------------------------------------------------------------------
341cdf0e10cSrcweir
~RemoveColUndo()342cdf0e10cSrcweir RemoveColUndo::~RemoveColUndo()
343cdf0e10cSrcweir {
344cdf0e10cSrcweir if( mbUndo )
345cdf0e10cSrcweir {
346cdf0e10cSrcweir Dispose( maColumns );
347cdf0e10cSrcweir Dispose( maCells );
348cdf0e10cSrcweir }
349cdf0e10cSrcweir }
350cdf0e10cSrcweir
351cdf0e10cSrcweir // -----------------------------------------------------------------------------
352cdf0e10cSrcweir
Undo()353cdf0e10cSrcweir void RemoveColUndo::Undo()
354cdf0e10cSrcweir {
355cdf0e10cSrcweir if( mxTable.is() )
356cdf0e10cSrcweir {
357cdf0e10cSrcweir mxTable->UndoRemoveColumns( mnIndex, maColumns, maCells );
358cdf0e10cSrcweir mbUndo = false;
359cdf0e10cSrcweir }
360cdf0e10cSrcweir }
361cdf0e10cSrcweir
362cdf0e10cSrcweir // -----------------------------------------------------------------------------
363cdf0e10cSrcweir
Redo()364cdf0e10cSrcweir void RemoveColUndo::Redo()
365cdf0e10cSrcweir {
366cdf0e10cSrcweir if( mxTable.is() )
367cdf0e10cSrcweir {
368cdf0e10cSrcweir mxTable->UndoInsertColumns( mnIndex, sal::static_int_cast< sal_Int32 >( maColumns.size() ) );
369cdf0e10cSrcweir mbUndo = true;
370cdf0e10cSrcweir }
371cdf0e10cSrcweir }
372cdf0e10cSrcweir
373cdf0e10cSrcweir // -----------------------------------------------------------------------------
374cdf0e10cSrcweir // class TableColumnUndo : public SdrUndoAction
375cdf0e10cSrcweir // -----------------------------------------------------------------------------
376cdf0e10cSrcweir
TableColumnUndo(const TableColumnRef & xCol)377cdf0e10cSrcweir TableColumnUndo::TableColumnUndo( const TableColumnRef& xCol )
378cdf0e10cSrcweir : SdrUndoAction( *xCol->mxTableModel->getSdrTableObj()->GetModel() )
379cdf0e10cSrcweir , mxCol( xCol )
380cdf0e10cSrcweir , mbHasRedoData( false )
381cdf0e10cSrcweir {
382cdf0e10cSrcweir getData( maUndoData );
383cdf0e10cSrcweir }
384cdf0e10cSrcweir
385cdf0e10cSrcweir // -----------------------------------------------------------------------------
386cdf0e10cSrcweir
~TableColumnUndo()387cdf0e10cSrcweir TableColumnUndo::~TableColumnUndo()
388cdf0e10cSrcweir {
389cdf0e10cSrcweir }
390cdf0e10cSrcweir
391cdf0e10cSrcweir // -----------------------------------------------------------------------------
392cdf0e10cSrcweir
Undo()393cdf0e10cSrcweir void TableColumnUndo::Undo()
394cdf0e10cSrcweir {
395cdf0e10cSrcweir if( !mbHasRedoData )
396cdf0e10cSrcweir {
397cdf0e10cSrcweir getData( maRedoData );
398cdf0e10cSrcweir mbHasRedoData = true;
399cdf0e10cSrcweir }
400cdf0e10cSrcweir setData( maUndoData );
401cdf0e10cSrcweir }
402cdf0e10cSrcweir
403cdf0e10cSrcweir // -----------------------------------------------------------------------------
404cdf0e10cSrcweir
Redo()405cdf0e10cSrcweir void TableColumnUndo::Redo()
406cdf0e10cSrcweir {
407cdf0e10cSrcweir setData( maRedoData );
408cdf0e10cSrcweir }
409cdf0e10cSrcweir
410cdf0e10cSrcweir // -----------------------------------------------------------------------------
411cdf0e10cSrcweir
Merge(SfxUndoAction * pNextAction)412cdf0e10cSrcweir sal_Bool TableColumnUndo::Merge( SfxUndoAction *pNextAction )
413cdf0e10cSrcweir {
414cdf0e10cSrcweir TableColumnUndo* pNext = dynamic_cast< TableColumnUndo* >( pNextAction );
415cdf0e10cSrcweir return pNext && pNext->mxCol == mxCol;
416cdf0e10cSrcweir }
417cdf0e10cSrcweir
418cdf0e10cSrcweir // -----------------------------------------------------------------------------
419cdf0e10cSrcweir
setData(const Data & rData)420cdf0e10cSrcweir void TableColumnUndo::setData( const Data& rData )
421cdf0e10cSrcweir {
422cdf0e10cSrcweir mxCol->mnColumn = rData.mnColumn;
423cdf0e10cSrcweir mxCol->mnWidth = rData.mnWidth;
424cdf0e10cSrcweir mxCol->mbOptimalWidth = rData.mbOptimalWidth;
425cdf0e10cSrcweir mxCol->mbIsVisible = rData.mbIsVisible;
426cdf0e10cSrcweir mxCol->mbIsStartOfNewPage = rData.mbIsStartOfNewPage;
427cdf0e10cSrcweir mxCol->maName = rData.maName;
428cdf0e10cSrcweir }
429cdf0e10cSrcweir
430cdf0e10cSrcweir // -----------------------------------------------------------------------------
431cdf0e10cSrcweir
getData(Data & rData)432cdf0e10cSrcweir void TableColumnUndo::getData( Data& rData )
433cdf0e10cSrcweir {
434cdf0e10cSrcweir rData.mnColumn = mxCol->mnColumn;
435cdf0e10cSrcweir rData.mnWidth = mxCol->mnWidth;
436cdf0e10cSrcweir rData.mbOptimalWidth = mxCol->mbOptimalWidth;
437cdf0e10cSrcweir rData.mbIsVisible = mxCol->mbIsVisible;
438cdf0e10cSrcweir rData.mbIsStartOfNewPage = mxCol->mbIsStartOfNewPage;
439cdf0e10cSrcweir rData.maName = mxCol->maName;
440cdf0e10cSrcweir }
441cdf0e10cSrcweir
442cdf0e10cSrcweir // -----------------------------------------------------------------------------
443cdf0e10cSrcweir // class TableRowUndo : public SdrUndoAction
444cdf0e10cSrcweir // -----------------------------------------------------------------------------
445cdf0e10cSrcweir
TableRowUndo(const TableRowRef & xRow)446cdf0e10cSrcweir TableRowUndo::TableRowUndo( const TableRowRef& xRow )
447cdf0e10cSrcweir : SdrUndoAction( *xRow->mxTableModel->getSdrTableObj()->GetModel() )
448cdf0e10cSrcweir , mxRow( xRow )
449cdf0e10cSrcweir , mbHasRedoData( false )
450cdf0e10cSrcweir {
451cdf0e10cSrcweir getData( maUndoData );
452cdf0e10cSrcweir }
453cdf0e10cSrcweir
454cdf0e10cSrcweir // -----------------------------------------------------------------------------
455cdf0e10cSrcweir
~TableRowUndo()456cdf0e10cSrcweir TableRowUndo::~TableRowUndo()
457cdf0e10cSrcweir {
458cdf0e10cSrcweir }
459cdf0e10cSrcweir
460cdf0e10cSrcweir // -----------------------------------------------------------------------------
461cdf0e10cSrcweir
Undo()462cdf0e10cSrcweir void TableRowUndo::Undo()
463cdf0e10cSrcweir {
464cdf0e10cSrcweir if( !mbHasRedoData )
465cdf0e10cSrcweir {
466cdf0e10cSrcweir getData( maRedoData );
467cdf0e10cSrcweir mbHasRedoData = true;
468cdf0e10cSrcweir }
469cdf0e10cSrcweir setData( maUndoData );
470cdf0e10cSrcweir }
471cdf0e10cSrcweir
472cdf0e10cSrcweir // -----------------------------------------------------------------------------
473cdf0e10cSrcweir
Redo()474cdf0e10cSrcweir void TableRowUndo::Redo()
475cdf0e10cSrcweir {
476cdf0e10cSrcweir setData( maRedoData );
477cdf0e10cSrcweir }
478cdf0e10cSrcweir
479cdf0e10cSrcweir // -----------------------------------------------------------------------------
480cdf0e10cSrcweir
Merge(SfxUndoAction * pNextAction)481cdf0e10cSrcweir sal_Bool TableRowUndo::Merge( SfxUndoAction *pNextAction )
482cdf0e10cSrcweir {
483cdf0e10cSrcweir TableRowUndo* pNext = dynamic_cast< TableRowUndo* >( pNextAction );
484cdf0e10cSrcweir return pNext && pNext->mxRow == mxRow;
485cdf0e10cSrcweir }
486cdf0e10cSrcweir
487cdf0e10cSrcweir // -----------------------------------------------------------------------------
488cdf0e10cSrcweir
setData(const Data & rData)489cdf0e10cSrcweir void TableRowUndo::setData( const Data& rData )
490cdf0e10cSrcweir {
491cdf0e10cSrcweir mxRow->mnRow = rData.mnRow;
492cdf0e10cSrcweir mxRow->mnHeight = rData.mnHeight;
493cdf0e10cSrcweir mxRow->mbOptimalHeight = rData.mbOptimalHeight;
494cdf0e10cSrcweir mxRow->mbIsVisible = rData.mbIsVisible;
495cdf0e10cSrcweir mxRow->mbIsStartOfNewPage = rData.mbIsStartOfNewPage;
496cdf0e10cSrcweir mxRow->maName = rData.maName;
497cdf0e10cSrcweir }
498cdf0e10cSrcweir
499cdf0e10cSrcweir // -----------------------------------------------------------------------------
500cdf0e10cSrcweir
getData(Data & rData)501cdf0e10cSrcweir void TableRowUndo::getData( Data& rData )
502cdf0e10cSrcweir {
503cdf0e10cSrcweir rData.mnRow = mxRow->mnRow;
504cdf0e10cSrcweir rData.mnHeight = mxRow->mnHeight;
505cdf0e10cSrcweir rData.mbOptimalHeight = mxRow->mbOptimalHeight;
506cdf0e10cSrcweir rData.mbIsVisible = mxRow->mbIsVisible;
507cdf0e10cSrcweir rData.mbIsStartOfNewPage = mxRow->mbIsStartOfNewPage;
508cdf0e10cSrcweir rData.maName = mxRow->maName;
509cdf0e10cSrcweir }
510cdf0e10cSrcweir
511cdf0e10cSrcweir // -----------------------------------------------------------------------------
512cdf0e10cSrcweir
TableStyleUndo(const SdrTableObj & rTableObj)513cdf0e10cSrcweir TableStyleUndo::TableStyleUndo( const SdrTableObj& rTableObj )
514cdf0e10cSrcweir : SdrUndoAction( *rTableObj.GetModel() )
515cdf0e10cSrcweir , mxObjRef( const_cast< sdr::table::SdrTableObj*>( &rTableObj ) )
516cdf0e10cSrcweir {
517cdf0e10cSrcweir getData( maUndoData );
518cdf0e10cSrcweir }
519cdf0e10cSrcweir
Undo()520cdf0e10cSrcweir void TableStyleUndo::Undo()
521cdf0e10cSrcweir {
522cdf0e10cSrcweir if( !mbHasRedoData )
523cdf0e10cSrcweir {
524cdf0e10cSrcweir getData( maRedoData );
525cdf0e10cSrcweir mbHasRedoData = true;
526cdf0e10cSrcweir }
527cdf0e10cSrcweir setData( maUndoData );
528cdf0e10cSrcweir }
529cdf0e10cSrcweir
Redo()530cdf0e10cSrcweir void TableStyleUndo::Redo()
531cdf0e10cSrcweir {
532cdf0e10cSrcweir setData( maRedoData );
533cdf0e10cSrcweir }
534cdf0e10cSrcweir
setData(const Data & rData)535cdf0e10cSrcweir void TableStyleUndo::setData( const Data& rData )
536cdf0e10cSrcweir {
537cdf0e10cSrcweir SdrTableObj* pTableObj = dynamic_cast< SdrTableObj* >( mxObjRef.get() );
538cdf0e10cSrcweir if( pTableObj )
539cdf0e10cSrcweir {
540cdf0e10cSrcweir pTableObj->setTableStyle( rData.mxTableStyle );
541cdf0e10cSrcweir pTableObj->setTableStyleSettings( rData.maSettings );
542cdf0e10cSrcweir }
543cdf0e10cSrcweir }
544cdf0e10cSrcweir
getData(Data & rData)545cdf0e10cSrcweir void TableStyleUndo::getData( Data& rData )
546cdf0e10cSrcweir {
547cdf0e10cSrcweir SdrTableObj* pTableObj = dynamic_cast< SdrTableObj* >( mxObjRef.get() );
548cdf0e10cSrcweir if( pTableObj )
549cdf0e10cSrcweir {
550cdf0e10cSrcweir rData.maSettings = pTableObj->getTableStyleSettings();
551cdf0e10cSrcweir rData.mxTableStyle = pTableObj->getTableStyle();
552cdf0e10cSrcweir }
553cdf0e10cSrcweir }
554cdf0e10cSrcweir
555cdf0e10cSrcweir } }
556