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(); ForcePossibilities() const191 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. BegUndo()207 void BegUndo() { pMod->BegUndo(); } // Undo-Klammerung auf BegUndo(const String & rComment)208 void BegUndo(const String& rComment) { pMod->BegUndo(rComment); } // Undo-Klammerung auf BegUndo(const String & rComment,const String & rObjDescr,SdrRepeatFunc eFunc=SDRREPFUNC_OBJ_NONE)209 void BegUndo(const String& rComment, const String& rObjDescr, SdrRepeatFunc eFunc=SDRREPFUNC_OBJ_NONE) { pMod->BegUndo(rComment,rObjDescr,eFunc); } // Undo-Klammerung auf BegUndo(SdrUndoGroup * pUndoGrp)210 void BegUndo(SdrUndoGroup* pUndoGrp) { pMod->BegUndo(pUndoGrp); } // Undo-Klammerung auf 211 void EndUndo(); // Undo-Klammerung zu (inkl BroadcastEdges) AddUndo(SdrUndoAction * pUndo)212 void AddUndo(SdrUndoAction* pUndo) { pMod->AddUndo(pUndo); } // Action hinzufuegen 213 // nur nach dem 1. BegUndo oder vor dem letzten EndUndo: SetUndoComment(const String & rComment)214 void SetUndoComment(const String& rComment) { pMod->SetUndoComment(rComment); } SetUndoComment(const String & rComment,const String & rObjDescr)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(); ForceMarkedToAnotherPage()232 void ForceMarkedToAnotherPage() { ForceMarkedObjToAnotherPage(); } 233 IsReadOnly() const234 sal_Bool IsReadOnly() const { ForcePossibilities(); return bReadOnly; } 235 236 // Loeschen aller markierten Objekte 237 void DeleteMarkedObj(); IsDeleteMarkedObjPossible() const238 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 void ResizeMultMarkedObj(const Point& rRef, const Fraction& xFact, const Fraction& yFact, const bool bCopy, const bool bWdh, const bool bHgt); 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(); SetAllMarkedRect(const Rectangle & rRect,sal_Bool bCopy=sal_False)259 void SetAllMarkedRect(const Rectangle& rRect, sal_Bool bCopy=sal_False) { SetMarkedObjRect(rRect,bCopy); } MoveAllMarked(const Size & rSiz,sal_Bool bCopy=sal_False)260 void MoveAllMarked(const Size& rSiz, sal_Bool bCopy=sal_False) { MoveMarkedObj (rSiz,bCopy); } ResizeAllMarked(const Point & rRef,const Fraction & xFact,const Fraction & yFact,sal_Bool bCopy=sal_False)261 void ResizeAllMarked(const Point& rRef, const Fraction& xFact, const Fraction& yFact, sal_Bool bCopy=sal_False) { ResizeMarkedObj (rRef,xFact,yFact,bCopy); } GetAllMarkedRotate() const262 long GetAllMarkedRotate() const { return GetMarkedObjRotate(); } RotateAllMarked(const Point & rRef,long nWink,sal_Bool bCopy=sal_False)263 void RotateAllMarked(const Point& rRef, long nWink, sal_Bool bCopy=sal_False) { RotateMarkedObj(rRef,nWink,bCopy); } MirrorAllMarked(const Point & rRef1,const Point & rRef2,sal_Bool bCopy=sal_False)264 void MirrorAllMarked(const Point& rRef1, const Point& rRef2, sal_Bool bCopy=sal_False) { MirrorMarkedObj(rRef1,rRef2,bCopy); } MirrorAllMarkedHorizontal(sal_Bool bCopy=sal_False)265 void MirrorAllMarkedHorizontal(sal_Bool bCopy=sal_False) { MirrorMarkedObjHorizontal(bCopy); } MirrorAllMarkedVertical(sal_Bool bCopy=sal_False)266 void MirrorAllMarkedVertical(sal_Bool bCopy=sal_False) { MirrorMarkedObjVertical(bCopy); } GetAllMarkedShear() const267 long GetAllMarkedShear() const { return GetMarkedObjShear(); } ShearAllMarked(const Point & rRef,long nWink,sal_Bool bVShear=sal_False,sal_Bool bCopy=sal_False)268 void ShearAllMarked(const Point& rRef, long nWink, sal_Bool bVShear=sal_False, sal_Bool bCopy=sal_False) { ShearMarkedObj(rRef,nWink,bVShear,bCopy); } CrookAllMarked(const Point & rRef,const Point & rRad,SdrCrookMode eMode,sal_Bool bVertical=sal_False,sal_Bool bNoContortion=sal_False,sal_Bool bCopy=sal_False)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); } CopyMarked()270 void CopyMarked() { CopyMarkedObj(); } IsMoveAllowed() const271 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 IsGroupPossible() const373 sal_Bool IsGroupPossible() const { ForcePossibilities(); return bGroupPossible; } IsUnGroupPossible() const374 sal_Bool IsUnGroupPossible() const { ForcePossibilities(); return bUnGroupPossible; } IsGroupEnterPossible() const375 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. IsConvertToPathObjPossible(sal_Bool bLineToArea) const381 sal_Bool IsConvertToPathObjPossible(sal_Bool bLineToArea) const { ForcePossibilities(); return sal_Bool(bLineToArea ? bCanConvToPathLineToArea : bCanConvToPath); } IsConvertToPolyObjPossible(sal_Bool bLineToArea) const382 sal_Bool IsConvertToPolyObjPossible(sal_Bool bLineToArea) const { ForcePossibilities(); return sal_Bool(bLineToArea ? bCanConvToPolyLineToArea : bCanConvToPoly); } IsConvertToContourPossible() const383 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. IsToTopPossible() const422 sal_Bool IsToTopPossible() const { ForcePossibilities(); return bToTopPossible; } IsToBtmPossible() const423 sal_Bool IsToBtmPossible() const { ForcePossibilities(); return bToBtmPossible; } IsReverseOrderPossible() const424 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); IsImportMtfPossible() const443 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. SetVirtualObjectBundling(sal_Bool bOn)449 void SetVirtualObjectBundling(sal_Bool bOn) { bBundleVirtObj=bOn; } IsVirtualObjectBundling() const450 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