This project is a demonstrator tool, made by the MOISE project, that translates timed Altarica models into Fiacre models. Such translation allows to use model checkers such as Tina to prove properties. The project contains the translator tool.
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.

312 lines
11 KiB

6 years ago
/***************************************************************
* Name: ControlShape.h
* Purpose: Defines GUI control shape class
* Author: Michal Bližňák (michal.bliznak@tiscali.cz)
* Created: 2008-04-30
* Copyright: Michal Bližňák
* License: wxWidgets license (www.wxwidgets.org)
* Notes:
**************************************************************/
#ifndef _WXSFCONTROLSHAPE_H
#define _WXSFCONTROLSHAPE_H
#include <wx/wxsf/RectShape.h>
#define sfFIT_SHAPE_TO_CONTROL true
#define sfFIT_CONTROL_TO_SHAPE false
#define sfdvCONTROLSHAPE_CONTROLOFFSET 0
#define sfdvCONTROLSHAPE_PROCESSEVENTS wxSFControlShape::evtKEY2CANVAS | wxSFControlShape::evtMOUSE2CANVAS
#define sfdvCONTROLSHAPE_MODFILL wxBrush(*wxBLUE, wxBDIAGONAL_HATCH)
#define sfdvCONTROLSHAPE_MODBORDER wxPen(*wxBLUE, 1, wxSOLID)
class WXDLLIMPEXP_SF wxSFControlShape;
/*!
* \brief Auxiliary class used by wxSFControlShape. All events generated by a GUI control (widget)
* managed by parent control shape are redirected to this event sink which invokes a default event handler
* or send a copy of the event to shape canvas if requested.
*/
class EventSink : public wxEvtHandler
{
public:
/*! \brief Default constructor. */
EventSink();
/*!
* \brief User constructor.
* \param parent Pointer to parent control shape
*/
EventSink(wxSFControlShape *parent);
/*! \brief Destructor. */
virtual ~EventSink();
// public functions
/*!
* \brief Event handler used for delayed processing of a mouse button events.
* The handler creates new key event instance and sends it to a shape canvas for further processing.
* \param event Mouse event
*/
void _OnMouseButton(wxMouseEvent &event);
/*!
* \brief Event handler used for delayed processing of a mouse event (mouse movement).
* The handler creates new key event instance and sends it to a shape canvas for further processing.
* \param event Mouse event
*/
void _OnMouseMove(wxMouseEvent &event);
/*!
* \brief Event handler used for delayed processing of a key event.
* The handler creates new key event instance and sends it to a shape canvas for further processing.
* \param event Keyboard event
*/
void _OnKeyDown(wxKeyEvent &event);
/*! \brief Event handler used for adjusting the parent shape's size in accordance to size of managed GUI control. */
void _OnSize(wxSizeEvent &event);
protected:
// protected data members
/*! \brief Poineter to parent contol shape. */
wxSFControlShape *m_pParentShape;
// protected functions
/*!
* \brief Send copy of incomming event to a shape canvas.
* \param event Event to be send
*/
void SendEvent(wxEvent &event);
/*!
* \brief Modify given mouse event (recalculate the event's position in accordance to parent control
* shape's position.
* \param event Mouse event to be updated;
*/
void UpdateMouseEvent(wxMouseEvent &event);
};
/*!
* \brief Class encapsulates a special shape able to manage assigned GUI controls (widgets). The GUI control's
* position and size can by modified via parent control shape. User can also specify how events incoming from the
* managed GUI control are processed.
*
* Note that the managed controls use a shape canvas as their parent window so these shapes cannot be used
* without existing and properly initialized shape canvas. Moreover, managed GUI controls are not serialized in any
* way internaly so it is completely up to the user to provide this functionality if needed.
*/
class WXDLLIMPEXP_SF wxSFControlShape : public wxSFRectShape
{
public:
friend class EventSink;
XS_DECLARE_CLONABLE_CLASS(wxSFControlShape)
/*! \brief Way of processing of GUI control's events. */
enum EVTPROCESSING
{
/*! \brief Event isn't processed. */
evtNONE = 0,
/*! \brief Keyboard events are processed by the GUI control. */
evtKEY2GUI = 1,
/*! \brief Keyboard events are send to a shape canvas. */
evtKEY2CANVAS = 2,
/*! \brief Mouse events are processed by the GUI control. */
evtMOUSE2GUI = 4,
/*! \brief Mouse events are send to a shape canvas. */
evtMOUSE2CANVAS = 8
};
/*! \brief Default constructor. */
wxSFControlShape();
/*!
* \brief User constructor.
* \param ctrl Pointer to managed GUI control
* \param pos Initial position
* \param size Initial size
* \param manager Pointer to parent diagram manager
*/
wxSFControlShape(wxWindow *ctrl, const wxRealPoint& pos, const wxRealPoint& size, wxSFDiagramManager* manager);
/*!
* \brief Copy constructor.
* \param obj Object to copy from
*/
wxSFControlShape(const wxSFControlShape& obj);
/*! \brief Default destructor. */
virtual ~wxSFControlShape();
// member data accessors
/*!
* \brief Set managed GUI control.
* \param ctrl Pointer to existing manager GUI control
* \param fit TRUE if the control shape should be resized in accordance to the given GUI control
*/
void SetControl(wxWindow * ctrl, bool fit = sfFIT_SHAPE_TO_CONTROL);
/*!
* \brief Get pointer to managed GUI control.
* \return Pointer to the GUI control
*/
wxWindow * GetControl() { return m_pControl; }
/*!
* \brief Set a way how GUI control's events are processed.
* \param mask Event processing
* \sa EVTPROCESSING
*/
void SetEventProcessing(int mask){m_nProcessEvents = mask;}
/*!
* \brief Get a way how GUI control's events are processed.
* \return Combination of EVTPROCESSING flags
* \sa EVTPROCESSING
*/
int GetEventProcessing(){return m_nProcessEvents;}
/*!
* \brief Set control shape's background style used during its modification.
* \param brush Reference to used brush
*/
void SetModFill(const wxBrush& brush){m_ModFill = brush;}
/*!
* \brief Get control shape's background style used during its modification.
* \return Used brush
*/
wxBrush GetModFill(){return m_ModFill;}
/*!
* \brief Set control shape's border styl used during its modification.
* \param pen Reference to used pen
*/
void SetModBorder(const wxPen& pen){m_ModBorder = pen;}
/*!
* \brief Get control shape's border styl used during its modification.
* \return Used pen
*/
wxPen GetModBorder(){return m_ModBorder;}
/*!
* \brief Set control shape's offset (a gap between the shape's border and managed GUI control).
* \param offset Offset size
*/
void SetControlOffset(int offset){m_nControlOffset = offset;}
/*!
* \brief Get control shape's offset (a gap between the shape's border and managed GUI control).
* \return Offset size
*/
int GetControlOffset(){return m_nControlOffset;}
// public functions
/*! \brief Update size and position of the managed control according to the parent shape. */
void UpdateControl();
/*! \brief Update size of the shape position according to the managed control. */
void UpdateShape();
// public virtual functions
/*!
* \brief Scale the shape size by in both directions. The function can be overrided if necessary
* (new implementation should call default one ore scale shape's children manualy if neccesary).
* \param x Horizontal scale factor
* \param y Vertical scale factor
* \param children TRUE if the shape's children shoould be scaled as well, otherwise the shape will be updated after scaling via Update() function.
*/
virtual void Scale(double x, double y, bool children = sfWITHCHILDREN);
/*!
* \brief Move the shape to the given absolute position. The function can be overrided if necessary.
* \param x X coordinate
* \param y Y coordinate
*/
virtual void MoveTo(double x, double y);
/*!
* \brief Move the shape by the given offset. The function can be overrided if neccessary.
* \param x X offset
* \param y Y offset
*/
virtual void MoveBy(double x, double y);
/*! \brief Upate shape (align all child shapes an resize it to fit them) */
virtual void Update();
/*! \brief Resize the shape to bound all child shapes. The function can be overrided if neccessary. */
virtual void FitToChildren();
/*!
* \brief Event handler called at the begining of the shape dragging process.
* The function can be overrided if necessary.
*
* The function is called by the framework (by the shape canvas).
* Default implementation does nothing.
* \sa wxSFShapeCanvas
*/
virtual void OnBeginDrag(const wxPoint& pos);
/*!
* \brief Event handler called at the end of the shape dragging process.
* The function can be overrided if necessary.
*
* The function is called by the framework (by the shape canvas).
* Default implementation does nothing.
* \param pos Current mouse position
* \sa wxSFShapeCanvas
*/
virtual void OnEndDrag(const wxPoint& pos);
/*!
* \brief Event handler called when the user started to drag the shape handle.
* The function can be overrided if necessary.
*
* The function is called by the framework (by the shape canvas).
* Default implementation does nothing.
* \param handle Reference to dragged handle
*/
virtual void OnBeginHandle(wxSFShapeHandle& handle);
/*!
* \brief Event handler called during dragging of the shape handle.
* The function can be overrided if necessary.
*
* The function is called by the framework (by the shape canvas).
* Default implementation does nothing.
* \param handle Reference to dragged handle
*/
virtual void OnHandle(wxSFShapeHandle& handle);
/*!
* \brief Event handler called when the user finished dragging of the shape handle.
* The function can be overrided if necessary.
*
* The function is called by the framework (by the shape canvas).
* Default implementation does nothing.
* \param handle Reference to dragged handle
*/
virtual void OnEndHandle(wxSFShapeHandle& handle);
protected:
// protected data members
/*! \brief Pointer to manager data control. */
wxWindow * m_pControl;
/*! \brief Events processing mask */
int m_nProcessEvents;
/*! \brief Brush used during the shape's modification. */
wxBrush m_ModFill;
/*! \brief Pen used during the shape's modification. */
wxPen m_ModBorder;
/*! \brief Offset between the shape and managed GUI control. */
int m_nControlOffset;
// protected functions
private:
// private data members
/*! \brief Pointer to parent window. */
wxWindow * m_pPrevParent;
/*! \brief Pointer to event sink.*/
EventSink * m_pEventSink;
/*! \brief Previous canvas style. */
long m_nPrevStyle;
/*! \brief Previously used shape's brush. */
wxBrush m_PrevFill;
/*! \brief Previously used shape's pen. */
wxPen m_PrevBorder;
// private functions
/*! \brief Initialize serializable properties. */
void MarkSerializableDataMembers();
};
#endif //_WXSFCONTROLSHAPE_H