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 _SVDEDTV_HXX
30 : : #define _SVDEDTV_HXX
31 : :
32 : : #include <svx/svdmrkv.hxx>
33 : : #include <svx/xpoly.hxx>
34 : : #include <svx/svdmodel.hxx>
35 : : #include "svx/svxdllapi.h"
36 : :
37 : : //************************************************************
38 : : // Vorausdeklarationen
39 : : //************************************************************
40 : :
41 : : class SfxUndoAction;
42 : : class SdrUndoAction;
43 : : class SdrUndoGroup;
44 : : class SfxStyleSheet;
45 : : class SdrLayer;
46 : : class SvdProgressInfo;
47 : :
48 : : //************************************************************
49 : : // Defines
50 : : //************************************************************
51 : :
52 : : enum SdrHorAlign {
53 : : SDRHALIGN_NONE,
54 : : SDRHALIGN_LEFT,
55 : : SDRHALIGN_RIGHT,
56 : : SDRHALIGN_CENTER
57 : : };
58 : :
59 : : enum SdrVertAlign {
60 : : SDRVALIGN_NONE,
61 : : SDRVALIGN_TOP,
62 : : SDRVALIGN_BOTTOM,
63 : : SDRVALIGN_CENTER
64 : : };
65 : :
66 : : enum SdrMergeMode {
67 : : SDR_MERGE_MERGE,
68 : : SDR_MERGE_SUBSTRACT,
69 : : SDR_MERGE_INTERSECT
70 : : };
71 : :
72 : : // Optionen fuer InsertObject()
73 : : #define SDRINSERT_DONTMARK 0x0001 /* Obj wird nicht markiert (aktuelle Markierung bleibt bestehen) */
74 : : #define SDRINSERT_ADDMARK 0x0002 /* Das Obj wird zu einer ggf. bereits bestehenden Selektion hinzumarkiert */
75 : : #define SDRINSERT_SETDEFATTR 0x0004 /* Die aktuellen Attribute (+StyleSheet) werden dem Obj zugewiesen */
76 : : #define SDRINSERT_SETDEFLAYER 0x0008 /* Der aktuelle Layer wird dem Obj zugewiesen */
77 : : #define SDRINSERT_NOBROADCAST 0x0010 /* Einfuegen mit NbcInsertObject() fuer SolidDragging */
78 : :
79 : : ////////////////////////////////////////////////////////////////////////////////////////////////////
80 : : ////////////////////////////////////////////////////////////////////////////////////////////////////
81 : : //
82 : : // @@@@@ @@@@@ @@ @@@@@@ @@ @@ @@ @@@@@ @@ @@
83 : : // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@
84 : : // @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@
85 : : // @@@@ @@ @@ @@ @@ @@@@@ @@ @@@@ @@@@@@@
86 : : // @@ @@ @@ @@ @@ @@@ @@ @@ @@@@@@@
87 : : // @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@
88 : : // @@@@@ @@@@@ @@ @@ @ @@ @@@@@ @@ @@
89 : : //
90 : : ////////////////////////////////////////////////////////////////////////////////////////////////////
91 : : ////////////////////////////////////////////////////////////////////////////////////////////////////
92 : :
93 : : class SVX_DLLPUBLIC SdrEditView: public SdrMarkView
94 : : {
95 : : friend class SdrPageView;
96 : : friend class SdrDragDistort;
97 : : friend class SdrDragCrook;
98 : :
99 : : protected:
100 : :
101 : : // Die Transformationsnachfragen, etc. etwas cachen
102 : : unsigned bPossibilitiesDirty : 1;
103 : : unsigned bReadOnly : 1;
104 : : unsigned bGroupPossible : 1;
105 : : unsigned bUnGroupPossible : 1;
106 : : unsigned bGrpEnterPossible : 1;
107 : : unsigned bDeletePossible : 1;
108 : : unsigned bToTopPossible : 1;
109 : : unsigned bToBtmPossible : 1;
110 : : unsigned bReverseOrderPossible : 1;
111 : : unsigned bImportMtfPossible : 1;
112 : : unsigned bCombinePossible : 1;
113 : : unsigned bDismantlePossible : 1;
114 : : unsigned bCombineNoPolyPolyPossible : 1;
115 : : unsigned bDismantleMakeLinesPossible : 1;
116 : : unsigned bOrthoDesiredOnMarked : 1;
117 : : unsigned bMoreThanOneNotMovable : 1; // Es ist mehr als ein Objekt nicht verschiebbar
118 : : unsigned bOneOrMoreMovable : 1; // Wenigstens 1 Obj verschiebbar
119 : : unsigned bMoreThanOneNoMovRot : 1; // Es ist mehr als ein Objekt nicht verschieb- und drehbar (Crook)
120 : : unsigned bContortionPossible : 1; // Alles Polygone (ggf. gruppiert)
121 : : unsigned bAllPolys : 1; // Alles Polygone (nicht gruppiert)
122 : : unsigned bOneOrMorePolys : 1; // Mindestens 1 Polygon (nicht gruppiert)
123 : : unsigned bMoveAllowed : 1;
124 : : unsigned bResizeFreeAllowed : 1;
125 : : unsigned bResizePropAllowed : 1;
126 : : unsigned bRotateFreeAllowed : 1;
127 : : unsigned bRotate90Allowed : 1;
128 : : unsigned bMirrorFreeAllowed : 1;
129 : : unsigned bMirror45Allowed : 1;
130 : : unsigned bMirror90Allowed : 1;
131 : : unsigned bShearAllowed : 1;
132 : : unsigned bEdgeRadiusAllowed : 1;
133 : : unsigned bTransparenceAllowed : 1;
134 : : unsigned bGradientAllowed : 1;
135 : : unsigned bCanConvToPath : 1;
136 : : unsigned bCanConvToPoly : 1;
137 : : unsigned bCanConvToContour : 1;
138 : : unsigned bCanConvToPathLineToArea : 1;
139 : : unsigned bCanConvToPolyLineToArea : 1;
140 : : unsigned bMoveProtect : 1;
141 : : unsigned bResizeProtect : 1;
142 : : // Z-Order von virtuellen Objekten zusammenhalten (Writer)
143 : : unsigned bBundleVirtObj : 1;
144 : :
145 : : private:
146 : : SVX_DLLPRIVATE void ImpClearVars();
147 : : SVX_DLLPRIVATE void ImpResetPossibilityFlags();
148 : :
149 : : protected:
150 : : void ImpBroadcastEdgesOfMarkedNodes();
151 : :
152 : : // Konvertierung der markierten Objekte in Poly bzw. Bezier.
153 : : void ImpConvertTo(sal_Bool bPath, sal_Bool bLineToArea);
154 : :
155 : : // Konvertiert ein Obj, wirft bei Erfolg das alte as seiner Liste und
156 : : // fuegt das neue an dessen Position ein. Inkl Undo. Es wird weder ein
157 : : // MarkEntry noch ein ModelChgBroadcast generiert.
158 : : SdrObject* ImpConvertOneObj(SdrObject* pObj, sal_Bool bPath, sal_Bool bLineToArea);
159 : :
160 : : // Setzen der beiden Flags bToTopPossible und bToBtmPossible.
161 : : // bToTopPossibleDirty und bToBtmPossibleDirty werden dabei gleichzeitig
162 : : // zurueckgesetzt.
163 : : void ImpCheckToTopBtmPossible();
164 : :
165 : : // fuer CombineMarkedObjects und DismantleMarkedObjects
166 : : void ImpCopyAttributes(const SdrObject* pSource, SdrObject* pDest) const;
167 : :
168 : : // fuer CombineMarkedObjects
169 : : sal_Bool ImpCanConvertForCombine1(const SdrObject* pObj) const;
170 : : sal_Bool ImpCanConvertForCombine(const SdrObject* pObj) const;
171 : : basegfx::B2DPolyPolygon ImpGetPolyPolygon1(const SdrObject* pObj, sal_Bool bCombine) const;
172 : : basegfx::B2DPolyPolygon ImpGetPolyPolygon(const SdrObject* pObj, sal_Bool bCombine) const;
173 : : basegfx::B2DPolygon ImpCombineToSinglePolygon(const basegfx::B2DPolyPolygon& rPolyPolygon) const;
174 : :
175 : : // fuer DismantleMarkedObjects
176 : : sal_Bool ImpCanDismantle(const basegfx::B2DPolyPolygon& rPpolyPpolygon, sal_Bool bMakeLines) const;
177 : : sal_Bool ImpCanDismantle(const SdrObject* pObj, sal_Bool bMakeLines) const;
178 : : void ImpDismantleOneObject(const SdrObject* pObj, SdrObjList& rOL, sal_uIntPtr& rPos, SdrPageView* pPV, sal_Bool bMakeLines);
179 : : void ImpCrookObj(SdrObject* pO, const Point& rRef, const Point& rRad, SdrCrookMode eMode,
180 : : sal_Bool bVertical, sal_Bool bNoContortion, sal_Bool bRotate, const Rectangle& rMarkRect);
181 : : void ImpDistortObj(SdrObject* pO, const Rectangle& rRef, const XPolygon& rDistortedRect, sal_Bool bNoContortion);
182 : : sal_Bool ImpDelLayerCheck(SdrObjList* pOL, SdrLayerID nDelID) const;
183 : : void ImpDelLayerDelObjs(SdrObjList* pOL, SdrLayerID nDelID);
184 : :
185 : : // Entfernt alle Obj der MarkList aus ihren ObjLists inkl Undo.
186 : : // Die Eintraege in rMark bleiben erhalten.
187 : : void DeleteMarkedList(const SdrMarkList& rMark); // DeleteMarked -> DeleteMarkedList
188 : :
189 : : // Die Transformationsnachfragen etwas cachen
190 : : //void ImpCheckMarkTransform() const; veraltet
191 : : // Checken, was man so mit den markierten Objekten alles machen kann
192 : : virtual void CheckPossibilities();
193 [ + + ][ + + ]: 31923 : void ForcePossibilities() const { if (bPossibilitiesDirty || bSomeObjChgdFlag) ((SdrEditView*)this)->CheckPossibilities(); }
194 : :
195 : : protected:
196 : : // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
197 : : SdrEditView(SdrModel* pModel1, OutputDevice* pOut = 0L);
198 : : virtual ~SdrEditView();
199 : :
200 : : public:
201 : : // Jeder Aufruf einer undofaehigen Methode an der View generiert eine
202 : : // UndoAction. Moechte man mehrere
203 : : // Methodenaufrufe zu einer UndoAction zusammenfassen, so kann man diese
204 : : // mit BegUndo() / EndUndo() klammern (beliebig tief). Als Kommentar der
205 : : // UndoAction wird der des ersten BegUndo(String) aller Klammerungen
206 : : // verwendet. NotifyNewUndoAction() wird in diesem Fall erst beim letzten
207 : : // EndUndo() gerufen. NotifyNewUndoAction() wird nicht gerufen bei einer
208 : : // leeren Klammerung.
209 : 0 : void BegUndo() { pMod->BegUndo(); } // Undo-Klammerung auf
210 : 0 : void BegUndo(const String& rComment) { pMod->BegUndo(rComment); } // Undo-Klammerung auf
211 : : void BegUndo(const String& rComment, const String& rObjDescr, SdrRepeatFunc eFunc=SDRREPFUNC_OBJ_NONE) { pMod->BegUndo(rComment,rObjDescr,eFunc); } // Undo-Klammerung auf
212 : : void EndUndo(); // Undo-Klammerung zu (inkl BroadcastEdges)
213 : 0 : void AddUndo(SdrUndoAction* pUndo) { pMod->AddUndo(pUndo); } // Action hinzufuegen
214 : : // nur nach dem 1. BegUndo oder vor dem letzten EndUndo:
215 : : void SetUndoComment(const String& rComment) { pMod->SetUndoComment(rComment); }
216 : : void SetUndoComment(const String& rComment, const String& rObjDescr) { pMod->SetUndoComment(rComment,rObjDescr); }
217 : : bool IsUndoEnabled() const;
218 : :
219 : : std::vector< SdrUndoAction* > CreateConnectorUndo( SdrObject& rO );
220 : : void AddUndoActions( std::vector< SdrUndoAction* >& );
221 : :
222 : : // Layerverwaltung. Mit Undo.
223 : : SdrLayer* InsertNewLayer(const String& rName, sal_uInt16 nPos=0xFFFF);
224 : : // Loeschen eines Layer inkl. aller darauf befindlichen Objekte
225 : : void DeleteLayer(const String& rName);
226 : : // Verschieben eines Layer (Layerreihenfolge aendern)
227 : : void MoveLayer(const String& rName, sal_uInt16 nNewPos);
228 : :
229 : : // Markierte Objekte die ausserhalb ihrer Page liegen
230 : : // werden ggf. einer anderen Page zugewiesen
231 : : // z.Zt. noch ohne Undo!!!
232 : : void ForceMarkedObjToAnotherPage();
233 : 0 : void ForceMarkedToAnotherPage() { ForceMarkedObjToAnotherPage(); }
234 : :
235 : : sal_Bool IsReadOnly() const { ForcePossibilities(); return bReadOnly; }
236 : :
237 : : // Loeschen aller markierten Objekte
238 : : void DeleteMarkedObj();
239 : : sal_Bool IsDeleteMarkedObjPossible() const { ForcePossibilities(); return bDeletePossible; }
240 : :
241 : : // Logisch- umschliessendes Rect aller markierten Objekte setzen.
242 : : // Das das wirklich geschieht ist nicht garantiert, denn eine
243 : : // waagerechte Linie hat z.B. immer eine Hoehe von 0.
244 : : void SetMarkedObjRect(const Rectangle& rRect, sal_Bool bCopy=sal_False);
245 : : void MoveMarkedObj(const Size& rSiz, bool bCopy=false);
246 : : void ResizeMarkedObj(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bCopy=false);
247 : : long GetMarkedObjRotate() const;
248 : : void RotateMarkedObj(const Point& rRef, long nWink, bool bCopy=false);
249 : : void MirrorMarkedObj(const Point& rRef1, const Point& rRef2, bool bCopy=false);
250 : : void MirrorMarkedObjHorizontal(sal_Bool bCopy=sal_False);
251 : : void MirrorMarkedObjVertical(sal_Bool bCopy=sal_False);
252 : : long GetMarkedObjShear() const;
253 : : void ShearMarkedObj(const Point& rRef, long nWink, bool bVShear=false, bool bCopy=false);
254 : : void CrookMarkedObj(const Point& rRef, const Point& rRad, SdrCrookMode eMode, bool bVertical=false, bool bNoContortion=false, bool bCopy=false);
255 : : void DistortMarkedObj(const Rectangle& rRef, const XPolygon& rDistortedRect, bool bNoContortion=false, bool bCopy=false);
256 : :
257 : : // Markierte Objekte kopieren und anstelle der alten markieren
258 : : void CopyMarkedObj();
259 : 0 : void SetAllMarkedRect(const Rectangle& rRect, sal_Bool bCopy=sal_False) { SetMarkedObjRect(rRect,bCopy); }
260 : 0 : void MoveAllMarked(const Size& rSiz, sal_Bool bCopy=sal_False) { MoveMarkedObj (rSiz,bCopy); }
261 : 0 : void ResizeAllMarked(const Point& rRef, const Fraction& xFact, const Fraction& yFact, sal_Bool bCopy=sal_False) { ResizeMarkedObj (rRef,xFact,yFact,bCopy); }
262 : : long GetAllMarkedRotate() const { return GetMarkedObjRotate(); }
263 : 0 : void RotateAllMarked(const Point& rRef, long nWink, sal_Bool bCopy=sal_False) { RotateMarkedObj(rRef,nWink,bCopy); }
264 : : void MirrorAllMarked(const Point& rRef1, const Point& rRef2, sal_Bool bCopy=sal_False) { MirrorMarkedObj(rRef1,rRef2,bCopy); }
265 : 0 : void MirrorAllMarkedHorizontal(sal_Bool bCopy=sal_False) { MirrorMarkedObjHorizontal(bCopy); }
266 : 0 : void MirrorAllMarkedVertical(sal_Bool bCopy=sal_False) { MirrorMarkedObjVertical(bCopy); }
267 : : long GetAllMarkedShear() const { return GetMarkedObjShear(); }
268 : : void ShearAllMarked(const Point& rRef, long nWink, sal_Bool bVShear=sal_False, sal_Bool bCopy=sal_False) { ShearMarkedObj(rRef,nWink,bVShear,bCopy); }
269 : : void CrookAllMarked(const Point& rRef, const Point& rRad, SdrCrookMode eMode, sal_Bool bVertical=sal_False, sal_Bool bNoContortion=sal_False, sal_Bool bCopy=sal_False) { CrookMarkedObj(rRef,rRad,eMode,bVertical,bNoContortion,bCopy); }
270 : 0 : void CopyMarked() { CopyMarkedObj(); }
271 [ # # ][ # # ]: 0 : sal_Bool IsMoveAllowed() const { ForcePossibilities(); return bMoveAllowed && !bMoveProtect; }
272 : : sal_Bool IsResizeAllowed(sal_Bool bProp=sal_False) const;
273 : : sal_Bool IsRotateAllowed(sal_Bool b90Deg=sal_False) const;
274 : : sal_Bool IsMirrorAllowed(sal_Bool b45Deg=sal_False, sal_Bool b90Deg=sal_False) const;
275 : : sal_Bool IsTransparenceAllowed() const;
276 : : sal_Bool IsGradientAllowed() const;
277 : : sal_Bool IsShearAllowed() const;
278 : : sal_Bool IsEdgeRadiusAllowed() const;
279 : : sal_Bool IsCrookAllowed(sal_Bool bNoContortion=sal_False) const;
280 : : sal_Bool IsDistortAllowed(sal_Bool bNoContortion=sal_False) const;
281 : :
282 : : // Vereinigen mehrerer Objekte zu einem PolyPolygon:
283 : : // - Rechtecke/Kreise/Text... werden implizit gewandelt.
284 : : // - Polylines werden automatisch geschlossen.
285 : : // - Die Attribute und der Layer werden vom Ersten der markierten Objekte
286 : : // uebernommen (also vom untersten der Z-Order).
287 : : // - Gruppenobjekte werden miteinbezogen, wenn alle! Memberobjekte der
288 : : // Gruppe wandelbar sind. Beinhaltet eine Gruppe also beispielsweise
289 : : // eine Bitmap oder ein OLE-Objekt, wird die gesamte Gruppe nicht
290 : : // beruecksichtigt.
291 : : // bNoPolyPoly=TRUE: Alles wird zu einem einzigen Polygon zusammengefasst
292 : : void CombineMarkedObjects(sal_Bool bNoPolyPoly = sal_True);
293 : :
294 : : // for combining multiple polygons, with direct support of the modes
295 : : // SID_POLY_MERGE, SID_POLY_SUBSTRACT, SID_POLY_INTERSECT
296 : : void MergeMarkedObjects(SdrMergeMode eMode);
297 : :
298 : : // for distribution dialog function
299 : : void DistributeMarkedObjects();
300 : :
301 : : // Markierte Polypolygonobjekte in Polygone zerlegen
302 : : // Gruppenobjekte werden durchsucht und zerlegt, wenn es sich bei allen
303 : : // Memberobjekten um PathObjs handelt.
304 : : // bMakeLines=TRUE: alle Polygone werden in einzelne Linien bzw.
305 : : // Beziersegmente zerlegt
306 : : void DismantleMarkedObjects(sal_Bool bMakeLines=sal_False);
307 : : sal_Bool IsCombinePossible(sal_Bool bNoPolyPoly=sal_False) const;
308 : : sal_Bool IsDismantlePossible(sal_Bool bMakeLines=sal_False) const;
309 : :
310 : : // Ein neues bereits fertig konstruiertes Obj einfuegen. Das Obj gehoert
311 : : // anschliessend dem Model. Nach dem Einfuegen wird das neue Objekt
312 : : // markiert (wenn dies nicht via nOptions unterbunden wird).
313 : : // U.U. wird das Obj jedoch nicht eingefuegt, sondern deleted, naemlich
314 : : // wenn der Ziel-Layer gesperrt oder nicht sichtbar ist. In diesem Fall
315 : : // returniert die Methode mit FALSE.
316 : : // Die Methode generiert u.a. auch eine Undo-Action.
317 : : sal_Bool InsertObjectAtView(SdrObject* pObj, SdrPageView& rPV, sal_uIntPtr nOptions=0);
318 : :
319 : : // Ein Zeichenobjekt durch ein neues ersetzen. *pNewObj gehoert
320 : : // anschliessend mir, *pOldObj wandert ins Undo.
321 : : // Sollte in jedem Fall mit einer Undo-Klammerung versehen werden, z.B.:
322 : : // aStr+=" ersetzen";
323 : : // BegUndo(aStr);
324 : : // ReplaceObject(...);
325 : : // ...
326 : : // EndUndo();
327 : : void ReplaceObjectAtView(SdrObject* pOldObj, SdrPageView& rPV, SdrObject* pNewObj, sal_Bool bMark=sal_True);
328 : :
329 : : void SetNotPersistAttrToMarked(const SfxItemSet& rAttr, sal_Bool bReplaceAll);
330 : : void MergeNotPersistAttrFromMarked(SfxItemSet& rAttr, sal_Bool bOnlyHardAttr) const;
331 : : void MergeAttrFromMarked(SfxItemSet& rAttr, sal_Bool bOnlyHardAttr) const;
332 : : SfxItemSet GetAttrFromMarked(sal_Bool bOnlyHardAttr) const;
333 : : void SetAttrToMarked(const SfxItemSet& rAttr, sal_Bool bReplaceAll);
334 : :
335 : : // Geometrische Attribute (Position, Groesse, Drehwinkel)
336 : : // Bei der Position wird ein evtl. gesetzter PageOrigin beruecksichtigt.
337 : : SfxItemSet GetGeoAttrFromMarked() const;
338 : : void SetGeoAttrToMarked(const SfxItemSet& rAttr);
339 : :
340 : : // Returnt NULL wenn:
341 : : // - Nix markiert,
342 : : // - kein StyleSheet an den markierten Objekten gesetzt
343 : : // - Bei Mehrfachselektion die markierten Objekte auf unterschiedliche
344 : : // StyleSheets verweisen.
345 : : SfxStyleSheet* GetStyleSheetFromMarked() const;
346 : :
347 : : // z.Zt. noch ohne Undo :(
348 : : void SetStyleSheetToMarked(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr);
349 : :
350 : : /* new interface src537 */
351 : : sal_Bool GetAttributes(SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr) const;
352 : :
353 : : sal_Bool SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll);
354 : : SfxStyleSheet* GetStyleSheet() const; // SfxStyleSheet* GetStyleSheet(sal_Bool& rOk) const;
355 : : sal_Bool SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr);
356 : :
357 : : // Alle markierten Objekte zu einer Gruppe zusammenfassen.
358 : : // Anschliessend wird die neue Gruppe markiert. Bei einer
359 : : // seitenuebergreifenden Markierung wird eine Gruppe je Seite erzeugt.
360 : : // Alle erzeugten Gruppen sind anschliessend markiert.
361 : : // Ueber pUserGrp kann ein eigenes Gruppenobjekt vorgegeben werden. Dieses
362 : : // wird jedoch nicht direkt verwendet, sondern via Clone kopiert.
363 : : // Wird NULL uebergeben, macht sich die Methode SdrObjGroup-Instanzen.
364 : : void GroupMarked(const SdrObject* pUserGrp=NULL);
365 : :
366 : : // Alle markierten Objektgruppen werden aufgeloesst (1 Level).
367 : : // Anschliessend sind statt der Gruppenobjekte alle ehemaligen
368 : : // Memberobjekte der aufgeloesten Gruppen markiert. Waren zum auch Objekte
369 : : // markiert, die keine Gruppenobjekte sind, so bleiben diese weiterhin
370 : : // zusaetzlich markiert.
371 : : void UnGroupMarked();
372 : :
373 : 0 : sal_Bool IsGroupPossible() const { ForcePossibilities(); return bGroupPossible; }
374 : 0 : sal_Bool IsUnGroupPossible() const { ForcePossibilities(); return bUnGroupPossible; }
375 : 0 : sal_Bool IsGroupEnterPossible() const { ForcePossibilities(); return bGrpEnterPossible; }
376 : :
377 : : // Markierte Objekte in Polygone/Bezierkurven verwandeln. Die sal_Bool-
378 : : // Funktionen returnen sal_True, wenn wenigstens eins der markierten
379 : : // Objekte gewandelt werden kann. Memberobjekte von Gruppenobjekten
380 : : // werden ebenfalls gewandelt. Naehere Beschreibung siehe SdrObj.HXX.
381 [ - + ]: 6386 : sal_Bool IsConvertToPathObjPossible(sal_Bool bLineToArea) const { ForcePossibilities(); return sal_Bool(bLineToArea ? bCanConvToPathLineToArea : bCanConvToPath); }
382 [ - + ]: 12770 : sal_Bool IsConvertToPolyObjPossible(sal_Bool bLineToArea) const { ForcePossibilities(); return sal_Bool(bLineToArea ? bCanConvToPolyLineToArea : bCanConvToPoly); }
383 : 6382 : sal_Bool IsConvertToContourPossible() const { ForcePossibilities(); return bCanConvToContour; }
384 : : void ConvertMarkedToPathObj(sal_Bool bLineToArea);
385 : : void ConvertMarkedToPolyObj(sal_Bool bLineToArea);
386 : :
387 : : // Alle markierten Objekte untereinander ausrichten. Normalerweise werden
388 : : // das SnapRect der Obj verwendet. Ist bBoundRects=sal_True, werden stattdessen
389 : : // die BoundRects ausgerichtet.
390 : : void AlignMarkedObjects(SdrHorAlign eHor, SdrVertAlign eVert, sal_Bool bBoundRects=sal_False);
391 : : sal_Bool IsAlignPossible() const;
392 : :
393 : : // Markierte Objekte etwas nach "oben" holen
394 : : void MovMarkedToTop();
395 : :
396 : : // Markierte Objekte etwas nach "unten" holen
397 : : void MovMarkedToBtm();
398 : :
399 : : // Markierte Objekte ganz nach "oben" stellen
400 : : void PutMarkedToTop();
401 : :
402 : : // Markierte Objekte ganz nach "unten" stellen
403 : : void PutMarkedToBtm();
404 : :
405 : : // Markierte direkt vor das uebergebene Objekt stellen
406 : : // NULL -> wie PutMarkedToTop();
407 : : void PutMarkedInFrontOfObj(const SdrObject* pRefObj);
408 : :
409 : : // Markierte direkt hinter das uebergebene Objekt stellen
410 : : // NULL -> wie PutMarkedToBtm();
411 : : void PutMarkedBehindObj(const SdrObject* pRefObj);
412 : :
413 : : // Z-Order der markierten Objekte vertauschen
414 : : void ReverseOrderOfMarked();
415 : :
416 : : // Feststellen, ob nach vorn/hinten stellen moeglich ist
417 : : // GetMaxToTop/BtmObj() wird von diesen Methoden nur begrenzt
418 : : // beruecksichtigt, d.h. es kann vorkommen dass IsToTopPossible()
419 : : // sal_True liefert, MovMarkedToTop() jedoch nichts aendert (z.B. bei
420 : : // Mehrfachselektion), weil eine von der abgeleiteten View ueber
421 : : // GetMaxToTopObj() auferlegte Restriktion dies verhindert.
422 : : sal_Bool IsToTopPossible() const { ForcePossibilities(); return bToTopPossible; }
423 : : sal_Bool IsToBtmPossible() const { ForcePossibilities(); return bToBtmPossible; }
424 : 6385 : sal_Bool IsReverseOrderPossible() const { ForcePossibilities(); return bReverseOrderPossible; }
425 : :
426 : : // Ueber diese Methoden stellt die View fest, wie weit ein Objekt
427 : : // nach vorn bzw. nach hinten gestellt werden darf (Z-Order). Das
428 : : // zurueckgegebene Objekt wird dann nicht "ueberholt". Bei Rueckgabe
429 : : // von NULL (Defaultverhalten) bestehen keine Restriktionen.
430 : : virtual SdrObject* GetMaxToTopObj(SdrObject* pObj) const;
431 : : virtual SdrObject* GetMaxToBtmObj(SdrObject* pObj) const;
432 : :
433 : : // Folgende Methode wird gerufen, wenn z.B. durch ToTop, ToBtm, ... die
434 : : // Reihenfolgen der Objekte geaendert wurde. Der Aufruf erfolgt dann nach
435 : : // jedem SdrObjList::SetObjectOrdNum(nOldPos,nNewPos);
436 : : virtual void ObjOrderChanged(SdrObject* pObj, sal_uIntPtr nOldPos, sal_uIntPtr nNewPos);
437 : :
438 : : // Falls ein oder mehrere Objekte des Types SdrGrafObj oder SdrOle2Obj
439 : : // markiert sind und diese in der Lage sind ein StarView-Metafile zu
440 : : // liefern, konvertiert diese Methode das Metafile in Drawingobjekte.
441 : : // Die SdrGrafObjs/SdrOle2Objs werden dann durch die neue Objekte ersetzt.
442 : : void DoImportMarkedMtf(SvdProgressInfo *pProgrInfo=NULL);
443 : 0 : sal_Bool IsImportMtfPossible() const { ForcePossibilities(); return bImportMtfPossible; }
444 : :
445 : : // Wird der Modus VirtualObjectBundling eingeschaltet, werden beim
446 : : // ToTop/ToBtm virtuelle Objekte die dasselbe Objekt referenzieren
447 : : // in ihrer Z-Order buendig zusammengehalten (Writer).
448 : : // Defaulteinstellung ist sal_False=ausgeschaltet.
449 : 1337 : void SetVirtualObjectBundling(sal_Bool bOn) { bBundleVirtObj=bOn; }
450 : : sal_Bool IsVirtualObjectBundling() const { return bBundleVirtObj; }
451 : :
452 : : // von der SdrMarkView ueberladen fuer den internen gebrauch
453 : : virtual void MarkListHasChanged();
454 : : virtual void ModelHasChanged();
455 : : };
456 : :
457 : : #endif //_SVDEDTV_HXX
458 : :
459 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|