xref: /AOO41X/main/sc/source/ui/inc/undoblk.hxx (revision 38d50f7b14e1cf975d8c6468d9633894cd59b523)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef SC_UNDOBLK_HXX
24 #define SC_UNDOBLK_HXX
25 
26 #include "undobase.hxx"
27 #include "markdata.hxx"
28 #include "viewutil.hxx"
29 #include "spellparam.hxx"
30 
31 class ScDocShell;
32 class ScBaseCell;
33 class ScDocument;
34 class ScOutlineTable;
35 class ScRangeName;
36 class ScRangeList;
37 class ScDBCollection;
38 class ScPatternAttr;
39 class SvxBoxItem;
40 class SvxBoxInfoItem;
41 class SvxSearchItem;
42 class SdrUndoAction;
43 
44 //----------------------------------------------------------------------------
45 
46 class ScUndoInsertCells: public ScMoveUndo
47 {
48 public:
49                     TYPEINFO();
50                     ScUndoInsertCells( ScDocShell* pNewDocShell,
51                                        const ScRange& rRange, SCTAB nNewCount, SCTAB* pNewTabs, SCTAB* pNewScenarios,
52                                        InsCellCmd eNewCmd, ScDocument* pUndoDocument, ScRefUndoData* pRefData,
53                                        sal_Bool bNewPartOfPaste );
54     virtual         ~ScUndoInsertCells();
55 
56     virtual void    Undo();
57     virtual void    Redo();
58     virtual void    Repeat( SfxRepeatTarget& rTarget );
59     virtual sal_Bool    CanRepeat( SfxRepeatTarget& rTarget ) const;
60 
61     virtual String  GetComment() const;
62 
63     virtual sal_Bool    Merge( SfxUndoAction *pNextAction );
64 
65 private:
66     ScRange         aEffRange;
67     SCTAB           nCount;
68     SCTAB*          pTabs;
69     SCTAB*          pScenarios;
70     sal_uLong           nEndChangeAction;
71     InsCellCmd      eCmd;
72     sal_Bool            bPartOfPaste;
73     SfxUndoAction*  pPasteUndo;
74 
75     void            DoChange ( const sal_Bool bUndo );
76     void            SetChangeTrack();
77 };
78 
79 
80 class ScUndoDeleteCells: public ScMoveUndo
81 {
82 public:
83                     TYPEINFO();
84                     ScUndoDeleteCells( ScDocShell* pNewDocShell,
85                                        const ScRange& rRange, SCTAB nNewCount, SCTAB* pNewTabs, SCTAB* pNewScenarios,
86                                        DelCellCmd eNewCmd, ScDocument* pUndoDocument, ScRefUndoData* pRefData );
87     virtual         ~ScUndoDeleteCells();
88 
89     virtual void    Undo();
90     virtual void    Redo();
91     virtual void    Repeat(SfxRepeatTarget& rTarget);
92     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
93 
94     virtual String  GetComment() const;
95 
96 private:
97     ScRange         aEffRange;
98     SCTAB           nCount;
99     SCTAB*          pTabs;
100     SCTAB*          pScenarios;
101     sal_uLong           nStartChangeAction;
102     sal_uLong           nEndChangeAction;
103     DelCellCmd      eCmd;
104 
105     void            DoChange ( const sal_Bool bUndo );
106     void            SetChangeTrack();
107 };
108 
109 
110 class ScUndoDeleteMulti: public ScMoveUndo
111 {
112 public:
113                     TYPEINFO();
114                     ScUndoDeleteMulti( ScDocShell* pNewDocShell,
115                                        sal_Bool bNewRows, sal_Bool bNeedsRefresh, SCTAB nNewTab,
116                                        const SCCOLROW* pRng, SCCOLROW nRngCnt,
117                                        ScDocument* pUndoDocument, ScRefUndoData* pRefData );
118     virtual         ~ScUndoDeleteMulti();
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     sal_Bool            bRows;
129     sal_Bool            bRefresh;
130     SCTAB           nTab;
131     SCCOLROW*       pRanges;
132     SCCOLROW        nRangeCnt;
133     sal_uLong           nStartChangeAction;
134     sal_uLong           nEndChangeAction;
135 
136     void            DoChange() const;
137     void            SetChangeTrack();
138 };
139 
140 
141 class ScUndoCut: public ScBlockUndo
142 {
143 public:
144                     TYPEINFO();
145                     ScUndoCut( ScDocShell* pNewDocShell,
146                                ScRange aRange,              // adjusted for merged cells
147                                ScAddress aOldEnd,           // end position without adjustment
148                                const ScMarkData& rMark,     // selected sheets
149                                ScDocument* pNewUndoDoc );
150     virtual         ~ScUndoCut();
151 
152     virtual void    Undo();
153     virtual void    Redo();
154     virtual void    Repeat(SfxRepeatTarget& rTarget);
155     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
156 
157     virtual String  GetComment() const;
158 
159 private:
160     ScMarkData      aMarkData;
161     ScDocument*     pUndoDoc;
162     ScRange         aExtendedRange;
163     sal_uLong           nStartChangeAction;
164     sal_uLong           nEndChangeAction;
165 
166     void            DoChange( const sal_Bool bUndo );
167     void            SetChangeTrack();
168 };
169 
170 
171 struct ScUndoPasteOptions
172 {
173     sal_uInt16 nFunction;
174     sal_Bool bSkipEmpty;
175     sal_Bool bTranspose;
176     sal_Bool bAsLink;
177     InsCellCmd eMoveMode;
178 
ScUndoPasteOptionsScUndoPasteOptions179     ScUndoPasteOptions() :
180         nFunction( PASTE_NOFUNC ),
181         bSkipEmpty( sal_False ),
182         bTranspose( sal_False ),
183         bAsLink( sal_False ),
184         eMoveMode( INS_NONE )
185     {}
186 };
187 
188 class ScUndoPaste: public ScBlockUndo
189 {
190 public:
191                     TYPEINFO();
192                     ScUndoPaste( ScDocShell* pNewDocShell,
193                                  SCCOL nStartX, SCROW nStartY, SCTAB nStartZ,
194                                  SCCOL nEndX, SCROW nEndY, SCTAB nEndZ,
195                                  const ScMarkData& rMark,
196                                  ScDocument* pNewUndoDoc, ScDocument* pNewRedoDoc,
197                                  sal_uInt16 nNewFlags,
198                                  ScRefUndoData* pRefData, void* pFill1, void* pFill2, void* pFill3,
199                                  sal_Bool bRedoIsFilled = sal_True,
200                                  const ScUndoPasteOptions* pOptions = NULL );
201     virtual         ~ScUndoPaste();
202 
203     virtual void    Undo();
204     virtual void    Redo();
205     virtual void    Repeat(SfxRepeatTarget& rTarget);
206     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
207 
208     virtual String  GetComment() const;
209 
210 private:
211     ScMarkData      aMarkData;
212     ScDocument*     pUndoDoc;
213     ScDocument*     pRedoDoc;
214     sal_uInt16          nFlags;
215     ScRefUndoData*  pRefUndoData;
216     ScRefUndoData*  pRefRedoData;
217     sal_uLong           nStartChangeAction;
218     sal_uLong           nEndChangeAction;
219     sal_Bool            bRedoFilled;
220     ScUndoPasteOptions aPasteOptions;
221 
222     void            DoChange( const sal_Bool bUndo );
223     void            SetChangeTrack();
224 };
225 
226 
227 class ScUndoDragDrop: public ScMoveUndo
228 {
229 public:
230                     TYPEINFO();
231                     ScUndoDragDrop( ScDocShell* pNewDocShell,
232                                     const ScRange& rRange, ScAddress aNewDestPos, sal_Bool bNewCut,
233                                     ScDocument* pUndoDocument, ScRefUndoData* pRefData,
234                                     sal_Bool bScenario );
235     virtual         ~ScUndoDragDrop();
236 
237     virtual void    Undo();
238     virtual void    Redo();
239     virtual void    Repeat(SfxRepeatTarget& rTarget);
240     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
241 
242     virtual String  GetComment() const;
243 
244 private:
245     ScRange         aSrcRange;
246     ScRange         aDestRange;
247     sal_uLong           nStartChangeAction;
248     sal_uLong           nEndChangeAction;
249     sal_Bool            bCut;
250     sal_Bool            bKeepScenarioFlags;
251 
252     void            PaintArea( ScRange aRange, sal_uInt16 nExtFlags ) const;
253     void            DoUndo( ScRange aRange ) const;
254 
255     void            SetChangeTrack();
256 };
257 
258 
259 class ScUndoDeleteContents: public ScSimpleUndo
260 {
261 public:
262                     TYPEINFO();
263                     ScUndoDeleteContents( ScDocShell* pNewDocShell,
264                                           const ScMarkData& rMark,
265                                           const ScRange& rRange,
266                                           ScDocument* pNewUndoDoc, sal_Bool bNewMulti,
267                                           sal_uInt16 nNewFlags, sal_Bool bObjects );
268     virtual         ~ScUndoDeleteContents();
269 
270     virtual void    Undo();
271     virtual void    Redo();
272     virtual void    Repeat(SfxRepeatTarget& rTarget);
273     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
274 
275     virtual String  GetComment() const;
276 
277 private:
278     ScRange         aRange;
279     ScMarkData      aMarkData;
280     ScDocument*     pUndoDoc;       // Blockmarkierung und geloeschte Daten
281     SdrUndoAction*  pDrawUndo;      // geloeschte Objekte
282     sal_uLong           nStartChangeAction;
283     sal_uLong           nEndChangeAction;
284     sal_uInt16          nFlags;
285     sal_Bool            bMulti;         // Mehrfachselektion
286 
287     void            DoChange( const sal_Bool bUndo );
288     void            SetChangeTrack();
289 };
290 
291 
292 class ScUndoFillTable: public ScSimpleUndo
293 {
294 public:
295                     TYPEINFO();
296                     ScUndoFillTable( ScDocShell* pNewDocShell,
297                                      const ScMarkData& rMark,
298                                      SCCOL nStartX, SCROW nStartY, SCTAB nStartZ,
299                                      SCCOL nEndX, SCROW nEndY, SCTAB nEndZ,
300                                      ScDocument* pNewUndoDoc, sal_Bool bNewMulti, SCTAB nSrc,
301                                      sal_uInt16 nFlg, sal_uInt16 nFunc, sal_Bool bSkip, sal_Bool bLink );
302     virtual         ~ScUndoFillTable();
303 
304     virtual void    Undo();
305     virtual void    Redo();
306     virtual void    Repeat(SfxRepeatTarget& rTarget);
307     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
308 
309     virtual String  GetComment() const;
310 
311 private:
312     ScRange         aRange;
313     ScMarkData      aMarkData;
314     ScDocument*     pUndoDoc;       // Blockmarkierung und geloeschte Daten
315     sal_uLong           nStartChangeAction;
316     sal_uLong           nEndChangeAction;
317     sal_uInt16          nFlags;
318     sal_uInt16          nFunction;
319     SCTAB           nSrcTab;
320     sal_Bool            bMulti;         // Mehrfachselektion
321     sal_Bool            bSkipEmpty;
322     sal_Bool            bAsLink;
323 
324     void            DoChange( const sal_Bool bUndo );
325     void            SetChangeTrack();
326 };
327 
328 
329 class ScUndoSelectionAttr: public ScSimpleUndo
330 {
331 public:
332                     TYPEINFO();
333                     ScUndoSelectionAttr( ScDocShell* pNewDocShell,
334                                          const ScMarkData& rMark,
335                                          SCCOL nStartX, SCROW nStartY, SCTAB nStartZ,
336                                          SCCOL nEndX, SCROW nEndY, SCTAB nEndZ,
337                                          ScDocument* pNewUndoDoc, sal_Bool bNewMulti,
338                                          const ScPatternAttr* pNewApply,
339                                          const SvxBoxItem* pNewOuter = NULL,
340                                          const SvxBoxInfoItem* pNewInner = NULL );
341     virtual         ~ScUndoSelectionAttr();
342 
343     virtual void    Undo();
344     virtual void    Redo();
345     virtual void    Repeat(SfxRepeatTarget& rTarget);
346     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
347 
348     virtual String  GetComment() const;
349 
350 private:
351     ScMarkData      aMarkData;
352     ScRange         aRange;
353     ScDocument*     pUndoDoc;
354     sal_Bool            bMulti;
355     ScPatternAttr*  pApplyPattern;
356     SvxBoxItem*     pLineOuter;
357     SvxBoxInfoItem* pLineInner;
358 
359     void            DoChange( const sal_Bool bUndo );
360 };
361 
362 
363 class ScUndoWidthOrHeight: public ScSimpleUndo
364 {
365 public:
366                             TYPEINFO();
367                             ScUndoWidthOrHeight( ScDocShell* pNewDocShell,
368                                     const ScMarkData& rMark,
369                                     SCCOLROW nNewStart, SCTAB nNewStartTab,
370                                     SCCOLROW nNewEnd, SCTAB nNewEndTab,
371                                     ScDocument* pNewUndoDoc,
372                                     SCCOLROW nNewCnt, SCCOLROW* pNewRanges,
373                                     ScOutlineTable* pNewUndoTab,
374                                     ScSizeMode eNewMode, sal_uInt16 nNewSizeTwips,
375                                     sal_Bool bNewWidth );
376     virtual                 ~ScUndoWidthOrHeight();
377 
378     virtual void            Undo();
379     virtual void            Redo();
380     virtual void            Repeat(SfxRepeatTarget& rTarget);
381     virtual sal_Bool            CanRepeat(SfxRepeatTarget& rTarget) const;
382 
383     virtual String          GetComment() const;
384 
385 private:
386     ScMarkData      aMarkData;
387     SCCOLROW        nStart;
388     SCCOLROW        nEnd;
389     SCTAB           nStartTab;
390     SCTAB           nEndTab;
391     ScDocument*     pUndoDoc;
392     ScOutlineTable* pUndoTab;
393     SCCOLROW        nRangeCnt;
394     SCCOLROW*       pRanges;
395     sal_uInt16          nNewSize;
396     sal_Bool            bWidth;
397     ScSizeMode      eMode;
398     SdrUndoAction*  pDrawUndo;
399 };
400 
401 
402 class ScUndoAutoFill: public ScBlockUndo
403 {
404 public:
405                     TYPEINFO();
406                     ScUndoAutoFill( ScDocShell* pNewDocShell,
407                                     const ScRange& rRange, const ScRange& rSourceArea,
408                                     ScDocument* pNewUndoDoc, const ScMarkData& rMark,
409                                     FillDir eNewFillDir,
410                                     FillCmd eNewFillCmd, FillDateCmd eNewFillDateCmd,
411                                     double fNewStartValue, double fNewStepValue, double fNewMaxValue,
412                                     sal_uInt16 nMaxShIndex );
413     virtual         ~ScUndoAutoFill();
414 
415     virtual void    Undo();
416     virtual void    Redo();
417     virtual void    Repeat(SfxRepeatTarget& rTarget);
418     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
419 
420     virtual String  GetComment() const;
421 
422 private:
423     ScRange         aSource;
424     ScMarkData      aMarkData;
425     ScDocument*     pUndoDoc;
426     FillDir         eFillDir;
427     FillCmd         eFillCmd;
428     FillDateCmd     eFillDateCmd;
429     double          fStartValue;
430     double          fStepValue;
431     double          fMaxValue;
432     sal_uLong           nStartChangeAction;
433     sal_uLong           nEndChangeAction;
434     sal_uInt16          nMaxSharedIndex;
435 
436     void            SetChangeTrack();
437 };
438 
439 
440 class ScUndoMerge: public ScSimpleUndo
441 {
442 public:
443                     TYPEINFO();
444                     ScUndoMerge( ScDocShell* pNewDocShell,
445                                  SCCOL nStartX, SCROW nStartY, SCTAB nStartZ,
446                                  SCCOL nEndX,   SCROW nEndY,   SCTAB nEndZ,
447                                  bool bMergeContents, ScDocument* pUndoDoc, SdrUndoAction* pDrawUndo );
448     virtual         ~ScUndoMerge();
449 
450     virtual void    Undo();
451     virtual void    Redo();
452     virtual void    Repeat(SfxRepeatTarget& rTarget);
453     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
454 
455     virtual String  GetComment() const;
456 
457 private:
458     ScRange         maRange;
459     bool            mbMergeContents;        // Merge contents in Redo().
460     ScDocument*     mpUndoDoc;              // wenn Daten zusammengefasst
461     SdrUndoAction*  mpDrawUndo;
462 
463     void            DoChange( bool bUndo ) const;
464 };
465 
466 
467 class ScUndoAutoFormat: public ScBlockUndo
468 {
469 public:
470                     TYPEINFO();
471                     ScUndoAutoFormat( ScDocShell* pNewDocShell,
472                                       const ScRange& rRange, ScDocument* pNewUndoDoc,
473                                       const ScMarkData& rMark,
474                                       sal_Bool bNewSize, sal_uInt16 nNewFormatNo );
475     virtual         ~ScUndoAutoFormat();
476 
477     virtual void    Undo();
478     virtual void    Redo();
479     virtual void    Repeat(SfxRepeatTarget& rTarget);
480     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
481 
482     virtual String  GetComment() const;
483 
484 private:
485     ScDocument*     pUndoDoc;       // geloeschte Daten
486     ScMarkData      aMarkData;
487     sal_Bool            bSize;
488     sal_uInt16          nFormatNo;
489 };
490 
491 
492 class ScUndoReplace: public ScSimpleUndo
493 {
494 public:
495                     TYPEINFO();
496                     ScUndoReplace( ScDocShell* pNewDocShell,
497                                    const ScMarkData& rMark,
498                                    SCCOL nCurX, SCROW nCurY, SCTAB nCurZ,
499                                    const String& rNewUndoStr, ScDocument* pNewUndoDoc,
500                                    const SvxSearchItem* pItem );
501     virtual         ~ScUndoReplace();
502 
503     virtual void    Undo();
504     virtual void    Redo();
505     virtual void    Repeat(SfxRepeatTarget& rTarget);
506     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
507 
508     virtual String  GetComment() const;
509 
510 private:
511     ScAddress       aCursorPos;
512     ScMarkData      aMarkData;
513     String          aUndoStr;           // Daten bei Einfachmarkierung
514     ScDocument*     pUndoDoc;           // Blockmarkierung und geloeschte Daten
515     SvxSearchItem*  pSearchItem;
516     sal_uLong           nStartChangeAction;
517     sal_uLong           nEndChangeAction;
518 
519             void    SetChangeTrack();
520 };
521 
522 
523 class ScUndoTabOp: public ScSimpleUndo
524 {
525 public:
526                     TYPEINFO();
527                     ScUndoTabOp( ScDocShell* pNewDocShell,
528                                  SCCOL nStartX, SCROW nStartY, SCTAB nStartZ,
529                                  SCCOL nEndX,   SCROW nEndY,   SCTAB nEndZ,
530                                  ScDocument* pNewUndoDoc,
531                                  const ScRefAddress& rFormulaCell,
532                                  const ScRefAddress& rFormulaEnd,
533                                  const ScRefAddress& rRowCell,
534                                  const ScRefAddress& rColCell,
535                                  sal_uInt8 nMode );
536     virtual         ~ScUndoTabOp();
537 
538     virtual void    Undo();
539     virtual void    Redo();
540     virtual void    Repeat(SfxRepeatTarget& rTarget);
541     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
542 
543     virtual String  GetComment() const;
544 
545 private:
546     ScRange         aRange;
547     ScDocument*     pUndoDoc;       // geloeschte Daten
548     ScRefAddress    theFormulaCell;
549     ScRefAddress    theFormulaEnd;
550     ScRefAddress    theRowCell;
551     ScRefAddress    theColCell;
552     sal_uInt8           nMode;
553 };
554 
555 
556 class ScUndoConversion : public ScSimpleUndo
557 {
558 public:
559                             TYPEINFO();
560 
561                             ScUndoConversion(
562                                 ScDocShell* pNewDocShell, const ScMarkData& rMark,
563                                 SCCOL nCurX, SCROW nCurY, SCTAB nCurZ, ScDocument* pNewUndoDoc,
564                                 SCCOL nNewX, SCROW nNewY, SCTAB nNewZ, ScDocument* pNewRedoDoc,
565                                 const ScConversionParam& rConvParam );
566     virtual                 ~ScUndoConversion();
567 
568     virtual void            Undo();
569     virtual void            Redo();
570     virtual void            Repeat(SfxRepeatTarget& rTarget);
571     virtual sal_Bool            CanRepeat(SfxRepeatTarget& rTarget) const;
572 
573     virtual String          GetComment() const;
574 
575 private:
576     ScMarkData              aMarkData;
577     ScAddress               aCursorPos;
578     ScDocument*             pUndoDoc;           // Blockmarkierung und geloeschte Daten
579     ScAddress               aNewCursorPos;
580     ScDocument*             pRedoDoc;           // Blockmarkierung und neue Daten
581     sal_uLong                   nStartChangeAction;
582     sal_uLong                   nEndChangeAction;
583     ScConversionParam       maConvParam;        /// Conversion type and parameters.
584 
585     void                    DoChange( ScDocument* pRefDoc, const ScAddress& rCursorPos );
586     void                    SetChangeTrack();
587 };
588 
589 class ScUndoRefConversion: public ScSimpleUndo
590 {
591 public:
592                         TYPEINFO();
593                         ScUndoRefConversion( ScDocShell* pNewDocShell,
594                             const ScRange& aMarkRange, const ScMarkData& rMark,
595                             ScDocument* pNewUndoDoc, ScDocument* pNewRedoDoc, sal_Bool bNewMulti, sal_uInt16 nNewFlag);
596     virtual             ~ScUndoRefConversion();
597 
598     virtual void        Undo();
599     virtual void        Redo();
600     virtual void        Repeat(SfxRepeatTarget& rTarget);
601     virtual sal_Bool        CanRepeat(SfxRepeatTarget& rTarget) const;
602 
603     virtual String      GetComment() const;
604 
605 private:
606     ScMarkData          aMarkData;
607     ScDocument*         pUndoDoc;
608     ScDocument*         pRedoDoc;
609     ScRange             aRange;
610     sal_Bool                bMulti;
611     sal_uInt16              nFlags;
612     sal_uLong               nStartChangeAction;
613     sal_uLong               nEndChangeAction;
614 
615     void                DoChange( ScDocument* pRefDoc);
616     void                SetChangeTrack();
617 };
618 
619 class ScUndoListNames: public ScBlockUndo
620 {
621 public:
622                     TYPEINFO();
623                     ScUndoListNames( ScDocShell* pNewDocShell,
624                                      const ScRange& rRange,
625                                      ScDocument* pNewUndoDoc, ScDocument* pNewRedoDoc );
626     virtual         ~ScUndoListNames();
627 
628     virtual void    Undo();
629     virtual void    Redo();
630     virtual void    Repeat(SfxRepeatTarget& rTarget);
631     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
632 
633     virtual String  GetComment() const;
634 
635 private:
636     ScDocument*     pUndoDoc;
637     ScDocument*     pRedoDoc;
638 
639     void            DoChange( ScDocument* pSrcDoc ) const;
640 };
641 
642 
643 class ScUndoUseScenario: public ScSimpleUndo
644 {
645 public:
646                             TYPEINFO();
647                             ScUndoUseScenario( ScDocShell* pNewDocShell,
648                                     const ScMarkData& rMark,
649                                     const ScArea& rDestArea, ScDocument* pNewUndoDoc,
650                                     const String& rNewName );
651     virtual                 ~ScUndoUseScenario();
652 
653     virtual void            Undo();
654     virtual void            Redo();
655     virtual void            Repeat(SfxRepeatTarget& rTarget);
656     virtual sal_Bool            CanRepeat(SfxRepeatTarget& rTarget) const;
657 
658     virtual String          GetComment() const;
659 
660 private:
661     ScDocument*     pUndoDoc;
662     ScRange         aRange;
663     ScMarkData      aMarkData;
664     String          aName;
665 };
666 
667 
668 class ScUndoSelectionStyle: public ScSimpleUndo
669 {
670 public:
671                     TYPEINFO();
672                     ScUndoSelectionStyle( ScDocShell* pNewDocShell,
673                                           const ScMarkData& rMark,
674                                           const ScRange& rRange,
675                                           const String& rName,
676                                           ScDocument* pNewUndoDoc );
677     virtual         ~ScUndoSelectionStyle();
678 
679     virtual void    Undo();
680     virtual void    Redo();
681     virtual void    Repeat(SfxRepeatTarget& rTarget);
682     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
683 
684     virtual String  GetComment() const;
685     virtual sal_uInt16  GetId() const;
686 
687 private:
688     ScMarkData      aMarkData;
689     ScDocument*     pUndoDoc;
690     String          aStyleName;
691     ScRange         aRange;
692 
693     void            DoChange( const sal_Bool bUndo );
694 };
695 
696 
697 class ScUndoRefreshLink: public ScSimpleUndo
698 {
699 public:
700                     TYPEINFO();
701                     ScUndoRefreshLink( ScDocShell* pNewDocShell,
702                                        ScDocument* pNewUndoDoc );
703     virtual         ~ScUndoRefreshLink();
704 
705     virtual void    Undo();
706     virtual void    Redo();
707     virtual void    Repeat(SfxRepeatTarget& rTarget);
708     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
709 
710     virtual String  GetComment() const;
711 
712 private:
713     ScDocument*     pUndoDoc;
714     ScDocument*     pRedoDoc;
715 };
716 
717 
718 class ScUndoEnterMatrix: public ScBlockUndo
719 {
720 public:
721                     TYPEINFO();
722                     ScUndoEnterMatrix( ScDocShell* pNewDocShell,
723                                        const ScRange& rArea,
724                                        ScDocument* pNewUndoDoc,
725                                        const String& rForm );
726     virtual         ~ScUndoEnterMatrix();
727 
728     virtual void    Undo();
729     virtual void    Redo();
730     virtual void    Repeat(SfxRepeatTarget& rTarget);
731     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
732 
733     virtual String  GetComment() const;
734 
735 private:
736     ScDocument*     pUndoDoc;
737     String          aFormula;
738     formula::FormulaGrammar::AddressConvention eConv;
739     sal_uLong           nStartChangeAction;
740     sal_uLong           nEndChangeAction;
741 
742     void            SetChangeTrack();
743 };
744 
745 
746 class ScUndoInsertAreaLink : public ScSimpleUndo
747 {
748 public:
749                     TYPEINFO();
750                     ScUndoInsertAreaLink( ScDocShell* pShell,
751                                           const String& rDoc,
752                                           const String& rFlt, const String& rOpt,
753                                           const String& rArea, const ScRange& rDestRange,
754                                           sal_uLong nRefreshDelay );
755     virtual         ~ScUndoInsertAreaLink();
756 
757     virtual void    Undo();
758     virtual void    Redo();
759     virtual void    Repeat(SfxRepeatTarget& rTarget);
760     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
761 
762     virtual String  GetComment() const;
763 
764 private:
765     String          aDocName;
766     String          aFltName;
767     String          aOptions;
768     String          aAreaName;
769     ScRange         aRange;
770     sal_uLong           nRefreshDelay;
771 };
772 
773 
774 class ScUndoRemoveAreaLink : public ScSimpleUndo
775 {
776 public:
777                     TYPEINFO();
778                     ScUndoRemoveAreaLink( ScDocShell* pShell,
779                                           const String& rDoc,
780                                           const String& rFlt, const String& rOpt,
781                                           const String& rArea, const ScRange& rDestRange,
782                                           sal_uLong nRefreshDelay );
783     virtual         ~ScUndoRemoveAreaLink();
784 
785     virtual void    Undo();
786     virtual void    Redo();
787     virtual void    Repeat(SfxRepeatTarget& rTarget);
788     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
789 
790     virtual String  GetComment() const;
791 
792 private:
793     String          aDocName;
794     String          aFltName;
795     String          aOptions;
796     String          aAreaName;
797     ScRange         aRange;
798     sal_uLong           nRefreshDelay;
799 };
800 
801 
802 class ScUndoUpdateAreaLink : public ScSimpleUndo        //! auch BlockUndo umstellen?
803 {
804 public:
805                     TYPEINFO();
806                     ScUndoUpdateAreaLink( ScDocShell* pShell,
807                                           const String& rOldD,
808                                           const String& rOldF, const String& rOldO,
809                                           const String& rOldA, const ScRange& rOldR,
810                                           sal_uLong nOldRD,
811                                           const String& rNewD,
812                                           const String& rNewF, const String& rNewO,
813                                           const String& rNewA, const ScRange& rNewR,
814                                           sal_uLong nNewRD,
815                                           ScDocument* pUndo, ScDocument* pRedo,
816                                           sal_Bool bDoInsert );
817     virtual         ~ScUndoUpdateAreaLink();
818 
819     virtual void    Undo();
820     virtual void    Redo();
821     virtual void    Repeat(SfxRepeatTarget& rTarget);
822     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
823 
824     virtual String  GetComment() const;
825 
826 private:
827     String          aOldDoc;
828     String          aOldFlt;
829     String          aOldOpt;
830     String          aOldArea;
831     ScRange         aOldRange;
832     String          aNewDoc;
833     String          aNewFlt;
834     String          aNewOpt;
835     String          aNewArea;
836     ScRange         aNewRange;
837     ScDocument*     pUndoDoc;
838     ScDocument*     pRedoDoc;
839     sal_uLong           nOldRefresh;
840     sal_uLong           nNewRefresh;
841     sal_Bool            bWithInsert;
842 
843     void            DoChange( const sal_Bool bUndo ) const;
844 };
845 
846 
847 class ScUndoIndent: public ScBlockUndo
848 {
849 public:
850                     TYPEINFO();
851                     ScUndoIndent( ScDocShell* pNewDocShell, const ScMarkData& rMark,
852                                     ScDocument* pNewUndoDoc, sal_Bool bIncrement );
853     virtual         ~ScUndoIndent();
854 
855     virtual void    Undo();
856     virtual void    Redo();
857     virtual void    Repeat(SfxRepeatTarget& rTarget);
858     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
859 
860     virtual String  GetComment() const;
861 
862 private:
863     ScMarkData      aMarkData;
864     ScDocument*     pUndoDoc;
865     sal_Bool            bIsIncrement;
866 };
867 
868 
869 class ScUndoTransliterate: public ScBlockUndo
870 {
871 public:
872                     TYPEINFO();
873                     ScUndoTransliterate( ScDocShell* pNewDocShell, const ScMarkData& rMark,
874                                         ScDocument* pNewUndoDoc, sal_Int32 nType );
875     virtual         ~ScUndoTransliterate();
876 
877     virtual void    Undo();
878     virtual void    Redo();
879     virtual void    Repeat(SfxRepeatTarget& rTarget);
880     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
881 
882     virtual String  GetComment() const;
883 
884 private:
885     ScMarkData      aMarkData;
886     ScDocument*     pUndoDoc;
887     sal_Int32       nTransliterationType;
888 };
889 
890 
891 class ScUndoClearItems: public ScBlockUndo
892 {
893 public:
894                     TYPEINFO();
895                     ScUndoClearItems( ScDocShell* pNewDocShell, const ScMarkData& rMark,
896                                         ScDocument* pNewUndoDoc, const sal_uInt16* pW );
897     virtual         ~ScUndoClearItems();
898 
899     virtual void    Undo();
900     virtual void    Redo();
901     virtual void    Repeat(SfxRepeatTarget& rTarget);
902     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
903 
904     virtual String  GetComment() const;
905 
906 private:
907     ScMarkData      aMarkData;
908     ScDocument*     pUndoDoc;
909     sal_uInt16*         pWhich;
910 };
911 
912 
913 class ScUndoRemoveBreaks: public ScSimpleUndo
914 {
915 public:
916                     TYPEINFO();
917                     ScUndoRemoveBreaks( ScDocShell* pNewDocShell,
918                                     SCTAB nNewTab, ScDocument* pNewUndoDoc );
919     virtual         ~ScUndoRemoveBreaks();
920 
921     virtual void    Undo();
922     virtual void    Redo();
923     virtual void    Repeat(SfxRepeatTarget& rTarget);
924     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
925 
926     virtual String  GetComment() const;
927 
928 private:
929     SCTAB           nTab;
930     ScDocument*     pUndoDoc;
931 };
932 
933 
934 class ScUndoRemoveMerge: public ScBlockUndo
935 {
936 public:
937                     TYPEINFO();
938                     ScUndoRemoveMerge( ScDocShell* pNewDocShell,
939                                        const ScRange& rArea,
940                                        ScDocument* pNewUndoDoc );
941     virtual         ~ScUndoRemoveMerge();
942 
943     virtual void    Undo();
944     virtual void    Redo();
945     virtual void    Repeat(SfxRepeatTarget& rTarget);
946     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
947 
948     virtual String  GetComment() const;
949 
950 private:
951     ScDocument*     pUndoDoc;
952 };
953 
954 
955 class ScUndoBorder: public ScBlockUndo
956 {
957 public:
958                     TYPEINFO();
959                     ScUndoBorder( ScDocShell* pNewDocShell,
960                                     const ScRangeList& rRangeList,
961                                     ScDocument* pNewUndoDoc,
962                                     const SvxBoxItem& rNewOuter,
963                                     const SvxBoxInfoItem& rNewInner );
964     virtual         ~ScUndoBorder();
965 
966     virtual void    Undo();
967     virtual void    Redo();
968     virtual void    Repeat(SfxRepeatTarget& rTarget);
969     virtual sal_Bool    CanRepeat(SfxRepeatTarget& rTarget) const;
970 
971     virtual String  GetComment() const;
972 
973 private:
974     ScDocument*     pUndoDoc;
975     ScRangeList*    pRanges;
976     SvxBoxItem*     pOuter;
977     SvxBoxInfoItem* pInner;
978 };
979 
980 
981 
982 
983 #endif
984 
985