X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b701f995b1f96c0ff685e61b85d0dc9fab397be6..30d54e2732fe66d65c76b65a092b52e712d7abb8:/include/wx/sizer.h diff --git a/include/wx/sizer.h b/include/wx/sizer.h index 4b88513ecb..8ae125062d 100644 --- a/include/wx/sizer.h +++ b/include/wx/sizer.h @@ -345,6 +345,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 +557,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 ) @@ -593,7 +604,10 @@ public: 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; } @@ -748,6 +762,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, @@ -802,7 +817,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 +832,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 +875,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 //---------------------------------------------------------------------------