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