You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
5.0 KiB
199 lines
5.0 KiB
/*************************************************************** |
|
* 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 begining 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
|
|
|