xref: /trunk/main/sc/source/ui/inc/undocell.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef SC_UNDOCELL_HXX
29 #define SC_UNDOCELL_HXX
30 
31 #include "undobase.hxx"
32 #include "postit.hxx"
33 
34 class ScDocShell;
35 class ScBaseCell;
36 class ScPatternAttr;
37 class EditTextObject;
38 class SdrUndoAction;
39 class ScDetOpList;
40 class ScDetOpData;
41 class ScRangeName;
42 
43 //----------------------------------------------------------------------------
44 
45 class ScUndoCursorAttr: public ScSimpleUndo
46 {
47 public:
48                     TYPEINFO();
49                     ScUndoCursorAttr( ScDocShell* pNewDocShell,
50                             SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab,
51                             const ScPatternAttr* pOldPat, const ScPatternAttr* pNewPat,
52                             const ScPatternAttr* pApplyPat, sal_Bool bAutomatic );
53     virtual         ~ScUndoCursorAttr();
54 
55     virtual void    Undo();
56     virtual void    Redo();
57     virtual void    Repeat(SfxRepeatTarget& rTarget);
58     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
59 
60     virtual String  GetComment() const;
61 
62 private:
63     SCCOL           nCol;
64     SCROW           nRow;
65     SCTAB           nTab;
66     ScPatternAttr*  pOldPattern;
67     ScPatternAttr*  pNewPattern;
68     ScPatternAttr*  pApplyPattern;
69     sal_Bool            bIsAutomatic;
70 
71     void            DoChange( const ScPatternAttr* pWhichPattern ) const;
72 };
73 
74 
75 class ScUndoEnterData: public ScSimpleUndo
76 {
77 public:
78                     TYPEINFO();
79                     ScUndoEnterData( ScDocShell* pNewDocShell,
80                             SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab,
81                             SCTAB nNewCount, SCTAB* pNewTabs,
82                             ScBaseCell** ppOldData, sal_Bool* pHasForm, sal_uLong* pOldForm,
83                             const String& rNewStr, EditTextObject* pObj = NULL );
84     virtual         ~ScUndoEnterData();
85 
86     virtual void    Undo();
87     virtual void    Redo();
88     virtual void    Repeat(SfxRepeatTarget& rTarget);
89     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
90 
91     virtual String  GetComment() const;
92 
93 private:
94     String          aNewString;
95     SCTAB*          pTabs;
96     ScBaseCell**    ppOldCells;
97     sal_Bool*           pHasFormat;
98     sal_uLong*          pOldFormats;
99     EditTextObject* pNewEditData;
100     sal_uLong           nEndChangeAction;
101     SCCOL           nCol;
102     SCROW           nRow;
103     SCTAB           nTab;
104     SCTAB           nCount;             //  markierte Tabellen
105 
106     void            DoChange() const;
107     void            SetChangeTrack();
108 };
109 
110 
111 class ScUndoEnterValue: public ScSimpleUndo
112 {
113 public:
114                     TYPEINFO();
115                     ScUndoEnterValue( ScDocShell* pNewDocShell,
116                             const ScAddress& rNewPos,
117                             ScBaseCell* pUndoCell, double nVal, sal_Bool bHeight );
118     virtual         ~ScUndoEnterValue();
119 
120     virtual void    Undo();
121     virtual void    Redo();
122     virtual void    Repeat(SfxRepeatTarget& rTarget);
123     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
124 
125     virtual String  GetComment() const;
126 
127 private:
128     ScAddress       aPos;
129     ScBaseCell*     pOldCell;
130     double          nValue;
131     sal_uLong           nEndChangeAction;
132     sal_Bool            bNeedHeight;
133 
134     void            SetChangeTrack();
135 };
136 
137 
138 class ScUndoPutCell: public ScSimpleUndo
139 {
140 public:
141                     TYPEINFO();
142                     ScUndoPutCell( ScDocShell* pNewDocShell,
143                             const ScAddress& rNewPos,
144                             ScBaseCell* pUndoCell, ScBaseCell* pRedoCell, sal_Bool bHeight );
145     virtual         ~ScUndoPutCell();
146 
147     virtual void    Undo();
148     virtual void    Redo();
149     virtual void    Repeat(SfxRepeatTarget& rTarget);
150     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
151 
152     virtual String  GetComment() const;
153 
154 private:
155     ScAddress       aPos;
156     ScBaseCell*     pOldCell;
157     ScBaseCell*     pEnteredCell;
158     sal_uLong           nEndChangeAction;
159     sal_Bool            bNeedHeight;
160 
161     void            SetChangeTrack();
162 };
163 
164 
165 class ScUndoPageBreak: public ScSimpleUndo
166 {
167 public:
168                     TYPEINFO();
169                     ScUndoPageBreak( ScDocShell* pNewDocShell,
170                             SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab,
171                             sal_Bool bNewColumn, sal_Bool bNewInsert );
172     virtual         ~ScUndoPageBreak();
173 
174     virtual void    Undo();
175     virtual void    Redo();
176     virtual void    Repeat(SfxRepeatTarget& rTarget);
177     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
178 
179     virtual String  GetComment() const;
180 
181 private:
182     SCCOL           nCol;
183     SCROW           nRow;
184     SCTAB           nTab;
185     sal_Bool            bColumn;        // Spalten- oder Zeilenumbruch
186     sal_Bool            bInsert;        // Einfuegen oder Loeschen
187 
188     void            DoChange( sal_Bool bInsert ) const;
189 };
190 
191 class ScUndoPrintZoom: public ScSimpleUndo
192 {
193 public:
194                     TYPEINFO();
195                     ScUndoPrintZoom( ScDocShell* pNewDocShell, SCTAB nT,
196                                     sal_uInt16 nOS, sal_uInt16 nOP, sal_uInt16 nNS, sal_uInt16 nNP );
197     virtual         ~ScUndoPrintZoom();
198 
199     virtual void    Undo();
200     virtual void    Redo();
201     virtual void    Repeat(SfxRepeatTarget& rTarget);
202     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
203 
204     virtual String  GetComment() const;
205 
206 private:
207     SCTAB           nTab;
208     sal_uInt16          nOldScale;
209     sal_uInt16          nOldPages;
210     sal_uInt16          nNewScale;
211     sal_uInt16          nNewPages;
212 
213     void            DoChange( sal_Bool bUndo );
214 };
215 
216 class ScUndoThesaurus: public ScSimpleUndo
217 {
218 public:
219                     TYPEINFO();
220                     ScUndoThesaurus( ScDocShell* pNewDocShell,
221                             SCCOL nNewCol, SCROW nNewRow, SCTAB nNewTab,
222                             const String& rNewUndoStr, const EditTextObject* pUndoTObj,
223                             const String& rNewRedoStr, const EditTextObject* pRedoTObj);
224     virtual         ~ScUndoThesaurus();
225 
226     virtual void    Undo();
227     virtual void    Redo();
228     virtual void    Repeat(SfxRepeatTarget& rTarget);
229     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
230 
231     virtual String  GetComment() const;
232 
233 private:
234     SCCOL           nCol;
235     SCROW           nRow;
236     SCTAB           nTab;
237     String          aUndoStr;           // Daten bei StringZelle
238     EditTextObject* pUndoTObject;       //       bei EditZelle
239     String          aRedoStr;
240     EditTextObject* pRedoTObject;
241     sal_uLong           nEndChangeAction;
242 
243     void            DoChange( sal_Bool bUndo, const String& rStr,
244                                 const EditTextObject* pTObj );
245     void            SetChangeTrack( ScBaseCell* pOldCell );
246 };
247 
248 // ============================================================================
249 
250 /** Undo action for inserting, removing, and replacing a cell note. */
251 class ScUndoReplaceNote : public ScSimpleUndo
252 {
253 public:
254                     TYPEINFO();
255 
256     /** Constructs an undo action for inserting or removing a cell note. */
257                     ScUndoReplaceNote(
258                         ScDocShell& rDocShell,
259                         const ScAddress& rPos,
260                         const ScNoteData& rNoteData,
261                         bool bInsert,
262                         SdrUndoAction* pDrawUndo );
263 
264     /** Constructs an undo action for replacing a cell note with another. */
265                     ScUndoReplaceNote(
266                         ScDocShell& rDocShell,
267                         const ScAddress& rPos,
268                         const ScNoteData& rOldData,
269                         const ScNoteData& rNewData,
270                         SdrUndoAction* pDrawUndo );
271 
272     virtual         ~ScUndoReplaceNote();
273 
274     virtual void    Undo();
275     virtual void    Redo();
276     virtual void    Repeat( SfxRepeatTarget& rTarget );
277     virtual sal_Bool    CanRepeat( SfxRepeatTarget& rTarget ) const;
278 
279     virtual String  GetComment() const;
280 
281 private:
282     void            DoInsertNote( const ScNoteData& rNoteData );
283     void            DoRemoveNote( const ScNoteData& rNoteData );
284 
285 private:
286     ScAddress       maPos;
287     ScNoteData      maOldData;
288     ScNoteData      maNewData;
289     SdrUndoAction*  mpDrawUndo;
290 };
291 
292 // ============================================================================
293 
294 /** Undo action for showing or hiding a cell note caption. */
295 class ScUndoShowHideNote : public ScSimpleUndo
296 {
297 public:
298                     TYPEINFO();
299                     ScUndoShowHideNote( ScDocShell& rDocShell, const ScAddress& rPos, bool bShow );
300     virtual         ~ScUndoShowHideNote();
301 
302     virtual void    Undo();
303     virtual void    Redo();
304     virtual void    Repeat( SfxRepeatTarget& rTarget );
305     virtual sal_Bool    CanRepeat( SfxRepeatTarget& rTarget ) const;
306 
307     virtual String  GetComment() const;
308 
309 private:
310     ScAddress       maPos;
311     bool            mbShown;
312 };
313 
314 // ============================================================================
315 
316 class ScUndoDetective: public ScSimpleUndo
317 {
318 public:
319                     TYPEINFO();
320                     ScUndoDetective( ScDocShell* pNewDocShell,
321                                     SdrUndoAction* pDraw, const ScDetOpData* pOperation,
322                                     ScDetOpList* pUndoList = NULL );
323     virtual         ~ScUndoDetective();
324 
325     virtual void    Undo();
326     virtual void    Redo();
327     virtual void    Repeat(SfxRepeatTarget& rTarget);
328     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
329 
330     virtual String  GetComment() const;
331 
332 private:
333     sal_Bool            bIsDelete;
334     ScDetOpList*    pOldList;
335     sal_uInt16          nAction;
336     ScAddress       aPos;
337     SdrUndoAction*  pDrawUndo;
338 };
339 
340 
341 class ScUndoRangeNames: public ScSimpleUndo
342 {
343 public:
344                     TYPEINFO();
345                     ScUndoRangeNames( ScDocShell* pNewDocShell,
346                                         ScRangeName* pOld, ScRangeName* pNew );
347     virtual         ~ScUndoRangeNames();
348 
349     virtual void    Undo();
350     virtual void    Redo();
351     virtual void    Repeat(SfxRepeatTarget& rTarget);
352     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
353 
354     virtual String  GetComment() const;
355 
356 private:
357     ScRangeName*    pOldRanges;
358     ScRangeName*    pNewRanges;
359 
360     void            DoChange( sal_Bool bUndo );
361 };
362 
363 
364 
365 #endif
366 
367