X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/15f7c30516facfb272fc116aec4d3f9c3a9de085..33b3ade5031832ed833c4e118ca4de724bbe7465:/include/wx/sizer.h diff --git a/include/wx/sizer.h b/include/wx/sizer.h index 332b08d804..26a32ba3ea 100644 --- a/include/wx/sizer.h +++ b/include/wx/sizer.h @@ -38,7 +38,7 @@ class WXDLLIMPEXP_FWD_CORE wxSizer; // wxSizerFlags: flags used for an item in the sizer // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxSizerFlags +class WXDLLIMPEXP_CORE wxSizerFlags { public: // construct the flags object initialized with the given proportion (0 by @@ -58,6 +58,15 @@ public: return *this; } + wxSizerFlags& Expand() + { + m_flags |= wxEXPAND; + return *this; + } + + // notice that Align() replaces the current alignment flags, use specific + // methods below such as Top(), Left() &c if you want to set just the + // vertical or horizontal alignment wxSizerFlags& Align(int alignment) // combination of wxAlignment values { m_flags &= ~wxALIGN_MASK; @@ -66,27 +75,48 @@ public: return *this; } - wxSizerFlags& Expand() + // some shortcuts for Align() + wxSizerFlags& Centre() { return Align(wxALIGN_CENTRE); } + wxSizerFlags& Center() { return Centre(); } + + wxSizerFlags& Top() { - m_flags |= wxEXPAND; + m_flags &= ~(wxALIGN_BOTTOM | wxALIGN_CENTRE_VERTICAL); + return *this; + } + + wxSizerFlags& Left() + { + m_flags &= ~(wxALIGN_RIGHT | wxALIGN_CENTRE_HORIZONTAL); + return *this; + } + + wxSizerFlags& Right() + { + m_flags = (m_flags & ~wxALIGN_CENTRE_HORIZONTAL) | wxALIGN_RIGHT; + return *this; + } + + wxSizerFlags& Bottom() + { + m_flags = (m_flags & ~wxALIGN_CENTRE_VERTICAL) | wxALIGN_BOTTOM; return *this; } - // some shortcuts for Align() - wxSizerFlags& Centre() { return Align(wxALIGN_CENTRE); } - wxSizerFlags& Center() { return Centre(); } - wxSizerFlags& Top() { return Align(wxALIGN_TOP); } - wxSizerFlags& Left() { return Align(wxALIGN_LEFT); } - wxSizerFlags& Right() { return Align(wxALIGN_RIGHT); } - wxSizerFlags& Bottom() { return Align(wxALIGN_BOTTOM); } // default border size used by Border() below static int GetDefaultBorder() { #if wxUSE_BORDER_BY_DEFAULT + #ifdef __WXGTK20__ + // GNOME HIG says to use 6px as the base unit: + // http://library.gnome.org/devel/hig-book/stable/design-window.html.en + return 6; + #else // FIXME: default border size shouldn't be hardcoded and at the very // least they should depend on the current font size return 5; + #endif #else return 0; #endif @@ -170,6 +200,13 @@ public: return *this; } + // makes the item ignore window's visibility status + wxSizerFlags& ReserveSpaceEvenIfHidden() + { + m_flags |= wxRESERVE_SPACE_EVEN_IF_HIDDEN; + return *this; + } + // accessors for wxSizer only int GetProportion() const { return m_proportion; } int GetFlags() const { return m_flags; } @@ -186,7 +223,7 @@ private: // wxSizerSpacer: used by wxSizerItem to represent a spacer // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxSizerSpacer +class WXDLLIMPEXP_CORE wxSizerSpacer { public: wxSizerSpacer(const wxSize& size) : m_size(size), m_isShown(true) { } @@ -209,7 +246,7 @@ private: // wxSizerItem // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxSizerItem : public wxObject +class WXDLLIMPEXP_CORE wxSizerItem : public wxObject { public: // window @@ -332,10 +369,12 @@ public: { return m_kind == Item_Sizer ? m_sizer : NULL; } wxSize GetSpacer() const; - // this function behaves obviously for the windows and spacers but for the + // This function behaves obviously for the windows and spacers but for the // sizers it returns true if any sizer element is shown and only returns - // false if all of them are hidden + // false if all of them are hidden. Also, it always returns true if + // wxRESERVE_SPACE_EVEN_IF_HIDDEN flag was used. bool IsShown() const; + void Show(bool show); void SetUserData(wxObject* userData) @@ -345,9 +384,9 @@ public: wxPoint GetPosition() const { return m_pos; } - // Called once the first component of an item has been decided. This is - // used in algorithms that depend on knowing the size in one direction - // before the min size in the other direction can be known. + // Called once the first component of an item has been decided. This is + // used in algorithms that depend on knowing the size in one direction + // before the min size in the other direction can be known. // Returns true if it made use of the information (and min size was changed). bool InformFirstDirection( int direction, int size, int availableOtherDir=-1 ); @@ -432,7 +471,7 @@ protected: private: DECLARE_CLASS(wxSizerItem) - DECLARE_NO_COPY_CLASS(wxSizerItem) + wxDECLARE_NO_COPY_CLASS(wxSizerItem); }; WX_DECLARE_EXPORTED_LIST( wxSizerItem, wxSizerItemList ); @@ -442,7 +481,7 @@ WX_DECLARE_EXPORTED_LIST( wxSizerItem, wxSizerItemList ); // wxSizer //--------------------------------------------------------------------------- -class WXDLLEXPORT wxSizer: public wxObject, public wxClientDataContainer +class WXDLLIMPEXP_CORE wxSizer: public wxObject, public wxClientDataContainer { public: wxSizer() { m_containingWindow = NULL; } @@ -502,7 +541,7 @@ public: wxSizerItem* Insert(size_t index, int width, int height, - const wxSizerFlags& flags); + const wxSizerFlags& flags); virtual wxSizerItem* Insert( size_t index, wxSizerItem *item); wxSizerItem* InsertSpacer(size_t index, int size); @@ -561,7 +600,7 @@ public: // Returns true if it made use of the informtion (and recalculated min size) virtual bool InformFirstDirection( int WXUNUSED(direction), int WXUNUSED(size), int WXUNUSED(availableOtherDir) ) { return false; } - + void SetMinSize( int width, int height ) { DoSetMinSize( width, height ); } void SetMinSize( const wxSize& size ) @@ -601,17 +640,33 @@ public: virtual void Layout(); + wxSize ComputeFittingClientSize(wxWindow *window); + wxSize ComputeFittingWindowSize(wxWindow *window); + wxSize Fit( wxWindow *window ); void FitInside( wxWindow *window ); void SetSizeHints( wxWindow *window ); - void SetVirtualSizeHints( wxWindow *window ); +#if WXWIN_COMPATIBILITY_2_8 + // This only calls FitInside() since 2.9 + wxDEPRECATED( void SetVirtualSizeHints( wxWindow *window ) ); +#endif wxSizerItemList& GetChildren() { return m_children; } const wxSizerItemList& GetChildren() const { return m_children; } - void SetDimension( int x, int y, int width, int height ); + void SetDimension(const wxPoint& pos, const wxSize& size) + { + m_position = pos; + m_size = size; + Layout(); + } + void SetDimension(int x, int y, int width, int height) + { SetDimension(wxPoint(x, y), wxSize(width, height)); } + + size_t GetItemCount() const { return m_children.GetCount(); } + bool IsEmpty() const { return m_children.IsEmpty(); } wxSizerItem* GetItem( wxWindow *window, bool recursive = false ); wxSizerItem* GetItem( wxSizer *sizer, bool recursive = false ); @@ -649,8 +704,6 @@ protected: // the window this sizer is used in, can be NULL wxWindow *m_containingWindow; - wxSize GetMaxWindowSize( wxWindow *window ) const; - wxSize GetMinWindowSize( wxWindow *window ); wxSize GetMaxClientSize( wxWindow *window ) const; wxSize GetMinClientSize( wxWindow *window ); wxSize VirtualFitSize( wxWindow *window ); @@ -668,7 +721,7 @@ private: // wxGridSizer //--------------------------------------------------------------------------- -class WXDLLEXPORT wxGridSizer: public wxSizer +class WXDLLIMPEXP_CORE wxGridSizer: public wxSizer { public: wxGridSizer( int rows, int cols, int vgap, int hgap ); @@ -705,8 +758,8 @@ private: // wxFlexGridSizer //--------------------------------------------------------------------------- -// the bevaiour for resizing wxFlexGridSizer cells in the "non-flexible" -// direction +// values which define the behaviour for resizing wxFlexGridSizer cells in the +// "non-flexible" direction enum wxFlexSizerGrowMode { // don't resize the cells in non-flexible direction at all @@ -719,7 +772,7 @@ enum wxFlexSizerGrowMode wxFLEX_GROWMODE_ALL }; -class WXDLLEXPORT wxFlexGridSizer: public wxGridSizer +class WXDLLIMPEXP_CORE wxFlexGridSizer: public wxGridSizer { public: // ctors/dtor @@ -735,6 +788,8 @@ public: void AddGrowableCol( size_t idx, int proportion = 0 ); void RemoveGrowableCol( size_t idx ); + bool IsRowGrowable( size_t idx ); + bool IsColGrowable( 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 @@ -783,19 +838,20 @@ protected: private: DECLARE_CLASS(wxFlexGridSizer) - DECLARE_NO_COPY_CLASS(wxFlexGridSizer) + wxDECLARE_NO_COPY_CLASS(wxFlexGridSizer); }; //--------------------------------------------------------------------------- // wxBoxSizer //--------------------------------------------------------------------------- -class WXDLLEXPORT wxBoxSizer: public wxSizer +class WXDLLIMPEXP_CORE wxBoxSizer: public wxSizer { public: wxBoxSizer(int orient) { m_orient = orient; + m_totalProportion = 0; wxASSERT_MSG( m_orient == wxHORIZONTAL || m_orient == wxVERTICAL, _T("invalid value for wxBoxSizer orientation") ); @@ -814,7 +870,7 @@ public: protected: // helpers for our code: this returns the component of the given wxSize in // the direction of the sizer and in the other direction, respectively - int SizeInMajorDir(const wxSize& sz) const + int GetSizeInMajorDir(const wxSize& sz) const { return m_orient == wxHORIZONTAL ? sz.x : sz.y; } @@ -829,7 +885,7 @@ protected: return m_orient == wxHORIZONTAL ? pt.x : pt.y; } - int SizeInMinorDir(const wxSize& sz) const + int GetSizeInMinorDir(const wxSize& sz) const { return m_orient == wxHORIZONTAL ? sz.y : sz.x; } @@ -872,37 +928,6 @@ private: DECLARE_CLASS(wxBoxSizer) }; -//--------------------------------------------------------------------------- -// wxWrapSizer - A box sizer that can wrap items on several lines when -// widths exceed available width. -//--------------------------------------------------------------------------- - -// Borrow unused flag value -#define wxEXTEND_LAST_ON_EACH_LINE wxFULL_REPAINT_ON_RESIZE - -class WXDLLEXPORT wxWrapSizer: public wxBoxSizer -{ -public: - wxWrapSizer( int orient=wxHORIZONTAL, int flags=wxEXTEND_LAST_ON_EACH_LINE ); - virtual ~wxWrapSizer(); - - virtual void RecalcSizes(); - virtual wxSize CalcMin(); - - virtual bool InformFirstDirection( int direction, int size, int availableOtherDir ); - -protected: - int m_prim_size_last; // Size in primary direction last time - int m_n_line; // Number of lines - wxBoxSizer m_rows; // Rows of items - int m_flags; - - void AdjustPropLastItem(wxSizer *psz, wxSizerItem *itemLast); - -private: - DECLARE_DYNAMIC_CLASS(wxWrapSizer); -}; - //--------------------------------------------------------------------------- // wxStaticBoxSizer //--------------------------------------------------------------------------- @@ -911,7 +936,7 @@ private: class WXDLLIMPEXP_FWD_CORE wxStaticBox; -class WXDLLEXPORT wxStaticBoxSizer: public wxBoxSizer +class WXDLLIMPEXP_CORE wxStaticBoxSizer: public wxBoxSizer { public: wxStaticBoxSizer(wxStaticBox *box, int orient); @@ -936,14 +961,14 @@ protected: private: DECLARE_CLASS(wxStaticBoxSizer) - DECLARE_NO_COPY_CLASS(wxStaticBoxSizer) + wxDECLARE_NO_COPY_CLASS(wxStaticBoxSizer); }; #endif // wxUSE_STATBOX #if wxUSE_BUTTON -class WXDLLEXPORT wxStdDialogButtonSizer: public wxBoxSizer +class WXDLLIMPEXP_CORE wxStdDialogButtonSizer: public wxBoxSizer { public: // Constructor just creates a new wxBoxSizer, not much else. @@ -984,7 +1009,7 @@ protected: private: DECLARE_CLASS(wxStdDialogButtonSizer) - DECLARE_NO_COPY_CLASS(wxStdDialogButtonSizer) + wxDECLARE_NO_COPY_CLASS(wxStdDialogButtonSizer); }; #endif // wxUSE_BUTTON @@ -1012,9 +1037,9 @@ inline void wxSizerItem::SetSpacer(const wxSize& size) } inline void wxSizerItem::SetSpacer(int width, int height) -{ - DoSetSpacer(wxSize(width, height)); -} +{ + DoSetSpacer(wxSize(width, height)); +} #endif // WXWIN_COMPATIBILITY_2_8