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