LibreOffice Module svx (master)  1
svdoedge.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_SVDOEDGE_HXX
21 #define INCLUDED_SVX_SVDOEDGE_HXX
22 
23 #include <memory>
24 #include <svx/svdotext.hxx>
25 #include <svx/svdglue.hxx>
26 #include <svx/svxdllapi.h>
27 
28 
29 class SdrDragMethod;
30 class SdrPageView;
31 
32 namespace sdr::properties {
33  class ConnectorProperties;
34 }
35 
36 
38 class SdrObjConnection final
39 {
40  friend class SdrEdgeObj;
41  friend class ImpEdgeHdl;
42  friend class SdrCreateView;
43 
44  Point aObjOfs; // set during dragging of a node
45  SdrObject* pObj; // referenced object
46  sal_uInt16 nConId; // connector number
47 
48  bool bBestConn : 1; // true -> the best-matching connector is searched for
49  bool bBestVertex : 1; // true -> the best-matching vertex to connect is searched for
50  bool bAutoVertex : 1; // autoConnector at apex nCon
51  bool bAutoCorner : 1; // autoConnector at corner nCon
52 
53 public:
55 
56  void ResetVars();
57  bool TakeGluePoint(SdrGluePoint& rGP) const;
58 
59  void SetBestConnection( bool rB ) { bBestConn = rB; };
60  void SetBestVertex( bool rB ) { bBestVertex = rB; };
61  void SetAutoVertex( bool rB ) { bAutoVertex = rB; };
62  void SetConnectorId( sal_uInt16 nId ) { nConId = nId; };
63 
64  bool IsBestConnection() const { return bBestConn; };
65  bool IsAutoVertex() const { return bAutoVertex; };
66  sal_uInt16 GetConnectorId() const { return nConId; };
67  SdrObject* GetObject() const { return pObj; }
68 };
69 
70 
72 
75 {
76 public:
77  // The 5 distances are set on dragging or via SetAttr and are
78  // evaluated by ImpCalcEdgeTrack. Only 0-3 longs are transported
79  // via Get/SetAttr/Get/SetStyleSh though.
85 
86  // Following values are set by ImpCalcEdgeTrack
87  tools::Long nAngle1; // exit angle at Obj1
88  tools::Long nAngle2; // exit angle at Obj2
89  sal_uInt16 nObj1Lines; // 1..3
90  sal_uInt16 nObj2Lines; // 1..3
91  sal_uInt16 nMiddleLine; // 0xFFFF=none, otherwise point number of the beginning of the line
92 
93 public:
95  : nAngle1(0),
96  nAngle2(0),
97  nObj1Lines(0),
98  nObj2Lines(0),
99  nMiddleLine(0xFFFF)
100  {}
101 
103  sal_uInt16 ImpGetPolyIdx(SdrEdgeLineCode eLineCode, const XPolygon& rXP) const;
104  bool ImpIsHorzLine(SdrEdgeLineCode eLineCode, const XPolygon& rXP) const;
105  void ImpSetLineOffset(SdrEdgeLineCode eLineCode, const XPolygon& rXP, tools::Long nVal);
106  tools::Long ImpGetLineOffset(SdrEdgeLineCode eLineCode, const XPolygon& rXP) const;
107 };
108 
109 
112 {
113 public:
114  SdrObjConnection aCon1; // connection status of the beginning of the line
115  SdrObjConnection aCon2; // connection status of the end of the line
116  std::unique_ptr<XPolygon> pEdgeTrack;
117  bool bEdgeTrackDirty; // true -> connector track needs to be recalculated
120 
121 public:
123  virtual ~SdrEdgeObjGeoData() override;
124 };
125 
126 
129 {
130 private:
131  // to allow sdr::properties::ConnectorProperties access to ImpSetAttrToEdgeInfo()
133 
134  friend class SdrCreateView;
135  friend class ImpEdgeHdl;
136 
137 protected:
138  virtual std::unique_ptr<sdr::contact::ViewContact> CreateObjectSpecificViewContact() override;
139  virtual std::unique_ptr<sdr::properties::BaseProperties> CreateObjectSpecificProperties() override;
140 
141  SdrObjConnection aCon1; // Connection status of the beginning of the line
142  SdrObjConnection aCon2; // Connection status of the end of the line
143 
144  std::unique_ptr<XPolygon> pEdgeTrack;
145  sal_uInt16 nNotifyingCount; // Locking
147 
148  bool bEdgeTrackDirty : 1; // true -> Connection track needs to be recalculated
149  bool bEdgeTrackUserDefined : 1;
150 
151  // Bool to allow suppression of default connects at object
152  // inside test (HitTest) and object center test (see ImpFindConnector())
153  bool mbSuppressDefaultConnect : 1;
154 
155  // Flag value for avoiding infinite loops when calculating
156  // BoundRects from ring-connected connectors. A coloring algorithm
157  // is used here. When the GetCurrentBoundRect() calculation of a
158  // SdrEdgeObj is running, the flag is set, else it is always
159  // false.
160  bool mbBoundRectCalculationRunning : 1;
161 
162  // #i123048# need to remember if layouting was suppressed before to get
163  // to a correct state for first real layouting
164  bool mbSuppressed : 1;
165 
166 public:
167  // Interface to default connect suppression
168  void SetSuppressDefaultConnect(bool bNew) { mbSuppressDefaultConnect = bNew; }
169  bool GetSuppressDefaultConnect() const { return mbSuppressDefaultConnect; }
170 
171 protected:
172  virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
173 
174  static XPolygon ImpCalcObjToCenter(const Point& rStPt, tools::Long nEscAngle, const tools::Rectangle& rRect, const Point& rCenter);
175  void ImpRecalcEdgeTrack(); // recalculation of the connection track
176  XPolygon ImpCalcEdgeTrack(const XPolygon& rTrack0, SdrObjConnection& rCon1, SdrObjConnection& rCon2, SdrEdgeInfoRec* pInfo) const;
177  XPolygon ImpCalcEdgeTrack(const Point& rPt1, tools::Long nAngle1, const tools::Rectangle& rBoundRect1, const tools::Rectangle& rBewareRect1,
178  const Point& rPt2, tools::Long nAngle2, const tools::Rectangle& rBoundRect2, const tools::Rectangle& rBewareRect2,
179  sal_uIntPtr* pnQuality, SdrEdgeInfoRec* pInfo) const;
180  static bool ImpFindConnector(const Point& rPt, const SdrPageView& rPV, SdrObjConnection& rCon, const SdrEdgeObj* pThis, OutputDevice* pOut=nullptr);
181  static SdrEscapeDirection ImpCalcEscAngle(SdrObject const * pObj, const Point& aPt2);
182  void ImpSetTailPoint(bool bTail1, const Point& rPt);
183  void ImpUndirtyEdgeTrack(); // potential recalculation of the connection track
184  void ImpDirtyEdgeTrack(); // invalidate connector path, so it will be recalculated next time
185  void ImpSetAttrToEdgeInfo(); // copying values from the pool to aEdgeInfo
186  void ImpSetEdgeInfoToAttr(); // copying values from the aEdgeInfo to the pool
187 
188  // protected destructor
189  virtual ~SdrEdgeObj() override;
190 
191 public:
192  SdrEdgeObj(SdrModel& rSdrModel);
193 
194  // react on model/page change
195  virtual void handlePageChange(SdrPage* pOldPage, SdrPage* pNewPage) override;
196 
197  SdrObjConnection& GetConnection(bool bTail1) { return *(bTail1 ? &aCon1 : &aCon2); }
198  virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
199  virtual SdrObjKind GetObjIdentifier() const override;
200  virtual const tools::Rectangle& GetCurrentBoundRect() const override;
201  virtual const tools::Rectangle& GetSnapRect() const override;
202  virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const override;
203  virtual SdrGluePoint GetCornerGluePoint(sal_uInt16 nNum) const override;
204  virtual const SdrGluePointList* GetGluePointList() const override;
205  virtual SdrGluePointList* ForceGluePointList() override;
206 
207  // * for all of the below: bTail1=true: beginning of the line,
208  // otherwise end of the line
209  // * pObj=NULL: disconnect connector
210  void SetEdgeTrackDirty() { bEdgeTrackDirty=true; }
211  void ConnectToNode(bool bTail1, SdrObject* pObj) override;
212  void DisconnectFromNode(bool bTail1) override;
213  SdrObject* GetConnectedNode(bool bTail1) const override;
214  const SdrObjConnection& GetConnection(bool bTail1) const { return *(bTail1 ? &aCon1 : &aCon2); }
215  bool CheckNodeConnection(bool bTail1) const;
216 
217  virtual void RecalcSnapRect() override;
218  virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const override;
219  virtual SdrEdgeObj* CloneSdrObject(SdrModel& rTargetModel) const override;
220  SdrEdgeObj& operator=(const SdrEdgeObj& rObj);
221  virtual OUString TakeObjNameSingul() const override;
222  virtual OUString TakeObjNamePlural() const override;
223 
224  void SetEdgeTrackPath( const basegfx::B2DPolyPolygon& rPoly );
225  basegfx::B2DPolyPolygon GetEdgeTrackPath() const;
226 
227  virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
228  virtual sal_uInt32 GetHdlCount() const override;
229  virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
230 
231  // special drag methods
232  virtual bool hasSpecialDrag() const override;
233  virtual bool beginSpecialDrag(SdrDragStat& rDrag) const override;
234  virtual bool applySpecialDrag(SdrDragStat& rDrag) override;
235  virtual OUString getSpecialDragComment(const SdrDragStat& rDrag) const override;
236 
237  // FullDrag support
238  virtual SdrObjectUniquePtr getFullDragClone() const override;
239 
240  virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override;
241  virtual void NbcMove(const Size& aSize) override;
242  virtual void NbcResize(const Point& rRefPnt, const Fraction& aXFact, const Fraction& aYFact) override;
243 
244  // #i54102# added rotate, mirror and shear support
245  virtual void NbcRotate(const Point& rRef, tools::Long nAngle, double sn, double cs) override;
246  virtual void NbcMirror(const Point& rRef1, const Point& rRef2) override;
247  virtual void NbcShear(const Point& rRef, tools::Long nAngle, double tn, bool bVShear) override;
248 
249  // #102344# Added missing implementation
250  virtual void NbcSetAnchorPos(const Point& rPnt) override;
251 
252  virtual bool BegCreate(SdrDragStat& rStat) override;
253  virtual bool MovCreate(SdrDragStat& rStat) override;
254  virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd) override;
255  virtual bool BckCreate(SdrDragStat& rStat) override;
256  virtual void BrkCreate(SdrDragStat& rStat) override;
257  virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const override;
258  virtual PointerStyle GetCreatePointer() const override;
259  virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
260 
261  virtual sal_uInt32 GetSnapPointCount() const override;
262  virtual Point GetSnapPoint(sal_uInt32 i) const override;
263  virtual bool IsPolyObj() const override;
264  virtual sal_uInt32 GetPointCount() const override;
265  virtual Point GetPoint(sal_uInt32 i) const override;
266  virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i) override;
267 
268  virtual SdrObjGeoData* NewGeoData() const override;
269  virtual void SaveGeoData(SdrObjGeoData& rGeo) const override;
270  virtual void RestGeoData(const SdrObjGeoData& rGeo) override;
271 
276  void Reformat();
277 
278  // helper methods for the StarOffice api
279  Point GetTailPoint( bool bTail ) const;
280  void SetTailPoint( bool bTail, const Point& rPt );
281  void setGluePointIndex( bool bTail, sal_Int32 nId = -1 );
282  sal_Int32 getGluePointIndex( bool bTail );
283 
284  virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const override;
285  virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon) override;
286 
287  // for geometry access
288  ::basegfx::B2DPolygon getEdgeTrack() const;
289 
290  // helper method for SdrDragMethod::AddConnectorOverlays. Adds an overlay polygon for
291  // this connector to rResult.
292  basegfx::B2DPolygon ImplAddConnectorOverlay(SdrDragMethod& rDragMethod, bool bTail1, bool bTail2, bool bDetail) const;
293 };
294 
295  // The following item parameters of the SdrItemPool are used to
296  // determine the actual connector line routing:
297  //
298  // sal_uInt16 EdgeFlowAngle default 9000 (= 90.00 deg), min 0, max 9000
299  // Clearance angle.
300  // The angle at which the connecting line may run.
301  //
302  // sal_uInt16 EdgeEscAngle default 9000 (= 90.00 Deg), min 0, max 9000
303  // Object exit angle.
304  // The angle at which the connection line may exit from the object.
305  //
306  // bool EdgeEscAsRay default false
307  // true -> the connecting line emerges from the object radially.
308  // Thus, angle specification by the line ObjCenter / connector.
309  //
310  // bool EdgeEscUseObjAngle default false
311  // Object rotation angle is considered
312  // true -> when determining the connector exit angle, angle for
313  // object rotation is taken as an offset.
314  //
315  // sal_uIntPtr EdgeFlowDefDist default 0, min 0, max ?
316  // This is the default minimum distance on calculation of the
317  // connection Line to the docked objects is in logical units.
318  // This distance is overridden within the object, as soon as the
319  // user drags on the lines. When docking onto a new object,
320  // however, this default is used again.
321  //
322  //
323  // General Information About Connectors:
324  //
325  // There are nodes and edge objects. Two nodes can be joined by an
326  // edge. If a connector is connected to a node only at one end, the
327  // other end is fixed to an absolute position in the document. It is
328  // of course also possible for a connector to be "free" at both ends,
329  // i.e. not connected to a node object on each side.
330  //
331  // A connector object can also theoretically be a node object at the
332  // same time. In the first version, however, this will not yet be
333  // realized.
334  //
335  // A connection between node and connector edge can be established by:
336  // - Interactive creation of a new edge object at the SdrView where
337  // the beginning or end point of the edge is placed on a connector
338  // (glueing point) of an already existing node object.
339  // - Interactive dragging of the beginning or end point of an
340  // existing connector edge object on the SdrView to a connector
341  // (glueing point) of an already existing node object.
342  // - Undo/Redo
343  // Moving node objects does not make any connections. Also not the
344  // direct shifting of edge endpoints on the SdrModel... Connections
345  // can also be established, if the connectors are not configured to
346  // be visible in the view.
347  //
348  // An existing connection between node and edge is retained for:
349  // - Dragging (Move/Resize/Rotate/...) of the node object
350  // - Moving a connector position in the node object
351  // - Simultaneous dragging (Move/Resize/Rotate/...) of the node and the
352  // edge
353  //
354  // A connection between node and edge can be removed by:
355  // - Deleting one of the objects
356  // - Dragging the edge object without simultaneously dragging the node
357  // - Deleting the connector at the node object
358  // - Undo/Redo/Repeat
359  // When dragging, the request to remove the connection must be
360  // requested from outside of the model (for example, from the
361  // SdrView). SdrEdgeObj::Move() itself does not remove the
362  // connection.
363  //
364  // Each node object can have connectors, so-called glue points. These
365  // are the geometric points at which the connecting edge object ends
366  // when the connection is established. By default, each object has no
367  // connectors. Nevertheless, one can dock an edge in certain view
368  // settings since then, e.g., connectors can be automatically
369  // generated at the 4 vertices of the node object when needed. Each
370  // object provides 2x4 so-called default connector positions, 4 at
371  // the vertices and 4 at the corner positions. In the normal case,
372  // these are located at the 8 handle positions; exceptions here are
373  // ellipses, parallelograms, ... . In addition, user-specific
374  // connectors can be set for each node object.
375  //
376  // Then there is also the possibility to dock an edge on an object
377  // with the attribute "bUseBestConnector". The best-matching
378  // connector position for the routing of the connection line is then
379  // used from the offering of connectors of the object or/and of the
380  // vertices. The user assigns this attribute by docking the node in
381  // its center (see, e.g., Visio).
382  // 09-06-1996: bUseBestConnector uses vertex glue points only.
383  //
384  // And here is some terminology:
385  // Connector : The connector object (edge object)
386  // Node : Any object to which a connector can be glued to, e.g., a rectangle,
387  // etc.
388  // Glue point: The point at which the connector is glued to the node object.
389  // There are:
390  // Vertex glue points: Each node object presents these glue
391  // points inherently. Perhaps there is already the option
392  // "automatically glue to object vertex" in Draw (default is
393  // on).
394  // Corner glue points: These glue points, too, are already
395  // auto-enabled on objects. Similar to the ones above,
396  // there may already be an option for them in Draw (default is
397  // off).
398  // In contrast to Visio, vertex glue points and corner glue
399  // points are not displayed in the UI; they are simply there (if
400  // the option is activated).
401  // Custom glue points: Any number of them are present on each
402  // node object. They can be made visible using the option
403  // (always visible when editing). At the moment, however, they
404  // are not yet fully implemented.
405  // Automatic glue point selection: If the connector is docked
406  // to the node object so that the black frame encompasses the
407  // entire object, then the connector tries to find the most
408  // convenient of the 4 vertex glue points (and only of those).
409 
410 #endif // INCLUDED_SVX_SVDOEDGE_HXX
411 
412 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Point aMiddleLine
Definition: svdoedge.hxx:84
Point aObj2Line2
Definition: svdoedge.hxx:82
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
Definition: svdotxtr.cxx:102
virtual void NbcShear(const Point &rRef, tools::Long nAngle, double tn, bool bVShear) override
Definition: svdotxtr.cxx:210
Utility class SdrObjConnection.
Definition: svdoedge.hxx:38
virtual const tools::Rectangle & GetCurrentBoundRect() const
Definition: svdobj.cxx:854
tools::Long ImpGetLineOffset(SdrEdgeLineCode eLineCode, const XPolygon &rXP) const
Definition: svdoedge.cxx:129
void SetAutoVertex(bool rB)
Definition: svdoedge.hxx:61
virtual sal_uInt32 GetSnapPointCount() const override
snap to special points of an Object (polygon points, center of circle)
Definition: svdotext.cxx:1104
virtual SdrObjKind GetObjIdentifier() const override
Definition: svdotext.cxx:415
SdrObjConnection aCon2
Definition: svdoedge.hxx:115
virtual bool IsPolyObj() const
Definition: svdobj.cxx:1661
SdrEscapeDirection
Definition: svdglue.hxx:35
sal_uInt16 nNotifyingCount
Definition: svdoedge.hxx:145
sal_uInt16 nMiddleLine
Definition: svdoedge.hxx:91
Utility class SdrEdgeInfoRec.
Definition: svdoedge.hxx:74
long Long
sal_uInt16 nObj2Lines
Definition: svdoedge.hxx:90
std::unique_ptr< XPolygon > pEdgeTrack
Definition: svdoedge.hxx:116
tools::Long nAngle2
Definition: svdoedge.hxx:88
virtual sal_uInt32 GetHdlCount() const override
Via GetHdlCount the number of Handles can be retrieved.
Definition: svdotxdr.cxx:36
bool bEdgeTrackUserDefined
Definition: svdoedge.hxx:118
SdrEdgeInfoRec aEdgeInfo
Definition: svdoedge.hxx:146
SdrObject * pObj
Definition: svdhdl.hxx:136
void ResetVars()
Definition: svdoedge.cxx:47
virtual OUString TakeObjNameSingul() const override
Definition: svdotext.cxx:921
virtual void ConnectToNode(bool bTail1, SdrObject *pObj)
Definition: svdobj.cxx:2260
virtual bool hasSpecialDrag() const override
The standard transformations (Move,Resize,Rotate,Mirror,Shear) are taken over by the View (TakeXorPol...
Definition: svdotxdr.cxx:67
virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix &rMatrix, const basegfx::B2DPolyPolygon &rPolyPolygon) override
Definition: svdotext.cxx:1620
virtual sal_uInt32 GetPointCount() const
Definition: svdobj.cxx:1666
virtual const tools::Rectangle & GetSnapRect() const override
Definition: svdoattr.cxx:44
virtual SdrObjectUniquePtr getFullDragClone() const override
Definition: svdotext.cxx:2033
virtual void RecalcSnapRect() override
Snap is not done on the BoundRect but if possible on logic coordinates (i.e.
Definition: svdotext.cxx:1091
All geometrical data of an arbitrary object for use in undo/redo.
Definition: svdobj.hxx:174
SdrObjKind
Definition: svdobjkind.hxx:24
virtual bool BegCreate(SdrDragStat &rStat) override
Every object must be able to create itself interactively.
Definition: svdotxdr.cxx:182
virtual void NbcMirror(const Point &rRef1, const Point &rRef2) override
Definition: svdotxtr.cxx:232
virtual SdrObjGeoData * NewGeoData() const override
A derived class must override these 3 methods if it has own geometric data that must be saved for Und...
Definition: svdotext.cxx:1435
sal_uInt16 GetConnectorId() const
Definition: svdoedge.hxx:66
Provides information about various ZObject properties.
Definition: svdobj.hxx:196
tools::Long nAngle1
Definition: svdoedge.hxx:87
Point aObj2Line3
Definition: svdoedge.hxx:83
virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const
Definition: svdobj.cxx:2167
virtual bool BckCreate(SdrDragStat &rStat) override
Definition: svdotxdr.cxx:225
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
Definition: svdotext.cxx:1440
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
Definition: svdotext.cxx:58
SdrObjConnection aCon1
Definition: svdoedge.hxx:114
bool TakeGluePoint(SdrGluePoint &rGP) const
Definition: svdoedge.cxx:57
Utility class SdrEdgeObjGeoData.
Definition: svdoedge.hxx:111
SdrObject * GetObject() const
Definition: svdoedge.hxx:67
SdrEdgeLineCode
Definition: svdoedge.hxx:71
virtual SdrObject * GetConnectedNode(bool bTail1) const
Definition: svdobj.cxx:2268
bool ImpIsHorzLine(SdrEdgeLineCode eLineCode, const XPolygon &rXP) const
Definition: svdoedge.cxx:110
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
Definition: svdotext.cxx:391
virtual SdrTextObj * CloneSdrObject(SdrModel &rTargetModel) const override
Definition: svdotext.cxx:1002
void SetBestVertex(bool rB)
Definition: svdoedge.hxx:60
virtual void NbcSetPoint(const Point &rPnt, sal_uInt32 i)
Definition: svdobj.cxx:1685
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage) override
Definition: svdotext.cxx:442
virtual bool applySpecialDrag(SdrDragStat &rDrag) override
Definition: svdotxdr.cxx:149
virtual const SdrGluePointList * GetGluePointList() const
Definition: svdobj.cxx:2204
virtual OUString getSpecialDragComment(const SdrDragStat &rDrag) const override
Definition: svdotxdr.cxx:174
sal_uInt16 nObj1Lines
Definition: svdoedge.hxx:89
virtual void BrkCreate(SdrDragStat &rStat) override
Definition: svdotxdr.cxx:221
SdrTextObj & operator=(const SdrTextObj &rObj)
Definition: svdotext.cxx:1007
virtual ~SdrEdgeObjGeoData() override
Definition: svdoedge.cxx:2454
SdrObjConnection aCon2
Definition: svdoedge.hxx:142
Point aObj1Line3
Definition: svdoedge.hxx:81
void ImpSetLineOffset(SdrEdgeLineCode eLineCode, const XPolygon &rXP, tools::Long nVal)
Definition: svdoedge.cxx:122
void SetConnectorId(sal_uInt16 nId)
Definition: svdoedge.hxx:62
virtual void NbcMove(const Size &rSiz) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
Definition: svdotxtr.cxx:94
bool IsAutoVertex() const
Definition: svdoedge.hxx:65
Abstract DrawObject.
Definition: svdobj.hxx:260
void SetBestConnection(bool rB)
Definition: svdoedge.hxx:59
SdrObjConnection & GetConnection(bool bTail1)
Definition: svdoedge.hxx:197
Point & ImpGetLineOffsetPoint(SdrEdgeLineCode eLineCode)
Definition: svdoedge.cxx:86
virtual void DisconnectFromNode(bool bTail1)
Definition: svdobj.cxx:2264
virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat &rDrag) const override
Polygon dragged by the user when creating the object.
Definition: svdotxdr.cxx:230
SdrEdgeInfoRec aEdgeInfo
Definition: svdoedge.hxx:119
sal_uInt16 nConId
Definition: svdoedge.hxx:46
virtual SdrGluePoint GetCornerGluePoint(sal_uInt16 nNum) const
Definition: svdobj.cxx:2188
virtual void RestGeoData(const SdrObjGeoData &rGeo) override
Definition: svdotext.cxx:1448
std::unique_ptr< XPolygon > pEdgeTrack
Definition: svdoedge.hxx:144
virtual SdrGluePointList * ForceGluePointList()
Definition: svdobj.cxx:2211
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Detects when a stylesheet is changed.
Definition: svdoattr.cxx:56
#define SVXCORE_DLLPUBLIC
Definition: svxdllapi.h:35
bool IsBestConnection() const
Definition: svdoedge.hxx:64
SdrObjConnection aCon1
Definition: svdoedge.hxx:141
std::unique_ptr< SdrObject, SdrObjectFreeOp > SdrObjectUniquePtr
Definition: svdobj.hxx:98
virtual bool beginSpecialDrag(SdrDragStat &rDrag) const
Definition: svdobj.cxx:1285
const SdrObjConnection & GetConnection(bool bTail1) const
Definition: svdoedge.hxx:214
PointerStyle
void SetEdgeTrackDirty()
Definition: svdoedge.hxx:210
sal_uInt16 ImpGetPolyIdx(SdrEdgeLineCode eLineCode, const XPolygon &rXP) const
Definition: svdoedge.cxx:98
virtual Point GetSnapPoint(sal_uInt32 i) const override
Definition: svdotext.cxx:1109
virtual bool EndCreate(SdrDragStat &rStat, SdrCreateCmd eCmd) override
Definition: svdotxdr.cxx:207
void SetSuppressDefaultConnect(bool bNew)
Definition: svdoedge.hxx:168
virtual void NbcSetAnchorPos(const Point &rPnt)
Definition: svdobj.cxx:1571
virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix &rMatrix, basegfx::B2DPolyPolygon &rPolyPolygon) const override
Definition: svdotext.cxx:1585
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
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
Definition: svdotext.cxx:64
virtual bool MovCreate(SdrDragStat &rStat) override
Definition: svdotxdr.cxx:192
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override
The Xor-Polygon is required by the View to drag the object.
Definition: svdotext.cxx:1053
virtual void NbcRotate(const Point &rRef, tools::Long nAngle, double sn, double cs) override
Definition: svdotxtr.cxx:186
virtual void TakeUnrotatedSnapRect(tools::Rectangle &rRect) const
Definition: svdotext.cxx:581
virtual Point GetPoint(sal_uInt32 i) const
Definition: svdobj.cxx:1671
Point aObj1Line2
Definition: svdoedge.hxx:80
virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override
Definition: svdotxtr.cxx:414
virtual void AddToHdlList(SdrHdlList &rHdlList) const override
Definition: svdotxdr.cxx:41
virtual void NbcSetSnapRect(const tools::Rectangle &rRect) override
Definition: svdotxtr.cxx:42
bool GetSuppressDefaultConnect() const
Definition: svdoedge.hxx:169
Utility class SdrEdgeObj.
Definition: svdoedge.hxx:128
SdrObject * pObj
Definition: svdoedge.hxx:45
virtual OUString TakeObjNamePlural() const override
Definition: svdotext.cxx:985
virtual PointerStyle GetCreatePointer() const override
get the cursor/pointer that signals creating this object
Definition: svdotxdr.cxx:242