X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0be3080aeda90ee387a02c3af00415c5b88668a5..0a12e013f55022e684508316ad0079511e3b4fe7:/include/wx/sizer.h diff --git a/include/wx/sizer.h b/include/wx/sizer.h index ffd8442e98..6d414fd09d 100644 --- a/include/wx/sizer.h +++ b/include/wx/sizer.h @@ -510,7 +510,7 @@ public: wxSizerItem* Add( int width, int height, const wxSizerFlags& flags); wxSizerItem* Add( wxSizerItem *item); - wxSizerItem* AddSpacer(int size); + virtual wxSizerItem *AddSpacer(int size); wxSizerItem* AddStretchSpacer(int prop = 1); wxSizerItem* Insert(size_t index, @@ -542,7 +542,11 @@ public: int width, int height, const wxSizerFlags& flags); - virtual wxSizerItem* Insert( size_t index, wxSizerItem *item); + + // NB: do _not_ override this function in the derived classes, this one is + // virtual for compatibility reasons only to allow old code overriding + // it to continue to work, override DoInsert() instead in the new code + virtual wxSizerItem* Insert(size_t index, wxSizerItem *item); wxSizerItem* InsertSpacer(size_t index, int size); wxSizerItem* InsertStretchSpacer(size_t index, int prop = 1); @@ -713,6 +717,10 @@ protected: virtual bool DoSetItemMinSize( wxSizer *sizer, int width, int height ); virtual bool DoSetItemMinSize( size_t index, int width, int height ); + // insert a new item into m_children at given index and return the item + // itself + virtual wxSizerItem* DoInsert(size_t index, wxSizerItem *item); + private: DECLARE_CLASS(wxSizer) }; @@ -733,8 +741,6 @@ public: wxGridSizer( int rows, int cols, int vgap, int hgap ); wxGridSizer( int rows, int cols, const wxSize& gap ); - virtual wxSizerItem *Insert(size_t index, wxSizerItem *item); - virtual void RecalcSizes(); virtual wxSize CalcMin(); @@ -757,18 +763,51 @@ public: int GetVGap() const { return m_vgap; } int GetHGap() const { return m_hgap; } + int GetEffectiveColsCount() const { return m_cols ? m_cols : CalcCols(); } + int GetEffectiveRowsCount() const { return m_rows ? m_rows : CalcRows(); } + // return the number of total items and the number of columns and rows // (for internal use only) int CalcRowsCols(int& rows, int& cols) const; protected: + // the number of rows/columns in the sizer, if 0 then it is determined + // dynamically depending on the total number of items int m_rows; int m_cols; + + // gaps between rows and columns int m_vgap; int m_hgap; + virtual wxSizerItem *DoInsert(size_t index, wxSizerItem *item); + void SetItemBounds( wxSizerItem *item, int x, int y, int w, int h ); + // returns the number of columns/rows needed for the current total number + // of children (and the fixed number of rows/columns) + int CalcCols() const + { + wxCHECK_MSG + ( + m_rows, 0, + "Can't calculate number of cols if number of rows is not specified" + ); + + return (m_children.GetCount() + m_rows - 1) / m_rows; + } + + int CalcRows() const + { + wxCHECK_MSG + ( + m_cols, 0, + "Can't calculate number of cols if number of rows is not specified" + ); + + return (m_children.GetCount() + m_cols - 1) / m_cols; + } + private: DECLARE_CLASS(wxGridSizer) }; @@ -882,6 +921,8 @@ public: wxT("invalid value for wxBoxSizer orientation") ); } + virtual wxSizerItem *AddSpacer(int size); + int GetOrientation() const { return m_orient; } bool IsVertical() const { return m_orient == wxVERTICAL; } @@ -1072,6 +1113,12 @@ inline void wxSizerItem::SetSpacer(int width, int height) #endif // WXWIN_COMPATIBILITY_2_8 +inline wxSizerItem* +wxSizer::Insert(size_t index, wxSizerItem *item) +{ + return DoInsert(index, item); +} + inline wxSizerItem* wxSizer::Add( wxSizerItem *item )