X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/12a3f2275c94a345cf83abf5151db68391859623..d5cd19b45cb8ed187238a64fd6a672a2d8c98b4d:/include/wx/sizer.h diff --git a/include/wx/sizer.h b/include/wx/sizer.h index 3c41d70a55..f1dbcdf465 100644 --- a/include/wx/sizer.h +++ b/include/wx/sizer.h @@ -1,19 +1,18 @@ ///////////////////////////////////////////////////////////////////////////// // Name: sizer.h -// Purpose: provide wxSizer class for layouting +// Purpose: provide wxSizer class for layout // Author: Robert Roebling and Robin Dunn // Modified by: Ron Lee // Created: // RCS-ID: $Id$ -// Copyright: (c) Robin Dunn, Dirk Holtwick and Robert Roebling -// (c) 2003, Ron Lee +// Copyright: (c) Robin Dunn, Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef __WXSIZER_H__ #define __WXSIZER_H__ -#if defined(__GNUG__) && !defined(__APPLE__) +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma interface "sizer.h" #endif @@ -27,9 +26,9 @@ // classes //--------------------------------------------------------------------------- -class wxSizerItem; -class wxSizer; -class wxBoxSizer; +class WXDLLEXPORT wxSizerItem; +class WXDLLEXPORT wxSizer; +class WXDLLEXPORT wxBoxSizer; //--------------------------------------------------------------------------- // wxSizerItem @@ -60,22 +59,32 @@ public: int border, wxObject* userData ); - ~wxSizerItem(); - + wxSizerItem(); + virtual ~wxSizerItem(); + virtual void DeleteWindows(); // Enable deleting the SizerItem without destroying the contained sizer. void DetachSizer() { m_sizer = 0; } - virtual wxSize GetSize(); + virtual wxSize GetSize() const; virtual wxSize CalcMin(); virtual void SetDimension( wxPoint pos, wxSize size ); - wxSize GetMinSize() + wxSize GetMinSize() const { return m_minSize; } + wxSize GetMinSizeWithBorder() const; + + void SetMinSize(const wxSize& size) + { + if (IsWindow()) m_window->SetMinSize(size); + m_minSize = size; + } + void SetMinSize( int x, int y ) + { SetMinSize(wxSize(x, y)); } void SetInitSize( int x, int y ) - { m_minSize.x = x; m_minSize.y = y; } + { SetMinSize(wxSize(x, y)); } void SetRatio( int width, int height ) // if either of dimensions is zero, ratio is assumed to be 1 @@ -88,9 +97,9 @@ public: float GetRatio() const { return m_ratio; } - bool IsWindow(); - bool IsSizer(); - bool IsSpacer(); + bool IsWindow() const; + bool IsSizer() const; + bool IsSpacer() const; // Deprecated in 2.6, use {G,S}etProportion instead. wxDEPRECATED( void SetOption( int option ) ); @@ -112,7 +121,7 @@ public: wxWindow *GetWindow() const { return m_window; } void SetWindow( wxWindow *window ) - { m_window = window; } + { m_window = window; m_minSize = window->GetSize(); } wxSizer *GetSizer() const { return m_sizer; } void SetSizer( wxSizer *sizer ) @@ -126,9 +135,9 @@ public: bool IsShown() const { return m_show; } - wxObject* GetUserData() + wxObject* GetUserData() const { return m_userData; } - wxPoint GetPosition() + wxPoint GetPosition() const { return m_pos; } protected: @@ -142,7 +151,7 @@ protected: int m_flag; // If true, then this item is considered in the layout - // calculation. Otherwise, it is skipped over. + // calculation. Otherwise, it is skipped over. bool m_show; // Aspect ratio can always be calculated from m_size, @@ -152,7 +161,8 @@ protected: wxObject *m_userData; - DECLARE_DYNAMIC_CLASS(wxSizerItem); +private: + DECLARE_CLASS(wxSizerItem) DECLARE_NO_COPY_CLASS(wxSizerItem) }; @@ -232,13 +242,13 @@ public: // use Detach instead. wxDEPRECATED( virtual bool Remove( wxWindow *window ) ); virtual bool Remove( wxSizer *sizer ); - virtual bool Remove( size_t index ); + virtual bool Remove( int index ); virtual bool Detach( wxWindow *window ); virtual bool Detach( wxSizer *sizer ); - virtual bool Detach( size_t index ); + virtual bool Detach( int index ); - virtual void Clear( bool delete_windows=false ); + virtual void Clear( bool delete_windows = false ); virtual void DeleteWindows(); void SetMinSize( int width, int height ) @@ -263,9 +273,9 @@ public: bool SetItemMinSize( size_t index, wxSize size ) { return DoSetItemMinSize( index, size.x, size.y ); } - wxSize GetSize() + wxSize GetSize() const { return m_size; } - wxPoint GetPosition() + wxPoint GetPosition() const { return m_position; } /* Calculate the minimal size or return m_minSize if bigger. */ @@ -299,12 +309,12 @@ public: void Hide( size_t index ) { Show( index, false ); } - bool IsShown( wxWindow *window ); - bool IsShown( wxSizer *sizer ); - bool IsShown( size_t index ); - + bool IsShown( wxWindow *window ) const; + bool IsShown( wxSizer *sizer ) const; + bool IsShown( size_t index ) const; + // Recursively call wxWindow::Show () on all sizer items. - void ShowItems (bool show); + virtual void ShowItems (bool show); protected: wxSize m_size; @@ -312,9 +322,9 @@ protected: wxPoint m_position; wxSizerItemList m_children; - wxSize GetMaxWindowSize( wxWindow *window ); + wxSize GetMaxWindowSize( wxWindow *window ) const; wxSize GetMinWindowSize( wxWindow *window ); - wxSize GetMaxClientSize( wxWindow *window ); + wxSize GetMaxClientSize( wxWindow *window ) const; wxSize GetMinClientSize( wxWindow *window ); wxSize FitSize( wxWindow *window ); wxSize VirtualFitSize( wxWindow *window ); @@ -324,7 +334,8 @@ protected: virtual bool DoSetItemMinSize( wxSizer *sizer, int width, int height ); virtual bool DoSetItemMinSize( size_t index, int width, int height ); - DECLARE_DYNAMIC_CLASS(wxSizer); +private: + DECLARE_CLASS(wxSizer) }; //--------------------------------------------------------------------------- @@ -337,17 +348,17 @@ public: wxGridSizer( int rows, int cols, int vgap, int hgap ); wxGridSizer( int cols, int vgap = 0, int hgap = 0 ); - void RecalcSizes(); - wxSize CalcMin(); + virtual void RecalcSizes(); + virtual wxSize CalcMin(); void SetCols( int cols ) { m_cols = cols; } void SetRows( int rows ) { m_rows = rows; } void SetVGap( int gap ) { m_vgap = gap; } void SetHGap( int gap ) { m_hgap = gap; } - int GetCols() { return m_cols; } - int GetRows() { return m_rows; } - int GetVGap() { return m_vgap; } - int GetHGap() { return m_hgap; } + int GetCols() const { return m_cols; } + int GetRows() const { return m_rows; } + int GetVGap() const { return m_vgap; } + int GetHGap() const { return m_hgap; } protected: int m_rows; @@ -360,37 +371,92 @@ protected: void SetItemBounds( wxSizerItem *item, int x, int y, int w, int h ); - DECLARE_DYNAMIC_CLASS(wxGridSizer); +private: + DECLARE_CLASS(wxGridSizer) }; //--------------------------------------------------------------------------- // wxFlexGridSizer //--------------------------------------------------------------------------- +// the bevaiour for resizing wxFlexGridSizer cells in the "non-flexible" +// direction +enum wxFlexSizerGrowMode +{ + // don't resize the cells in non-flexible direction at all + wxFLEX_GROWMODE_NONE, + + // uniformly resize only the specified ones (default) + wxFLEX_GROWMODE_SPECIFIED, + + // uniformly resize all cells + wxFLEX_GROWMODE_ALL +}; + class WXDLLEXPORT wxFlexGridSizer: public wxGridSizer { public: + // ctors/dtor wxFlexGridSizer( int rows, int cols, int vgap, int hgap ); wxFlexGridSizer( int cols, int vgap = 0, int hgap = 0 ); - ~wxFlexGridSizer(); + virtual ~wxFlexGridSizer(); - void RecalcSizes(); - wxSize CalcMin(); - void AddGrowableRow( size_t idx ); + // set the rows/columns which will grow (the others will remain of the + // constant initial size) + void AddGrowableRow( size_t idx, int proportion = 0 ); void RemoveGrowableRow( size_t idx ); - void AddGrowableCol( size_t idx ); + void AddGrowableCol( size_t idx, int proportion = 0 ); void RemoveGrowableCol( size_t idx ); + + // the sizer cells may grow in both directions, not grow at all or only + // grow in one direction but not the other + + // the direction may be wxVERTICAL, wxHORIZONTAL or wxBOTH (default) + void SetFlexibleDirection(int direction) { m_flexDirection = direction; } + int GetFlexibleDirection() const { return m_flexDirection; } + + // note that the grow mode only applies to the direction which is not + // flexible + void SetNonFlexibleGrowMode(wxFlexSizerGrowMode mode) { m_growMode = mode; } + wxFlexSizerGrowMode GetNonFlexibleGrowMode() const { return m_growMode; } + + // Read-only access to the row heights and col widths arrays + const wxArrayInt& GetRowHeights() const { return m_rowHeights; } + const wxArrayInt& GetColWidths() const { return m_colWidths; } + + // implementation + virtual void RecalcSizes(); + virtual wxSize CalcMin(); + protected: - int *m_rowHeights; - int *m_colWidths; - wxArrayInt m_growableRows; - wxArrayInt m_growableCols; + void AdjustForFlexDirection(); + void AdjustForGrowables(const wxSize& sz, const wxSize& minsz, + int nrows, int ncols); + + // the heights/widths of all rows/columns + wxArrayInt m_rowHeights, + m_colWidths; + + // indices of the growable columns and rows + wxArrayInt m_growableRows, + m_growableCols; + + // proportion values of the corresponding growable rows and columns + wxArrayInt m_growableRowsProportions, + m_growableColsProportions; - void CreateArrays(); + // parameters describing whether the growable cells should be resized in + // both directions or only one + int m_flexDirection; + wxFlexSizerGrowMode m_growMode; - DECLARE_DYNAMIC_CLASS(wxFlexGridSizer); + // saves CalcMin result to optimize RecalcSizes + wxSize m_calculatedMinSize; + +private: + DECLARE_CLASS(wxFlexGridSizer) DECLARE_NO_COPY_CLASS(wxFlexGridSizer) }; @@ -406,7 +472,7 @@ public: void RecalcSizes(); wxSize CalcMin(); - int GetOrientation() + int GetOrientation() const { return m_orient; } void SetOrientation(int orient) @@ -420,7 +486,8 @@ protected: int m_fixedWidth; int m_fixedHeight; - DECLARE_DYNAMIC_CLASS(wxBoxSizer); +private: + DECLARE_CLASS(wxBoxSizer) }; //--------------------------------------------------------------------------- @@ -439,46 +506,84 @@ public: void RecalcSizes(); wxSize CalcMin(); - wxStaticBox *GetStaticBox() + wxStaticBox *GetStaticBox() const { return m_staticBox; } + // override to hide/show the static box as well + virtual void ShowItems (bool show); + protected: wxStaticBox *m_staticBox; - DECLARE_DYNAMIC_CLASS(wxStaticBoxSizer); +private: + DECLARE_CLASS(wxStaticBoxSizer) DECLARE_NO_COPY_CLASS(wxStaticBoxSizer) }; #endif // wxUSE_STATBOX -//--------------------------------------------------------------------------- -// wxNotebookSizer -//--------------------------------------------------------------------------- -#if wxUSE_NOTEBOOK +#if WXWIN_COMPATIBILITY_2_4 +// NB: wxBookCtrlSizer and wxNotebookSizer are deprecated, they +// don't do anything. wxBookCtrl::DoGetBestSize does the job now. -class WXDLLEXPORT wxNotebook; +// ---------------------------------------------------------------------------- +// wxBookCtrlSizer +// ---------------------------------------------------------------------------- + +#if wxUSE_BOOKCTRL -class WXDLLEXPORT wxNotebookSizer: public wxSizer +// this sizer works with wxNotebook/wxListbook/... and sizes the control to +// fit its pages +class WXDLLEXPORT wxBookCtrl; + +class WXDLLEXPORT wxBookCtrlSizer : public wxSizer { public: - wxNotebookSizer( wxNotebook *nb ); + wxDEPRECATED( wxBookCtrlSizer(wxBookCtrl *bookctrl) ); - void RecalcSizes(); - wxSize CalcMin(); - - wxNotebook *GetNotebook() - { return m_notebook; } + wxBookCtrl *GetControl() const { return m_bookctrl; } + + virtual void RecalcSizes(); + virtual wxSize CalcMin(); protected: - wxNotebook *m_notebook; + // this protected ctor lets us mark the real one above as deprecated + // and still has warning-free build of the library itself: + wxBookCtrlSizer() {} + + wxBookCtrl *m_bookctrl; + +private: + DECLARE_CLASS(wxBookCtrlSizer) + DECLARE_NO_COPY_CLASS(wxBookCtrlSizer) +}; - DECLARE_DYNAMIC_CLASS(wxNotebookSizer); + +#if wxUSE_NOTEBOOK + +// before wxBookCtrl we only had wxNotebookSizer, keep it for backwards +// compatibility +class WXDLLEXPORT wxNotebook; + +class WXDLLEXPORT wxNotebookSizer : public wxBookCtrlSizer +{ +public: + wxDEPRECATED( wxNotebookSizer(wxNotebook *nb) ); + + wxNotebook *GetNotebook() const { return (wxNotebook *)m_bookctrl; } + +private: + DECLARE_CLASS(wxNotebookSizer) DECLARE_NO_COPY_CLASS(wxNotebookSizer) }; #endif // wxUSE_NOTEBOOK +#endif // wxUSE_BOOKCTRL + +#endif // WXWIN_COMPATIBILITY_2_4 + + +#endif // __WXSIZER_H__ -#endif - // __WXSIZER_H__