X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b701f995b1f96c0ff685e61b85d0dc9fab397be6..9c97f8ea883afa5db14c37bea63f6d4c327b4596:/include/wx/sizer.h diff --git a/include/wx/sizer.h b/include/wx/sizer.h index 4b88513ecb..bd932e89ce 100644 --- a/include/wx/sizer.h +++ b/include/wx/sizer.h @@ -84,9 +84,15 @@ public: 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 +176,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; } @@ -332,10 +345,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,6 +360,12 @@ 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. + // Returns true if it made use of the information (and min size was changed). + bool InformFirstDirection( int direction, int size, int availableOtherDir=-1 ); + // these functions delete the current contents of the item if it's a sizer // or a spacer but not if it is a window void AssignWindow(wxWindow *window) @@ -551,6 +572,11 @@ public: virtual void Clear( bool delete_windows = false ); virtual void DeleteWindows(); + // Inform sizer about the first direction that has been decided (by parent item) + // 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 ) @@ -590,10 +616,16 @@ 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; } @@ -638,8 +670,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 ); @@ -748,6 +778,7 @@ public: protected: void AdjustForFlexDirection(); void AdjustForGrowables(const wxSize& sz); + void FindWidthsAndHeights(int nrows, int ncols); // the heights/widths of all rows/columns wxArrayInt m_rowHeights, @@ -784,6 +815,7 @@ public: wxBoxSizer(int orient) { m_orient = orient; + m_totalProportion = 0; wxASSERT_MSG( m_orient == wxHORIZONTAL || m_orient == wxVERTICAL, _T("invalid value for wxBoxSizer orientation") ); @@ -802,7 +834,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; } @@ -817,7 +849,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; } @@ -860,6 +892,36 @@ 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); + + DECLARE_DYNAMIC_CLASS(wxWrapSizer) +}; + //--------------------------------------------------------------------------- // wxStaticBoxSizer //---------------------------------------------------------------------------