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