- @class wxSizer
-
- wxSizer is the abstract base class used for laying out subwindows in a window.
- You cannot use wxSizer directly; instead, you will have to use one of the sizer
- classes derived from it. Currently there are wxBoxSizer, wxStaticBoxSizer,
- wxGridSizer, wxFlexGridSizer, wxWrapSizer and wxGridBagSizer.
-
- The layout algorithm used by sizers in wxWidgets is closely related to layout
- in other GUI toolkits, such as Java's AWT, the GTK toolkit or the Qt toolkit.
- It is based upon the idea of the individual subwindows reporting their minimal
- required size and their ability to get stretched if the size of the parent window
- has changed.
-
- This will most often mean that the programmer does not set the original size of
- a dialog in the beginning, rather the dialog will be assigned a sizer and this
- sizer will be queried about the recommended size. The sizer in turn will query
- its children, which can be normal windows, empty space or other sizers, so that
- a hierarchy of sizers can be constructed. Note that wxSizer does not derive
- from wxWindow and thus does not interfere with tab ordering and requires very little
- resources compared to a real window on screen.
-
- What makes sizers so well fitted for use in wxWidgets is the fact that every
- control reports its own minimal size and the algorithm can handle differences in
- font sizes or different window (dialog item) sizes on different platforms without
- problems. If e.g. the standard font as well as the overall design of Motif widgets
- requires more space than on Windows, the initial dialog size will automatically
- be bigger on Motif than on Windows.
-
- Sizers may also be used to control the layout of custom drawn items on the
- window. The wxSizer::Add(), wxSizer::Insert(), and wxSizer::Prepend() functions
- return a pointer to the newly added wxSizerItem.
- Just add empty space of the desired size and attributes, and then use the
- wxSizerItem::GetRect() method to determine where the drawing operations
- should take place.
-
- Please notice that sizers, like child windows, are owned by the library and
- will be deleted by it which implies that they must be allocated on the heap.
- However if you create a sizer and do not add it to another sizer or
- window, the library wouldn't be able to delete such an orphan sizer and in
- this, and only this, case it should be deleted explicitly.
-
- @beginWxPythonOnly
- If you wish to create a sizer class in wxPython you should
- derive the class from @c wxPySizer in order to get Python-aware
- capabilities for the various virtual methods.
- @endWxPythonOnly
-
- @anchor wxsizer_flags
- @par wxSizer flags
-
- The "flag" argument accepted by wxSizeItem constructors and other
- functions, e.g. wxSizer::Add(), is OR-combination of the following flags.
- Two main behaviours are defined using these flags. One is the border around
- a window: the border parameter determines the border width whereas the
- flags given here determine which side(s) of the item that the border will
- be added. The other flags determine how the sizer item behaves when the
- space allotted to the sizer changes, and is somewhat dependent on the
- specific kind of sizer used.
-
- @beginDefList
- @itemdef{wxTOP<br>
- wxBOTTOM<br>
- wxLEFT<br>
- wxRIGHT<br>
- wxALL,
- These flags are used to specify which side(s) of the sizer item
- the border width will apply to.}
- @itemdef{wxEXPAND,
- The item will be expanded to fill the space assigned to the item.}
- @itemdef{wxSHAPED,
- The item will be expanded as much as possible while also
- maintaining its aspect ratio.}
- @itemdef{wxFIXED_MINSIZE,
- Normally wxSizers will use GetAdjustedBestSize() to determine what
- the minimal size of window items should be, and will use that size
- to calculate the layout. This allows layouts to adjust when an
- item changes and its best size becomes different. If you would
- rather have a window item stay the size it started with then use
- wxFIXED_MINSIZE.}
- @itemdef{wxRESERVE_SPACE_EVEN_IF_HIDDEN,
- Normally wxSizers don't allocate space for hidden windows or other
- items. This flag overrides this behavior so that sufficient space
- is allocated for the window even if it isn't visible. This makes
- it possible to dynamically show and hide controls without resizing
- parent dialog, for example. (Available since 2.8.8.)
- }
- @itemdef{wxALIGN_CENTER<br>
- wxALIGN_CENTRE<br>
- wxALIGN_LEFT<br>
- wxALIGN_RIGHT<br>
- wxALIGN_TOP<br>
- wxALIGN_BOTTOM<br>
- wxALIGN_CENTER_VERTICAL<br>
- wxALIGN_CENTRE_VERTICAL<br>
- wxALIGN_CENTER_HORIZONTAL<br>
- wxALIGN_CENTRE_HORIZONTAL,
- The wxALIGN flags allow you to specify the alignment of the item
- within the space allotted to it by the sizer, adjusted for the
- border if any.}
- @endDefList
-
- @library{wxcore}
- @category{winlayout}
-
- @see @ref overview_sizer
-*/
-class wxSizer : public wxObject
-{
-public:
- /**
- The constructor.
- Note that wxSizer is an abstract base class and may not be instantiated.
- */
- wxSizer();
-
- /**
- The destructor.
- */
- virtual ~wxSizer();
-
- /**
- Appends a child to the sizer.
-
- wxSizer itself is an abstract class, but the parameters are equivalent
- in the derived classes that you will instantiate to use it so they are
- described here:
-
- @param window
- The window to be added to the sizer. Its initial size (either set
- explicitly by the user or calculated internally when using
- wxDefaultSize) is interpreted as the minimal and in many cases also
- the initial size.
- @param flags
- A wxSizerFlags object that enables you to specify most of the above
- parameters more conveniently.
- */
- wxSizerItem* Add(wxWindow* window, const wxSizerFlags& flags);
-
- /**
- Appends a child to the sizer.
-
- wxSizer itself is an abstract class, but the parameters are equivalent
- in the derived classes that you will instantiate to use it so they are
- described here:
-
- @param window
- The window to be added to the sizer. Its initial size (either set
- explicitly by the user or calculated internally when using
- wxDefaultSize) is interpreted as the minimal and in many cases also
- the initial size.
- @param proportion
- Although the meaning of this parameter is undefined in wxSizer, it
- is used in wxBoxSizer to indicate if a child of a sizer can change
- its size in the main orientation of the wxBoxSizer - where 0 stands
- for not changeable and a value of more than zero is interpreted
- relative to the value of other children of the same wxBoxSizer. For
- example, you might have a horizontal wxBoxSizer with three
- children, two of which are supposed to change their size with the
- sizer. Then the two stretchable windows would get a value of 1 each
- to make them grow and shrink equally with the sizer's horizontal
- dimension.
- @param flag
- OR-combination of flags affecting sizer's behavior. See
- @ref wxsizer_flags "wxSizer flags list" for details.
- @param border
- Determines the border width, if the flag parameter is set to
- include any border flag.
- @param userData
- Allows an extra object to be attached to the sizer item, for use in
- derived classes when sizing information is more complex than the
- proportion and flag will allow for.
- */
- wxSizerItem* Add(wxWindow* window,
- int proportion = 0,
- int flag = 0,
- int border = 0,
- wxObject* userData = NULL);
-
- /**
- Appends a child to the sizer.
-
- wxSizer itself is an abstract class, but the parameters are equivalent
- in the derived classes that you will instantiate to use it so they are
- described here:
-
- @param sizer
- The (child-)sizer to be added to the sizer. This allows placing a
- child sizer in a sizer and thus to create hierarchies of sizers
- (typically a vertical box as the top sizer and several horizontal
- boxes on the level beneath).
- @param flags
- A wxSizerFlags object that enables you to specify most of the above
- parameters more conveniently.
- */
- wxSizerItem* Add(wxSizer* sizer, const wxSizerFlags& flags);
-
- /**
- Appends a child to the sizer.
-
- wxSizer itself is an abstract class, but the parameters are equivalent
- in the derived classes that you will instantiate to use it so they are
- described here:
-
- @param sizer
- The (child-)sizer to be added to the sizer. This allows placing a
- child sizer in a sizer and thus to create hierarchies of sizers
- (typically a vertical box as the top sizer and several horizontal
- boxes on the level beneath).
- @param proportion
- Although the meaning of this parameter is undefined in wxSizer, it
- is used in wxBoxSizer to indicate if a child of a sizer can change
- its size in the main orientation of the wxBoxSizer - where 0 stands
- for not changeable and a value of more than zero is interpreted
- relative to the value of other children of the same wxBoxSizer. For
- example, you might have a horizontal wxBoxSizer with three
- children, two of which are supposed to change their size with the
- sizer. Then the two stretchable windows would get a value of 1 each
- to make them grow and shrink equally with the sizer's horizontal
- dimension.
- @param flag
- OR-combination of flags affecting sizer's behavior. See
- @ref wxsizer_flags "wxSizer flags list" for details.
- @param border
- Determines the border width, if the flag parameter is set to
- include any border flag.
- @param userData
- Allows an extra object to be attached to the sizer item, for use in
- derived classes when sizing information is more complex than the
- proportion and flag will allow for.
- */
- wxSizerItem* Add(wxSizer* sizer,
- int proportion = 0,
- int flag = 0,
- int border = 0,
- wxObject* userData = NULL);