| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/wrapsizer.h
- // Purpose: provide wrapping sizer for layout (wxWrapSizer)
- // Author: Arne Steinarson
- // Created: 2008-05-08
- // Copyright: (c) Arne Steinarson
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_WRAPSIZER_H_
- #define _WX_WRAPSIZER_H_
- #include "wx/sizer.h"
- // flags for wxWrapSizer
- enum
- {
- wxEXTEND_LAST_ON_EACH_LINE = 1,
- // don't leave spacers in the beginning of a new row
- wxREMOVE_LEADING_SPACES = 2,
- wxWRAPSIZER_DEFAULT_FLAGS = wxEXTEND_LAST_ON_EACH_LINE |
- wxREMOVE_LEADING_SPACES
- };
- // ----------------------------------------------------------------------------
- // A box sizer that can wrap items on several lines when sum of widths exceed
- // available line width.
- // ----------------------------------------------------------------------------
- class WXDLLEXPORT wxWrapSizer : public wxBoxSizer
- {
- public:
- wxWrapSizer(int orient = wxHORIZONTAL, int flags = wxWRAPSIZER_DEFAULT_FLAGS);
- virtual ~wxWrapSizer();
- // override base class virtual methods
- virtual wxSize CalcMin();
- virtual void RecalcSizes();
- virtual bool InformFirstDirection(int direction,
- int size,
- int availableOtherDir);
- protected:
- // This method is called to decide if an item represents empty space or
- // not. We do this to avoid having space-only items first or last on a
- // wrapped line (left alignment).
- //
- // By default only spacers are considered to be empty items but a derived
- // class may override this item if some other kind of sizer elements should
- // be also considered empty for some reason.
- virtual bool IsSpaceItem(wxSizerItem *item) const
- {
- return item->IsSpacer();
- }
- // helpers of CalcMin()
- void CalcMinFromMinor(int totMinor);
- void CalcMinFromMajor(int totMajor);
- void CalcMinUsingCurrentLayout();
- void CalcMinFittingSize(const wxSize& szBoundary);
- void CalcMaxSingleItemSize();
- // temporarily change the proportion of the last item of the N-th row to
- // extend to the end of line if the appropriate flag is set
- void AdjustLastRowItemProp(size_t n, wxSizerItem *itemLast);
- // remove all the items from m_rows
- void ClearRows();
- // return the N-th row sizer from m_rows creating it if necessary
- wxSizer *GetRowSizer(size_t n);
- // should be called after completion of each row
- void FinishRow(size_t n, int rowMajor, int rowMinor, wxSizerItem *itemLast);
- const int m_flags; // Flags specified in the ctor
- int m_dirInform; // Direction for size information
- int m_availSize; // Size available in m_dirInform direction
- int m_availableOtherDir; // Size available in the other direction
- bool m_lastUsed; // Indicates whether value from InformFirst... has
- // been used yet
- // The sizes below are computed by RecalcSizes(), i.e. they don't have
- // valid values during the initial call to CalcMin() and they are only
- // valid for the current layout (i.e. the current number of rows)
- int m_minSizeMinor; // Min size in minor direction
- int m_maxSizeMajor; // Size of longest row
- int m_minItemMajor; // Size of smallest item in major direction
- wxBoxSizer m_rows; // Sizer containing multiple rows of our items
- DECLARE_DYNAMIC_CLASS_NO_COPY(wxWrapSizer)
- };
- #endif // _WX_WRAPSIZER_H_
|