xref: /trunk/main/svx/inc/svx/svdundo.hxx (revision c945f2553a89a0730a645e382b4d7941bc6e551c)
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 
24 #ifndef _SVDUNDO_HXX
25 #define _SVDUNDO_HXX
26 
27 #ifndef _SOLAR_HRC
28 #include <svl/solar.hrc>
29 #endif
30 #include <svl/undo.hxx>
31 #include <tools/contnr.hxx>
32 #include <tools/gen.hxx>
33 #include <svx/svdtypes.hxx> // fuer enum RepeatFuncts
34 #include <svx/svdsob.hxx>
35 #include "svx/svxdllapi.h"
36 #include <svl/style.hxx>
37 
38 //************************************************************
39 //   Vorausdeklarationen
40 //************************************************************
41 
42 class SfxItemSet;
43 class SfxStyleSheet;
44 class SdrView;
45 class SdrPageView;
46 class SdrModel;
47 class SdrObject;
48 class SdrPage;
49 class SdrObjList;
50 class SdrLayer;
51 class SdrLayerAdmin;
52 class SdrObjGeoData;
53 class OutlinerParaObject;
54 
55 //************************************************************
56 //   SdrUndoAction
57 //
58 // Abstrakte Basisklasse fuer alle UndoActions der DrawingEngine
59 //
60 //************************************************************
61 
62 class SVX_DLLPUBLIC SdrUndoAction : public SfxUndoAction
63 {
64 protected:
65     SdrModel&                   rMod;
66 
67 protected:
68     SdrUndoAction(SdrModel& rNewMod)
69     :   rMod(rNewMod)
70     {}
71 
72 public:
73     TYPEINFO();
74     virtual ~SdrUndoAction() {}
75 
76     virtual sal_Bool CanRepeat(SfxRepeatTarget& rView) const;
77     virtual void Repeat(SfxRepeatTarget& rView);
78 
79     virtual String GetRepeatComment(SfxRepeatTarget& rView) const;
80     virtual String GetSdrRepeatComment(SdrView& rView) const;
81 
82     virtual bool CanSdrRepeat(SdrView& rView) const;
83     virtual void SdrRepeat(SdrView& rView);
84 };
85 
86 //************************************************************
87 //   SdrUndoGroup
88 //
89 // Zusammenfassung beliebig vieler einzelner UndoActions zu einer einzigen
90 // UndoAction. Beim Undo() werden die Einzelactions rueckwaets aufgerufen
91 // (die zuletzt angehaengte zuerst...), beim Redo() dagegen entspricht die
92 // Aufrufreihenfolge der Einfuegereihenfolge.
93 //
94 //************************************************************
95 
96 class SVX_DLLPUBLIC SdrUndoGroup : public SdrUndoAction
97 {
98 protected:
99     Container                   aBuf;
100 
101     // Beschreibung der Action, nicht expandiert (beinhaltet %O)
102     String                      aComment;
103     String                      aObjDescription;
104 
105     SdrRepeatFunc               eFunction;
106 
107 public:
108     SdrUndoGroup(SdrModel& rNewMod);
109     SdrUndoGroup(SdrModel& rNewMod,const String& rStr);
110     virtual ~SdrUndoGroup();
111 
112     void Clear();
113     sal_uIntPtr GetActionCount() const { return aBuf.Count(); }
114     SdrUndoAction* GetAction(sal_uIntPtr nNum) const { return (SdrUndoAction*)(aBuf.GetObject(nNum)); }
115     void AddAction(SdrUndoAction* pAct);
116     void push_front( SdrUndoAction* pAct );
117 
118     void SetComment(const String& rStr) { aComment=rStr; }
119     void SetObjDescription(const String& rStr) { aObjDescription=rStr; }
120     virtual String GetComment() const;
121     virtual String GetSdrRepeatComment(SdrView& rView) const;
122 
123     virtual void Undo();
124     virtual void Redo();
125 
126     virtual bool CanSdrRepeat(SdrView& rView) const;
127     virtual void SdrRepeat(SdrView& rView);
128     void SetRepeatFunction(SdrRepeatFunc eFunc) { eFunction=eFunc; }
129     SdrRepeatFunc GetRepeatFunction() const { return eFunction; }
130 };
131 
132 //************************************************************
133 //   SdrUndoObj
134 //
135 // Abstrakte Basisklasse fuer alle UndoActions die mit Objekten zu tun haben.
136 //
137 //************************************************************
138 
139 class SVX_DLLPUBLIC SdrUndoObj : public SdrUndoAction
140 {
141 protected:
142     SdrObject*                  pObj;
143 
144 protected:
145     SdrUndoObj(SdrObject& rNewObj);
146     virtual ~SdrUndoObj() {}
147 
148     void ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, String& rStr, FASTBOOL bRepeat=sal_False) const;
149 
150     static void GetDescriptionStringForObject( const SdrObject& _rForObject, sal_uInt16 nStrCacheID, String& rStr, FASTBOOL bRepeat = sal_False );
151 
152     // #94278# new method for evtl. PageChange at UNDO/REDO
153     void ImpShowPageOfThisObject();
154 };
155 
156 //************************************************************
157 //   SdrUndoAttrObj
158 //
159 // Aenderung der Objektattribute.
160 // Action direkt vor dem Setzen der neuen Attribute konstruieren.
161 // Auch fuer StyleSheets
162 //
163 //************************************************************
164 
165 class SVX_DLLPUBLIC SdrUndoAttrObj : public SdrUndoObj
166 {
167 protected:
168     SfxItemSet*                 pUndoSet;
169     SfxItemSet*                 pRedoSet;
170     SfxItemSet*                 pRepeatSet;
171 
172     // oder besser den StyleSheetNamen merken?
173     rtl::Reference< SfxStyleSheetBase > mxUndoStyleSheet;
174     rtl::Reference< SfxStyleSheetBase > mxRedoStyleSheet;
175     FASTBOOL                    bStyleSheet;
176     FASTBOOL                    bHaveToTakeRedoSet;
177 
178     // Bei Zuweisung von TextItems auf ein Zeichenobjekt mit Text:
179     OutlinerParaObject*         pTextUndo;
180     // #i8508#
181     // The text rescue mechanism needs also to be implemented for redo actions.
182     OutlinerParaObject*         pTextRedo;
183 
184     // Wenn sich um ein Gruppenobjekt handelt:
185     SdrUndoGroup*               pUndoGroup;
186 
187     // helper to ensure StyleSheet is in pool (provided by SdrModel from SdrObject)
188     void ensureStyleSheetInStyleSheetPool(SfxStyleSheetBasePool& rStyleSheetPool, SfxStyleSheet& rSheet);
189 
190 public:
191     SdrUndoAttrObj(SdrObject& rNewObj, FASTBOOL bStyleSheet1=sal_False, FASTBOOL bSaveText=sal_False);
192     virtual ~SdrUndoAttrObj();
193 
194     void SetRepeatAttr(const SfxItemSet& rSet);
195     virtual void Undo();
196     virtual void Redo();
197 
198     virtual String GetComment() const;
199     virtual String GetSdrRepeatComment(SdrView& rView) const;
200 
201     virtual void SdrRepeat(SdrView& rView);
202     virtual bool CanSdrRepeat(SdrView& rView) const;
203 };
204 
205 //************************************************************
206 //   SdrUndoMoveObj
207 //
208 // Blosses verschieben eines Objektes.
209 // Action direkt vor dem Verschieben konstruieren.
210 //
211 //************************************************************
212 
213 class SVX_DLLPUBLIC SdrUndoMoveObj : public SdrUndoObj
214 {
215 protected:
216     Size                        aDistance;     // Entfernung, um die verschoben wird
217 
218 public:
219     SdrUndoMoveObj(SdrObject& rNewObj): SdrUndoObj(rNewObj) {}
220     SdrUndoMoveObj(SdrObject& rNewObj, const Size& rDist): SdrUndoObj(rNewObj),aDistance(rDist) {}
221     virtual ~SdrUndoMoveObj() {}
222 
223     void SetDistance(const Size& rDist) { aDistance=rDist; }
224     const Size& GetDistance() const { return aDistance; }
225 
226     virtual void Undo();
227     virtual void Redo();
228 
229     virtual String GetComment() const;
230     virtual String GetSdrRepeatComment(SdrView& rView) const;
231 
232     virtual void SdrRepeat(SdrView& rView);
233     virtual bool CanSdrRepeat(SdrView& rView) const;
234 };
235 
236 //************************************************************
237 //   SdrUndoGeoObj
238 //
239 // Aenderung der Geometrie eines Objektes.
240 // Action direkt vor der geometrischen Transformation konstruieren.
241 //
242 //************************************************************
243 
244 class SVX_DLLPUBLIC SdrUndoGeoObj : public SdrUndoObj
245 {
246 protected:
247     SdrObjGeoData*              pUndoGeo;
248     SdrObjGeoData*              pRedoGeo;
249     // Wenn sich um ein Gruppenobjekt handelt:
250     SdrUndoGroup*               pUndoGroup;
251 
252 public:
253     SdrUndoGeoObj(SdrObject& rNewObj);
254     virtual ~SdrUndoGeoObj();
255 
256     virtual void Undo();
257     virtual void Redo();
258 
259     virtual String GetComment() const;
260 };
261 
262 //************************************************************
263 //   SdrUndoObjList
264 //
265 // Manipulationen an einer ObjList: Neues Obj, DeleteObj, SetObjZLevel, Grouping, ...
266 // Abstrakte Basisklasse.
267 //
268 //************************************************************
269 
270 class SVX_DLLPUBLIC SdrUndoObjList : public SdrUndoObj {
271     bool                        bOwner;
272 
273 protected:
274     SdrObjList*                 pObjList;
275     SdrView*                    pView;      // um bei ObjDel, Undo die
276     SdrPageView*                pPageView;  // Selektion widerherstellen zu koennen
277     sal_uInt32                      nOrdNum;
278     // Bei einem Undo/Redo findet moeglicherweise Uebereignung des Objektes
279     // statt. Im Dtor wird das Obj deleted, wenn bOwner==TRUE
280 
281 protected:
282     SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect = false);
283     virtual ~SdrUndoObjList();
284 
285     void SetView(SdrView* pView1, SdrPageView* pPageView1) { pView=pView1; pPageView=pPageView1; }
286     bool IsOwner() { return bOwner; }
287     void SetOwner(bool bNew);
288 };
289 
290 //************************************************************
291 //   SdrUndoRemoveObj
292 //
293 // Entfernen Objekts aus einer Objektliste. Innerhalb einer UndoGroup
294 // mit korrospondierenden Inserts zu verwenden.
295 // Action vor dem entfernen aus der ObjList konstruieren.
296 //
297 //************************************************************
298 
299 class SVX_DLLPUBLIC SdrUndoRemoveObj : public SdrUndoObjList
300 {
301 public:
302     SdrUndoRemoveObj(SdrObject& rNewObj, FASTBOOL bOrdNumDirect=sal_False)
303     : SdrUndoObjList(rNewObj,bOrdNumDirect) {}
304 
305     virtual void Undo();
306     virtual void Redo();
307 };
308 
309 //************************************************************
310 //   SdrUndoInsertObj
311 //
312 // Einfuegen Objekts in eine Objektliste. Innerhalb einer UndoGroup
313 // mit korrospondierenden Removes zu verwenden.
314 // Action vor dem entfernen aus der ObjList konstruieren.
315 //
316 //************************************************************
317 
318 class SVX_DLLPUBLIC SdrUndoInsertObj : public SdrUndoObjList
319 {
320 public:
321     SdrUndoInsertObj(SdrObject& rNewObj, FASTBOOL bOrdNumDirect=sal_False)
322     :   SdrUndoObjList(rNewObj,bOrdNumDirect) {}
323 
324     virtual void Undo();
325     virtual void Redo();
326 };
327 
328 //************************************************************
329 //   SdrUndoDelObj
330 //
331 // Loeschen eines Objekts.
332 // Action vor dem entfernen aus der ObjList konstruieren.
333 //
334 //************************************************************
335 
336 class SVX_DLLPUBLIC SdrUndoDelObj : public SdrUndoRemoveObj
337 {
338 public:
339     SdrUndoDelObj(SdrObject& rNewObj, FASTBOOL bOrdNumDirect=sal_False)
340     :   SdrUndoRemoveObj(rNewObj,bOrdNumDirect) { SetOwner(sal_True); }
341     virtual ~SdrUndoDelObj() {}
342 
343     virtual void Undo();
344     virtual void Redo();
345 
346     virtual String GetComment() const;
347     virtual String GetSdrRepeatComment(SdrView& rView) const;
348 
349     virtual void SdrRepeat(SdrView& rView);
350     virtual bool CanSdrRepeat(SdrView& rView) const;
351 };
352 
353 //************************************************************
354 //   SdrUndoNewObj
355 //
356 // Einfuegen eines neuen Objektes.
357 // Action nach dem einfuegen in die ObjList konstruieren.
358 //
359 //************************************************************
360 
361 class SVX_DLLPUBLIC SdrUndoNewObj : public SdrUndoInsertObj
362 {
363 public:
364     SdrUndoNewObj(SdrObject& rNewObj, FASTBOOL bOrdNumDirect=sal_False)
365     :   SdrUndoInsertObj(rNewObj,bOrdNumDirect) {}
366     virtual ~SdrUndoNewObj() {}
367 
368     virtual void Undo();
369     virtual void Redo();
370 
371     virtual String GetComment() const;
372 
373     static  String GetComment( const SdrObject& _rForObject );
374 };
375 
376 //************************************************************
377 //   SdrUndoReplaceObj
378 //
379 // Austausch eines Objektes.
380 // Action vor dem Replace an der ObjList konstruieren.
381 //
382 //************************************************************
383 
384 class SVX_DLLPUBLIC SdrUndoReplaceObj : public SdrUndoObj
385 {
386     bool                        bOldOwner;
387     bool                        bNewOwner;
388 
389 protected:
390     SdrObjList*                 pObjList;
391     sal_uInt32                      nOrdNum;
392     SdrObject*                  pNewObj;
393 
394 public:
395     SdrUndoReplaceObj(SdrObject& rOldObj1, SdrObject& rNewObj1, bool bOrdNumDirect = false);
396     virtual ~SdrUndoReplaceObj();
397 
398     virtual void Undo();
399     virtual void Redo();
400 
401     bool IsNewOwner() { return bNewOwner; }
402     void SetNewOwner(bool bNew);
403 
404     bool IsOldOwner() { return bOldOwner; }
405     void SetOldOwner(bool bNew);
406 };
407 
408 //************************************************************
409 //   SdrUndoCopyObj
410 //
411 // Kopieren eines Objekts
412 // Action nach dem einfuegen in die ObjList konstruieren.
413 //
414 //************************************************************
415 
416 class SdrUndoCopyObj : public SdrUndoNewObj
417 {
418 public:
419     SdrUndoCopyObj(SdrObject& rNewObj, FASTBOOL bOrdNumDirect=sal_False)
420     :   SdrUndoNewObj(rNewObj,bOrdNumDirect) {}
421     virtual ~SdrUndoCopyObj() {}
422 
423     virtual String GetComment() const;
424 };
425 
426 //************************************************************
427 //   SdrUndoObjOrdNum
428 //************************************************************
429 
430 class SdrUndoObjOrdNum : public SdrUndoObj
431 {
432 protected:
433     sal_uInt32                      nOldOrdNum;
434     sal_uInt32                      nNewOrdNum;
435 
436 public:
437     SdrUndoObjOrdNum(SdrObject& rNewObj, sal_uInt32 nOldOrdNum1, sal_uInt32 nNewOrdNum1);
438     virtual ~SdrUndoObjOrdNum() {}
439 
440     virtual void Undo();
441     virtual void Redo();
442 
443     virtual String   GetComment() const;
444 };
445 
446 //////////////////////////////////////////////////////////////////////////////
447 // #i11702#
448 
449 class SVX_DLLPUBLIC SdrUndoObjectLayerChange : public SdrUndoObj
450 {
451 protected:
452     SdrLayerID                  maOldLayer;
453     SdrLayerID                  maNewLayer;
454 
455 public:
456     SdrUndoObjectLayerChange(SdrObject& rObj, SdrLayerID aOldLayer, SdrLayerID aNewLayer);
457     virtual ~SdrUndoObjectLayerChange() {}
458 
459     virtual void Undo();
460     virtual void Redo();
461 };
462 
463 //************************************************************
464 //   SdrUndoObjSetText
465 //************************************************************
466 
467 class SVX_DLLPUBLIC SdrUndoObjSetText : public SdrUndoObj
468 {
469 protected:
470     OutlinerParaObject*         pOldText;
471     OutlinerParaObject*         pNewText;
472     FASTBOOL                    bNewTextAvailable;
473     sal_Bool                        bEmptyPresObj;
474     sal_Int32                   mnText;
475 
476 public:
477     SdrUndoObjSetText(SdrObject& rNewObj, sal_Int32 nText );
478     virtual ~SdrUndoObjSetText();
479 
480     FASTBOOL IsDifferent() const { return pOldText!=pNewText; }
481     void AfterSetText();
482 
483     virtual void Undo();
484     virtual void Redo();
485 
486     virtual String GetComment() const;
487     virtual String GetSdrRepeatComment(SdrView& rView) const;
488 
489     virtual void SdrRepeat(SdrView& rView);
490     virtual bool CanSdrRepeat(SdrView& rView) const;
491 };
492 
493 // --> OD 2009-07-09 #i73249#
494 class SdrUndoObjStrAttr : public SdrUndoObj
495 {
496 public:
497     enum ObjStrAttrType
498     {
499         OBJ_NAME,
500         OBJ_TITLE,
501         OBJ_DESCRIPTION
502     };
503 
504 protected:
505     const ObjStrAttrType meObjStrAttr;
506     const String msOldStr;
507     const String msNewStr;
508 
509 public:
510     SdrUndoObjStrAttr( SdrObject& rNewObj,
511                        const ObjStrAttrType eObjStrAttr,
512                        const String& sOldStr,
513                        const String& sNewStr);
514     virtual ~SdrUndoObjStrAttr() {}
515 
516     virtual void Undo();
517     virtual void Redo();
518 
519     virtual String GetComment() const;
520 };
521 // <--
522 
523 ////////////////////////////////////////////////////////////////////////////////////////////////////
524 //
525 //  @@     @@@@  @@  @@ @@@@@ @@@@@
526 //  @@    @@  @@ @@  @@ @@    @@  @@
527 //  @@    @@  @@ @@  @@ @@    @@  @@
528 //  @@    @@@@@@  @@@@  @@@@  @@@@@
529 //  @@    @@  @@   @@   @@    @@  @@
530 //  @@    @@  @@   @@   @@    @@  @@
531 //  @@@@@ @@  @@   @@   @@@@@ @@  @@
532 //
533 ////////////////////////////////////////////////////////////////////////////////////////////////////
534 
535 //************************************************************
536 //   SdrUndoLayer
537 //
538 // Abstrakte Basisklasse fuer alle UndoActions die mit SdrLayer zu tun haben.
539 //
540 //************************************************************
541 
542 class SdrUndoLayer : public SdrUndoAction
543 {
544 protected:
545     SdrLayer*                   pLayer;
546     SdrLayerAdmin*              pLayerAdmin;
547     sal_uInt16                      nNum;
548     FASTBOOL                    bItsMine;
549 
550 protected:
551     SdrUndoLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel);
552 public:
553     virtual ~SdrUndoLayer();
554 };
555 
556 //************************************************************
557 //   SdrUndoNewLayer
558 //
559 // Einfuegen eines neuen Layer. Action nach dem Einfuegen konstruieren.
560 //
561 //************************************************************
562 
563 class SdrUndoNewLayer : public SdrUndoLayer
564 {
565 public:
566     SdrUndoNewLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel)
567     : SdrUndoLayer(nLayerNum,rNewLayerAdmin,rNewModel) {}
568     virtual ~SdrUndoNewLayer() {}
569 
570     virtual void Undo();
571     virtual void Redo();
572 
573     virtual String GetComment() const;
574 };
575 
576 //************************************************************
577 //   SdrUndoDelLayer
578 //
579 // Loeschen eines Layer. Action vor dem Remove konstruieren
580 //
581 //************************************************************
582 
583 class SdrUndoDelLayer : public SdrUndoLayer
584 {
585 public:
586     SdrUndoDelLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel)
587     : SdrUndoLayer(nLayerNum,rNewLayerAdmin,rNewModel) { bItsMine=sal_True; }
588     virtual ~SdrUndoDelLayer() {}
589 
590     virtual void Undo();
591     virtual void Redo();
592 
593     virtual String GetComment() const;
594 };
595 
596 //************************************************************
597 //   SdrUndoMoveLayer
598 //
599 // Verschieben eines Layer. Action vor dem Verschieben konstruieren.
600 //
601 //************************************************************
602 
603 class SdrUndoMoveLayer : public SdrUndoLayer
604 {
605     sal_uInt16                      nNeuPos;
606 
607 public:
608     SdrUndoMoveLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel, sal_uInt16 nNeuPos1)
609     :   SdrUndoLayer(nLayerNum,rNewLayerAdmin,rNewModel), nNeuPos(nNeuPos1) {}
610     virtual ~SdrUndoMoveLayer() {}
611 
612     virtual void Undo();
613     virtual void Redo();
614 
615     virtual String GetComment() const;
616 };
617 
618 ////////////////////////////////////////////////////////////////////////////////////////////////////
619 //
620 //  @@@@@   @@@@   @@@@  @@@@@  @@@@
621 //  @@  @@ @@  @@ @@  @@ @@    @@  @@
622 //  @@  @@ @@  @@ @@     @@    @@
623 //  @@@@@  @@@@@@ @@ @@@ @@@@   @@@@
624 //  @@     @@  @@ @@  @@ @@        @@
625 //  @@     @@  @@ @@  @@ @@    @@  @@
626 //  @@     @@  @@  @@@@@ @@@@@  @@@@
627 //
628 ////////////////////////////////////////////////////////////////////////////////////////////////////
629 
630 //************************************************************
631 //   SdrUndoPage
632 //
633 // Abstrakte Basisklasse fuer alle UndoActions die mit SdrPages zu tun haben.
634 //
635 //************************************************************
636 
637 class SVX_DLLPUBLIC SdrUndoPage : public SdrUndoAction
638 {
639 protected:
640     SdrPage&                    mrPage;
641 
642 protected:
643     void ImpInsertPage(sal_uInt16 nNum);
644     void ImpRemovePage(sal_uInt16 nNum);
645     void ImpMovePage(sal_uInt16 nOldNum, sal_uInt16 nNewNum);
646 
647 protected:
648     SdrUndoPage(SdrPage& rNewPg);
649     virtual ~SdrUndoPage() {}
650 
651     void ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, String& rStr, sal_uInt16 n=0, FASTBOOL bRepeat=sal_False) const;
652 };
653 
654 //************************************************************
655 //   SdrUndoPageList
656 //
657 // Manipulationen an einer PageList: Neue Page, DeletePage, MovePage(ChangePageNum)
658 // Abstrakte Basisklasse.
659 //
660 //************************************************************
661 
662 class SVX_DLLPUBLIC SdrUndoPageList : public SdrUndoPage
663 {
664 protected:
665     sal_uInt16                      nPageNum;
666 
667     // Bei einem Undo/Redo findet moeglicherweise Uebereignung der Page
668     // statt. Im Dtor wird die Page deleted, wenn bItsMine==TRUE
669     FASTBOOL                    bItsMine;
670 
671 protected:
672     SdrUndoPageList(SdrPage& rNewPg);
673     virtual ~SdrUndoPageList();
674 };
675 
676 //************************************************************
677 //   SdrUndoDelPage
678 //
679 // Loeschen einer Page.
680 // Action vor dem entfernen aus der List konstruieren.
681 //
682 //************************************************************
683 
684 class SVX_DLLPUBLIC SdrUndoDelPage : public SdrUndoPageList
685 {
686     // Beim loeschen einer MasterPage merke ich mir in dieser UndoGroup
687     // alle Beziehungen der Zeichenseiten zu der geloeschten MasterPage
688     SdrUndoGroup*               pUndoGroup;
689 
690 public:
691     SdrUndoDelPage(SdrPage& rNewPg);
692     virtual ~SdrUndoDelPage();
693 
694     virtual void Undo();
695     virtual void Redo();
696 
697     virtual String GetComment() const;
698     virtual String GetSdrRepeatComment(SdrView& rView) const;
699 
700     virtual void SdrRepeat(SdrView& rView);
701     virtual bool CanSdrRepeat(SdrView& rView) const;
702 };
703 
704 //************************************************************
705 //   SdrUndoNewPage
706 //
707 // Einfuegen einer neuen Page.
708 // Action nach dem einfuegen in die Liste konstruieren.
709 //
710 //************************************************************
711 
712 class SVX_DLLPUBLIC SdrUndoNewPage : public SdrUndoPageList
713 {
714 public:
715     SdrUndoNewPage(SdrPage& rNewPg): SdrUndoPageList(rNewPg) {}
716     virtual ~SdrUndoNewPage() {}
717 
718     virtual void Undo();
719     virtual void Redo();
720 
721     virtual String GetComment() const;
722 };
723 
724 //************************************************************
725 //   SdrUndoCopyPage
726 //
727 // Kopieren einer Page
728 // Action nach dem einfuegen in die Liste konstruieren.
729 //
730 //************************************************************
731 
732 class SdrUndoCopyPage : public SdrUndoNewPage
733 {
734 public:
735     SdrUndoCopyPage(SdrPage& rNewPg): SdrUndoNewPage(rNewPg) {}
736     virtual ~SdrUndoCopyPage() {}
737 
738     virtual String GetComment() const;
739     virtual String GetSdrRepeatComment(SdrView& rView) const;
740 
741     virtual void SdrRepeat(SdrView& rView);
742     virtual bool CanSdrRepeat(SdrView& rView) const;
743 };
744 
745 //************************************************************
746 //   SdrUndoSetPageNum
747 //
748 // Verschieben der Page innerhalb der Liste
749 // Action vor dem Verschieben der Page konstruieren.
750 //
751 //************************************************************
752 
753 class SVX_DLLPUBLIC SdrUndoSetPageNum : public SdrUndoPage
754 {
755 protected:
756     sal_uInt16                      nOldPageNum;
757     sal_uInt16                      nNewPageNum;
758 
759 public:
760     SdrUndoSetPageNum(SdrPage& rNewPg, sal_uInt16 nOldPageNum1, sal_uInt16 nNewPageNum1)
761     :   SdrUndoPage(rNewPg),nOldPageNum(nOldPageNum1),nNewPageNum(nNewPageNum1) {}
762     virtual ~SdrUndoSetPageNum() {}
763 
764     virtual void Undo();
765     virtual void Redo();
766 
767     virtual String GetComment() const;
768 };
769 
770 ////////////////////////////////////////////////////////////////////////////////////////////////////
771 //
772 //  @@   @@  @@@@   @@@@  @@@@@@ @@@@@ @@@@@   @@@@@   @@@@   @@@@  @@@@@  @@@@
773 //  @@@ @@@ @@  @@ @@  @@   @@   @@    @@  @@  @@  @@ @@  @@ @@  @@ @@    @@  @@
774 //  @@@@@@@ @@  @@ @@       @@   @@    @@  @@  @@  @@ @@  @@ @@     @@    @@
775 //  @@@@@@@ @@@@@@  @@@@    @@   @@@@  @@@@@   @@@@@  @@@@@@ @@ @@@ @@@@   @@@@
776 //  @@ @ @@ @@  @@     @@   @@   @@    @@  @@  @@     @@  @@ @@  @@ @@        @@
777 //  @@   @@ @@  @@ @@  @@   @@   @@    @@  @@  @@     @@  @@ @@  @@ @@    @@  @@
778 //  @@   @@ @@  @@  @@@@    @@   @@@@@ @@  @@  @@     @@  @@  @@@@@ @@@@@  @@@@
779 //
780 ////////////////////////////////////////////////////////////////////////////////////////////////////
781 
782 //************************************************************
783 //   SdrUndoPageMasterPage
784 //
785 // Abstrakte Basisklasse fuer alle UndoActions die mit
786 // MasterPage-Beziehungen zu tun haben.
787 //
788 //************************************************************
789 
790 class SdrUndoPageMasterPage : public SdrUndoPage
791 {
792 protected:
793     sal_Bool                    mbOldHadMasterPage;
794     SetOfByte                   maOldSet;
795     sal_uInt16                  maOldMasterPageNumber;
796 
797 protected:
798     SdrUndoPageMasterPage(SdrPage& rChangedPage);
799 
800 public:
801     SVX_DLLPUBLIC virtual ~SdrUndoPageMasterPage();
802 };
803 
804 //************************************************************
805 //   SdrUndoPageRemoveMasterPage
806 //
807 // Entfernen einer MasterPage von einer Zeichenseite.
808 // Action vor dem Entfernen des MasterPageDescriptors erzeugen.
809 //
810 //************************************************************
811 
812 class SdrUndoPageRemoveMasterPage : public SdrUndoPageMasterPage
813 {
814 public:
815     SdrUndoPageRemoveMasterPage(SdrPage& rChangedPage);
816 
817     virtual void Undo();
818     virtual void Redo();
819 
820     virtual String GetComment() const;
821 };
822 
823 //************************************************************
824 //   SdrUndoPageChangeMasterPage
825 //
826 // Aenderung des MasterPageDescriptors (z.B. Aendern der VisibleLayer).
827 // Action vor der Aenderung am MasterPageDescriptor erzeugen.
828 //
829 //************************************************************
830 
831 class SVX_DLLPUBLIC SdrUndoPageChangeMasterPage : public SdrUndoPageMasterPage
832 {
833 protected:
834     sal_Bool                    mbNewHadMasterPage;
835     SetOfByte                   maNewSet;
836     sal_uInt16                  maNewMasterPageNumber;
837 
838 public:
839     SdrUndoPageChangeMasterPage(SdrPage& rChangedPage);
840     virtual ~SdrUndoPageChangeMasterPage() {}
841 
842     virtual void Undo();
843     virtual void Redo();
844 
845     virtual String GetComment() const;
846 };
847 
848 ///////////////////////////////////////////////////////////////////////
849 
850 /** the SdrUndoFactory can be set and retrieved from the SdrModel.
851     It is used by the drawing layer implementations to create undo actions.
852     It can be used by applications to create application specific undo actions.
853 */
854 class SVX_DLLPUBLIC SdrUndoFactory
855 {
856 public:
857     // shapes
858     virtual ~SdrUndoFactory();
859     virtual SdrUndoAction* CreateUndoMoveObject( SdrObject& rObject );
860     virtual SdrUndoAction* CreateUndoMoveObject( SdrObject& rObject, const Size& rDist );
861     virtual SdrUndoAction* CreateUndoGeoObject( SdrObject& rObject );
862     virtual SdrUndoAction* CreateUndoAttrObject( SdrObject& rObject, bool bStyleSheet1 = false, bool bSaveText = false );
863     virtual SdrUndoAction* CreateUndoRemoveObject( SdrObject& rObject, bool bOrdNumDirect = false);
864     virtual SdrUndoAction* CreateUndoInsertObject( SdrObject& rObject, bool bOrdNumDirect = false);
865     virtual SdrUndoAction* CreateUndoDeleteObject( SdrObject& rObject, bool bOrdNumDirect = false);
866     virtual SdrUndoAction* CreateUndoNewObject( SdrObject& rObject, bool bOrdNumDirect = false);
867     virtual SdrUndoAction* CreateUndoCopyObject( SdrObject& rObject, bool bOrdNumDirect = false);
868 
869     virtual SdrUndoAction* CreateUndoObjectOrdNum( SdrObject& rObject, sal_uInt32 nOldOrdNum1, sal_uInt32 nNewOrdNum1);
870 
871     virtual SdrUndoAction* CreateUndoReplaceObject( SdrObject& rOldObject, SdrObject& rNewObject, bool bOrdNumDirect = false );
872     virtual SdrUndoAction* CreateUndoObjectLayerChange( SdrObject& rObject, SdrLayerID aOldLayer, SdrLayerID aNewLayer );
873     virtual SdrUndoAction* CreateUndoObjectSetText( SdrObject& rNewObj, sal_Int32 nText );
874 
875     // --> OD 2009-07-09 #i73249#
876     virtual SdrUndoAction* CreateUndoObjectStrAttr( SdrObject& rObject,
877                                                     SdrUndoObjStrAttr::ObjStrAttrType eObjStrAttrType,
878                                                     String sOldStr,
879                                                     String sNewStr );
880     // <--
881 
882     // layer
883     virtual SdrUndoAction* CreateUndoNewLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel);
884     virtual SdrUndoAction* CreateUndoDeleteLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel);
885     virtual SdrUndoAction* CreateUndoMoveLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel, sal_uInt16 nNeuPos1);
886 
887     // page
888     virtual SdrUndoAction*  CreateUndoDeletePage(SdrPage& rPage);
889     virtual SdrUndoAction* CreateUndoNewPage(SdrPage& rPage);
890     virtual SdrUndoAction* CreateUndoCopyPage(SdrPage& rPage);
891     virtual SdrUndoAction* CreateUndoSetPageNum(SdrPage& rNewPg, sal_uInt16 nOldPageNum1, sal_uInt16 nNewPageNum1);
892 
893     // master page
894     virtual SdrUndoAction* CreateUndoPageRemoveMasterPage(SdrPage& rChangedPage);
895     virtual SdrUndoAction* CreateUndoPageChangeMasterPage(SdrPage& rChangedPage);
896 };
897 
898 ////////////////////////////////////////////////////////////////////////////////////////////////////
899 
900 #endif //_SVDUNDO_HXX
901 
902