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.
190 lines
7.5 KiB
190 lines
7.5 KiB
6 years ago
|
/***************************************************************
|
||
|
* Name: GridShape.h
|
||
|
* Purpose: Defines grid shape class
|
||
|
* Author: Michal Bližňák (michal.bliznak@tiscali.cz)
|
||
|
* Created: 2008-08-02
|
||
|
* Copyright: Michal Bližňák
|
||
|
* License: wxWidgets license (www.wxwidgets.org)
|
||
|
* Notes:
|
||
|
**************************************************************/
|
||
|
|
||
|
#ifndef _WXSFGRIDSHAPE_H
|
||
|
#define _WXSFGRIDSHAPE_H
|
||
|
|
||
|
#include <wx/wxsf/RectShape.h>
|
||
|
|
||
|
// default values
|
||
|
/*! \brief Default value of wxSFGridShape::m_nRows data member. */
|
||
|
#define sfdvGRIDSHAPE_ROWS 3
|
||
|
/*! \brief Default value of wxSFGridShape::m_nCols data member. */
|
||
|
#define sfdvGRIDSHAPE_COLS 3
|
||
|
/*! \brief Default value of wxSFGridShape::m_nCellSpace data member. */
|
||
|
#define sfdvGRIDSHAPE_CELLSPACE 5
|
||
|
|
||
|
/*!
|
||
|
* \brief Class encapsulates a rectangular shape derived from wxSFRectShape class which acts as a grid-based
|
||
|
* container able to manage other assigned child shapes (it can control their position). The managed
|
||
|
* shapes are aligned into defined grid with a behaviour similar to classic wxWidget's wxGridSizer class.
|
||
|
*/
|
||
|
class WXDLLIMPEXP_SF wxSFGridShape : public wxSFRectShape
|
||
|
{
|
||
|
public:
|
||
|
XS_DECLARE_CLONABLE_CLASS(wxSFGridShape);
|
||
|
|
||
|
friend class wxSFDiagramManager;
|
||
|
|
||
|
/*! \brief Default constructor. */
|
||
|
wxSFGridShape();
|
||
|
/*!
|
||
|
* \brief User constructor.
|
||
|
* \param pos Initial position
|
||
|
* \param size Initial size
|
||
|
* \param rows Number of grid rows
|
||
|
* \param cols Number of grid columns
|
||
|
* \param cellspace Additional space between managed shapes
|
||
|
* \param manager Pointer to parent diagram manager
|
||
|
*/
|
||
|
wxSFGridShape(const wxRealPoint& pos, const wxRealPoint& size, int rows, int cols, int cellspace, wxSFDiagramManager* manager);
|
||
|
/*!
|
||
|
* \brief Copy constructor.
|
||
|
* \param obj Reference to the source object
|
||
|
*/
|
||
|
wxSFGridShape(const wxSFGridShape& obj);
|
||
|
/*! \brief Destructor. */
|
||
|
virtual ~wxSFGridShape();
|
||
|
|
||
|
// public member data accessors
|
||
|
|
||
|
/*!
|
||
|
* \brief Set grid dimensions.
|
||
|
* \param rows Number of rows
|
||
|
* \param cols Number of columns
|
||
|
*/
|
||
|
void SetDimensions(int rows, int cols);
|
||
|
/*!
|
||
|
* \brief Set space between grid cells (managed shapes).
|
||
|
* \param cellspace Cellspace size
|
||
|
*/
|
||
|
void SetCellSpace(int cellspace){m_nCellSpace = cellspace;}
|
||
|
/*!
|
||
|
* \brief Get grid dimensions.
|
||
|
* \param rows Pointer to variable where number of rows will be stored
|
||
|
* \param cols Pointer to variable where number of columns will be stored
|
||
|
*/
|
||
|
void GetDimensions(int *rows, int *cols);
|
||
|
/*!
|
||
|
* \brief Get space between grid cells (managed shapes).
|
||
|
* \return Cellspace size
|
||
|
*/
|
||
|
int GetCellSpace(){return m_nCellSpace;}
|
||
|
|
||
|
/*!
|
||
|
* \brief Get managed shape specified by lexicographic cell index.
|
||
|
* \param index Lexicographic index of requested shape
|
||
|
* \return Pointer to shape object of given cell index if exists, otherwise NULL
|
||
|
*/
|
||
|
wxSFShapeBase *GetManagedShape(size_t index);
|
||
|
/*!
|
||
|
* \brief Get managed shape specified by row and column indexes.
|
||
|
* \param row Zero-base row index
|
||
|
* \param col Zero-based column index
|
||
|
* \return Pointer to shape object stored in specified grid cell if exists, otherwise NULL
|
||
|
*/
|
||
|
wxSFShapeBase *GetManagedShape(int row, int col);
|
||
|
|
||
|
// public functions
|
||
|
|
||
|
/*!
|
||
|
* \brief Clear information about managed shapes and set number of rows and columns to zero.
|
||
|
*
|
||
|
* Note that this function doesn't remove managed (child) shapes from the parent grid shape
|
||
|
* (they are still its child shapes but aren't managed anymore).
|
||
|
*/
|
||
|
void ClearGrid();
|
||
|
/*!
|
||
|
* \brief Append given shape to the grid at the last managed position.
|
||
|
* \param shape Pointer to appended shape
|
||
|
*/
|
||
|
bool AppendToGrid(wxSFShapeBase *shape);
|
||
|
/*!
|
||
|
* \brief Insert given shape to the grid at the given position.
|
||
|
*
|
||
|
* Note that the grid can grow in a vertical direction only, so if the user specify desired
|
||
|
* horizontal position bigger than the current number of columns is then this function exits with
|
||
|
* an error (false) return value. If specified vertical position exceeds the number or grid rows than
|
||
|
* the grid is resized. If the given position (grid cell) is already occupied by some shape then the previous
|
||
|
* one will be moved to the grid's last lexicographic position.
|
||
|
* \param row Vertical position
|
||
|
* \param col Horizontal position
|
||
|
* \param shape Pointer to inserted shape
|
||
|
* \return True on success, otherwise False
|
||
|
*/
|
||
|
bool InsertToGrid(int row, int col, wxSFShapeBase *shape);
|
||
|
/*!
|
||
|
* \brief Insert given shape to the grid at the given position.
|
||
|
*
|
||
|
* Note that the given index is a lexicographic position of inserted shape. The given shape is inserted before
|
||
|
* the existing item 'index', thus InsertToGrid(0, something) will insert an item in such way that it will become
|
||
|
* the first grid element.
|
||
|
* \param index Lexicographic position of inserted shape
|
||
|
* \param shape Pointer to inserted shape
|
||
|
* \return True on successe, otherwise False
|
||
|
*/
|
||
|
bool InsertToGrid(int index, wxSFShapeBase *shape);
|
||
|
/**
|
||
|
* \brief Remove shape with given ID from the grid.
|
||
|
* \param id ID of shape which should be removed
|
||
|
*/
|
||
|
void RemoveFromGrid(long id);
|
||
|
|
||
|
// public virtual functions
|
||
|
/*! \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 Do layout of assigned child shapes */
|
||
|
virtual void DoChildrenLayout();
|
||
|
|
||
|
/*!
|
||
|
* \brief Event handler called when any shape is dropped above this shape (and the dropped
|
||
|
* shape is accepted as a child of this shape). The function can be overrided if necessary.
|
||
|
*
|
||
|
* The function is called by the framework (by the shape canvas).
|
||
|
* \param pos Relative position of dropped shape
|
||
|
* \param child Pointer to dropped shape
|
||
|
*/
|
||
|
virtual void OnChildDropped(const wxRealPoint& pos, wxSFShapeBase *child);
|
||
|
|
||
|
protected:
|
||
|
// protected data members
|
||
|
/*! \brief Number of grid rows. */
|
||
|
int m_nRows;
|
||
|
/*! \brief Number of grid columns. */
|
||
|
int m_nCols;
|
||
|
/*! \brief Space additional space between managed shapes. */
|
||
|
int m_nCellSpace;
|
||
|
/*! \brief Array containing the IDs of managed shapes. */
|
||
|
wxXS::IntArray m_arrCells;
|
||
|
|
||
|
// protected functions
|
||
|
/*!
|
||
|
* \brief Move and resize given shape so it will fit the given bounding rectangle.
|
||
|
*
|
||
|
* The shape is aligned inside the given bounding rectangle in accordance to the shape's
|
||
|
* valign and halign flags.
|
||
|
* \param shape Pointer to modified shape
|
||
|
* \param rct Bounding rectangle
|
||
|
* \sa wxSFShapeBase::SetVAlign, wxSFShapeBase::SetHAlign
|
||
|
*/
|
||
|
void FitShapeToRect( wxSFShapeBase *shape, const wxRect& rct);
|
||
|
|
||
|
private:
|
||
|
// private functions
|
||
|
/*! \brief Initialize serializable properties. */
|
||
|
void MarkSerializableDataMembers();
|
||
|
};
|
||
|
|
||
|
#endif // _WXSFGRIDSHAPE_H
|