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_
|