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 #pragma once
21 
22 #include <memory>
23 #include <optional>
24 #include <svx/svdotext.hxx>
25 #include <svx/svdglue.hxx>
26 #include <svx/svxdllapi.h>
27 #include <svx/xpoly.hxx>
28 
29 
30 class SdrDragMethod;
31 class SdrPageView;
32 
33 namespace sdr::properties {
34  class ConnectorProperties;
35 }
36 
37 
39 class SdrObjConnection final
40 {
41  friend class SdrEdgeObj;
42  friend class ImpEdgeHdl;
43  friend class SdrCreateView;
44 
45  Point aObjOfs; // set during dragging of a node
46  SdrObject* pObj; // referenced object
47  sal_uInt16 nConId; // connector number
48 
49  bool bBestConn : 1; // true -> the best-matching connector is searched for
50  bool bBestVertex : 1; // true -> the best-matching vertex to connect is searched for
51  bool bAutoVertex : 1; // autoConnector at apex nCon
52  bool bAutoCorner : 1; // autoConnector at corner nCon
53 
54 public:
56 
57  void ResetVars();
58  bool TakeGluePoint(SdrGluePoint& rGP) const;
59 
60  void SetBestConnection( bool rB ) { bBestConn = rB; };
61  void SetBestVertex( bool rB ) { bBestVertex = rB; };
62  void SetAutoVertex( bool rB ) { bAutoVertex = rB; };
63  void SetConnectorId( sal_uInt16 nId ) { nConId = nId; };
64 
65  bool IsBestConnection() const { return bBestConn; };
66  bool IsAutoVertex() const { return bAutoVertex; };
67  sal_uInt16 GetConnectorId() const { return nConId; };
68  SdrObject* GetObject() const { return pObj; }
69 };
70 
71 
73 
76 {
77 public:
78  // The 5 distances are set on dragging or via SetAttr and are
79  // evaluated by ImpCalcEdgeTrack. Only 0-3 longs are transported
80  // via Get/SetAttr/Get/SetStyleSh though.
86 
87  // Following values are set by ImpCalcEdgeTrack
88  tools::Long nAngle1; // exit angle at Obj1
89  tools::Long nAngle2; // exit angle at Obj2
90  sal_uInt16 nObj1Lines; // 1..3
91  sal_uInt16 nObj2Lines; // 1..3
92  sal_uInt16 nMiddleLine; // 0xFFFF=none, otherwise point number of the beginning of the line
93 
94 public:
96  : nAngle1(0),
97  nAngle2(0),
98  nObj1Lines(0),
99  nObj2Lines(0),
100  nMiddleLine(0xFFFF)
101  {}
102 
104  sal_uInt16 ImpGetPolyIdx(SdrEdgeLineCode eLineCode, const XPolygon& rXP) const;
105  bool ImpIsHorzLine(SdrEdgeLineCode eLineCode, const XPolygon& rXP) const;
106  void ImpSetLineOffset(SdrEdgeLineCode eLineCode, const XPolygon& rXP, tools::Long nVal);
107  tools::Long ImpGetLineOffset(SdrEdgeLineCode eLineCode, const XPolygon& rXP) const;
108 };
109 
110 
113 {
114 public:
115  SdrObjConnection aCon1; // connection status of the beginning of the line
116  SdrObjConnection aCon2; // connection status of the end of the line
117  std::optional<XPolygon> pEdgeTrack;
118  bool bEdgeTrackDirty; // true -> connector track needs to be recalculated
121 
122 public:
124  virtual ~SdrEdgeObjGeoData() override;
125 };
126 
127 
130 {
131 private:
132  // to allow sdr::properties::ConnectorProperties access to ImpSetAttrToEdgeInfo()
134 
135  friend class SdrCreateView;
136  friend class ImpEdgeHdl;
137 
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::optional<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 private:
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, SdrDragStat* pDragStat = 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  // Copy constructor
194  SdrEdgeObj(SdrModel& rSdrModel, SdrEdgeObj const & rSource);
195 
196  // react on model/page change
197  virtual void handlePageChange(SdrPage* pOldPage, SdrPage* pNewPage) override;
198 
199  SdrObjConnection& GetConnection(bool bTail1) { return *(bTail1 ? &aCon1 : &aCon2); }
200  virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const override;
201  virtual SdrObjKind GetObjIdentifier() const override;
202  virtual const tools::Rectangle& GetCurrentBoundRect() const override;
203  virtual const tools::Rectangle& GetSnapRect() const override;
204  virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const override;
205  virtual SdrGluePoint GetCornerGluePoint(sal_uInt16 nNum) const override;
206  virtual const SdrGluePointList* GetGluePointList() const override;
207  virtual SdrGluePointList* ForceGluePointList() override;
208 
209  // * for all of the below: bTail1=true: beginning of the line,
210  // otherwise end of the line
211  // * pObj=NULL: disconnect connector
212  void SetEdgeTrackDirty() { bEdgeTrackDirty=true; }
213  void ConnectToNode(bool bTail1, SdrObject* pObj) override;
214  void DisconnectFromNode(bool bTail1) override;
215  SdrObject* GetConnectedNode(bool bTail1) const override;
216  const SdrObjConnection& GetConnection(bool bTail1) const { return *(bTail1 ? &aCon1 : &aCon2); }
217  bool CheckNodeConnection(bool bTail1) const;
218 
219  virtual void RecalcSnapRect() override;
220  virtual void TakeUnrotatedSnapRect(tools::Rectangle& rRect) const override;
221  virtual SdrEdgeObj* CloneSdrObject(SdrModel& rTargetModel) const override;
222  virtual OUString TakeObjNameSingul() const override;
223  virtual OUString TakeObjNamePlural() const override;
224 
225  void SetEdgeTrackPath( const basegfx::B2DPolyPolygon& rPoly );
226  basegfx::B2DPolyPolygon GetEdgeTrackPath() const;
227 
228  virtual basegfx::B2DPolyPolygon TakeXorPoly() const override;
229  virtual sal_uInt32 GetHdlCount() const override;
230  virtual void AddToHdlList(SdrHdlList& rHdlList) const override;
231 
232  // special drag methods
233  virtual bool hasSpecialDrag() const override;
234  virtual bool beginSpecialDrag(SdrDragStat& rDrag) const override;
235  virtual bool applySpecialDrag(SdrDragStat& rDrag) override;
236  virtual OUString getSpecialDragComment(const SdrDragStat& rDrag) const override;
237 
238  // FullDrag support
239  virtual SdrObjectUniquePtr getFullDragClone() const override;
240 
241  virtual void NbcSetSnapRect(const tools::Rectangle& rRect) override;
242  virtual void NbcMove(const Size& aSize) override;
243  virtual void NbcResize(const Point& rRefPnt, const Fraction& aXFact, const Fraction& aYFact) override;
244 
245  // #i54102# added rotate, mirror and shear support
246  virtual void NbcRotate(const Point& rRef, Degree100 nAngle, double sn, double cs) override;
247  virtual void NbcMirror(const Point& rRef1, const Point& rRef2) override;
248  virtual void NbcShear(const Point& rRef, Degree100 nAngle, double tn, bool bVShear) override;
249 
250  // #102344# Added missing implementation
251  virtual void NbcSetAnchorPos(const Point& rPnt) override;
252 
253  virtual bool BegCreate(SdrDragStat& rStat) override;
254  virtual bool MovCreate(SdrDragStat& rStat) override;
255  virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd) override;
256  virtual bool BckCreate(SdrDragStat& rStat) override;
257  virtual void BrkCreate(SdrDragStat& rStat) override;
258  virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const override;
259  virtual PointerStyle GetCreatePointer() const override;
260  virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override;
261 
262  virtual sal_uInt32 GetSnapPointCount() const override;
263  virtual Point GetSnapPoint(sal_uInt32 i) const override;
264  virtual bool IsPolyObj() const override;
265  virtual sal_uInt32 GetPointCount() const override;
266  virtual Point GetPoint(sal_uInt32 i) const override;
267  virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i) override;
268 
269  virtual std::unique_ptr<SdrObjGeoData> NewGeoData() const override;
270  virtual void SaveGeoData(SdrObjGeoData& rGeo) const override;
271  virtual void RestoreGeoData(const SdrObjGeoData& rGeo) override;
272 
277  void Reformat();
278 
279  // helper methods for the StarOffice api
280  Point GetTailPoint( bool bTail ) const;
281  void SetTailPoint( bool bTail, const Point& rPt );
282  void setGluePointIndex( bool bTail, sal_Int32 nId = -1 );
283  sal_Int32 getGluePointIndex( bool bTail );
284 
285  virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const override;
286  virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon) override;
287 
288  // for geometry access
289  ::basegfx::B2DPolygon getEdgeTrack() const;
290 
291  // helper method for SdrDragMethod::AddConnectorOverlays. Adds an overlay polygon for
292  // this connector to rResult.
293  basegfx::B2DPolygon ImplAddConnectorOverlay(SdrDragMethod& rDragMethod, bool bTail1, bool bTail2, bool bDetail) const;
294 };
295 
296  // The following item parameters of the SdrItemPool are used to
297  // determine the actual connector line routing:
298  //
299  // sal_uInt16 EdgeFlowAngle default 9000 (= 90.00 deg), min 0, max 9000
300  // Clearance angle.
301  // The angle at which the connecting line may run.
302  //
303  // sal_uInt16 EdgeEscAngle default 9000 (= 90.00 Deg), min 0, max 9000
304  // Object exit angle.
305  // The angle at which the connection line may exit from the object.
306  //
307  // bool EdgeEscAsRay default false
308  // true -> the connecting line emerges from the object radially.
309  // Thus, angle specification by the line ObjCenter / connector.
310  //
311  // bool EdgeEscUseObjAngle default false
312  // Object rotation angle is considered
313  // true -> when determining the connector exit angle, angle for
314  // object rotation is taken as an offset.
315  //
316  // sal_uIntPtr EdgeFlowDefDist default 0, min 0, max ?
317  // This is the default minimum distance on calculation of the
318  // connection Line to the docked objects is in logical units.
319  // This distance is overridden within the object, as soon as the
320  // user drags on the lines. When docking onto a new object,
321  // however, this default is used again.
322  //
323  //
324  // General Information About Connectors:
325  //
326  // There are nodes and edge objects. Two nodes can be joined by an
327  // edge. If a connector is connected to a node only at one end, the
328  // other end is fixed to an absolute position in the document. It is
329  // of course also possible for a connector to be "free" at both ends,
330  // i.e. not connected to a node object on each side.
331  //
332  // A connector object can also theoretically be a node object at the
333  // same time. In the first version, however, this will not yet be
334  // realized.
335  //
336  // A connection between node and connector edge can be established by:
337  // - Interactive creation of a new edge object at the SdrView where
338  // the beginning or end point of the edge is placed on a connector
339  // (glueing point) of an already existing node object.
340  // - Interactive dragging of the beginning or end point of an
341  // existing connector edge object on the SdrView to a connector
342  // (glueing point) of an already existing node object.
343  // - Undo/Redo
344  // Moving node objects does not make any connections. Also not the
345  // direct shifting of edge endpoints on the SdrModel... Connections
346  // can also be established, if the connectors are not configured to
347  // be visible in the view.
348  //
349  // An existing connection between node and edge is retained for:
350  // - Dragging (Move/Resize/Rotate/...) of the node object
351  // - Moving a connector position in the node object
352  // - Simultaneous dragging (Move/Resize/Rotate/...) of the node and the
353  // edge
354  //
355  // A connection between node and edge can be removed by:
356  // - Deleting one of the objects
357  // - Dragging the edge object without simultaneously dragging the node
358  // - Deleting the connector at the node object
359  // - Undo/Redo/Repeat
360  // When dragging, the request to remove the connection must be
361  // requested from outside of the model (for example, from the
362  // SdrView). SdrEdgeObj::Move() itself does not remove the
363  // connection.
364  //
365  // Each node object can have connectors, so-called gluepoints. These
366  // are the geometric points at which the connecting edge object ends
367  // when the connection is established. By default, each object has no
368  // connectors. Nevertheless, one can dock an edge in certain view
369  // settings since then, e.g., connectors can be automatically
370  // generated at the 4 vertices of the node object when needed. Each
371  // object provides 2x4 so-called default connector positions, 4 at
372  // the vertices and 4 at the corner positions. In the normal case,
373  // these are located at the 8 handle positions; exceptions here are
374  // ellipses, parallelograms, ... . In addition, user-specific
375  // connectors can be set for each node object.
376  //
377  // Then there is also the possibility to dock an edge on an object
378  // with the attribute "bUseBestConnector". The best-matching
379  // connector position for the routing of the connection line is then
380  // used from the offering of connectors of the object or/and of the
381  // vertices. The user assigns this attribute by docking the node in
382  // its center (see, e.g., Visio).
383  // 09-06-1996: bUseBestConnector uses vertex gluepoints only.
384  //
385  // And here is some terminology:
386  // Connector : The connector object (edge object)
387  // Node : Any object to which a connector can be glued to, e.g., a rectangle,
388  // etc.
389  // Gluepoint: The point at which the connector is glued to the node object.
390  // There are:
391  // Vertex gluepoints: Each node object presents these glue
392  // points inherently. Perhaps there is already the option
393  // "automatically glue to object vertex" in Draw (default is
394  // on).
395  // Corner gluepoints: These gluepoints, too, are already
396  // auto-enabled on objects. Similar to the ones above,
397  // there may already be an option for them in Draw (default is
398  // off).
399  // In contrast to Visio, vertex gluepoints and corner glue
400  // points are not displayed in the UI; they are simply there (if
401  // the option is activated).
402  // Custom gluepoints: Any number of them are present on each
403  // node object. They can be made visible using the option
404  // (always visible when editing). At the moment, however, they
405  // are not yet fully implemented.
406  // Automatic gluepoint selection: If the connector is docked
407  // to the node object so that the black frame encompasses the
408  // entire object, then the connector tries to find the most
409  // convenient of the 4 vertex gluepoints (and only of those).
410 
411 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
std::optional< XPolygon > pEdgeTrack
Definition: svdoedge.hxx:144
Point aMiddleLine
Definition: svdoedge.hxx:85
Point aObj2Line2
Definition: svdoedge.hxx:83
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
Definition: svdotxtr.cxx:102
Utility class SdrObjConnection.
Definition: svdoedge.hxx:39
virtual const tools::Rectangle & GetCurrentBoundRect() const
Definition: svdobj.cxx:957
tools::Long ImpGetLineOffset(SdrEdgeLineCode eLineCode, const XPolygon &rXP) const
Definition: svdoedge.cxx:131
void SetAutoVertex(bool rB)
Definition: svdoedge.hxx:62
virtual sal_uInt32 GetSnapPointCount() const override
snap to special points of an Object (polygon points, center of circle)
Definition: svdotext.cxx:1123
virtual SdrObjKind GetObjIdentifier() const override
Definition: svdotext.cxx:462
SdrObjConnection aCon2
Definition: svdoedge.hxx:116
virtual bool IsPolyObj() const
Definition: svdobj.cxx:1729
SdrEscapeDirection
Definition: svdglue.hxx:36
sal_uInt16 nNotifyingCount
Definition: svdoedge.hxx:145
sal_uInt16 nMiddleLine
Definition: svdoedge.hxx:92
Utility class SdrEdgeInfoRec.
Definition: svdoedge.hxx:75
long Long
sal_uInt16 nObj2Lines
Definition: svdoedge.hxx:91
tools::Long nAngle2
Definition: svdoedge.hxx:89
virtual sal_uInt32 GetHdlCount() const override
Via GetHdlCount the number of Handles can be retrieved.
Definition: svdotxdr.cxx:36
bool bEdgeTrackUserDefined
Definition: svdoedge.hxx:119
SdrEdgeInfoRec aEdgeInfo
Definition: svdoedge.hxx:146
SdrObject * pObj
Definition: svdhdl.hxx:136
void ResetVars()
Definition: svdoedge.cxx:49
virtual OUString TakeObjNameSingul() const override
Definition: svdotext.cxx:993
virtual void ConnectToNode(bool bTail1, SdrObject *pObj)
Definition: svdobj.cxx:2344
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:1597
virtual sal_uInt32 GetPointCount() const
Definition: svdobj.cxx:1734
virtual const tools::Rectangle & GetSnapRect() const override
Definition: svdoattr.cxx:49
virtual SdrObjectUniquePtr getFullDragClone() const override
Definition: svdotext.cxx:2040
virtual void RecalcSnapRect() override
Snap is not done on the BoundRect but if possible on logic coordinates (i.e.
Definition: svdotext.cxx:1113
All geometrical data of an arbitrary object for use in undo/redo.
Definition: svdobj.hxx:173
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
sal_uInt16 GetConnectorId() const
Definition: svdoedge.hxx:67
Provides information about various ZObject properties.
Definition: svdobj.hxx:195
tools::Long nAngle1
Definition: svdoedge.hxx:88
Point aObj2Line3
Definition: svdoedge.hxx:84
virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const
Definition: svdobj.cxx:2251
virtual bool BckCreate(SdrDragStat &rStat) override
Definition: svdotxdr.cxx:225
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
Definition: svdotext.cxx:1407
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
Definition: svdotext.cxx:59
virtual void NbcShear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear) override
Definition: svdotxtr.cxx:210
SdrObjConnection aCon1
Definition: svdoedge.hxx:115
bool TakeGluePoint(SdrGluePoint &rGP) const
Definition: svdoedge.cxx:59
Utility class SdrEdgeObjGeoData.
Definition: svdoedge.hxx:112
SdrObject * GetObject() const
Definition: svdoedge.hxx:68
SdrEdgeLineCode
Definition: svdoedge.hxx:72
virtual SdrObject * GetConnectedNode(bool bTail1) const
Definition: svdobj.cxx:2352
bool ImpIsHorzLine(SdrEdgeLineCode eLineCode, const XPolygon &rXP) const
Definition: svdoedge.cxx:112
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
Definition: svdotext.cxx:438
virtual SdrTextObj * CloneSdrObject(SdrModel &rTargetModel) const override
Definition: svdotext.cxx:1070
void SetBestVertex(bool rB)
Definition: svdoedge.hxx:61
virtual void NbcSetPoint(const Point &rPnt, sal_uInt32 i)
Definition: svdobj.cxx:1753
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage) override
Definition: svdotext.cxx:489
virtual bool applySpecialDrag(SdrDragStat &rDrag) override
Definition: svdotxdr.cxx:149
virtual const SdrGluePointList * GetGluePointList() const
Definition: svdobj.cxx:2288
virtual OUString getSpecialDragComment(const SdrDragStat &rDrag) const override
Definition: svdotxdr.cxx:174
sal_uInt16 nObj1Lines
Definition: svdoedge.hxx:90
std::optional< XPolygon > pEdgeTrack
Definition: svdoedge.hxx:117
virtual void BrkCreate(SdrDragStat &rStat) override
Definition: svdotxdr.cxx:221
virtual ~SdrEdgeObjGeoData() override
Definition: svdoedge.cxx:2478
SdrObjConnection aCon2
Definition: svdoedge.hxx:142
Point aObj1Line3
Definition: svdoedge.hxx:82
void ImpSetLineOffset(SdrEdgeLineCode eLineCode, const XPolygon &rXP, tools::Long nVal)
Definition: svdoedge.cxx:124
void SetConnectorId(sal_uInt16 nId)
Definition: svdoedge.hxx:63
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:66
virtual void NbcRotate(const Point &rRef, Degree100 nAngle, double sn, double cs) override
Definition: svdotxtr.cxx:186
Abstract DrawObject.
Definition: svdobj.hxx:259
void SetBestConnection(bool rB)
Definition: svdoedge.hxx:60
SdrObjConnection & GetConnection(bool bTail1)
Definition: svdoedge.hxx:199
Point & ImpGetLineOffsetPoint(SdrEdgeLineCode eLineCode)
Definition: svdoedge.cxx:88
virtual void DisconnectFromNode(bool bTail1)
Definition: svdobj.cxx:2348
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:120
sal_uInt16 nConId
Definition: svdoedge.hxx:47
virtual SdrGluePoint GetCornerGluePoint(sal_uInt16 nNum) const
Definition: svdobj.cxx:2272
virtual SdrGluePointList * ForceGluePointList()
Definition: svdobj.cxx:2295
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Detects when a stylesheet is changed.
Definition: svdoattr.cxx:61
#define SVXCORE_DLLPUBLIC
Definition: svxdllapi.h:35
bool IsBestConnection() const
Definition: svdoedge.hxx:65
SdrObjConnection aCon1
Definition: svdoedge.hxx:141
virtual void RestoreGeoData(const SdrObjGeoData &rGeo) override
Definition: svdotext.cxx:1415
std::unique_ptr< SdrObject, SdrObjectFreeOp > SdrObjectUniquePtr
Definition: svdobj.hxx:97
virtual bool beginSpecialDrag(SdrDragStat &rDrag) const
Definition: svdobj.cxx:1344
const SdrObjConnection & GetConnection(bool bTail1) const
Definition: svdoedge.hxx:216
PointerStyle
void SetEdgeTrackDirty()
Definition: svdoedge.hxx:212
sal_uInt16 ImpGetPolyIdx(SdrEdgeLineCode eLineCode, const XPolygon &rXP) const
Definition: svdoedge.cxx:100
virtual Point GetSnapPoint(sal_uInt32 i) const override
Definition: svdotext.cxx:1128
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:1639
virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix &rMatrix, basegfx::B2DPolyPolygon &rPolyPolygon) const override
Definition: svdotext.cxx:1562
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
Definition: svdpage.hxx:365
SdrCreateCmd
Definition: svdtypes.hxx:26
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
Definition: svdotext.cxx:65
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:1075
virtual void TakeUnrotatedSnapRect(tools::Rectangle &rRect) const
Definition: svdotext.cxx:627
virtual Point GetPoint(sal_uInt32 i) const
Definition: svdobj.cxx:1739
Point aObj1Line2
Definition: svdoedge.hxx:81
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
virtual std::unique_ptr< 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:1402
Utility class SdrEdgeObj.
Definition: svdoedge.hxx:129
SdrObject * pObj
Definition: svdoedge.hxx:46
virtual OUString TakeObjNamePlural() const override
Definition: svdotext.cxx:1052
virtual PointerStyle GetCreatePointer() const override
get the cursor/pointer that signals creating this object
Definition: svdotxdr.cxx:242