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: svdedtv.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 ************************************************************************/
34 // HACK to avoid too deep includes and to have some
35 // levels free in svdmark itself (MS compiler include depth limit)
37 #include <bf_svx/svdhdl.hxx>
40 #include <bf_svx/svdmrkv.hxx>
43 #include <bf_svx/xpoly.hxx>
47 #include <bf_svx/svdmodel.hxx>
54 //************************************************************
55 // Vorausdeklarationen
56 //************************************************************
61 class SvdProgressInfo
;
63 //************************************************************
65 //************************************************************
87 // Optionen fuer InsertObject()
88 #define SDRINSERT_DONTMARK 0x0001 /* Obj wird nicht markiert (aktuelle Markierung bleibt bestehen) */
89 #define SDRINSERT_ADDMARK 0x0002 /* Das Obj wird zu einer ggf. bereits bestehenden Selektion hinzumarkiert */
90 #define SDRINSERT_SETDEFATTR 0x0004 /* Die aktuellen Attribute (+StyleSheet) werden dem Obj zugewiesen */
91 #define SDRINSERT_SETDEFLAYER 0x0008 /* Der aktuelle Layer wird dem Obj zugewiesen */
92 #define SDRINSERT_NOBROADCAST 0x0010 /* Einfuegen mit NbcInsertObject() fuer SolidDragging */
94 ////////////////////////////////////////////////////////////////////////////////////////////////////
95 ////////////////////////////////////////////////////////////////////////////////////////////////////
97 // @@@@@ @@@@@ @@ @@@@@@ @@ @@ @@ @@@@@ @@ @@
98 // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
99 // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@
100 // @@@@ @@ @@ @@ @@ @@@@@ @@ @@@@ @@@@@@@
101 // @@ @@ @@ @@ @@ @@@ @@ @@ @@@@@@@
102 // @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@
103 // @@@@@ @@@@@ @@ @@ @ @@ @@@@@ @@ @@
105 ////////////////////////////////////////////////////////////////////////////////////////////////////
106 ////////////////////////////////////////////////////////////////////////////////////////////////////
108 class SdrEditView
: public SdrMarkView
110 friend class SdrPageView
;
114 // Die Transformationsnachfragen, etc. etwas cachen
115 unsigned bPossibilitiesDirty
: 1;
116 unsigned bReadOnly
: 1;
117 unsigned bGroupPossible
: 1;
118 unsigned bUnGroupPossible
: 1;
119 unsigned bGrpEnterPossible
: 1;
120 unsigned bDeletePossible
: 1;
121 unsigned bToTopPossible
: 1;
122 unsigned bToBtmPossible
: 1;
123 unsigned bReverseOrderPossible
: 1;
124 unsigned bImportMtfPossible
: 1;
125 unsigned bCombinePossible
: 1;
126 unsigned bDismantlePossible
: 1;
127 unsigned bCombineNoPolyPolyPossible
: 1;
128 unsigned bDismantleMakeLinesPossible
: 1;
129 unsigned bOrthoDesiredOnMarked
: 1;
130 unsigned bMoreThanOneNotMovable
: 1; // Es ist mehr als ein Objekt nicht verschiebbar
131 unsigned bOneOrMoreMovable
: 1; // Wenigstens 1 Obj verschiebbar
132 unsigned bMoreThanOneNoMovRot
: 1; // Es ist mehr als ein Objekt nicht verschieb- und drehbar (Crook)
133 unsigned bContortionPossible
: 1; // Alles Polygone (ggf. gruppiert)
134 unsigned bAllPolys
: 1; // Alles Polygone (nicht gruppiert)
135 unsigned bOneOrMorePolys
: 1; // Mindestens 1 Polygon (nicht gruppiert)
136 unsigned bMoveAllowed
: 1;
137 unsigned bResizeFreeAllowed
: 1;
138 unsigned bResizePropAllowed
: 1;
139 unsigned bRotateFreeAllowed
: 1;
140 unsigned bRotate90Allowed
: 1;
141 unsigned bMirrorFreeAllowed
: 1;
142 unsigned bMirror45Allowed
: 1;
143 unsigned bMirror90Allowed
: 1;
144 unsigned bShearAllowed
: 1;
145 unsigned bEdgeRadiusAllowed
: 1;
146 unsigned bTransparenceAllowed
: 1;
147 unsigned bGradientAllowed
: 1;
148 unsigned bCanConvToPath
: 1;
149 unsigned bCanConvToPoly
: 1;
150 unsigned bCanConvToContour
: 1;
151 unsigned bCanConvToPathLineToArea
: 1;
152 unsigned bCanConvToPolyLineToArea
: 1;
153 unsigned bMoveProtect
: 1;
154 unsigned bResizeProtect
: 1;
155 unsigned bCombineError
: 1;
156 // Z-Order von virtuellen Objekten zusammenhalten (Writer)
157 unsigned bBundleVirtObj
: 1;
161 void ImpResetPossibilityFlags();
165 // Konvertierung der markierten Objekte in Poly bzw. Bezier.
167 // Konvertiert ein Obj, wirft bei Erfolg das alte as seiner Liste und
168 // fuegt das neue an dessen Position ein. Inkl Undo. Es wird weder ein
169 // MarkEntry noch ein ModelChgBroadcast generiert.
171 // Setzen der beiden Flags bToTopPossible und bToBtmPossible.
172 // bToTopPossibleDirty und bToBtmPossibleDirty werden dabei gleichzeitig
174 void ImpCheckToTopBtmPossible();
176 // fuer den Writer werden virtuelle Objekte buendig zusammengehalten (Z-Order)
178 // fuer CombineMarkedObjects und DismantleMarkedObjects
180 // fuer CombineMarkedObjects
182 // fuer DismantleMarkedObjects
184 // Entfernt alle Obj der MarkList aus ihren ObjLists inkl Undo.
185 // Die Eintraege in rMark bleiben erhalten. rMark ist nicht const,
186 // da ein ForceSort() gerufen wird.
188 // Die Transformationsnachfragen etwas cachen
189 //void ImpCheckMarkTransform() const; veraltet
190 // Checken, was man so mit den markierten Objekten alles machen kann
191 virtual void CheckPossibilities();
192 void ForcePossibilities() const { if (bPossibilitiesDirty
|| bSomeObjChgdFlag
) ((SdrEditView
*)this)->CheckPossibilities(); }
195 SdrEditView(SdrModel
* pModel1
, OutputDevice
* pOut
=NULL
);
196 virtual ~SdrEditView();
198 // Jeder Aufruf einer undofaehigen Methode an der View generiert eine
199 // UndoAction. Moechte man mehrere
200 // Methodenaufrufe zu einer UndoAction zusammenfassen, so kann man diese
201 // mit BegUndo() / EndUndo() klammern (beliebig tief). Als Kommentar der
202 // UndoAction wird der des ersten BegUndo(String) aller Klammerungen
203 // verwendet. NotifyNewUndoAction() wird in diesem Fall erst beim letzten
204 // EndUndo() gerufen. NotifyNewUndoAction() wird nicht gerufen bei einer
205 // leeren Klammerung.
207 // nur nach dem 1. BegUndo oder vor dem letzten EndUndo:
209 // nur nach dem 1. BegUndo oder vor dem letzten EndUndo:
212 // Verschieben eines Layer (Layerreihenfolge aendern)
214 // Markierte Objekte die ausserhalb ihrer Page liegen
215 // werden ggf. einer anderen Page zugewiesen
216 // z.Zt. noch ohne Undo!!!
218 BOOL
IsReadOnly() const { ForcePossibilities(); return bReadOnly
; }
220 // Loeschen aller markierten Objekte
221 BOOL
IsDeleteMarkedObjPossible() const { ForcePossibilities(); return bDeletePossible
; }
223 // Logisch- umschliessendes Rect aller markierten Objekte setzen.
224 // Das das wirklich geschieht ist nicht garantiert, denn eine
225 // waagerechte Linie hat z.B. immer eine Hoehe von 0.
227 // Markierte Objekte kopieren und anstelle der alten markieren
228 BOOL
IsMoveAllowed() const { ForcePossibilities(); return bMoveAllowed
&& !bMoveProtect
; }
231 // Geometrische Attribute (Position, Groesse, Drehwinkel)
232 // Bei der Position wird ein evtl. gesetzter PageOrigin beruecksichtigt.
234 // Returnt NULL wenn:
236 // - kein StyleSheet an den markierten Objekten gesetzt
237 // - Bei Mehrfachselektion die markierten Objekte auf unterschiedliche
238 // StyleSheets verweisen.
240 // z.Zt. noch ohne Undo :(
242 /* new interface src537 */
244 BOOL
SetStyleSheet(SfxStyleSheet
* pStyleSheet
, BOOL bDontRemoveHardAttr
);
246 // Alle markierten Objekte zu einer Gruppe zusammenfassen.
247 // Anschliessend wird die neue Gruppe markiert. Bei einer
248 // seitenuebergreifenden Markierung wird eine Gruppe je Seite erzeugt.
249 // Alle erzeugten Gruppen sind anschliessend markiert.
250 // Ueber pUserGrp kann ein eigenes Gruppenobjekt vorgegeben werden. Dieses
251 // wird jedoch nicht direkt verwendet, sondern via Clone kopiert.
252 // Wird NULL uebergeben, macht sich die Methode SdrObjGroup-Instanzen.
253 void GroupMarked(const SdrObject
* pUserGrp
=NULL
);
255 // Alle markierten Objektgruppen werden aufgeloesst (1 Level).
256 // Anschliessend sind statt der Gruppenobjekte alle ehemaligen
257 // Memberobjekte der aufgeloesten Gruppen markiert. Waren zum auch Objekte
258 // markiert, die keine Gruppenobjekte sind, so bleiben diese weiterhin
259 // zusaetzlich markiert.
260 void UnGroupMarked();
262 BOOL
IsGroupPossible() const { ForcePossibilities(); return bGroupPossible
; }
263 BOOL
IsUnGroupPossible() const { ForcePossibilities(); return bUnGroupPossible
; }
264 BOOL
IsGroupEnterPossible() const { ForcePossibilities(); return bGrpEnterPossible
; }
266 // Markierte Objekte in Polygone/Bezierkurven verwandeln. Die BOOL-
267 // Funktionen returnen TRUE, wenn wenigstens eins der markierten
268 // Objekte gewandelt werden kann. Memberobjekte von Gruppenobjekten
269 // werden ebenfalls gewandelt. Naehere Beschreibung siehe SdrObj.HXX.
270 BOOL
IsConvertToPathObjPossible(BOOL bLineToArea
) const { ForcePossibilities(); return bLineToArea
? bCanConvToPathLineToArea
: bCanConvToPath
; }
271 BOOL
IsConvertToPolyObjPossible(BOOL bLineToArea
) const { ForcePossibilities(); return bLineToArea
? bCanConvToPolyLineToArea
: bCanConvToPoly
; }
272 BOOL
IsConvertToContourPossible() const { ForcePossibilities(); return bCanConvToContour
; }
274 // Alle markierten Objekte untereinander ausrichten. Normalerweise werden
275 // das SnapRect der Obj verwendet. Ist bBoundRects=TRUE, werden stattdessen
276 // die BoundRects ausgerichtet.
278 // Markierte Objekte etwas nach "oben" holen
280 // Markierte Objekte etwas nach "unten" holen
282 // Markierte Objekte ganz nach "oben" stellen
284 // Markierte Objekte ganz nach "unten" stellen
286 // Markierte direkt vor das uebergebene Objekt stellen
287 // NULL -> wie PutMarkedToTop();
289 // Markierte direkt hinter das uebergebene Objekt stellen
290 // NULL -> wie PutMarkedToBtm();
292 // Z-Order der markierten Objekte vertauschen
294 // Feststellen, ob nach vorn/hinten stellen moeglich ist
295 // GetMaxToTop/BtmObj() wird von diesen Methoden nur begrenzt
296 // beruecksichtigt, d.h. es kann vorkommen dass IsToTopPossible()
297 // TRUE liefert, MovMarkedToTop() jedoch nichts aendert (z.B. bei
298 // Mehrfachselektion), weil eine von der abgeleiteten View ueber
299 // GetMaxToTopObj() auferlegte Restriktion dies verhindert.
300 BOOL
IsToTopPossible() const { ForcePossibilities(); return bToTopPossible
; }
301 BOOL
IsToBtmPossible() const { ForcePossibilities(); return bToBtmPossible
; }
302 BOOL
IsReverseOrderPossible() const { ForcePossibilities(); return bReverseOrderPossible
; }
304 // Ueber diese Methoden stellt die View fest, wie weit ein Objekt
305 // nach vorn bzw. nach hinten gestellt werden darf (Z-Order). Das
306 // zurueckgegebene Objekt wird dann nicht "ueberholt". Bei Rueckgabe
307 // von NULL (Defaultverhalten) bestehen keine Restriktionen.
309 // Folgende Methode wird gerufen, wenn z.B. durch ToTop, ToBtm, ... die
310 // Reihenfolgen der Objekte geaendert wurde. Der Aufruf erfolgt dann nach
311 // jedem SdrObjList::SetObjectOrdNum(nOldPos,nNewPos);
313 // Falls ein oder mehrere Objekte des Types SdrGrafObj oder SdrOle2Obj
314 // markiert sind und diese in der Lage sind ein StarView-Metafile zu
315 // liefern, konvertiert diese Methode das Metafile in Drawingobjekte.
316 // Die SdrGrafObjs/SdrOle2Objs werden dann durch die neue Objekte ersetzt.
317 BOOL
IsImportMtfPossible() const { ForcePossibilities(); return bImportMtfPossible
; }
319 // Wird der Modus VirtualObjectBundling eingeschaltet, werden beim
320 // ToTop/ToBtm virtuelle Objekte die dasselbe Objekt referenzieren
321 // in ihrer Z-Order buendig zusammengehalten (Writer).
322 // Defaulteinstellung ist FALSE=ausgeschaltet.
323 void SetVirtualObjectBundling(BOOL bOn
) { bBundleVirtObj
=bOn
; }
324 BOOL
IsVirtualObjectBundling() const { return bBundleVirtObj
; }
326 // von der SdrMarkView ueberladen fuer den internen gebrauch
327 virtual void MarkListHasChanged();
328 virtual void ModelHasChanged();
331 }//end of namespace binfilter
332 #endif //_SVDEDTV_HXX