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