xref: /trunk/main/svx/source/table/tableundo.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
1f6e50924SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3f6e50924SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4f6e50924SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5f6e50924SAndrew Rist  * distributed with this work for additional information
6f6e50924SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7f6e50924SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8f6e50924SAndrew Rist  * "License"); you may not use this file except in compliance
9f6e50924SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11f6e50924SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13f6e50924SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14f6e50924SAndrew Rist  * software distributed under the License is distributed on an
15f6e50924SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16f6e50924SAndrew Rist  * KIND, either express or implied.  See the License for the
17f6e50924SAndrew Rist  * specific language governing permissions and limitations
18f6e50924SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20f6e50924SAndrew Rist  *************************************************************/
21f6e50924SAndrew Rist 
22f6e50924SAndrew 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())
140*ca4b7b19SArmin Le Grand     {
141*ca4b7b19SArmin Le Grand         // #120201# ActionChanged is not enough, we need to trigger TableLayouter::UpdateBorderLayout()
142*ca4b7b19SArmin Le Grand         // and this is done best using ReformatText() for table objects
143cdf0e10cSrcweir         mxObjRef->ActionChanged();
144*ca4b7b19SArmin Le Grand         mxObjRef->NbcReformatText();
145*ca4b7b19SArmin Le Grand     }
146cdf0e10cSrcweir }
147cdf0e10cSrcweir 
getDataFromCell(Data & rData)148cdf0e10cSrcweir void CellUndo::getDataFromCell( Data& rData )
149cdf0e10cSrcweir {
150cdf0e10cSrcweir     if( mxObjRef.is() && mxCell.is() )
151cdf0e10cSrcweir     {
152cdf0e10cSrcweir         if( mxCell->mpProperties )
153cdf0e10cSrcweir             rData.mpProperties = mxCell->CloneProperties( *mxObjRef.get(), *mxCell.get());
154cdf0e10cSrcweir 
155cdf0e10cSrcweir         if( mxCell->GetOutlinerParaObject() )
156cdf0e10cSrcweir             rData.mpOutlinerParaObject = new OutlinerParaObject(*mxCell->GetOutlinerParaObject());
157cdf0e10cSrcweir         else
158cdf0e10cSrcweir             rData.mpOutlinerParaObject =  0;
159cdf0e10cSrcweir 
160cdf0e10cSrcweir         rData.mnCellContentType = mxCell->mnCellContentType;
161cdf0e10cSrcweir 
162cdf0e10cSrcweir         rData.msFormula = mxCell->msFormula;
163cdf0e10cSrcweir         rData.mfValue = mxCell->mfValue;
164cdf0e10cSrcweir         rData.mnError = mxCell->mnError;
165cdf0e10cSrcweir         rData.mbMerged = mxCell->mbMerged;
166cdf0e10cSrcweir         rData.mnRowSpan = mxCell->mnRowSpan;
167cdf0e10cSrcweir         rData.mnColSpan = mxCell->mnColSpan;
168cdf0e10cSrcweir     }
169cdf0e10cSrcweir }
170cdf0e10cSrcweir 
171cdf0e10cSrcweir // -----------------------------------------------------------------------------
172cdf0e10cSrcweir // class InsertRowUndo : public SdrUndoAction
173cdf0e10cSrcweir // -----------------------------------------------------------------------------
174cdf0e10cSrcweir 
Dispose(RowVector & rRows)175cdf0e10cSrcweir static void Dispose( RowVector& rRows )
176cdf0e10cSrcweir {
177cdf0e10cSrcweir     RowVector::iterator aIter( rRows.begin() );
178cdf0e10cSrcweir     while( aIter != rRows.end() )
179cdf0e10cSrcweir         (*aIter++)->dispose();
180cdf0e10cSrcweir }
181cdf0e10cSrcweir 
182cdf0e10cSrcweir // -----------------------------------------------------------------------------
183cdf0e10cSrcweir 
InsertRowUndo(const TableModelRef & xTable,sal_Int32 nIndex,RowVector & aNewRows)184cdf0e10cSrcweir InsertRowUndo::InsertRowUndo( const TableModelRef& xTable, sal_Int32 nIndex, RowVector& aNewRows )
185cdf0e10cSrcweir : SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
186cdf0e10cSrcweir , mxTable( xTable )
187cdf0e10cSrcweir , mnIndex( nIndex )
188cdf0e10cSrcweir , mbUndo( true )
189cdf0e10cSrcweir {
190cdf0e10cSrcweir     maRows.swap( aNewRows );
191cdf0e10cSrcweir }
192cdf0e10cSrcweir 
193cdf0e10cSrcweir // -----------------------------------------------------------------------------
194cdf0e10cSrcweir 
~InsertRowUndo()195cdf0e10cSrcweir InsertRowUndo::~InsertRowUndo()
196cdf0e10cSrcweir {
197cdf0e10cSrcweir     if( !mbUndo )
198cdf0e10cSrcweir         Dispose( maRows );
199cdf0e10cSrcweir }
200cdf0e10cSrcweir 
201cdf0e10cSrcweir // -----------------------------------------------------------------------------
202cdf0e10cSrcweir 
Undo()203cdf0e10cSrcweir void InsertRowUndo::Undo()
204cdf0e10cSrcweir {
205cdf0e10cSrcweir     if( mxTable.is() )
206cdf0e10cSrcweir     {
207cdf0e10cSrcweir         mxTable->UndoInsertRows( mnIndex, sal::static_int_cast< sal_Int32 >( maRows.size() ) );
208cdf0e10cSrcweir         mbUndo = false;
209cdf0e10cSrcweir     }
210cdf0e10cSrcweir }
211cdf0e10cSrcweir 
212cdf0e10cSrcweir // -----------------------------------------------------------------------------
213cdf0e10cSrcweir 
Redo()214cdf0e10cSrcweir void InsertRowUndo::Redo()
215cdf0e10cSrcweir {
216cdf0e10cSrcweir     if( mxTable.is() )
217cdf0e10cSrcweir     {
218cdf0e10cSrcweir         mxTable->UndoRemoveRows( mnIndex, maRows );
219cdf0e10cSrcweir         mbUndo = true;
220cdf0e10cSrcweir     }
221cdf0e10cSrcweir }
222cdf0e10cSrcweir 
223cdf0e10cSrcweir // -----------------------------------------------------------------------------
224cdf0e10cSrcweir // class RemoveRowUndo : public SdrUndoAction
225cdf0e10cSrcweir // -----------------------------------------------------------------------------
226cdf0e10cSrcweir 
RemoveRowUndo(const TableModelRef & xTable,sal_Int32 nIndex,RowVector & aRemovedRows)227cdf0e10cSrcweir RemoveRowUndo::RemoveRowUndo( const TableModelRef& xTable, sal_Int32 nIndex, RowVector& aRemovedRows )
228cdf0e10cSrcweir : SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
229cdf0e10cSrcweir , mxTable( xTable )
230cdf0e10cSrcweir , mnIndex( nIndex )
231cdf0e10cSrcweir , mbUndo( true )
232cdf0e10cSrcweir {
233cdf0e10cSrcweir     maRows.swap( aRemovedRows );
234cdf0e10cSrcweir }
235cdf0e10cSrcweir 
236cdf0e10cSrcweir // -----------------------------------------------------------------------------
237cdf0e10cSrcweir 
~RemoveRowUndo()238cdf0e10cSrcweir RemoveRowUndo::~RemoveRowUndo()
239cdf0e10cSrcweir {
240cdf0e10cSrcweir     if( mbUndo )
241cdf0e10cSrcweir         Dispose( maRows );
242cdf0e10cSrcweir }
243cdf0e10cSrcweir 
244cdf0e10cSrcweir // -----------------------------------------------------------------------------
245cdf0e10cSrcweir 
Undo()246cdf0e10cSrcweir void RemoveRowUndo::Undo()
247cdf0e10cSrcweir {
248cdf0e10cSrcweir     if( mxTable.is() )
249cdf0e10cSrcweir     {
250cdf0e10cSrcweir         mxTable->UndoRemoveRows( mnIndex, maRows );
251cdf0e10cSrcweir         mbUndo = false;
252cdf0e10cSrcweir     }
253cdf0e10cSrcweir }
254cdf0e10cSrcweir 
255cdf0e10cSrcweir // -----------------------------------------------------------------------------
256cdf0e10cSrcweir 
Redo()257cdf0e10cSrcweir void RemoveRowUndo::Redo()
258cdf0e10cSrcweir {
259cdf0e10cSrcweir     if( mxTable.is() )
260cdf0e10cSrcweir     {
261cdf0e10cSrcweir         mxTable->UndoInsertRows( mnIndex, sal::static_int_cast< sal_Int32 >( maRows.size() ) );
262cdf0e10cSrcweir         mbUndo = true;
263cdf0e10cSrcweir     }
264cdf0e10cSrcweir }
265cdf0e10cSrcweir 
266cdf0e10cSrcweir // -----------------------------------------------------------------------------
267cdf0e10cSrcweir // class InsertColUndo : public SdrUndoAction
268cdf0e10cSrcweir // -----------------------------------------------------------------------------
269cdf0e10cSrcweir 
Dispose(ColumnVector & rCols)270cdf0e10cSrcweir static void Dispose( ColumnVector& rCols )
271cdf0e10cSrcweir {
272cdf0e10cSrcweir     ColumnVector::iterator aIter( rCols.begin() );
273cdf0e10cSrcweir     while( aIter != rCols.end() )
274cdf0e10cSrcweir         (*aIter++)->dispose();
275cdf0e10cSrcweir }
276cdf0e10cSrcweir 
277cdf0e10cSrcweir // -----------------------------------------------------------------------------
278cdf0e10cSrcweir 
Dispose(CellVector & rCells)279cdf0e10cSrcweir static void Dispose( CellVector& rCells )
280cdf0e10cSrcweir {
281cdf0e10cSrcweir     CellVector::iterator aIter( rCells.begin() );
282cdf0e10cSrcweir     while( aIter != rCells.end() )
283cdf0e10cSrcweir         (*aIter++)->dispose();
284cdf0e10cSrcweir }
285cdf0e10cSrcweir 
286cdf0e10cSrcweir // -----------------------------------------------------------------------------
287cdf0e10cSrcweir 
InsertColUndo(const TableModelRef & xTable,sal_Int32 nIndex,ColumnVector & aNewCols,CellVector & aCells)288cdf0e10cSrcweir InsertColUndo::InsertColUndo( const TableModelRef& xTable, sal_Int32 nIndex, ColumnVector& aNewCols, CellVector& aCells  )
289cdf0e10cSrcweir : SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
290cdf0e10cSrcweir , mxTable( xTable )
291cdf0e10cSrcweir , mnIndex( nIndex )
292cdf0e10cSrcweir , mbUndo( true )
293cdf0e10cSrcweir {
294cdf0e10cSrcweir     maColumns.swap( aNewCols );
295cdf0e10cSrcweir     maCells.swap( aCells );
296cdf0e10cSrcweir }
297cdf0e10cSrcweir 
298cdf0e10cSrcweir // -----------------------------------------------------------------------------
299cdf0e10cSrcweir 
~InsertColUndo()300cdf0e10cSrcweir InsertColUndo::~InsertColUndo()
301cdf0e10cSrcweir {
302cdf0e10cSrcweir     if( !mbUndo )
303cdf0e10cSrcweir     {
304cdf0e10cSrcweir         Dispose( maColumns );
305cdf0e10cSrcweir         Dispose( maCells );
306cdf0e10cSrcweir     }
307cdf0e10cSrcweir }
308cdf0e10cSrcweir 
309cdf0e10cSrcweir // -----------------------------------------------------------------------------
310cdf0e10cSrcweir 
Undo()311cdf0e10cSrcweir void InsertColUndo::Undo()
312cdf0e10cSrcweir {
313cdf0e10cSrcweir     if( mxTable.is() )
314cdf0e10cSrcweir     {
315cdf0e10cSrcweir         mxTable->UndoInsertColumns( mnIndex, sal::static_int_cast< sal_Int32 >( maColumns.size() ) );
316cdf0e10cSrcweir         mbUndo = false;
317cdf0e10cSrcweir     }
318cdf0e10cSrcweir }
319cdf0e10cSrcweir 
320cdf0e10cSrcweir // -----------------------------------------------------------------------------
321cdf0e10cSrcweir 
Redo()322cdf0e10cSrcweir void InsertColUndo::Redo()
323cdf0e10cSrcweir {
324cdf0e10cSrcweir     if( mxTable.is() )
325cdf0e10cSrcweir     {
326cdf0e10cSrcweir         mxTable->UndoRemoveColumns( mnIndex, maColumns, maCells );
327cdf0e10cSrcweir         mbUndo = true;
328cdf0e10cSrcweir     }
329cdf0e10cSrcweir }
330cdf0e10cSrcweir 
331cdf0e10cSrcweir // -----------------------------------------------------------------------------
332cdf0e10cSrcweir // class RemoveColUndo : public SdrUndoAction
333cdf0e10cSrcweir // -----------------------------------------------------------------------------
334cdf0e10cSrcweir 
RemoveColUndo(const TableModelRef & xTable,sal_Int32 nIndex,ColumnVector & aNewCols,CellVector & aCells)335cdf0e10cSrcweir RemoveColUndo::RemoveColUndo( const TableModelRef& xTable, sal_Int32 nIndex, ColumnVector& aNewCols, CellVector& aCells )
336cdf0e10cSrcweir : SdrUndoAction( *xTable->getSdrTableObj()->GetModel() )
337cdf0e10cSrcweir , mxTable( xTable )
338cdf0e10cSrcweir , mnIndex( nIndex )
339cdf0e10cSrcweir , mbUndo( true )
340cdf0e10cSrcweir {
341cdf0e10cSrcweir     maColumns.swap( aNewCols );
342cdf0e10cSrcweir     maCells.swap( aCells );
343cdf0e10cSrcweir }
344cdf0e10cSrcweir 
345cdf0e10cSrcweir // -----------------------------------------------------------------------------
346cdf0e10cSrcweir 
~RemoveColUndo()347cdf0e10cSrcweir RemoveColUndo::~RemoveColUndo()
348cdf0e10cSrcweir {
349cdf0e10cSrcweir     if( mbUndo )
350cdf0e10cSrcweir     {
351cdf0e10cSrcweir         Dispose( maColumns );
352cdf0e10cSrcweir         Dispose( maCells );
353cdf0e10cSrcweir     }
354cdf0e10cSrcweir }
355cdf0e10cSrcweir 
356cdf0e10cSrcweir // -----------------------------------------------------------------------------
357cdf0e10cSrcweir 
Undo()358cdf0e10cSrcweir void RemoveColUndo::Undo()
359cdf0e10cSrcweir {
360cdf0e10cSrcweir     if( mxTable.is() )
361cdf0e10cSrcweir     {
362cdf0e10cSrcweir         mxTable->UndoRemoveColumns( mnIndex, maColumns, maCells );
363cdf0e10cSrcweir         mbUndo = false;
364cdf0e10cSrcweir     }
365cdf0e10cSrcweir }
366cdf0e10cSrcweir 
367cdf0e10cSrcweir // -----------------------------------------------------------------------------
368cdf0e10cSrcweir 
Redo()369cdf0e10cSrcweir void RemoveColUndo::Redo()
370cdf0e10cSrcweir {
371cdf0e10cSrcweir     if( mxTable.is() )
372cdf0e10cSrcweir     {
373cdf0e10cSrcweir         mxTable->UndoInsertColumns( mnIndex, sal::static_int_cast< sal_Int32 >( maColumns.size() ) );
374cdf0e10cSrcweir         mbUndo = true;
375cdf0e10cSrcweir     }
376cdf0e10cSrcweir }
377cdf0e10cSrcweir 
378cdf0e10cSrcweir // -----------------------------------------------------------------------------
379cdf0e10cSrcweir // class TableColumnUndo : public SdrUndoAction
380cdf0e10cSrcweir // -----------------------------------------------------------------------------
381cdf0e10cSrcweir 
TableColumnUndo(const TableColumnRef & xCol)382cdf0e10cSrcweir TableColumnUndo::TableColumnUndo( const TableColumnRef& xCol )
383cdf0e10cSrcweir : SdrUndoAction( *xCol->mxTableModel->getSdrTableObj()->GetModel() )
384cdf0e10cSrcweir , mxCol( xCol )
385cdf0e10cSrcweir , mbHasRedoData( false )
386cdf0e10cSrcweir {
387cdf0e10cSrcweir     getData( maUndoData );
388cdf0e10cSrcweir }
389cdf0e10cSrcweir 
390cdf0e10cSrcweir // -----------------------------------------------------------------------------
391cdf0e10cSrcweir 
~TableColumnUndo()392cdf0e10cSrcweir TableColumnUndo::~TableColumnUndo()
393cdf0e10cSrcweir {
394cdf0e10cSrcweir }
395cdf0e10cSrcweir 
396cdf0e10cSrcweir // -----------------------------------------------------------------------------
397cdf0e10cSrcweir 
Undo()398cdf0e10cSrcweir void TableColumnUndo::Undo()
399cdf0e10cSrcweir {
400cdf0e10cSrcweir     if( !mbHasRedoData )
401cdf0e10cSrcweir     {
402cdf0e10cSrcweir         getData( maRedoData );
403cdf0e10cSrcweir         mbHasRedoData = true;
404cdf0e10cSrcweir     }
405cdf0e10cSrcweir     setData( maUndoData );
406cdf0e10cSrcweir }
407cdf0e10cSrcweir 
408cdf0e10cSrcweir // -----------------------------------------------------------------------------
409cdf0e10cSrcweir 
Redo()410cdf0e10cSrcweir void TableColumnUndo::Redo()
411cdf0e10cSrcweir {
412cdf0e10cSrcweir     setData( maRedoData );
413cdf0e10cSrcweir }
414cdf0e10cSrcweir 
415cdf0e10cSrcweir // -----------------------------------------------------------------------------
416cdf0e10cSrcweir 
Merge(SfxUndoAction * pNextAction)417cdf0e10cSrcweir sal_Bool TableColumnUndo::Merge( SfxUndoAction *pNextAction )
418cdf0e10cSrcweir {
419cdf0e10cSrcweir     TableColumnUndo* pNext = dynamic_cast< TableColumnUndo* >( pNextAction );
420cdf0e10cSrcweir     return pNext && pNext->mxCol == mxCol;
421cdf0e10cSrcweir }
422cdf0e10cSrcweir 
423cdf0e10cSrcweir // -----------------------------------------------------------------------------
424cdf0e10cSrcweir 
setData(const Data & rData)425cdf0e10cSrcweir void TableColumnUndo::setData( const Data& rData )
426cdf0e10cSrcweir {
427cdf0e10cSrcweir     mxCol->mnColumn = rData.mnColumn;
428cdf0e10cSrcweir     mxCol->mnWidth = rData.mnWidth;
429cdf0e10cSrcweir     mxCol->mbOptimalWidth = rData.mbOptimalWidth;
430cdf0e10cSrcweir     mxCol->mbIsVisible = rData.mbIsVisible;
431cdf0e10cSrcweir     mxCol->mbIsStartOfNewPage = rData.mbIsStartOfNewPage;
432cdf0e10cSrcweir     mxCol->maName = rData.maName;
433cdf0e10cSrcweir }
434cdf0e10cSrcweir 
435cdf0e10cSrcweir // -----------------------------------------------------------------------------
436cdf0e10cSrcweir 
getData(Data & rData)437cdf0e10cSrcweir void TableColumnUndo::getData( Data& rData )
438cdf0e10cSrcweir {
439cdf0e10cSrcweir     rData.mnColumn = mxCol->mnColumn;
440cdf0e10cSrcweir     rData.mnWidth = mxCol->mnWidth;
441cdf0e10cSrcweir     rData.mbOptimalWidth = mxCol->mbOptimalWidth;
442cdf0e10cSrcweir     rData.mbIsVisible = mxCol->mbIsVisible;
443cdf0e10cSrcweir     rData.mbIsStartOfNewPage = mxCol->mbIsStartOfNewPage;
444cdf0e10cSrcweir     rData.maName = mxCol->maName;
445cdf0e10cSrcweir }
446cdf0e10cSrcweir 
447cdf0e10cSrcweir // -----------------------------------------------------------------------------
448cdf0e10cSrcweir // class TableRowUndo : public SdrUndoAction
449cdf0e10cSrcweir // -----------------------------------------------------------------------------
450cdf0e10cSrcweir 
TableRowUndo(const TableRowRef & xRow)451cdf0e10cSrcweir TableRowUndo::TableRowUndo( const TableRowRef& xRow )
452cdf0e10cSrcweir : SdrUndoAction( *xRow->mxTableModel->getSdrTableObj()->GetModel() )
453cdf0e10cSrcweir , mxRow( xRow )
454cdf0e10cSrcweir , mbHasRedoData( false )
455cdf0e10cSrcweir {
456cdf0e10cSrcweir     getData( maUndoData );
457cdf0e10cSrcweir }
458cdf0e10cSrcweir 
459cdf0e10cSrcweir // -----------------------------------------------------------------------------
460cdf0e10cSrcweir 
~TableRowUndo()461cdf0e10cSrcweir TableRowUndo::~TableRowUndo()
462cdf0e10cSrcweir {
463cdf0e10cSrcweir }
464cdf0e10cSrcweir 
465cdf0e10cSrcweir // -----------------------------------------------------------------------------
466cdf0e10cSrcweir 
Undo()467cdf0e10cSrcweir void TableRowUndo::Undo()
468cdf0e10cSrcweir {
469cdf0e10cSrcweir     if( !mbHasRedoData )
470cdf0e10cSrcweir     {
471cdf0e10cSrcweir         getData( maRedoData );
472cdf0e10cSrcweir         mbHasRedoData = true;
473cdf0e10cSrcweir     }
474cdf0e10cSrcweir     setData( maUndoData );
475cdf0e10cSrcweir }
476cdf0e10cSrcweir 
477cdf0e10cSrcweir // -----------------------------------------------------------------------------
478cdf0e10cSrcweir 
Redo()479cdf0e10cSrcweir void TableRowUndo::Redo()
480cdf0e10cSrcweir {
481cdf0e10cSrcweir     setData( maRedoData );
482cdf0e10cSrcweir }
483cdf0e10cSrcweir 
484cdf0e10cSrcweir // -----------------------------------------------------------------------------
485cdf0e10cSrcweir 
Merge(SfxUndoAction * pNextAction)486cdf0e10cSrcweir sal_Bool TableRowUndo::Merge( SfxUndoAction *pNextAction )
487cdf0e10cSrcweir {
488cdf0e10cSrcweir     TableRowUndo* pNext = dynamic_cast< TableRowUndo* >( pNextAction );
489cdf0e10cSrcweir     return pNext && pNext->mxRow == mxRow;
490cdf0e10cSrcweir }
491cdf0e10cSrcweir 
492cdf0e10cSrcweir // -----------------------------------------------------------------------------
493cdf0e10cSrcweir 
setData(const Data & rData)494cdf0e10cSrcweir void TableRowUndo::setData( const Data& rData )
495cdf0e10cSrcweir {
496cdf0e10cSrcweir     mxRow->mnRow = rData.mnRow;
497cdf0e10cSrcweir     mxRow->mnHeight = rData.mnHeight;
498cdf0e10cSrcweir     mxRow->mbOptimalHeight = rData.mbOptimalHeight;
499cdf0e10cSrcweir     mxRow->mbIsVisible = rData.mbIsVisible;
500cdf0e10cSrcweir     mxRow->mbIsStartOfNewPage = rData.mbIsStartOfNewPage;
501cdf0e10cSrcweir     mxRow->maName = rData.maName;
502cdf0e10cSrcweir  }
503cdf0e10cSrcweir 
504cdf0e10cSrcweir // -----------------------------------------------------------------------------
505cdf0e10cSrcweir 
getData(Data & rData)506cdf0e10cSrcweir void TableRowUndo::getData( Data& rData )
507cdf0e10cSrcweir {
508cdf0e10cSrcweir     rData.mnRow = mxRow->mnRow;
509cdf0e10cSrcweir     rData.mnHeight = mxRow->mnHeight;
510cdf0e10cSrcweir     rData.mbOptimalHeight = mxRow->mbOptimalHeight;
511cdf0e10cSrcweir     rData.mbIsVisible = mxRow->mbIsVisible;
512cdf0e10cSrcweir     rData.mbIsStartOfNewPage = mxRow->mbIsStartOfNewPage;
513cdf0e10cSrcweir     rData.maName = mxRow->maName;
514cdf0e10cSrcweir }
515cdf0e10cSrcweir 
516cdf0e10cSrcweir // -----------------------------------------------------------------------------
517cdf0e10cSrcweir 
TableStyleUndo(const SdrTableObj & rTableObj)518cdf0e10cSrcweir TableStyleUndo::TableStyleUndo( const SdrTableObj& rTableObj )
519cdf0e10cSrcweir : SdrUndoAction( *rTableObj.GetModel() )
520cdf0e10cSrcweir , mxObjRef( const_cast< sdr::table::SdrTableObj*>( &rTableObj ) )
521cdf0e10cSrcweir {
522cdf0e10cSrcweir     getData( maUndoData );
523cdf0e10cSrcweir }
524cdf0e10cSrcweir 
Undo()525cdf0e10cSrcweir void TableStyleUndo::Undo()
526cdf0e10cSrcweir {
527cdf0e10cSrcweir     if( !mbHasRedoData )
528cdf0e10cSrcweir     {
529cdf0e10cSrcweir         getData( maRedoData );
530cdf0e10cSrcweir         mbHasRedoData = true;
531cdf0e10cSrcweir     }
532cdf0e10cSrcweir     setData( maUndoData );
533cdf0e10cSrcweir }
534cdf0e10cSrcweir 
Redo()535cdf0e10cSrcweir void TableStyleUndo::Redo()
536cdf0e10cSrcweir {
537cdf0e10cSrcweir     setData( maRedoData );
538cdf0e10cSrcweir }
539cdf0e10cSrcweir 
setData(const Data & rData)540cdf0e10cSrcweir void TableStyleUndo::setData( const Data& rData )
541cdf0e10cSrcweir {
542cdf0e10cSrcweir     SdrTableObj* pTableObj = dynamic_cast< SdrTableObj* >( mxObjRef.get() );
543cdf0e10cSrcweir     if( pTableObj )
544cdf0e10cSrcweir     {
545cdf0e10cSrcweir         pTableObj->setTableStyle( rData.mxTableStyle );
546cdf0e10cSrcweir         pTableObj->setTableStyleSettings( rData.maSettings );
547cdf0e10cSrcweir     }
548cdf0e10cSrcweir }
549cdf0e10cSrcweir 
getData(Data & rData)550cdf0e10cSrcweir void TableStyleUndo::getData( Data& rData )
551cdf0e10cSrcweir {
552cdf0e10cSrcweir     SdrTableObj* pTableObj = dynamic_cast< SdrTableObj* >( mxObjRef.get() );
553cdf0e10cSrcweir     if( pTableObj )
554cdf0e10cSrcweir     {
555cdf0e10cSrcweir         rData.maSettings = pTableObj->getTableStyleSettings();
556cdf0e10cSrcweir         rData.mxTableStyle = pTableObj->getTableStyle();
557cdf0e10cSrcweir     }
558cdf0e10cSrcweir }
559cdf0e10cSrcweir 
560cdf0e10cSrcweir } }
561