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