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