File: ShapeHandle.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 (199 lines) | stat: -rw-r--r-- 5,076 bytes parent folder | download | duplicates (2)
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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/***************************************************************
 * Name:      ShapeHandle.h
 * Purpose:   Defines shape handle class
 * Author:    Michal Bližňák (michal.bliznak@tiscali.cz)
 * Created:   2007-07-22
 * Copyright: Michal Bližňák
 * License:   wxWidgets license (www.wxwidgets.org)
 * Notes:
 **************************************************************/

#ifndef _WXSFSHAPEHANDLE_H
#define _WXSFSHAPEHANDLE_H

#include <wx/list.h>

#include <wx/wxsf/ScaledDC.h>

class WXDLLIMPEXP_SF wxSFShapeBase;

/*! \brief Class encapsulates shape's handle. The class shouldn't be used separately; see
 * wxSFShapeBase class for more detailed information about functions used for managing of shape
 * handles and handling their events */
class wxSFShapeHandle : public wxObject
{
public:

    friend class wxSFShapeBase;
    friend class wxSFShapeCanvas;

	DECLARE_DYNAMIC_CLASS(wxSFShapeHandle);

    /*! \brief Handle type */
	enum HANDLETYPE
	{
		hndLEFTTOP,
		hndTOP,
		hndRIGHTTOP,
		hndRIGHT,
		hndRIGHTBOTTOM,
		hndBOTTOM,
		hndLEFTBOTTOM,
		hndLEFT,
		hndLINECTRL,
		hndLINESTART,
		hndLINEEND,
		hndUNDEF
	};

    /*! \brief Default constructor */
	wxSFShapeHandle(void);
	/*!
	 * \brief User constructor
	 * \param parent Parent shape
	 * \param type Handle type
	 * \param id Handle ID (usefull only for line controls handles)
	 */
	wxSFShapeHandle(wxSFShapeBase* parent, HANDLETYPE type, long id = -1);
	/*!
	 * \brief Copy constructor
	 * \param obj Source object
	 */
	wxSFShapeHandle(const wxSFShapeHandle& obj);
	/*! \brief Destructor */
	virtual ~wxSFShapeHandle(void);

	// public members accessors
	/*!
	 * \brief Get current handle position.
	 * \return Handle position
	 */
	wxPoint GetPosition() const {return m_nCurrPos;}
	/*!
	 * \brief Get current handle delta (difference between current and previous position).
	 * \return Handle delta
	 */
	wxPoint GetDelta() const {return m_nCurrPos - m_nPrevPos;}
	/*!
	 * \brief Get current total handle delta (difference between current and starting position
	 * stored at the beginning of the dragging process).
	 * \return Total handle delta
	 */
	wxPoint GetTotalDelta() const {return m_nCurrPos - m_nStartPos;}
	/*!
	 * \brief Set handle type.
	 * \param type Handle type
	 * \sa HANDLETYPE
	 */
	void SetType(HANDLETYPE type){m_nType = type;}
	/*!
	 * \brief Get handle type.
	 * \return Handle type
	 * \sa HANDLETYPE
	 */
	HANDLETYPE GetType(){return m_nType;}
	/*!
	 * \brief Show/hide handle
	 * \param show TRUE if the handle should be visible (active), otherwise FALSE
	 */
	void Show(bool show){m_fVisible = show;}
	/*! \brief Function returns TRUE if the handle is visible, otherwise FALSE */
	bool IsVisible(){return m_fVisible;}
	/*!
	 * \brief Get parent shape.
	 * \return Pointer to parent shape
	 */
	wxSFShapeBase* GetParentShape(){return m_pParentShape;}
	/*!
	 * \brief Set handle's ID.
	 * \param id Handle's ID
	 */
	void SetId(long id){m_nId = id;}
	/*!
	 * \brief Get handle's ID.
	 * \return id Handle's ID
	 */
    long GetId(){return m_nId;}

	// public functions
	/*! \brief Refresh (repaint) the handle */
	void Refresh();
	/*!
	 * \brief Find out whether given point is inside the handle.
	 * \param pos Examined point
	 * \return TRUE if the point is inside the handle, otherwise FALSE
	 */
	bool Contains(const wxPoint& pos);

protected:

	// protected data members
	HANDLETYPE m_nType;
	wxSFShapeBase *m_pParentShape;

	bool m_fVisible;
	bool m_fMouseOver;

	// protected functions
	/*!
	 * \brief Draw handle.
	 * \param dc Device context where the handle will be drawn
	 */
	void Draw(wxDC& dc);
	/*!
	 * \brief Draw handle in the normal way.
	 * \param dc Device context where the handle will be drawn
	 */
	void DrawNormal(wxDC& dc);
	/*!
	 * \brief Draw handle in the "hover" way (the mouse pointer is above the handle area).
	 * \param dc Device context where the handle will be drawn
	 */
	void DrawHover(wxDC& dc);

	/*!
	 * \brief Set parent shape.
	 * \param parent Pointer to parent shape
	 */
	 void SetParentShape(wxSFShapeBase *parent){m_pParentShape = parent;}

    /*!
     * \brief Get handle rectangle.
     * \return Handle rectangle
     */
	wxRect GetHandleRect() const;

private:

	// private data memders
	wxPoint m_nStartPos;
	wxPoint m_nPrevPos;
	wxPoint m_nCurrPos;

	long m_nId;

    /*!
     * \brief Event handler called when the mouse pointer is moving above shape canvas.
     * \param pos Current mouse position
     */
	void _OnMouseMove(const wxPoint& pos);
    /*!
     * \brief Event handler called when the handle is started to be dragged.
     * \param pos Current mouse position
     */
	void _OnBeginDrag(const wxPoint& pos);
    /*!
     * \brief Event handler called when the handle is dragged.
     * \param pos Current mouse position
     */
	void _OnDragging(const wxPoint& pos);
    /*!
     * \brief Event handler called when the handle is released.
     * \param pos Current mouse position
     */
	void _OnEndDrag(const wxPoint& pos);
};

WX_DECLARE_LIST(wxSFShapeHandle, HandleList);

#endif //_WXSFSHAPEHANDLE_H