File: ShapeDockpoint.h

package info (click to toggle)
codelite 17.0.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 136,204 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (178 lines) | stat: -rwxr-xr-x 5,001 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/***************************************************************
 * Name:      ShapeDockpoint.h
 * Purpose:   Defines shape dockpoint class
 * Author:    Michal Bližňák (michal.bliznak@tiscali.cz)
 * Created:   2010-12-14
 * Copyright: Michal Bližňák
 * License:   wxWidgets license (www.wxwidgets.org)
 * Notes:
 **************************************************************/

#ifndef _WXSFSHAPEDOCKPOINT_H_
#define _WXSFSHAPEDOCKPOINT_H_

#include <wx/wxsf/ScaledDC.h>
#include <wx/wxxmlserializer/XmlSerializer.h>

class WXDLLIMPEXP_SF wxSFShapeBase;

// default values
/*! \brief Default value of wxSFConnectionPoint::m_nRelPosition data member */
#define sfdvCONNPOINT_RELPOS wxRealPoint(0, 0)
/*! \brief Default value of wxSFConnectionPoint::m_nOrthoDir data member */
#define sfdvCONNPOINT_ORTHODIR cpdUNDEF

/*!
 * \brief Class encapsulating fixed connection point assignable to shapes. The assigned fixed connection
 * points are the only places where connected lines can start/end. 
 * \sa wxSFShapeBase::AddConnectionPoint()
 */
class WXDLLIMPEXP_SF wxSFConnectionPoint : public xsSerializable
{
public:

	friend class wxSFShapeBase;
	
	XS_DECLARE_CLONABLE_CLASS(wxSFConnectionPoint);
	
	/*! \brief Connection point type */
	enum CPTYPE
	{
		cpUNDEF,
		cpTOPLEFT,
		cpTOPMIDDLE,
		cpTOPRIGHT,
		cpCENTERLEFT,
		cpCENTERMIDDLE,
		cpCENTERRIGHT,
		cpBOTTOMLEFT,
		cpBOTTOMMIDDLE,
		cpBOTTOMRIGHT,
		cpCUSTOM
	};
	
	/*! \brief Direction of orthogonal connection */
	enum CPORTHODIR
	{
		cpdUNDEF,
		cpdHORIZONTAL,
		cpdVERTICAL
	};
	
	/*!
	 * \brief Basic constructor.
	 */
	wxSFConnectionPoint();
	/*!
	 * \brief Enhanced constructor.
	 * \param parent Pointer to parent shape
	 * \param type Connection point type
	 */
	wxSFConnectionPoint(wxSFShapeBase *parent, CPTYPE type);
	/*!
	 * \brief Enhanced constructor.
	 * \param parent Pointer to parent shape
	 * \param relpos Relative position in percentages
	 * \param id Connection point ID
	 */
	wxSFConnectionPoint(wxSFShapeBase *parent, const wxRealPoint& relpos, long id = -1);
	/*!
	 * \brief Copy constructor.
	 * \param obj Reference to source object
	 */
	wxSFConnectionPoint(const wxSFConnectionPoint &obj);
	/*!
	 * \brief Destructor.
	 */
	virtual ~wxSFConnectionPoint() {;}
	
	/*!
	 * \brief Get connection point type.
	 * \return Connection point type
	 */
	inline CPTYPE GetType() const { return m_nType; }
	/*!
	 * \brief Set direction of orthogonal line's connection.
	 * \param dir Required direction
	 * \sa CPORTHODIR
	 */
	inline void SetOrthoDirection(const CPORTHODIR& dir) { this->m_nOrthoDir = dir; }
	/*!
	 * \brief Get direction of orthogonal line's connection.
	 * \return Current direction
	 * \sa CPORTHODIR
	 */
	inline const CPORTHODIR& GetOrthoDirection() const { return m_nOrthoDir; }
	/*!
	 * \brief Set parent shape.
	 * \param parent Pointer to parent shape
	 */
	inline void SetParentShape(wxSFShapeBase *parent) { wxASSERT(parent); m_pParentShape = parent; }
	/*!
	 * \brief Get parent shape.
	 * \return Pointer to parent shape
	 */
	inline wxSFShapeBase* GetParentShape() const {return m_pParentShape; }
	/*!
	 * \brief Set relative position of custom connection point.
	 * \param relpos Relative position in percetnages
	 */
	inline void SetRelativePosition(const wxRealPoint& relpos) { m_nRelPosition = relpos; }
	/*!
	 * \brief Get relative position of custom connection point.
	 * \return Relative position in percentages
	 */
	inline const wxRealPoint& GetRelativePosition() const { return m_nRelPosition; }
	/*!
	 * \brief Get absolute position of the connection point.
	 * \return Absolute position of the connection point
	 */
	wxRealPoint GetConnectionPoint() const;
	
	/*!
	 * \brief Find out whether given point is inside the connection point.
	 * \param pos Examined point
	 * \return TRUE if the point is inside the handle, otherwise FALSE
	 */
	virtual bool Contains(const wxPoint& pos) const;
	
	/*!
	 * \brief Draw connection point.
	 * \param dc Device context where the handle will be drawn
	 */
	void Draw(wxDC& dc);
	/*! \brief Refresh (repaint) the dock point */
	void Refresh();
	
protected:

	/*!
	 * \brief Draw the connection point in the normal way. The function can be overrided if neccessary.
	 * \param dc Reference to device context where the shape will be drawn to
	 */
	virtual void DrawNormal(wxDC& dc);
	/*!
	 * \brief Draw the connection point in the hower mode (the mouse cursor is above the shape).
	 * The function can be overrided if neccessary.
	 * \param dc Reference to device context where the shape will be drawn to
	 */
	virtual void DrawHover(wxDC& dc);

private:

	/*!
     * \brief Event handler called when the mouse pointer is moving above shape canvas.
     * \param pos Current mouse position
     */
	void _OnMouseMove(const wxPoint& pos);
	
	void MarkSerializableDataMembers();
	
	CPTYPE m_nType;
	CPORTHODIR m_nOrthoDir;
	wxSFShapeBase *m_pParentShape;
	bool m_fMouseOver;
	wxRealPoint m_nRelPosition;
};

#endif //_WXSFSHAPEDOCKPOINT_H_