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