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
|