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