1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: svdundo.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
35 #include <bf_svtools/solar.hrc>
38 #ifndef _UNDO_HXX //autogen
39 #include <bf_svtools/undo.hxx>
42 #ifndef _CONTNR_HXX //autogen
43 #include <tools/contnr.hxx>
46 #ifndef _GEN_HXX //autogen
47 #include <tools/gen.hxx>
51 #include <bf_svx/svdtypes.hxx> // fuer enum RepeatFuncts
53 #include <tools/debug.hxx>
57 //************************************************************
58 // Vorausdeklarationen
59 //************************************************************
70 class OutlinerParaObject
;
71 class SdrMasterPageDescriptor
;
73 //************************************************************
76 // Abstrakte Basisklasse fuer alle UndoActions der DrawingEngine
78 //************************************************************
80 class SdrUndoAction
: public SfxUndoAction
86 SdrUndoAction(SdrModel
& rNewMod
)
95 //************************************************************
98 // Zusammenfassung beliebig vieler einzelner UndoActions zu einer einzigen
99 // UndoAction. Beim Undo() werden die Einzelactions rueckwaets aufgerufen
100 // (die zuletzt angehaengte zuerst...), beim Redo() dagegen entspricht die
101 // Aufrufreihenfolge der Einfuegereihenfolge.
103 //************************************************************
105 class SdrUndoGroup
: public SdrUndoAction
110 // Beschreibung der Action, nicht expandiert (beinhaltet %O)
112 String aObjDescription
;
114 SdrRepeatFunc eFunction
;
117 SdrUndoGroup(SdrModel
& rNewMod
);
118 virtual ~SdrUndoGroup();
121 ULONG
GetActionCount() const { return aBuf
.Count(); }
122 SdrUndoAction
* GetAction(ULONG nNum
) const { return (SdrUndoAction
*)(aBuf
.GetObject(nNum
)); }
123 void AddAction(SdrUndoAction
* pAct
);
125 void SetComment(const String
& rStr
) { aComment
=rStr
; }
130 //************************************************************
133 // Abstrakte Basisklasse fuer alle UndoActions die mit Objekten zu tun haben.
135 //************************************************************
137 class SdrUndoObj
: public SdrUndoAction
143 SdrUndoObj(SdrObject
& rNewObj
);
146 //************************************************************
149 // Aenderung der Objektattribute.
150 // Action direkt vor dem Setzen der neuen Attribute konstruieren.
151 // Auch fuer StyleSheets
153 //************************************************************
156 //************************************************************
159 // Blosses verschieben eines Objektes.
160 // Action direkt vor dem Verschieben konstruieren.
162 //************************************************************
164 class SdrUndoMoveObj
: public SdrUndoObj
167 Size aDistance
; // Entfernung, um die verschoben wird
170 SdrUndoMoveObj(SdrObject
& rNewObj
, const Size
& rDist
): SdrUndoObj(rNewObj
),aDistance(rDist
) {}
173 //************************************************************
176 // Aenderung der Geometrie eines Objektes.
177 // Action direkt vor der geometrischen Transformation konstruieren.
179 //************************************************************
181 class SdrUndoGeoObj
: public SdrUndoObj
184 SdrObjGeoData
* pUndoGeo
;
185 SdrObjGeoData
* pRedoGeo
;
186 // Wenn sich um ein Gruppenobjekt handelt:
187 SdrUndoGroup
* pUndoGroup
;
190 SdrUndoGeoObj(SdrObject
& rNewObj
);
191 virtual ~SdrUndoGeoObj();
196 //************************************************************
199 // Manipulationen an einer ObjList: Neues Obj, DeleteObj, SetObjZLevel, Grouping, ...
200 // Abstrakte Basisklasse.
202 //************************************************************
204 class SdrUndoObjList
: public SdrUndoObj
{
208 SdrObjList
* pObjList
;
209 SdrView
* pView
; // um bei ObjDel, Undo die
210 SdrPageView
* pPageView
; // Selektion widerherstellen zu koennen
212 // Bei einem Undo/Redo findet moeglicherweise Uebereignung des Objektes
213 // statt. Im Dtor wird das Obj deleted, wenn bOwner==TRUE
216 SdrUndoObjList(SdrObject
& rNewObj
, FASTBOOL bOrdNumDirect
=FALSE
);
217 virtual ~SdrUndoObjList();
219 void SetView(SdrView
* pView1
, SdrPageView
* pPageView1
) { pView
=pView1
; pPageView
=pPageView1
; }
220 BOOL
IsOwner() { return bOwner
; }
223 //************************************************************
226 // Entfernen Objekts aus einer Objektliste. Innerhalb einer UndoGroup
227 // mit korrospondierenden Inserts zu verwenden.
228 // Action vor dem entfernen aus der ObjList konstruieren.
230 //************************************************************
232 class SdrUndoRemoveObj
: public SdrUndoObjList
235 SdrUndoRemoveObj(SdrObject
& rNewObj
, FASTBOOL bOrdNumDirect
=FALSE
)
236 : SdrUndoObjList(rNewObj
,bOrdNumDirect
) {}
240 //************************************************************
243 // Einfuegen Objekts in eine Objektliste. Innerhalb einer UndoGroup
244 // mit korrospondierenden Removes zu verwenden.
245 // Action vor dem entfernen aus der ObjList konstruieren.
247 //************************************************************
249 class SdrUndoInsertObj
: public SdrUndoObjList
252 SdrUndoInsertObj(SdrObject
& rNewObj
, FASTBOOL bOrdNumDirect
=FALSE
)
253 : SdrUndoObjList(rNewObj
,bOrdNumDirect
) {}
256 //************************************************************
259 // Loeschen eines Objekts.
260 // Action vor dem entfernen aus der ObjList konstruieren.
262 //************************************************************
264 class SdrUndoDelObj
: public SdrUndoRemoveObj
267 SdrUndoDelObj(SdrObject
& rNewObj
, FASTBOOL bOrdNumDirect
=FALSE
)
268 : SdrUndoRemoveObj(rNewObj
,bOrdNumDirect
) {DBG_ASSERT(0, "STRIP");}//STRIP001 : SdrUndoRemoveObj(rNewObj,bOrdNumDirect) { SetOwner(TRUE); }
272 //************************************************************
275 // Einfuegen eines neuen Objektes.
276 // Action nach dem einfuegen in die ObjList konstruieren.
278 //************************************************************
281 //************************************************************
284 // Austausch eines Objektes.
285 // Action vor dem Replace an der ObjList konstruieren.
287 //************************************************************
290 //************************************************************
293 // Kopieren eines Objekts
294 // Action nach dem einfuegen in die ObjList konstruieren.
296 //************************************************************
299 //************************************************************
301 //************************************************************
304 //////////////////////////////////////////////////////////////////////////////
307 class SdrUndoObjectLayerChange
: public SdrUndoObj
310 SdrLayerID maOldLayer
;
311 SdrLayerID maNewLayer
;
314 SdrUndoObjectLayerChange(SdrObject
& rObj
, SdrLayerID aOldLayer
, SdrLayerID aNewLayer
);
320 //************************************************************
322 //************************************************************
325 ////////////////////////////////////////////////////////////////////////////////////////////////////
327 // @@ @@@@ @@ @@ @@@@@ @@@@@
328 // @@ @@ @@ @@ @@ @@ @@ @@
329 // @@ @@ @@ @@ @@ @@ @@ @@
330 // @@ @@@@@@ @@@@ @@@@ @@@@@
331 // @@ @@ @@ @@ @@ @@ @@
332 // @@ @@ @@ @@ @@ @@ @@
333 // @@@@@ @@ @@ @@ @@@@@ @@ @@
335 ////////////////////////////////////////////////////////////////////////////////////////////////////
337 //************************************************************
340 // Abstrakte Basisklasse fuer alle UndoActions die mit SdrLayer zu tun haben.
342 //************************************************************
345 //************************************************************
348 // Einfuegen eines neuen Layer. Action nach dem Einfuegen konstruieren.
350 //************************************************************
353 //************************************************************
356 // Loeschen eines Layer. Action vor dem Remove konstruieren
358 //************************************************************
361 //************************************************************
364 // Verschieben eines Layer. Action vor dem Verschieben konstruieren.
366 //************************************************************
369 ////////////////////////////////////////////////////////////////////////////////////////////////////
371 // @@@@@ @@@@ @@@@ @@@@@ @@@@
372 // @@ @@ @@ @@ @@ @@ @@ @@ @@
373 // @@ @@ @@ @@ @@ @@ @@
374 // @@@@@ @@@@@@ @@ @@@ @@@@ @@@@
375 // @@ @@ @@ @@ @@ @@ @@
376 // @@ @@ @@ @@ @@ @@ @@ @@
377 // @@ @@ @@ @@@@@ @@@@@ @@@@
379 ////////////////////////////////////////////////////////////////////////////////////////////////////
381 //************************************************************
384 // Abstrakte Basisklasse fuer alle UndoActions die mit SdrPages zu tun haben.
386 //************************************************************
388 class SdrUndoPage
: public SdrUndoAction
395 SdrUndoPage(SdrPage
& rNewPg
);
398 //************************************************************
401 // Manipulationen an einer PageList: Neue Page, DeletePage, MovePage(ChangePageNum)
402 // Abstrakte Basisklasse.
404 //************************************************************
406 class SdrUndoPageList
: public SdrUndoPage
411 // Bei einem Undo/Redo findet moeglicherweise Uebereignung der Page
412 // statt. Im Dtor wird die Page deleted, wenn bItsMine==TRUE
416 SdrUndoPageList(SdrPage
& rNewPg
);
417 virtual ~SdrUndoPageList();
420 //************************************************************
423 // Loeschen einer Page.
424 // Action vor dem entfernen aus der List konstruieren.
426 //************************************************************
429 //************************************************************
432 // Einfuegen einer neuen Page.
433 // Action nach dem einfuegen in die Liste konstruieren.
435 //************************************************************
437 class SdrUndoNewPage
: public SdrUndoPageList
440 SdrUndoNewPage(SdrPage
& rNewPg
): SdrUndoPageList(rNewPg
) {}
443 //************************************************************
446 // Kopieren einer Page
447 // Action nach dem einfuegen in die Liste konstruieren.
449 //************************************************************
452 //************************************************************
455 // Verschieben der Page innerhalb der Liste
456 // Action vor dem Verschieben der Page konstruieren.
458 //************************************************************
461 ////////////////////////////////////////////////////////////////////////////////////////////////////
463 // @@ @@ @@@@ @@@@ @@@@@@ @@@@@ @@@@@ @@@@@ @@@@ @@@@ @@@@@ @@@@
464 // @@@ @@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
465 // @@@@@@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
466 // @@@@@@@ @@@@@@ @@@@ @@ @@@@ @@@@@ @@@@@ @@@@@@ @@ @@@ @@@@ @@@@
467 // @@ @ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
468 // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
469 // @@ @@ @@ @@ @@@@ @@ @@@@@ @@ @@ @@ @@ @@ @@@@@ @@@@@ @@@@
471 ////////////////////////////////////////////////////////////////////////////////////////////////////
473 //************************************************************
474 // SdrUndoPageMasterPage
476 // Abstrakte Basisklasse fuer alle UndoActions die mit
477 // MasterPage-Beziehungen zu tun haben.
479 //************************************************************
482 //************************************************************
483 // SdrUndoPageInsertMasterPage
485 // Setzen einer MasterPage an einer Zeichenseite.
486 // Action nach dem Einfuegen des MasterPageDescriptors erzeugen.
488 //************************************************************
491 //************************************************************
492 // SdrUndoPageRemoveMasterPage
494 // Entfernen einer MasterPage von einer Zeichenseite.
495 // Action vor dem Entfernen des MasterPageDescriptors erzeugen.
497 //************************************************************
500 //************************************************************
501 // SdrUndoPageMoveMasterPage
503 // Verschieben einer MasterPage an einer Zeichenseite (Aendern
504 // der Reihenfolge der MasterPageDescriptorList).
505 // Action vor dem Umsortieren des MasterPageDescriptors erzeugen.
507 //************************************************************
510 //************************************************************
511 // SdrUndoPageChangeMasterPage
513 // Aenderung des MasterPageDescriptors (z.B. Aendern der VisibleLayer).
514 // Action vor der Aenderung am MasterPageDescriptor erzeugen.
516 //************************************************************
519 ////////////////////////////////////////////////////////////////////////////////////////////////////
521 }//end of namespace binfilter
522 #endif //_SVDUNDO_HXX