2008-03-08 13:52:38 +00:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: gbsizer.h
|
|
|
|
// Purpose: documentation for wxGBPosition class
|
|
|
|
// Author: wxWidgets team
|
|
|
|
// RCS-ID: $Id$
|
|
|
|
// Licence: wxWindows license
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
/**
|
|
|
|
@class wxGBPosition
|
|
|
|
@wxheader{gbsizer.h}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
This class represents the position of an item in a virtual grid of
|
|
|
|
rows and columns managed by a wxGridBagSizer.
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@library{wxcore}
|
|
|
|
@category{FIXME}
|
|
|
|
*/
|
2008-03-08 14:43:31 +00:00
|
|
|
class wxGBPosition
|
2008-03-08 13:52:38 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Construct a new wxGBPosition, optionally setting the row and column.
|
|
|
|
The default is (0,0).
|
|
|
|
*/
|
|
|
|
wxGBPosition();
|
2008-03-08 14:43:31 +00:00
|
|
|
wxGBPosition(int row, int col);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Get the current column value.
|
|
|
|
*/
|
|
|
|
int GetCol();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Get the current row value.
|
|
|
|
*/
|
|
|
|
int GetRow();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Set a new column value.
|
|
|
|
*/
|
|
|
|
void SetCol(int col);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Set a new row value.
|
|
|
|
*/
|
|
|
|
void SetRow(int row);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Is the wxGBPosition valid? (An invalid wxGBPosition is (-1,-1). )
|
|
|
|
*/
|
|
|
|
bool operator!(const wxGBPosition& p);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Compare equality of two wxGBPositions.
|
|
|
|
*/
|
|
|
|
bool operator operator==(const wxGBPosition& p);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@class wxGridBagSizer
|
|
|
|
@wxheader{gbsizer.h}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
A wxSizer that can lay out items in a virtual grid
|
|
|
|
like a wxFlexGridSizer but in this case
|
2008-03-08 14:43:31 +00:00
|
|
|
explicit positioning of the items is allowed using
|
2008-03-08 13:52:38 +00:00
|
|
|
wxGBPosition, and items can optionally span
|
|
|
|
more than one row and/or column using wxGBSpan.
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@library{wxcore}
|
|
|
|
@category{winlayout}
|
|
|
|
*/
|
|
|
|
class wxGridBagSizer : public wxFlexGridSizer
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
Constructor, with optional parameters to specify the gap between the
|
|
|
|
rows and columns.
|
|
|
|
*/
|
|
|
|
wxGridBagSizer(int vgap = 0, int hgap = 0);
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
The Add methods return a valid pointer if the item was successfully placed at
|
|
|
|
the
|
|
|
|
given position, @NULL if something was already there.
|
|
|
|
*/
|
|
|
|
wxSizerItem* Add(wxWindow* window, const wxGBPosition& pos,
|
|
|
|
const wxGBSpan& span = wxDefaultSpan,
|
|
|
|
int flag = 0,
|
|
|
|
int border = 0,
|
2008-03-09 12:33:59 +00:00
|
|
|
wxObject* userData = NULL);
|
2008-03-08 14:43:31 +00:00
|
|
|
wxSizerItem* Add(wxSizer* sizer, const wxGBPosition& pos,
|
|
|
|
const wxGBSpan& span = wxDefaultSpan,
|
|
|
|
int flag = 0,
|
|
|
|
int border = 0,
|
2008-03-09 12:33:59 +00:00
|
|
|
wxObject* userData = NULL);
|
2008-03-08 14:43:31 +00:00
|
|
|
wxSizerItem* Add(int width, int height,
|
|
|
|
const wxGBPosition& pos,
|
|
|
|
const wxGBSpan& span = wxDefaultSpan,
|
|
|
|
int flag = 0,
|
|
|
|
int border = 0,
|
2008-03-09 12:33:59 +00:00
|
|
|
wxObject* userData = NULL);
|
2008-03-08 14:43:31 +00:00
|
|
|
wxSizerItem* Add(wxGBSizerItem* item);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Called when the managed size of the sizer is needed or when layout
|
|
|
|
needs done.
|
|
|
|
*/
|
|
|
|
wxSize CalcMin();
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Look at all items and see if any intersect (or would overlap) the given
|
|
|
|
item. Returns @true if so, @false if there would be no overlap. If an
|
|
|
|
excludeItem is given then it will not be checked for intersection, for
|
|
|
|
example it may be the item we are checking the position of.
|
|
|
|
*/
|
|
|
|
bool CheckForIntersection(wxGBSizerItem* item,
|
2008-03-09 12:33:59 +00:00
|
|
|
wxGBSizerItem* excludeItem = NULL);
|
2008-03-08 14:43:31 +00:00
|
|
|
bool CheckForIntersection(const wxGBPosition& pos,
|
|
|
|
const wxGBSpan& span,
|
2008-03-09 12:33:59 +00:00
|
|
|
wxGBSizerItem* excludeItem = NULL);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Find the sizer item for the given window or subsizer, returns @NULL if
|
|
|
|
not found. (non-recursive)
|
|
|
|
*/
|
|
|
|
wxGBSizerItem* FindItem(wxWindow* window);
|
2008-03-08 14:43:31 +00:00
|
|
|
wxGBSizerItem* FindItem(wxSizer* sizer);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Return the sizer item located at the point given in pt, or @NULL if
|
|
|
|
there is no item at that point. The (x,y) coordinates in pt correspond
|
|
|
|
to the client coordinates of the window using the sizer for
|
|
|
|
layout. (non-recursive)
|
|
|
|
*/
|
|
|
|
wxGBSizerItem* FindItemAtPoint(const wxPoint& pt);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Return the sizer item for the given grid cell, or @NULL if there is no
|
|
|
|
item at that position. (non-recursive)
|
|
|
|
*/
|
|
|
|
wxGBSizerItem* FindItemAtPosition(const wxGBPosition& pos);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Return the sizer item that has a matching user data (it only compares
|
|
|
|
pointer values) or @NULL if not found. (non-recursive)
|
|
|
|
*/
|
|
|
|
wxGBSizerItem* FindItemWithData(const wxObject* userData);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Get the size of the specified cell, including hgap and vgap. Only
|
|
|
|
valid after a Layout.
|
|
|
|
*/
|
|
|
|
wxSize GetCellSize(int row, int col);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Get the size used for cells in the grid with no item.
|
|
|
|
*/
|
|
|
|
wxSize GetEmptyCellSize();
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Get the grid position of the specified item.
|
|
|
|
*/
|
|
|
|
wxGBPosition GetItemPosition(wxWindow* window);
|
2008-03-08 14:43:31 +00:00
|
|
|
wxGBPosition GetItemPosition(wxSizer* sizer);
|
|
|
|
wxGBPosition GetItemPosition(size_t index);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Get the row/col spanning of the specified item
|
|
|
|
*/
|
|
|
|
wxGBSpan GetItemSpan(wxWindow* window);
|
2008-03-08 14:43:31 +00:00
|
|
|
wxGBSpan GetItemSpan(wxSizer* sizer);
|
|
|
|
wxGBSpan GetItemSpan(size_t index);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Called when the managed size of the sizer is needed or when layout
|
|
|
|
needs done.
|
|
|
|
*/
|
|
|
|
void RecalcSizes();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Set the size used for cells in the grid with no item.
|
|
|
|
*/
|
|
|
|
void SetEmptyCellSize(const wxSize& sz);
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Set the grid position of the specified item. Returns @true on success.
|
|
|
|
If the move is not allowed (because an item is already there) then
|
|
|
|
@false is returned.
|
|
|
|
*/
|
|
|
|
bool SetItemPosition(wxWindow* window, const wxGBPosition& pos);
|
2008-03-08 14:43:31 +00:00
|
|
|
bool SetItemPosition(wxSizer* sizer, const wxGBPosition& pos);
|
|
|
|
bool SetItemPosition(size_t index, const wxGBPosition& pos);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Set the row/col spanning of the specified item. Returns @true on
|
|
|
|
success. If the move is not allowed (because an item is already there)
|
|
|
|
then @false is returned.
|
|
|
|
*/
|
|
|
|
bool SetItemSpan(wxWindow* window, const wxGBSpan& span);
|
2008-03-08 14:43:31 +00:00
|
|
|
bool SetItemSpan(wxSizer* sizer, const wxGBSpan& span);
|
|
|
|
bool SetItemSpan(size_t index, const wxGBSpan& span);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@class wxGBSizerItem
|
|
|
|
@wxheader{gbsizer.h}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
|
|
|
The wxGBSizerItem class is used by the
|
2008-03-08 13:52:38 +00:00
|
|
|
wxGridBagSizer for tracking the items in the
|
2008-03-08 14:43:31 +00:00
|
|
|
sizer. It adds grid position and spanning information to the normal
|
2008-03-08 13:52:38 +00:00
|
|
|
wxSizerItem by adding
|
|
|
|
wxGBPosition and wxGBSpan
|
|
|
|
attrbibutes. Most of the time you will not need to use a
|
|
|
|
wxGBSizerItem directly in your code, but there are a couple of cases
|
|
|
|
where it is handy.
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@library{wxcore}
|
|
|
|
@category{FIXME}
|
|
|
|
*/
|
|
|
|
class wxGBSizerItem : public wxSizerItem
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Construct a sizer item for tracking a subsizer.
|
|
|
|
*/
|
|
|
|
wxGBSizerItem(int width, int height, const wxGBPosition& pos,
|
|
|
|
const wxGBSpan& span, int flag,
|
|
|
|
int border, wxObject* userData);
|
2008-03-08 14:43:31 +00:00
|
|
|
wxGBSizerItem(wxWindow* window, const wxGBPosition& pos,
|
|
|
|
const wxGBSpan& span,
|
|
|
|
int flag, int border,
|
|
|
|
wxObject* userData);
|
|
|
|
wxGBSizerItem(wxSizer* sizer, const wxGBPosition& pos,
|
|
|
|
const wxGBSpan& span,
|
|
|
|
int flag, int border,
|
|
|
|
wxObject* userData);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Get the row and column of the endpoint of this item
|
|
|
|
*/
|
|
|
|
void GetEndPos(int& row, int& col);
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Get the grid position of the item.
|
|
|
|
*/
|
|
|
|
wxGBPosition GetPos();
|
2008-03-08 14:43:31 +00:00
|
|
|
void GetPos(int& row, int& col);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Get the row and column spanning of the item.
|
|
|
|
*/
|
|
|
|
wxGBSpan GetSpan();
|
2008-03-08 14:43:31 +00:00
|
|
|
void GetSpan(int& rowspan, int& colspan);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Returns @true if the given pos/span would intersect with this item.
|
|
|
|
*/
|
|
|
|
bool Intersects(const wxGBSizerItem& other);
|
2008-03-08 14:43:31 +00:00
|
|
|
bool Intersects(const wxGBPosition& pos,
|
|
|
|
const wxGBSpan& span);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
If the item is already a member of a sizer then first ensure that
|
|
|
|
there is no other item that would intersect with this one at the new
|
|
|
|
position, then set the new position. Returns @true if the change is
|
|
|
|
successful and after the next Layout the item will be moved.
|
|
|
|
*/
|
|
|
|
bool SetPos(const wxGBPosition& pos);
|
|
|
|
|
|
|
|
/**
|
|
|
|
If the item is already a member of a sizer then first ensure that
|
|
|
|
there is no other item that would intersect with this one with its new
|
|
|
|
spanning size, then set the new spanning. Returns @true if the change
|
|
|
|
is successful and after the next Layout the item will be resized.
|
|
|
|
*/
|
|
|
|
bool SetSpan(const wxGBSpan& span);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@class wxGBSpan
|
|
|
|
@wxheader{gbsizer.h}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
This class is used to hold the row and column spanning attributes of
|
|
|
|
items in a wxGridBagSizer.
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@library{wxcore}
|
|
|
|
@category{FIXME}
|
|
|
|
*/
|
2008-03-08 14:43:31 +00:00
|
|
|
class wxGBSpan
|
2008-03-08 13:52:38 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Construct a new wxGBSpan, optionally setting the rowspan and colspan.
|
|
|
|
The default is (1,1). (Meaning that the item occupies one cell in
|
|
|
|
each direction.
|
|
|
|
*/
|
|
|
|
wxGBSpan();
|
2008-03-08 14:43:31 +00:00
|
|
|
wxGBSpan(int rowspan, int colspan);
|
2008-03-08 13:52:38 +00:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Get the current colspan value.
|
|
|
|
*/
|
|
|
|
int GetColspan();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Get the current rowspan value.
|
|
|
|
*/
|
|
|
|
int GetRowspan();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Set a new colspan value.
|
|
|
|
*/
|
|
|
|
void SetColspan(int colspan);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Set a new rowspan value.
|
|
|
|
*/
|
|
|
|
void SetRowspan(int rowspan);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Is the wxGBSpan valid? (An invalid wxGBSpan is (-1,-1). )
|
|
|
|
*/
|
|
|
|
bool operator!(const wxGBSpan& o);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Compare equality of two wxGBSpans.
|
|
|
|
*/
|
|
|
|
bool operator operator==(const wxGBSpan& o);
|
|
|
|
};
|