LibreOffice Module svx (master)  1
svdobj.hxx
Go to the documentation of this file.
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 #pragma once
21 
22 #include <memory>
23 #include <com/sun/star/uno/Any.hxx>
24 #include <cppuhelper/weakref.hxx>
25 #include <rtl/ustring.hxx>
26 #include <vcl/outdev.hxx>
27 #include <svl/lstner.hxx>
28 #include <svl/poolitem.hxx>
29 #include <svl/typedwhich.hxx>
30 #include <tools/degree.hxx>
32 #include <svx/svdtypes.hxx>
33 #include <svx/svdobjkind.hxx>
34 #include <svx/svxdllapi.h>
35 #include <svx/shapeproperty.hxx>
36 #include <tools/link.hxx>
37 #include <tools/weakbase.h>
38 #include <tools/gen.hxx>
39 #include <osl/diagnose.h>
40 #include <typeinfo>
41 
42 #include <unordered_set>
43 
44 class SfxBroadcaster;
45 class AutoTimer;
46 class OutlinerParaObject;
47 class Outliner;
48 class SdrOutliner;
49 class SdrDragStat;
50 class SdrHdl;
51 class SdrHdlList;
52 class SdrItemPool;
53 class SdrModel;
54 class SdrObjList;
55 class SdrObject;
56 class SdrPage;
57 class SdrPageView;
58 class SdrView;
59 class SfxItemSet;
60 class SfxGrabBagItem;
61 class SfxSetItem;
62 class SfxStyleSheet;
63 class SfxUndoAction;
64 class XFillAttrSetItem;
65 class XLineAttrSetItem;
66 class SfxItemPool;
67 namespace tools { class PolyPolygon; }
68 class SfxPoolItem;
69 class SdrVirtObj;
70 class SdrDragView;
71 class SdrObjUserDataList;
72 class SdrObjPlusData;
73 class SdrGluePoint;
74 class SdrGluePointList;
75 class SdrLayerIDSet;
76 class Fraction;
77 enum class PointerStyle;
78 class Graphic;
79 class SvxShape;
80 
81 namespace basegfx
82 {
83  class B2DPoint;
84  class B2DPolyPolygon;
85  class B2DHomMatrix;
86 }
87 
88 namespace sdr { class ObjectUser; }
89 namespace sdr::properties { class BaseProperties; }
90 namespace sdr::contact { class ViewContact; }
91 
92 namespace svx { class PropertyChangeNotifier; }
93 
94 
96 
97 // helper for constructing std::unique_ptr for SdrObjects where a
98 // deleter is needed - here, SdrObject::Free needs to be used.
99 typedef std::unique_ptr< SdrObject, SdrObjectFreeOp > SdrObjectUniquePtr;
100 
101 enum class SdrInventor : sal_uInt32 {
102  Unknown = 0,
103  BasicDialog = sal_uInt32( 'D' | ('L' << 8) | ('G' << 16) | ('1' << 24) ),
104  Default = sal_uInt32( 'S' | ('V' << 8) | ('D' << 16) | ('r' << 24) ),
105  E3d = sal_uInt32( 'E' | ('3' << 8) | ('D' << 16) | ('1' << 24) ),
106  FmForm = sal_uInt32( 'F' | ('M' << 8) | ('0' << 16) | ('1' << 24) ),
107  IMap = sal_uInt32( 'I' | ('M' << 8) | ('A' << 16) | ('P' << 24) ),
108  ReportDesign = sal_uInt32( 'R' | ('P' << 8) | ('T' << 16) | ('1' << 24) ),
109  ScOrSwDraw = sal_uInt32( 'S' | ('C' << 8) | ('3' << 16) | ('0' << 24) ), // Used in sc/ and sw/
110  SgaImap = sal_uInt32( 'S' | ('D' << 8) | ('U' << 16) | ('D' << 24) ),
111  StarDrawUserData = sal_uInt32( 'S' | ('D' << 8) | ('U' << 16) | ('D' << 24) ),
112  Swg = sal_uInt32( 'S' | ('W' << 8) | ('G' << 16) ),
113 };
114 
115 enum class SdrUserCallType {
116  MoveOnly, // only moved, size unchanged
117  Resize, // size and maybe position changed
118  ChangeAttr, // attribute changed. Eventually new size, because of line width
119  Delete, // object is going to be deleted soon, no attributes anymore
120  Inserted, // inserted into an object list (e.g. Page)
121  Removed, // removed from an object list
122  ChildMoveOnly, // a child within a group has changed
123  ChildResize, // a child within a group has changed
124  ChildChangeAttr, // a child within a group has changed
125  ChildDelete, // a child within a group has changed
126  ChildInserted, // a child within a group has changed
127  ChildRemoved // a child within a group has changed
128 };
129 
131 {
132 public:
133  virtual ~SdrObjUserCall();
134  virtual void Changed(const SdrObject& rObj, SdrUserCallType eType, const tools::Rectangle& rOldBoundRect);
135 };
136 
138 {
139 public:
143  sal_uInt16 nTol;
144 
146 };
147 
154 {
156  sal_uInt16 nIdentifier;
157 
158  void operator=(const SdrObjUserData& rData) = delete;
159  bool operator==(const SdrObjUserData& rData) const = delete;
160  bool operator!=(const SdrObjUserData& rData) const = delete;
161 
162 public:
163  SdrObjUserData(SdrInventor nInv, sal_uInt16 nId);
164  SdrObjUserData(const SdrObjUserData& rData);
165  virtual ~SdrObjUserData();
166 
167  virtual std::unique_ptr<SdrObjUserData> Clone(SdrObject* pObj1) const = 0; // #i71039# NULL -> 0
168  SdrInventor GetInventor() const { return nInventor;}
169  sal_uInt16 GetId() const { return nIdentifier;}
170 };
171 
175 class SAL_DLLPUBLIC_RTTI SdrObjGeoData
176 {
177 public:
180  std::unique_ptr<SdrGluePointList>
182  bool bMovProt;
183  bool bSizProt;
184  bool bNoPrint;
186  bool mbVisible;
188 
189 public:
190  SdrObjGeoData();
191  virtual ~SdrObjGeoData();
192 };
193 
198 {
199 public:
200  bool bMoveAllowed : 1; // if false, object cannot be moved
201  bool bResizeFreeAllowed : 1; // if false, object cannot be resized freely
202  bool bResizePropAllowed : 1; // if false, object cannot even be resized proportionally
203  bool bRotateFreeAllowed : 1; // if false, object cannot be rotated freely
204  bool bRotate90Allowed : 1; // if false, object cannot even be rotated in 90 degree steps
205  bool bMirrorFreeAllowed : 1; // if false, object cannot be mirrored freely
206  bool bMirror45Allowed : 1; // if false, object cannot even be mirrored over axes in a 45 degree raster
207  bool bMirror90Allowed : 1; // if false, object cannot even be mirrored over axes in a 90 degree raster
208  bool bTransparenceAllowed : 1; // if false, object does not have an interactive transparence control
209  bool bShearAllowed : 1; // if false, object cannot be sheared
210  bool bEdgeRadiusAllowed : 1;
211  bool bNoOrthoDesired : 1; // is true for Rect; is false for BMP, MTF
212  bool bNoContortion : 1; // if false, contortion not possible (for crook, only true for PathObj and grouped PathObjs)
213  bool bCanConvToPath : 1; // if false, no conversion into PathObj possible
214  bool bCanConvToPoly : 1; // if false, no conversion into PolyObj possible
215  bool bCanConvToContour : 1; // if false, no conversion down to whole contour possible
216  bool bCanConvToPathLineToArea : 1; // if false, no conversion into PathObj with transformation from LineToArea possible
217  bool bCanConvToPolyLineToArea : 1; // if false, no conversion into PolyObj with transformation from LineToArea possible
218 
220 };
221 
223 //
224 // SdrObject
225 // SdrAttrObj
226 // E3dObject
227 // E3dCompoundObject
228 // E3dCubeObj
229 // E3dExtrudeObj
230 // E3dLatheObj
231 // E3dPolygonObj
232 // E3dSphereObj
233 // E3dScene
234 // SdrTextObj
235 // SdrObjCustomShape
236 // OCustomShape
237 // SdrEdgeObj
238 // SdrMeasureObj
239 // SdrPathObj
240 // SdrRectObj
241 // SdrCaptionObj
242 // SdrCircObj
243 // SdrGrafObj
244 // SdrMediaObj
245 // SdrOle2Obj
246 // OOle2Obj
247 // SdrUnoObj
248 // DlgEdObj
249 // DlgEdForm
250 // OUnoObject
251 // FmFormObj
252 // SdrTableObj
253 // SdrObjGroup
254 // SdrPageObj
255 // SdrVirtObj
256 // SwDrawVirtObj
257 // SwVirtFlyDrawObj
258 // SwFlyDrawObj
259 
262 {
263 private:
264  friend class SdrObjListIter;
265  friend class SdrVirtObj;
266  friend class SdrRectObj;
267 
268  // OperationSmiley: Allow at each SdrObject to set a FillGeometryDefiningShape,
269  // so that for SdrObjects where this is set, the definition of a defined FillStyle
270  // will use this, but the local geometry will be filled. This allows to fill
271  // multiple shapes with a unified fill, e.g think about CustomShapes.
272  // Currently this is *only* used for CustomShapes, but may be developed to get a
273  // common mechanism - usages for it are easy to be found. The current limitation
274  // to CustomShapes allows to think about these SdrObjects to 'vanish' during the
275  // lifetime of 'this' - the SdrObjects without SdrPage and SdrModel are used as helper
276  // objects for SdrObjCustomShape and thus their lifetime is limited to the lifetime
277  // of this local object. For unifying this mechanism, some weak reference of
278  // SdrObjects would have to be thought about (not easy with the current implementation).
279  // So - allow *only* EnhancedCustomShape2d (which creates the visualizations for
280  // SdrObjCustomShape) to set this. Already allow unified read to use it - thus already
281  // allowing to implement as standard case for all kinds of SdrObjects.
282  friend class EnhancedCustomShape2d;
284  void setFillGeometryDefiningShape(const SdrObject* pNew) { mpFillGeometryDefiningShape = pNew; }
285 public:
286  const SdrObject* getFillGeometryDefiningShape() const { return mpFillGeometryDefiningShape; }
287 
288 private:
289  // the SdrModel this objects was created with, unchanged during SdrObject lifetime
291 
292 public:
293  // A SdrObject always needs a SdrModel for lifetime (Pool, ...)
294  SdrObject(SdrModel& rSdrModel);
295 
296  // SdrModel/SdrPage access on SdrObject level
297  SdrPage* getSdrPageFromSdrObject() const;
298  SdrModel& getSdrModelFromSdrObject() const;
299 
300  // access to possible children (SdrObjGroup/E3dScene)
301  virtual SdrObjList* getChildrenOfSdrObject() const;
302 
303  // access to parent
304  SdrObjList* getParentSdrObjListFromSdrObject() const;
305  SdrObject* getParentSdrObjectFromSdrObject() const;
306 
307 private:
308  // only allow SetParentAtSdrObjectFromSdrObjList to call setParentOfSdrObject
309  friend void SetParentAtSdrObjectFromSdrObjList(SdrObject& rSdrObject, SdrObjList* pNew);
310  SVX_DLLPRIVATE void setParentOfSdrObject(SdrObjList* pNew);
311 
312 public:
313  // react on model/page change
314  virtual void handlePageChange(SdrPage* pOldPage, SdrPage* pNewPage);
315 
316  void AddObjectUser(sdr::ObjectUser& rNewUser);
317  void RemoveObjectUser(sdr::ObjectUser& rOldUser);
318 
319  sdr::contact::ViewContact& GetViewContact() const;
320 
321  virtual sdr::properties::BaseProperties& GetProperties() const;
322 
323  // DrawContact support: Methods for handling Object changes
324  void ActionChanged() const;
325 
326  static SdrItemPool& GetGlobalDrawObjectItemPool();
327  void SetRelativeWidth( double nValue );
328  void SetRelativeWidthRelation( sal_Int16 eValue );
329  void SetRelativeHeight( double nValue );
330  void SetRelativeHeightRelation( sal_Int16 eValue );
331  const double* GetRelativeWidth() const;
332  sal_Int16 GetRelativeWidthRelation() const;
333  const double* GetRelativeHeight() const;
334  sal_Int16 GetRelativeHeightRelation() const;
335 
336  void SetDiagramData(std::shared_ptr<DiagramDataInterface> pDiagramData);
337  std::shared_ptr<DiagramDataInterface> GetDiagramData() const;
338 
343  virtual void SetRectsDirty(bool bNotMyself = false, bool bRecursive = true);
344 
345  // frees the SdrObject pointed to by the argument
346  // In case the object has an SvxShape, which has the ownership of the object, it
347  // is actually *not* deleted.
348  static void Free( SdrObject*& _rpObject );
349 
350  // this method is only for access from Property objects
351  virtual void SetBoundRectDirty();
352 
353  SfxItemPool & GetObjectItemPool() const;
354 
355  void AddListener(SfxListener& rListener);
356  void RemoveListener(SfxListener& rListener);
357 
358  void AddReference(SdrVirtObj& rVrtObj);
359  void DelReference(SdrVirtObj& rVrtObj);
360  virtual SdrInventor GetObjInventor() const;
361  virtual SdrObjKind GetObjIdentifier() const;
362  virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const;
363 
364  // Layer interface
365  virtual SdrLayerID GetLayer() const;
366  virtual void NbcSetLayer(SdrLayerID nLayer);
367  virtual void SetLayer(SdrLayerID nLayer);
368  // renaming GetSdrLayerIDSet -> getMergedHierarchySdrLayerIDSet to make clear what happens here. rSet needs to be empty.
369  void getMergedHierarchySdrLayerIDSet(SdrLayerIDSet& rSet) const;
370 
371  void SendUserCall(SdrUserCallType eUserCall, const tools::Rectangle& rBoundRect) const;
372 
373  // #i68101#
374  // An object may have a user-set Name (Get/SetName()), e.g SdrGrafObj, SdrObjGroup
375  // or SdrOle2Obj.
376  // It may also have a Title and a Description for accessibility purposes.
377  void SetName(const OUString& rStr, const bool bSetChanged = true);
378  OUString GetName() const;
379  void MakeNameUnique();
380  void MakeNameUnique(std::unordered_set<OUString>& rNameSet);
381  void SetTitle(const OUString& rStr);
382  OUString GetTitle() const;
383  void SetDescription(const OUString& rStr);
384  OUString GetDescription() const;
385 
386  // for group objects
387  bool IsGroupObject() const;
388  virtual SdrObjList* GetSubList() const;
389 
396  sal_uInt32 GetOrdNum() const;
397 
398  // setting the order number should only happen from the model or from the page
399  void SetOrdNum(sal_uInt32 nNum);
400 
401  // GrabBagItem for interim interop purposes
402  void GetGrabBagItem(css::uno::Any& rVal) const;
403 
404  void SetGrabBagItem(const css::uno::Any& rVal);
405 
406  // Return the position in the navigation order for the called object.
407  // Note that this method may update the navigation position of the
408  // called and of other SdrObjects. Therefore this method can not be
409  // const.
410  // @return
411  // If no navigation position has been explicitly defined then the
412  // result of GetOrdNum() is returned.
413  sal_uInt32 GetNavigationPosition() const;
414 
415  // To make clearer that this method may trigger RecalcBoundRect and thus may be
416  // expensive and sometimes problematic (inside a bigger object change You will get
417  // non-useful BoundRects sometimes) i rename that method from GetBoundRect() to
418  // GetCurrentBoundRect().
419  virtual const tools::Rectangle& GetCurrentBoundRect() const;
420 
421  // To have a possibility to get the last calculated BoundRect e.g for producing
422  // the first rectangle for repaints (old and new need to be used) without forcing
423  // a RecalcBoundRect (which may be problematical and expensive sometimes) i add here
424  // a new method for accessing the last BoundRect.
425  virtual const tools::Rectangle& GetLastBoundRect() const;
426 
427  virtual void RecalcBoundRect();
428 
429  void BroadcastObjectChange() const;
430 
431  const SfxBroadcaster* GetBroadcaster() const;
432 
433  // set modified-flag in the model
434  virtual void SetChanged();
435 
436  // Tooling for painting a single object to an OutputDevice. This will be needed as long
437  // as not all painting is changed to use DrawContact objects.
438  void SingleObjectPainter(OutputDevice& rOut) const;
439  bool LineGeometryUsageIsNecessary() const;
440 
441  // RotGrfFlyFrame: If true, this SdrObject supports only limited rotation, that
442  // means no change of the rotation point (only centered) and no shear allowed
443  virtual bool HasLimitedRotation() const;
444 
445  // Returns a copy of the object. Every inherited class must reimplement this (in class Foo
446  // it should be sufficient to do "virtual Foo* CloneSdrObject(...) const { return CloneHelper< Foo >(); }".
447  // Note that this function uses operator= internally.
448  virtual SdrObject* CloneSdrObject(SdrModel& rTargetModel) const;
449 
450  // implemented mainly for the purposes of CloneSdrObject()
451  SdrObject& operator=(const SdrObject& rObj);
452 
453  // TakeObjName...() is for the display in the UI, e.g. "3 frames selected"
454  virtual OUString TakeObjNameSingul() const;
455  virtual OUString TakeObjNamePlural() const;
456 
460  virtual basegfx::B2DPolyPolygon TakeXorPoly() const;
461 
463  virtual basegfx::B2DPolyPolygon TakeContour() const;
464 
476  virtual sal_uInt32 GetHdlCount() const;
477  virtual void AddToPlusHdlList(SdrHdlList& rHdlList, SdrHdl& rHdl) const;
478  virtual void AddToHdlList(SdrHdlList& rHdlList) const;
479  virtual void addCropHandles(SdrHdlList& rTarget) const;
480 
491  virtual bool hasSpecialDrag() const;
492  virtual bool beginSpecialDrag(SdrDragStat& rDrag) const;
493  virtual bool applySpecialDrag(SdrDragStat& rDrag);
494  virtual OUString getSpecialDragComment(const SdrDragStat& rDrag) const;
495  virtual basegfx::B2DPolyPolygon getSpecialDragPoly(const SdrDragStat& rDrag) const;
496 
497  // FullDrag support. This is for standard interactions and for SdrObjOwn
498  // support. If supportsFullDrag() returns true, getFullDragClone has to
499  // return a cloned SdrObject (who's ownership it loses) at which modifications
500  // like Move(), Scale(), etc or applySpecialDrag() will be executed. That
501  // object will be visualized on overlay for full drag, but should not be
502  // part of the model, thus not changing anything since it's only a temporary
503  // helper object for interaction
504  virtual bool supportsFullDrag() const;
505  virtual SdrObjectUniquePtr getFullDragClone() const;
506 
520  virtual bool BegCreate(SdrDragStat& rStat);
521  virtual bool MovCreate(SdrDragStat& rStat); // if true, Xor needs to be repainted
522  virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd);
523  virtual bool BckCreate(SdrDragStat& rStat);
524  virtual void BrkCreate(SdrDragStat& rStat);
525 
527  virtual PointerStyle GetCreatePointer() const;
528 
530  virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const;
531 
537  virtual void NbcMove (const Size& rSiz);
538  virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact);
539  virtual void NbcCrop (const basegfx::B2DPoint& rRef, double fxFact, double fyFact);
540  virtual void NbcRotate(const Point& rRef, Degree100 nAngle, double sn, double cs);
541  // Utility for call sites that don't have sin and cos handy
542  void NbcRotate(const Point& rRef, Degree100 nAngle);
543  virtual void NbcMirror(const Point& rRef1, const Point& rRef2);
544  virtual void NbcShear (const Point& rRef, Degree100 nAngle, double tn, bool bVShear);
545 
546  virtual void Move (const Size& rSiz);
547  virtual void Resize(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bUnsetRelative = true);
548  virtual void Crop (const basegfx::B2DPoint& rRef, double fxFact, double fyFact);
549  virtual void Rotate(const Point& rRef, Degree100 nAngle, double sn, double cs);
550  virtual void Mirror(const Point& rRef1, const Point& rRef2);
551  virtual void Shear (const Point& rRef, Degree100 nAngle, double tn, bool bVShear);
552 
555  virtual void NbcSetRelativePos(const Point& rPnt);
556  virtual void SetRelativePos(const Point& rPnt);
557  virtual Point GetRelativePos() const;
558  void ImpSetAnchorPos(const Point& rPnt);
559  virtual void NbcSetAnchorPos(const Point& rPnt);
560  virtual void SetAnchorPos(const Point& rPnt);
561 
566  virtual void RecalcSnapRect();
567  virtual const tools::Rectangle& GetSnapRect() const;
568  virtual void SetSnapRect(const tools::Rectangle& rRect);
569  virtual void NbcSetSnapRect(const tools::Rectangle& rRect);
570 
571  // Logic Rect: for the Rect for instance without regard to rotation angle, shear, ...
572  virtual const tools::Rectangle& GetLogicRect() const;
573  virtual void SetLogicRect(const tools::Rectangle& rRect);
574  virtual void NbcSetLogicRect(const tools::Rectangle& rRect);
575 
576  // the default is to set the logic rect to the given rectangle rMaxRect. If the shape
577  // has an intrinsic aspect ratio it may set the logic rect so the aspect
578  // ratio is kept but still inside the rectangle rMaxRect.
579  // If bShrinkOnly is set to true, the size of the current logic rect will not
580  // be changed if it is smaller than the given rectangle rMaxRect.
581  virtual void AdjustToMaxRect( const tools::Rectangle& rMaxRect, bool bShrinkOnly = false );
582 
583  // rotation and shear angle
584  virtual Degree100 GetRotateAngle() const;
585  virtual Degree100 GetShearAngle(bool bVertical = false) const;
586 
588  virtual sal_uInt32 GetSnapPointCount() const;
589  virtual Point GetSnapPoint(sal_uInt32 i) const;
590 
591  // For objects, whose points can be moved individually.
592  // (e.g. polygons, polylines, lines)
593  // The points of those objects are selected (if necessary multiselection),
594  // deleted, inserted, or as a multiselection moved or rotated...
595  // Only such objects can have PlusHandles (e.g. the weights of a Bezier curve).
596  virtual bool IsPolyObj() const;
597  virtual sal_uInt32 GetPointCount() const;
598  virtual Point GetPoint(sal_uInt32 i) const;
599  void SetPoint(const Point& rPnt, sal_uInt32 i);
600  virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i);
601 
602  // get all geometrical data for undo/redo
603  virtual SdrObjGeoData* GetGeoData() const;
604  virtual void SetGeoData(const SdrObjGeoData& rGeo);
605 
606  // ItemSet access
607  const SfxItemSet& GetMergedItemSet() const;
608  void SetMergedItem(const SfxPoolItem& rItem);
609  void ClearMergedItem(const sal_uInt16 nWhich = 0);
610  void SetMergedItemSet(const SfxItemSet& rSet, bool bClearAllItems = false);
611  const SfxPoolItem& GetMergedItem(const sal_uInt16 nWhich) const;
612  template<class T>
613  const T& GetMergedItem( TypedWhichId<T> nWhich ) const
614  {
615  return static_cast<const T&>(GetMergedItem(sal_uInt16(nWhich)));
616  }
617 
618  // syntactical sugar for ItemSet accesses
619  void SetMergedItemSetAndBroadcast(const SfxItemSet& rSet, bool bClearAllItems = false);
620 
621  // NotPersistAttr for Layer, ObjName, geometrical transformations etc.
622  void TakeNotPersistAttr(SfxItemSet& rAttr) const;
623  void ApplyNotPersistAttr(const SfxItemSet& rAttr);
624  void NbcApplyNotPersistAttr(const SfxItemSet& rAttr);
625 
626  // if bDontRemoveHardAttr is false, set all attributes, which were set in the style sheet, to their default value
627  // if true, all hard attributes keep their values
628  void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
629  virtual void NbcSetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
630  SfxStyleSheet* GetStyleSheet() const;
631 
632  virtual bool HasTextEdit() const;
633 
634  // keep text in outliner's format
635  // SetOutlinerParaObject: transfer ownership of *pTextObject!
636  void SetOutlinerParaObject(std::unique_ptr<OutlinerParaObject> pTextObject);
637  virtual void NbcSetOutlinerParaObject(std::unique_ptr<OutlinerParaObject> pTextObject);
638  virtual OutlinerParaObject* GetOutlinerParaObject() const;
639  virtual void NbcReformatText();
640 
641  void BurnInStyleSheetAttributes();
642 
643  // macro abilities, e.g. a rectangle as PushButton.
644  virtual bool HasMacro() const;
645  virtual SdrObject* CheckMacroHit (const SdrObjMacroHitRec& rRec) const;
646  virtual PointerStyle GetMacroPointer (const SdrObjMacroHitRec& rRec) const;
647  virtual void PaintMacro (OutputDevice& rOut, const tools::Rectangle& rDirtyRect, const SdrObjMacroHitRec& rRec) const;
648  virtual bool DoMacro (const SdrObjMacroHitRec& rRec);
649  bool IsMacroHit(const SdrObjMacroHitRec& rRec) const;
650 
651  // Connectors
652  // (see also documentation in SvdoEdge.hxx, SdrEdgeObj, as well as SvdGlue.hxx and SvdGlEV.hxx)
653  //
654  // There are nodes and edges. In theory an edge can also be a node, but this isn't implemented yet.
655  // A node has a number of glue points, onto which edges can glued to
656  // An edge can be either
657  // - without any connection to any node,
658  // - or connected on one end to a node, while the other end is not connected,
659  // - or connected on both ends with exactly one node each.
660  // The edge is listener for its up to two nodes.
661  // Whenever a node is moved or resized, all its connected edges follow.
662  // This is also true for SetGluePoint()... on the node.
663  // On the other hand, moving/resizing an edge breaks the connection.
664 
665  // automatic glue points:
666  // a node object must provide four vertex and corner positions
667  // usually 0: top, 1: right, 2: bottom, 3: left
668  virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const;
669 
670  // usually:
671  // 0: top-left, 1: top-right, 2: bottom-right, 3: bottom-left
672  virtual SdrGluePoint GetCornerGluePoint(sal_uInt16 nNum) const;
673 
674  // list of all glue points, can be NULL
675  virtual const SdrGluePointList* GetGluePointList() const;
676 
677  // after changing the GluePointList, one has to call the object's SendRepaintBroadcast!
678  virtual SdrGluePointList* ForceGluePointList();
679 
680  // to be set temporarily when transforming related object(?)
681  void SetGlueReallyAbsolute(bool bOn);
682  void NbcRotateGluePoints(const Point& rRef, Degree100 nAngle, double sn, double cs);
683  void NbcMirrorGluePoints(const Point& rRef1, const Point& rRef2);
684  void NbcShearGluePoints (const Point& rRef, double tn, bool bVShear);
685 
686  // if bTail1 is true, line start, otherwise line end
687  // if pObj is null disconnect
688  virtual void ConnectToNode(bool bTail1, SdrObject* pObj);
689  virtual void DisconnectFromNode(bool bTail1);
690  virtual SdrObject* GetConnectedNode(bool bTail1) const;
691 
692  // sets the writing mode of the object's context
693  // Objects which itself do not support different writing modes will ignore this call.
694  // Objects which support different writing modes, but have an own, explicit writing mode set,
695  // will also ignore this call.
696  // Objects which support different writing modes, and whose own mode is set to css.text.WritingMode2.CONTEXT,
697  // will use the given writing mode to calculate their "effective writing mode".
698  // The behaviour of this method is undefined if you pass css.text.WritingMode2.CONTEXT.
699  // @param _nContextWritingMode
700  // the effective writing mode of the context of the object
701  virtual void SetContextWritingMode( const sal_Int16 _nContextWritingMode );
702 
703  // If an object is able to convert itself into a polygon or into a Bezier curve (or into both),
704  // then the following methods should be overridden.
705  // E.g., convert a RectObj with line width 10, SOLID_PEN into a polygon:
706  // In the bLineToArea=false mode a PolyObj with four supporting points,
707  // line width 10 and SOLID_PEN shall be created.
708  // On the contrary in the bLineToArea=true mode the generated object should
709  // still have a line attribute NULL_PEN, and the line (also line pattern)
710  // itself should be emulated by the polygon area, which thereby can be
711  // manipulated by the user afterwards.
712  // The RectObj therefore can only convert correctly if it has an area attribute NULL_BRUSH.
713  // In this case it would have to:
714  // - set SOLID_BRUSH with the color of the given pen,
715  // - set NULL_PEN, and
716  // - generate tools::PolyPolygon with two polygons with four supporting points each.
717  // In each case the return value is a SdrObject*, because it is also
718  // allowed to return group objects (e.g. for SdrTextObj).
719  // In the case of the conversion from TextObj to PathObj,
720  // both modi (bLineToArea=true/false) would be identical.
721  // The methods' default implementations report "I'm unable to do this" (false/null).
722  virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const;
723  SdrObjectUniquePtr ConvertToPolyObj(bool bBezier, bool bLineToArea) const;
724 
725  // convert this path object to contour object; bForceLineDash converts even
726  // when there is no filled new polygon created from line-to-polygon conversion,
727  // specially used for XLINE_DASH and 3D conversion
728  SdrObject* ConvertToContourObj(SdrObject* pRet, bool bForceLineDash = false) const;
729 private:
730  SdrObject* ImpConvertToContourObj(bool bForceLineDash);
731 public:
732 
733  // if true, reference onto an object
734  bool IsVirtualObj() const { return bVirtObj;}
735 
736  // is true, if object can probably be filled
737  // is false, if object has probably line ends
738  // is invalid, if this is a group object
739  bool IsClosedObj() const { return bClosedObj;}
740 
741  // tdf#118662 reorganize inserted state, no local bool needed anymore,
742  // it depends on being a member of a SdrObjList
743  void InsertedStateChange();
744  bool IsInserted() const { return nullptr != getParentSdrObjListFromSdrObject(); }
745 
746  bool IsEdgeObj() const { return bIsEdge;}
747  bool Is3DObj() const { return bIs3DObj;}
748  bool IsUnoObj() const { return bIsUnoObj;}
749  void SetMoveProtect(bool bProt);
750  bool IsMoveProtect() const { return bMovProt;}
751  void SetResizeProtect(bool bProt);
752  bool IsResizeProtect() const { return bSizProt;}
753  void SetPrintable(bool bPrn);
754  bool IsPrintable() const { return !bNoPrint;}
755  void SetVisible(bool bVisible);
756  bool IsVisible() const { return mbVisible;}
757  void SetMarkProtect(bool bProt);
758  bool IsMarkProtect() const { return bMarkProt;}
759 
761  virtual bool shouldKeepAspectRatio() const { return false; }
762 
763  // application specific data
764  sal_uInt16 GetUserDataCount() const;
765  SdrObjUserData* GetUserData(sal_uInt16 nNum) const;
766 
767  void AppendUserData(std::unique_ptr<SdrObjUserData> pData);
768 
769  // removes the record from the list and performs delete (FreeMem+Dtor).
770  void DeleteUserData(sal_uInt16 nNum);
771 
772  // access to the UNO representation of the shape
773  virtual css::uno::Reference< css::uno::XInterface > getUnoShape();
774 
775  static SdrObject* getSdrObjectFromXShape( const css::uno::Reference< css::uno::XInterface >& xInt );
776 
777  // retrieves the instance responsible for notifying changes in the properties of the shape associated with
778  // the SdrObject
779  //
780  // @precond
781  // There already exists an SvxShape instance associated with the SdrObject
782  // @throws css::uno::RuntimeException
783  // if there does nt yet exists an SvxShape instance associated with the SdrObject.
784  svx::PropertyChangeNotifier& getShapePropertyChangeNotifier();
785 
786  // notifies a change in the given property, to all applicable listeners registered at the associated SvxShape
787  //
788  // This method is equivalent to calling getShapePropertyChangeNotifier().notifyPropertyChange( _eProperty ),
789  // exception that it is allowed to be called when there does not yet exist an associated SvxShape - in which
790  // case the method will silently return without doing anything.
791  void notifyShapePropertyChange( const svx::ShapeProperty _eProperty ) const;
792 
793  // transformation interface for StarOfficeAPI. This implements support for
794  // homogen 3x3 matrices containing the transformation of the SdrObject. At the
795  // moment it contains a shearX, rotation and translation, but for setting all linear
796  // transforms like Scale, ShearX, ShearY, Rotate and Translate are supported.
797  //
798  // gets base transformation and rectangle of object. If it's an SdrPathObj it fills the PolyPolygon
799  // with the base geometry and returns TRUE. Otherwise it returns FALSE.
800  virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const;
801 
802  // sets the base geometry of the object using infos contained in the homogen 3x3 matrix.
803  // If it's an SdrPathObj it will use the provided geometry information. The Polygon has
804  // to use (0,0) as upper left and will be scaled to the given size in the matrix.
805  virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon);
806 
807  // give info if object is in destruction
808  bool IsInDestruction() const;
809 
810  // return if fill is != XFILL_NONE
811  bool HasFillStyle() const;
812  bool HasLineStyle() const;
813 
814  // on import of OLE object from MS documents the BLIP size might be retrieved,
815  // the following methods are used to control it;
816  // usually this data makes no sense after the import is finished, since the object
817  // might be resized
818  const tools::Rectangle& GetBLIPSizeRectangle() const { return maBLIPSizeRectangle;}
819  void SetBLIPSizeRectangle( const tools::Rectangle& aRect );
820 
821  // #i121917#
822  virtual bool HasText() const;
823 
824  bool Equals(const SdrObject&) const;
825 
826  virtual void dumpAsXml(xmlTextWriterPtr pWriter) const;
827 
829  virtual bool IsTextBox() const;
830 
831  void SetEmptyPresObj(bool bEpt);
832  bool IsEmptyPresObj() const { return bEmptyPresObj;}
833  void SetNotVisibleAsMaster(bool bFlg);
834  bool IsNotVisibleAsMaster() const { return bNotVisibleAsMaster;}
835  void SetUserCall(SdrObjUserCall* pUser);
836  SdrObjUserCall* GetUserCall() const { return pUserCall;}
838  void SetDoNotInsertIntoPageAutomatically(bool bSet);
840  bool IsDoNotInsertIntoPageAutomatically() const { return mbDoNotInsertIntoPageAutomatically;}
841 
842  // Warning: this method should only be used if you really know what you're doing
843  sal_uInt32 GetOrdNumDirect() const { return nOrdNum;}
844 
845  // #i25616#
846  bool DoesSupportTextIndentingOnLineWidthChange() const { return mbSupportTextIndentingOnLineWidthChange;}
847 
848  const Point& GetAnchorPos() const;
849 
850  // #i25616#
851  bool LineIsOutsideGeometry() const { return mbLineIsOutsideGeometry;}
852 
853  // Set the position in the navigation position to the given value.
854  // This method is typically used only by the model after a change to
855  // the navigation order.
856  // This method does not change the navigation position of other
857  // objects.
858  // Use SdrObjList::SetObjectNavigationPosition() instead.
859  void SetNavigationPosition (const sal_uInt32 nPosition);
860 
861  // sets a new UNO representation of the shape
862  // This is only a public interface function. The actual work is
863  // done by impl_setUnoShape().
864  // Calling this function is only allowed for the UNO representation
865  // itself!
866  void setUnoShape( const css::uno::Reference<css::uno::XInterface>& _rxUnoShape);
867 
868  const css::uno::WeakReference< css::uno::XInterface >& getWeakUnoShape() const { return maWeakUnoShape; }
869 
870  void setSuitableOutlinerBg(Outliner& rOutliner) const;
871  // If fillstyle is drawing::FillStyle_BITMAP, returns the graphic.
872  const Graphic* getFillGraphic() const;
873 
874 protected:
875  tools::Rectangle aOutRect; // surrounding rectangle for Paint (incl. LineWidth, ...)
876  Point aAnchor; // anchor position (Writer)
878  std::unique_ptr<SdrObjPlusData>
879  pPlusData; // Broadcaster, UserData, connectors, ... (this is the Bitsack)
880  // object is only pointing to another one
881  bool bVirtObj : 1;
882  bool bSnapRectDirty : 1;
883  // the following flags will be streamed
884  bool bMovProt : 1; // if true, the position is protected
885  bool bSizProt : 1; // if true, the size is protected
886  // If bEmptyPresObj is true, it is a presentation object that has no content yet.
887  // The flag's default value is false.
888  // The management is done by the application.
889  // Neither assign operator nor cloning copies the flag!
890  // The flag is persistent.
891  bool bEmptyPresObj : 1; // empty presentation object (Draw)
892  // if true, object is invisible as object of the MasterPage
893  bool bNotVisibleAsMaster : 1;
894  // if true, the object is closed, i.e. no line, arc...
895  bool bClosedObj : 1;
896  bool bIsEdge : 1;
897  bool bIs3DObj : 1;
898  bool bIsUnoObj : 1;
899  // #i25616#
900  bool mbLineIsOutsideGeometry : 1;
901  // #i25616#
902  bool mbSupportTextIndentingOnLineWidthChange : 1;
903 
904  virtual ~SdrObject() override;
905 
906  virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties();
907 
908  virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact();
909 
910  tools::Rectangle ImpDragCalcRect(const SdrDragStat& rDrag) const;
911 
912  // for GetDragComment
913  OUString ImpGetDescriptionStr(const char* pStrCacheID) const;
914 
915  void ImpForcePlusData();
916 
917  OUString GetMetrStr(tools::Long nVal) const;
918 
923  virtual SdrObjGeoData* NewGeoData() const;
924  virtual void SaveGeoData(SdrObjGeoData& rGeo) const;
925  virtual void RestGeoData(const SdrObjGeoData& rGeo);
926 
927  // internal versions
928  const SfxItemSet& GetObjectItemSet() const;
929  void SetObjectItem(const SfxPoolItem& rItem);
930  void SetObjectItemSet(const SfxItemSet& rSet);
931  const SfxPoolItem& GetObjectItem(const sal_uInt16 nWhich) const;
932  template<class T> const T& GetObjectItem( TypedWhichId<T> nWhich ) const
933  {
934  return static_cast<const T&>(GetObjectItem(sal_uInt16(nWhich)));
935  }
936 
946  virtual void impl_setUnoShape( const css::uno::Reference< css::uno::XInterface >& _rxUnoShape );
947 
948  // helper function for reimplementing Clone().
949  template< typename T > T* CloneHelper(SdrModel& rTargetModel) const;
950 
951  const SfxItemSet* getBackgroundFillSet() const;
952 
953 private:
954  struct Impl;
955  std::unique_ptr<Impl> mpImpl;
956  SdrObjList* mpParentOfSdrObject; // list that includes this object
957  sal_uInt32 nOrdNum; // order number of the object in the list
958  std::unique_ptr<SfxGrabBagItem> pGrabBagItem; // holds the GrabBagItem property
959  // Position in the navigation order. SAL_MAX_UINT32 when not used.
962  bool bNoPrint : 1; // if true, the object is not printed.
963  bool mbVisible : 1; // if false, the object is not visible on screen (but maybe on printer, depending on bNoprint
964  bool bMarkProt : 1; // marking forbidden, persistent
965  // on import of OLE object from MS documents the BLIP size might be retrieved,
966  // in this case the following member is initialized as nonempty rectangle
968  std::unique_ptr<sdr::properties::BaseProperties>
970  std::unique_ptr<sdr::contact::ViewContact>
972 
973  // global static ItemPool for not-yet-inserted items
975 
976  // do not use directly, always use getSvxShape() if you have to!
978  css::uno::WeakReference< css::uno::XInterface >
980  // HACK: Do not automatically insert newly created object into a page.
981  // The user needs to do it manually later.
983 
984  // only for internal use!
985  SvxShape* getSvxShape();
986 
987  SdrObject( const SdrObject& ) = delete;
988 };
989 
991 {
993  {
994  SdrObject::Free(obj);
995  }
996 };
997 
999 {
1003 };
1004 
1014 {
1015 public:
1016  static SdrObject* MakeNewObject(
1017  SdrModel& rSdrModel,
1018  SdrInventor nInventor,
1019  SdrObjKind nObjIdentifier,
1020  const tools::Rectangle* pSnapRect = nullptr);
1021 
1022  static void InsertMakeObjectHdl(Link<SdrObjCreatorParams, SdrObject*> const & rLink);
1023  static void RemoveMakeObjectHdl(Link<SdrObjCreatorParams, SdrObject*> const & rLink);
1024 
1025 private:
1026  static SVX_DLLPRIVATE SdrObject* CreateObjectFromFactory(
1027  SdrModel& rSdrModel,
1028  SdrInventor nInventor,
1029  SdrObjKind nIdentifier);
1030 
1031  SdrObjFactory() = delete;
1032 };
1033 
1034 template< typename T > T* SdrObject::CloneHelper(SdrModel& rTargetModel) const
1035 {
1036  OSL_ASSERT( typeid( T ) == typeid( *this ));
1037  T* pObj = dynamic_cast< T* >(
1039  rTargetModel,
1040  GetObjInventor(),
1041  GetObjIdentifier()));
1042 
1043  if(nullptr != pObj)
1044  {
1045  // use ::operator=()
1046  *pObj = *static_cast< const T* >( this );
1047  }
1048 
1049  return pObj;
1050 }
1051 
1052 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
User data of a drawing object, e.g.
Definition: svdobj.hxx:153
const css::uno::WeakReference< css::uno::XInterface > & getWeakUnoShape() const
Definition: svdobj.hxx:868
void operator()(SdrObject *obj)
Definition: svdobj.hxx:992
bool IsNotVisibleAsMaster() const
Definition: svdobj.hxx:834
bool IsClosedObj() const
Definition: svdobj.hxx:739
void dumpAsXml(xmlTextWriterPtr pWriter) const
sal_uInt16 nIdentifier
Definition: svdobj.hxx:156
SAL_DLLPRIVATE Degree100 GetRotateAngle() const
struct _xmlTextWriter * xmlTextWriterPtr
SdrObjUserCall * pUserCall
Definition: svdobj.hxx:877
bool DoesSupportTextIndentingOnLineWidthChange() const
Definition: svdobj.hxx:846
bool IsEdgeObj() const
Definition: svdobj.hxx:746
long Long
SdrUserCallType
Definition: svdobj.hxx:115
bool IsInserted() const
Definition: svdobj.hxx:744
SdrInventor nInventor
Definition: svdobj.hxx:1000
static SdrObject * MakeNewObject(SdrModel &rSdrModel, SdrInventor nInventor, SdrObjKind nObjIdentifier, const tools::Rectangle *pSnapRect=nullptr)
Definition: svdobj.cxx:3064
const SfxListener & operator=(const SfxListener &)=delete
SdrInventor
Definition: svdobj.hxx:101
static void Free(SdrObject *&_rpObject)
Definition: svdobj.cxx:396
virtual SdrObjKind GetObjIdentifier() const
Definition: svdobj.cxx:558
bool bSizProt
Definition: svdobj.hxx:183
All geometrical data of an arbitrary object for use in undo/redo.
Definition: svdobj.hxx:175
SdrObjKind
Definition: svdobjkind.hxx:24
const SdrObject * mpFillGeometryDefiningShape
Definition: svdobj.hxx:283
SdrObjKind nObjIdentifier
Definition: svdobj.hxx:1001
bool IsVisible() const
Definition: svdobj.hxx:756
Rectangle objects (rectangle, circle, ...)
Definition: svdorect.hxx:39
Provides information about various ZObject properties.
Definition: svdobj.hxx:197
SdrObjList * mpParentOfSdrObject
Definition: svdobj.hxx:956
void setFillGeometryDefiningShape(const SdrObject *pNew)
Definition: svdobj.hxx:284
UNOTOOLS_DLLPUBLIC bool GetTitle(OUString const &url, OUString *title)
const T & GetMergedItem(TypedWhichId< T > nWhich) const
Definition: svdobj.hxx:613
const T & GetObjectItem(TypedWhichId< T > nWhich) const
Definition: svdobj.hxx:932
bool LineIsOutsideGeometry() const
Definition: svdobj.hxx:851
SdrLayerID mnLayerID
Definition: svdobj.hxx:961
std::unique_ptr< SfxGrabBagItem > pGrabBagItem
Definition: svdobj.hxx:958
bool Equals(const SfxItemSet &, bool bComparePool) const
static void GetPoint(const tools::Polygon &rPoly, const std::vector< double > &rDistances, const double &fX, double &fx1, double &fy1)
const tools::Rectangle & GetBLIPSizeRectangle() const
Definition: svdobj.hxx:818
sal_uInt32 GetOrdNumDirect() const
Definition: svdobj.hxx:843
Point Rotate(const Point &rPoint, Degree10 nOrientation, const Point &rOrigin)
DocumentType eType
SdrLayerID mnLayerID
Definition: svdobj.hxx:187
bool IsDoNotInsertIntoPageAutomatically() const
Definition: svdobj.hxx:840
css::uno::WeakReference< css::uno::XInterface > maWeakUnoShape
Definition: svdobj.hxx:979
std::unique_ptr< sdr::properties::BaseProperties > mpProperties
Definition: svdobj.hxx:969
Reference< XAnimationNode > Clone(const Reference< XAnimationNode > &xSourceNode, const SdPage *pSource, const SdPage *pTarget)
tools::Rectangle aOutRect
Definition: svdobj.hxx:875
sal_uInt32 mnNavigationPosition
Definition: svdobj.hxx:960
bool IsPrintable() const
Definition: svdobj.hxx:754
bool IsResizeProtect() const
Definition: svdobj.hxx:752
const SdrLayerIDSet * pVisiLayer
Definition: svdobj.hxx:141
Abstract DrawObject.
Definition: svdobj.hxx:261
bool bNoPrint
Definition: svdobj.hxx:184
SdrModel & rSdrModel
Definition: svdobj.hxx:1002
Point aAnchor
Definition: svdobj.hxx:876
virtual SdrInventor GetObjInventor() const
Definition: svdobj.cxx:553
bool operator!=(const ScCsvLayoutData &rData1, const ScCsvLayoutData &rData2)
SdrModel & mrSdrModelFromSdrObject
Definition: svdobj.hxx:290
bool IsMarkProtect() const
Definition: svdobj.hxx:758
Point aAnchor
Definition: svdobj.hxx:179
SvxShape * mpSvxShape
Definition: svdobj.hxx:977
bool bMovProt
Definition: svdobj.hxx:182
static SdrItemPool * mpGlobalItemPool
Definition: svdobj.hxx:974
bool IsUnoObj() const
Definition: svdobj.hxx:748
bool mbVisible
sal_uInt16 GetId() const
Definition: svdobj.hxx:169
bool mbVisible
Definition: svdobj.hxx:186
#define SVXCORE_DLLPUBLIC
Definition: svxdllapi.h:35
bool IsVirtualObj() const
Definition: svdobj.hxx:734
sal_uInt32 GetHdlCount() const
FIXME: The virtual object is not yet fully implemented and tested.
Definition: svdovirt.hxx:30
tools::Rectangle aBoundRect
Definition: svdobj.hxx:178
std::unique_ptr< SdrObject, SdrObjectFreeOp > SdrObjectUniquePtr
Definition: svdobj.hxx:99
PointerStyle
std::unique_ptr< SdrObjPlusData > pPlusData
Definition: svdobj.hxx:879
std::unique_ptr< SdrGluePointList > pGPL
Definition: svdobj.hxx:181
virtual bool shouldKeepAspectRatio() const
Whether the aspect ratio should be kept by default when resizing.
Definition: svdobj.hxx:761
T * CloneHelper(SdrModel &rTargetModel) const
Definition: svdobj.hxx:1034
std::unique_ptr< sdr::contact::ViewContact > mpViewContact
Definition: svdobj.hxx:971
tools::Rectangle maBLIPSizeRectangle
Definition: svdobj.hxx:967
std::unique_ptr< Impl > mpImpl
Definition: svdobj.hxx:954
sal_uInt16 nTol
Definition: svdobj.hxx:143
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
Definition: svdpage.hxx:365
SdrCreateCmd
Definition: svdtypes.hxx:27
helper class for notifying XPropertyChangeListeners
SdrInventor nInventor
Definition: svdobj.hxx:155
SdrInventor GetInventor() const
Definition: svdobj.hxx:168
#define SVX_DLLPRIVATE
Definition: svxdllapi.h:30
sal_uInt32 nOrdNum
Definition: svdobj.hxx:957
Whoever creates his own objects must set a link in the SdrObjFactory class.
Definition: svdobj.hxx:1013
bool operator==(const ScCsvLayoutData &rData1, const ScCsvLayoutData &rData2)
SdrObjUserCall * GetUserCall() const
Definition: svdobj.hxx:836
bool Is3DObj() const
Definition: svdobj.hxx:747
bool bClosedObj
Definition: svdobj.hxx:185
const SdrPageView * pPageView
Definition: svdobj.hxx:142
bool mbDoNotInsertIntoPageAutomatically
Definition: svdobj.hxx:982
bool IsMoveProtect() const
Definition: svdobj.hxx:750
const tools::Rectangle & GetLogicRect() const
void SetParentAtSdrObjectFromSdrObjList(SdrObject &rSdrObject, SdrObjList *pNew)
Definition: svdpage.cxx:63
sal_Int16 nValue
Definition: fmsrccfg.cxx:81
const SdrObject * getFillGeometryDefiningShape() const
Definition: svdobj.hxx:286
bool IsEmptyPresObj() const
Definition: svdobj.hxx:832