]> git.saurik.com Git - wxWidgets.git/blame - docs/latex/wx/sizer.tex
fix the include files
[wxWidgets.git] / docs / latex / wx / sizer.tex
CommitLineData
8fe05782
VZ
1\section{\class{wxSizer}}\label{wxsizer}
2
7e9a386e 3wxSizer is the abstract base class used for laying out subwindows in a window. You
3baaf313
VZ
4cannot use wxSizer directly; instead, you will have to use one of the sizer
5classes derived from it. Currently there are \helpref{wxBoxSizer}{wxboxsizer},
6\helpref{wxStaticBoxSizer}{wxstaticboxsizer},
15f7c305
RR
7\helpref{wxGridSizer}{wxgridsizer},
8\helpref{wxFlexGridSizer}{wxflexgridsizer},
9\helpref{wxWrapSizer}{wxwrapsizer}
10 and \helpref{wxGridBagSizer}{wxgridbagsizer}.
515da557 11
fc2171bd 12The layout algorithm used by sizers in wxWidgets is closely related to layout
515da557
RR
13in other GUI toolkits, such as Java's AWT, the GTK toolkit or the Qt toolkit. It is
14based upon the idea of the individual subwindows reporting their minimal required
15size and their ability to get stretched if the size of the parent window has changed.
749bb9f1
DS
16This will most often mean that the programmer does not set the original size of
17a dialog in the beginning, rather the dialog will be assigned a sizer and this sizer
1193d8fa
RR
18will be queried about the recommended size. The sizer in turn will query its
19children, which can be normal windows, empty space or other sizers, so that
20a hierarchy of sizers can be constructed. Note that wxSizer does not derive from wxWindow
749bb9f1 21and thus does not interfere with tab ordering and requires very little resources compared
515da557
RR
22to a real window on screen.
23
fc2171bd 24What makes sizers so well fitted for use in wxWidgets is the fact that every control
515da557
RR
25reports its own minimal size and the algorithm can handle differences in font sizes
26or different window (dialog item) sizes on different platforms without problems. If e.g.
27the standard font as well as the overall design of Motif widgets requires more space than
f6bcfd97 28on Windows, the initial dialog size will automatically be bigger on Motif than on Windows.
8fe05782 29
e6994168
VZ
30Sizers may also be used to control the layout of custom drawn items on the window. The
31Add, Insert, and Prepend functions return a pointer to the newly added wxSizerItem. Just
32add empty space of the desired size and attributes, and then use the wxSizerItem::GetRect
33method to determine where the drawing operations should take place.
34
35
c1073b57
VZ
36Please notice that sizers, like child windows, are owned by the library and
37will be deleted by it which implies that they must be allocated on the heap.
38However if you create a sizer and do not add it to another sizer or window, the
39library wouldn't be able to delete such an orphan sizer and in this, and only
40this, case it should be deleted explicitly.
41
76e1c2de 42\pythonnote{If you wish to create a sizer class in wxPython you should
c9110876 43derive the class from {\tt wxPySizer} in order to get Python-aware
76e1c2de
RD
44capabilities for the various virtual methods.}
45
8fe05782
VZ
46\wxheading{Derived from}
47
7376079d 48\helpref{wxObject}{wxobject}
8fe05782 49
0bf97466
RN
50\wxheading{Include files}
51
52<wx/sizer.h>
53
a7af285d
VZ
54\wxheading{Library}
55
56\helpref{wxCore}{librarieslist}
57
1c0c339c
JS
58\wxheading{See also}
59
60\helpref{Sizer overview}{sizeroverview}
61
8fe05782
VZ
62\latexignore{\rtfignore{\wxheading{Members}}}
63
02c6137e 64
8fe05782
VZ
65\membersection{wxSizer::wxSizer}\label{wxsizerwxsizer}
66
67\func{}{wxSizer}{\void}
68
9c884972
RR
69The constructor. Note that wxSizer is an abstract base class and may not
70be instantiated.
8fe05782 71
02c6137e 72
8fe05782
VZ
73\membersection{wxSizer::\destruct{wxSizer}}\label{wxsizerdtor}
74
75\func{}{\destruct{wxSizer}}{\void}
76
9c884972 77The destructor.
8fe05782 78
02c6137e 79
8fe05782
VZ
80\membersection{wxSizer::Add}\label{wxsizeradd}
81
40210d8a
RN
82\func{wxSizerItem*}{Add}{\param{wxWindow* }{window}, \param{const wxSizerFlags\& }{flags}}
83
56eee37f 84\func{wxSizerItem*}{Add}{\param{wxWindow* }{window}, \param{int }{proportion = 0},\param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
8fe05782 85
40210d8a
RN
86\func{wxSizerItem*}{Add}{\param{wxSizer* }{sizer}, \param{const wxSizerFlags\& }{flags}}
87
56eee37f 88\func{wxSizerItem*}{Add}{\param{wxSizer* }{sizer}, \param{int }{proportion = 0}, \param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
8fe05782 89
56eee37f 90\func{wxSizerItem*}{Add}{\param{int }{width}, \param{int }{height}, \param{int }{proportion = 0}, \param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
8fe05782 91
00976fe5
RL
92Appends a child to the sizer. wxSizer itself is an abstract class, but the parameters are
93equivalent in the derived classes that you will instantiate to use it so they are described
94here:
8fe05782 95
4130b487
RR
96\docparam{window}{The window to be added to the sizer. Its initial size (either set explicitly by the
97user or calculated internally when using wxDefaultSize) is interpreted as the minimal and in many
fd52f255 98cases also the initial size.}
4130b487
RR
99
100\docparam{sizer}{The (child-)sizer to be added to the sizer. This allows placing a child sizer in a
101sizer and thus to create hierarchies of sizers (typically a vertical box as the top sizer and several
102horizontal boxes on the level beneath).}
103
104\docparam{width and height}{The dimension of a spacer to be added to the sizer. Adding spacers to sizers
2edb0bde 105gives more flexibility in the design of dialogs; imagine for example a horizontal box with two buttons at the
4130b487 106bottom of a dialog: you might want to insert a space between the two buttons and make that space stretchable
e3950b18 107using the \arg{proportion} flag and the result will be that the left button will be aligned with the left
4130b487
RR
108side of the dialog and the right button with the right side - the space in between will shrink and grow with
109the dialog.}
110
2b5f62a0 111\docparam{proportion}{Although the meaning of this parameter is undefined in wxSizer, it is used in wxBoxSizer
a6f3598d 112to indicate if a child of a sizer can change its size in the main orientation of the wxBoxSizer - where
2edb0bde 1130 stands for not changeable and a value of more than zero is interpreted relative to the value of other
f6bcfd97
BP
114children of the same wxBoxSizer. For example, you might have a horizontal wxBoxSizer with three children, two
115of which are supposed to change their size with the sizer. Then the two stretchable windows would get a
fc9c7c09 116value of 1 each to make them grow and shrink equally with the sizer's horizontal dimension.}
a6f3598d 117
caa251e0
RD
118\docparam{flag}{This parameter can be used to set a number of flags
119which can be combined using the binary OR operator |. Two main
120behaviours are defined using these flags. One is the border around a
e3950b18 121window: the \arg{border} parameter determines the border width whereas
caa251e0
RD
122the flags given here determine which side(s) of the item that the
123border will be added. The other flags determine how the sizer item
124behaves when the space allotted to the sizer changes, and is somewhat
125dependent on the specific kind of sizer used.
126
127\twocolwidtha{5cm}%
128\begin{twocollist}\itemsep=0pt
129\twocolitem{\windowstyle{wxTOP}\\
130\windowstyle{wxBOTTOM}\\
131\windowstyle{wxLEFT}\\
132\windowstyle{wxRIGHT}\\
133\windowstyle{wxALL}}{These flags are used to specify which side(s) of
e3950b18 134 the sizer item the \arg{border} width will apply to. }
75173186 135
a70b2f80
DS
136\twocolitem{\windowstyle{wxEXPAND}}{The item will be expanded to fill
137the space assigned to the item.}
caa251e0
RD
138\twocolitem{\windowstyle{wxSHAPED}}{The item will be expanded as much
139as possible while also maintaining its aspect ratio}
2fa2b11b
JS
140\twocolitem{\windowstyle{wxFIXED\_MINSIZE}}{Normally wxSizers will use
141\helpref{GetAdjustedBestSize}{wxwindowgetadjustedbestsize} to
142determine what the minimal size of window items should be, and will
143use that size to calculate the layout. This allows layouts to
e3950b18 144adjust when an item changes and its \arg{best size} becomes
2fa2b11b
JS
145different. If you would rather have a window item stay the size it
146started with then use wxFIXED\_MINSIZE.}
b219a1a9 147\twocolitem{\windowstyle{wxALIGN\_CENTER wxALIGN\_CENTRE}\\
caa251e0
RD
148\windowstyle{wxALIGN\_LEFT}\\
149\windowstyle{wxALIGN\_RIGHT}\\
150\windowstyle{wxALIGN\_TOP}\\
151\windowstyle{wxALIGN\_BOTTOM}\\
b219a1a9
VZ
152\windowstyle{wxALIGN\_CENTER\_VERTICAL wxALIGN\_CENTRE\_VERTICAL}\\
153\windowstyle{wxALIGN\_CENTER\_HORIZONTAL wxALIGN\_CENTRE\_HORIZONTAL}}{The wxALIGN flags allow you to
2fa2b11b
JS
154specify the alignment of the item within the space allotted to it by
155the sizer, adjusted for the border if any.}
caa251e0
RD
156\end{twocollist}
157}
158
e3950b18 159\docparam{border}{Determines the border width, if the \arg{flag}
caa251e0 160 parameter is set to include any border flag.}
a6f3598d 161
76e1c2de
RD
162\docparam{userData}{Allows an extra object to be attached to the sizer
163item, for use in derived classes when sizing information is more
e3950b18 164complex than the \arg{proportion} and \arg{flag} will allow for.}
f6bcfd97 165
40210d8a
RN
166\docparam{flags}{A \helpref{wxSizerFlags}{wxsizerflags} object that
167enables you to specify most of the above parameters more conveniently.}
02c6137e 168
749bb9f1
DS
169\membersection{wxSizer::AddSpacer}\label{wxsizeraddspacer}
170
56eee37f 171\func{wxSizerItem*}{AddSpacer}{\param{int }{size}}
749bb9f1
DS
172
173Adds non-stretchable space to the sizer. More readable way of calling
174\helpref{Add}{wxsizeradd}(size, size, 0).
175
176
177\membersection{wxSizer::AddStretchSpacer}\label{wxsizeraddstretchspacer}
178
56eee37f 179\func{wxSizerItem*}{AddStretchSpacer}{\param{int }{prop = 1}}
749bb9f1
DS
180
181Adds stretchable space to the sizer. More readable way of calling
182\helpref{Add}{wxsizeradd}(0, 0, prop).
183
184
f6bcfd97
BP
185\membersection{wxSizer::CalcMin}\label{wxsizercalcmin}
186
187\func{wxSize}{CalcMin}{\void}
188
189This method is abstract and has to be overwritten by any derived class.
576b18f2 190Here, the sizer will do the actual calculation of its children's minimal sizes.
f6bcfd97 191
02c6137e 192
e3950b18
VZ
193\membersection{wxSizer::Clear}\label{wxsizerclear}
194
195\func{void}{Clear}{\param{bool }{delete\_windows = false}}
196
197Detaches all children from the sizer. If \arg{delete\_windows} is \true then child windows will also be deleted.
198
199
32013b47
VS
200\membersection{wxSizer::ComputeFittingClientSize}\label{wxsizercomputefittingclientsize}
201
202\func{wxSize}{ComputeFittingClientSize}{\param{wxWindow* }{window}}
203
204Computes client area size for \arg{window} so that it matches the
205sizer's minimal size. Unlike \helpref{GetMinSize}{wxsizergetminsize}, this
206method accounts for other constraints imposed on \arg{window}, namely display's
207size (returned size will never be too large for the display) and maximum
208window size if previously set by
209\helpref{wxWindow::SetMaxSize}{wxwindowsetmaxsize}.
210
211The returned value is suitable for passing to
212\helpref{wxWindow::SetClientSize}{wxwindowsetclientsize} or
213\helpref{wxWindow::SetMinClientSize}{wxwindowsetminclientsize}.
214
215\wxheading{See also}
216
217\helpref{ComputeFittingWindowSize}{wxsizercomputefittingwindowsize},
218\helpref{Fit}{wxsizerfit}
219
220
221\membersection{wxSizer::ComputeFittintWindowSize}\label{wxsizercomputefittingwindowsize}
222
223\func{wxSize}{ComputeFittingWindowSize}{\param{wxWindow* }{window}}
224
225Like \helpref{ComputeFittingClientSize}{wxsizercomputefittingclientsize},
226but converts the result into \emph{window} size.
227
228The returned value is suitable for passing to
229\helpref{wxWindow::SetSize}{wxwindowsetsize} or
230\helpref{wxWindow::SetMinSize}{wxwindowsetminsize}.
231
232\wxheading{See also}
233
234\helpref{ComputeFittingClientSize}{wxsizercomputefittingclientsize},
235\helpref{Fit}{wxsizerfit}
236
237
00976fe5
RL
238\membersection{wxSizer::Detach}\label{wxsizerdetach}
239
240\func{bool}{Detach}{\param{wxWindow* }{window}}
241
242\func{bool}{Detach}{\param{wxSizer* }{sizer}}
243
12a3f227 244\func{bool}{Detach}{\param{size\_t }{index}}
00976fe5 245
e3950b18
VZ
246Detach a child from the sizer without destroying it. \arg{window} is the window to be
247detached, \arg{sizer} is the equivalent sizer and \arg{index} is the position of
00976fe5
RL
248the child in the sizer, typically 0 for the first item. This method does not
249cause any layout or resizing to take place, call \helpref{wxSizer::Layout}{wxsizerlayout}
250to update the layout "on screen" after detaching a child from the sizer.
251
cc81d32f 252Returns true if the child item was found and detached, false otherwise.
00976fe5
RL
253
254\wxheading{See also}
255
256\helpref{wxSizer::Remove}{wxsizerremove}
257
02c6137e 258
f6bcfd97
BP
259\membersection{wxSizer::Fit}\label{wxsizerfit}
260
e5251d4f 261\func{wxSize}{Fit}{\param{wxWindow* }{window}}
f6bcfd97 262
32013b47
VS
263Tell the sizer to resize the \arg{window} so that its client area matches the
264sizer's minimal size
265(\helpref{ComputeFittingClientSize}{wxsizercomputefittingclientsize} is called
266to determine it).
267This is commonly done in the constructor of the window
c30199bf 268itself, see sample in the description
32013b47
VS
269of \helpref{wxBoxSizer}{wxboxsizer}. Returns the new \emph{window} size.
270
271\wxheading{See also}
272
273\helpref{ComputeFittingClientSize}{wxsizercomputefittingclientsize},
274\helpref{ComputeFittingWindowSize}{wxsizercomputefittingwindowsize}
275
f6bcfd97 276
566d84a7
RL
277\membersection{wxSizer::FitInside}\label{wxsizerfitinside}
278
279\func{void}{FitInside}{\param{wxWindow* }{window}}
280
e3950b18 281Tell the sizer to resize the virtual size of the \arg{window} to match the sizer's
566d84a7
RL
282minimal size. This will not alter the on screen size of the window, but may cause
283the addition/removal/alteration of scrollbars required to view the virtual area in
284windows which manage it.
285
286\wxheading{See also}
287
288\helpref{wxScrolledWindow::SetScrollbars}{wxscrolledwindowsetscrollbars},\rtfsp
289\helpref{wxSizer::SetVirtualSizeHints}{wxsizersetvirtualsizehints}
290
02c6137e 291
f86d9a8b
VZ
292\membersection{wxSizer::GetChildren}\label{wxsizergetchildren}
293
f9b5691a
VZ
294\constfunc{const wxSizerItemList\&}{GetChildren}{\void}
295
f86d9a8b
VZ
296\func{wxSizerItemList\&}{GetChildren}{\void}
297
298Returns the list of the items in this sizer. The elements of type-safe
299\helpref{wxList}{wxlist} \texttt{wxSizerItemList} are objects of type
300\helpref{wxSizerItem *}{wxsizeritem}.
301
302
e8cfff87
VZ
303\membersection{wxSizer::GetContainingWindow}\label{wxsizergetcontainingwindow}
304
305\constfunc{wxWindow *}{GetContainingWindow}{\void}
306
307Returns the window this sizer is used in or \NULL if none.
308
309
9f13661f
WS
310\membersection{wxSizer::GetItem}\label{wxsizergetitem}
311
312\func{wxSizerItem *}{GetItem}{\param{wxWindow* }{window}, \param{bool }{recursive = false}}
313
314\func{wxSizerItem *}{GetItem}{\param{wxSizer* }{sizer}, \param{bool }{recursive = false}}
315
316\func{wxSizerItem *}{GetItem}{\param{size\_t }{index}}
317
e3950b18
VZ
318Finds item of the sizer which holds given \arg{window}, \arg{sizer} or is located
319in sizer at position \arg{index}.
320Use parameter \arg{recursive} to search in subsizers too.
9f13661f
WS
321
322Returns pointer to item or NULL.
323
86909f4c
VZ
324\membersection{wxSizer::GetItemById}\label{wxsizergetitembyid}
325
326\func{wxSizerItem *}{GetItemById}{\param{int }{id}, \param{bool }{recursive = false}}
327
328Finds item of the sizer which has the given \arg{id}. This \arg{id} is not the
329window id but the id of the wxSizerItem itself. This is mainly useful for
330retrieving the sizers created from XRC resources.
331
332Use parameter \arg{recursive} to search in subsizers too.
333
334Returns pointer to item or \NULL.
335
9f13661f 336
f6bcfd97
BP
337\membersection{wxSizer::GetSize}\label{wxsizergetsize}
338
339\func{wxSize}{GetSize}{\void}
340
341Returns the current size of the sizer.
342
02c6137e 343
f6bcfd97
BP
344\membersection{wxSizer::GetPosition}\label{wxsizergetposition}
345
346\func{wxPoint}{GetPosition}{\void}
347
348Returns the current position of the sizer.
349
02c6137e 350
f6bcfd97
BP
351\membersection{wxSizer::GetMinSize}\label{wxsizergetminsize}
352
353\func{wxSize}{GetMinSize}{\void}
354
355Returns the minimal size of the sizer. This is either the combined minimal
356size of all the children and their borders or the minimal size set by
357\helpref{SetMinSize}{wxsizersetminsize}, depending on which is bigger.
358
32013b47
VS
359Note that the returned value is \emph{client} size, not window size.
360In particular, if you use the value to set toplevel window's minimal or
361actual size, use \helpref{wxWindow::SetMinClientSize}{wxwindowsetminclientsize}
362or \helpref{wxWindow::SetClientSize}{wxwindowsetclientsize}, \emph{not}
363\helpref{wxWindow::SetMinSize}{wxwindowsetminsize}
364or \helpref{wxWindow::SetSize}{wxwindowsetsize}.
365
02c6137e 366
e3950b18
VZ
367\membersection{wxSizer::Hide}\label{wxsizerhide}
368
369\func{bool}{Hide}{\param{wxWindow* }{window}, \param{bool }{recursive = false}}
370
371\func{bool}{Hide}{\param{wxSizer* }{sizer}, \param{bool }{recursive = false}}
372
373\func{bool}{Hide}{\param{size\_t }{index}}
374
375Hides the \arg{window}, \arg{sizer}, or item at \arg{index}.
376To make a sizer item disappear, use Hide() followed by \helpref{Layout()}{wxsizerlayout}.
377Use parameter \arg{recursive} to hide elements found in subsizers.
378
379Returns \true if the child item was found, \false otherwise.
380
381\wxheading{See also}
382
383\helpref{wxSizer::IsShown}{wxsizerisshown},\rtfsp
384\helpref{wxSizer::Show}{wxsizershow}
385
386
00976fe5
RL
387\membersection{wxSizer::Insert}\label{wxsizerinsert}
388
40210d8a
RN
389\func{wxSizerItem*}{Insert}{\param{size\_t }{index}, \param{wxWindow* }{window}, \param{const wxSizerFlags\& }{flags}}
390
56eee37f 391\func{wxSizerItem*}{Insert}{\param{size\_t }{index}, \param{wxWindow* }{window}, \param{int }{proportion = 0},\param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
00976fe5 392
40210d8a
RN
393\func{wxSizerItem*}{Insert}{\param{size\_t }{index}, \param{wxSizer* }{sizer}, \param{const wxSizerFlags\& }{flags}}
394
56eee37f 395\func{wxSizerItem*}{Insert}{\param{size\_t }{index}, \param{wxSizer* }{sizer}, \param{int }{proportion = 0}, \param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
00976fe5 396
56eee37f 397\func{wxSizerItem*}{Insert}{\param{size\_t }{index}, \param{int }{width}, \param{int }{height}, \param{int }{proportion = 0}, \param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
00976fe5 398
e3950b18 399Insert a child into the sizer before any existing item at \arg{index}.
00976fe5 400
12a3f227 401\docparam{index}{The position this child should assume in the sizer.}
00976fe5
RL
402
403See \helpref{wxSizer::Add}{wxsizeradd} for the meaning of the other parameters.
404
02c6137e 405
749bb9f1
DS
406\membersection{wxSizer::InsertSpacer}\label{wxsizerinsertspacer}
407
56eee37f 408\func{wxSizerItem*}{InsertSpacer}{\param{size\_t }{index}, \param{int }{size}}
749bb9f1
DS
409
410Inserts non-stretchable space to the sizer. More readable way of calling
411\helpref{Insert}{wxsizerinsert}(size, size, 0).
412
413
414\membersection{wxSizer::InsertStretchSpacer}\label{wxsizerinsertstretchspacer}
415
56eee37f 416\func{wxSizerItem*}{InsertStretchSpacer}{\param{size\_t }{index}, \param{int }{prop = 1}}
749bb9f1
DS
417
418Inserts stretchable space to the sizer. More readable way of calling
419\helpref{Insert}{wxsizerinsert}(0, 0, prop).
420
421
e3950b18
VZ
422\membersection{wxSizer::IsShown}\label{wxsizerisshown}
423
424\constfunc{bool}{IsShown}{\param{wxWindow* }{window}}
425
426\constfunc{bool}{IsShown}{\param{wxSizer* }{sizer}}
427
428\constfunc{bool}{IsShown}{\param{size\_t }{index}}
429
430Returns \true if the \arg{window}, \arg{sizer}, or item at \arg{index} is shown.
431
432\wxheading{See also}
433
434\helpref{wxSizer::Hide}{wxsizerhide},\rtfsp
435\helpref{wxSizer::Show}{wxsizershow}
436
437
f6bcfd97
BP
438\membersection{wxSizer::Layout}\label{wxsizerlayout}
439
440\func{void}{Layout}{\void}
441
442Call this to force layout of the children anew, e.g. after having added a child
443to or removed a child (window, other sizer or space) from the sizer while keeping
444the current dimension.
76e1c2de 445
02c6137e 446
9c884972 447\membersection{wxSizer::Prepend}\label{wxsizerprepend}
8fe05782 448
40210d8a
RN
449\func{wxSizerItem*}{Prepend}{\param{wxWindow* }{window}, \param{const wxSizerFlags\& }{flags}}
450
56eee37f 451\func{wxSizerItem*}{Prepend}{\param{wxWindow* }{window}, \param{int }{proportion = 0}, \param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
8fe05782 452
40210d8a
RN
453\func{wxSizerItem*}{Prepend}{\param{wxSizer* }{sizer}, \param{const wxSizerFlags\& }{flags}}
454
56eee37f 455\func{wxSizerItem*}{Prepend}{\param{wxSizer* }{sizer}, \param{int }{proportion = 0}, \param{int }{flag = 0}, \param{int }{border = 0}, \param{wxObject* }{userData = NULL}}
9c884972 456
56eee37f 457\func{wxSizerItem*}{Prepend}{\param{int }{width}, \param{int }{height}, \param{int }{proportion = 0}, \param{int }{flag = 0}, \param{int }{border= 0}, \param{wxObject* }{userData = NULL}}
9c884972
RR
458
459Same as \helpref{wxSizer::Add}{wxsizeradd}, but prepends the items to the beginning of the
4130b487 460list of items (windows, subsizers or spaces) owned by this sizer.
8fe05782 461
02c6137e 462
749bb9f1
DS
463\membersection{wxSizer::PrependSpacer}\label{wxsizerprependspacer}
464
56eee37f 465\func{wxSizerItem*}{PrependSpacer}{\param{int }{size}}
749bb9f1
DS
466
467Prepends non-stretchable space to the sizer. More readable way of calling
468\helpref{Prepend}{wxsizerprepend}(size, size, 0).
469
470
471\membersection{wxSizer::PrependStretchSpacer}\label{wxsizerprependstretchspacer}
472
56eee37f 473\func{wxSizerItem*}{PrependStretchSpacer}{\param{int }{prop = 1}}
749bb9f1
DS
474
475Prepends stretchable space to the sizer. More readable way of calling
476\helpref{Prepend}{wxsizerprepend}(0, 0, prop).
477
478
f6bcfd97
BP
479\membersection{wxSizer::RecalcSizes}\label{wxsizerrecalcsizes}
480
481\func{void}{RecalcSizes}{\void}
482
483This method is abstract and has to be overwritten by any derived class.
484Here, the sizer will do the actual calculation of its children's positions
485and sizes.
486
02c6137e 487
9c884972
RR
488\membersection{wxSizer::Remove}\label{wxsizerremove}
489
490\func{bool}{Remove}{\param{wxWindow* }{window}}
491
492\func{bool}{Remove}{\param{wxSizer* }{sizer}}
493
12a3f227 494\func{bool}{Remove}{\param{size\_t }{index}}
9c884972 495
8258c3dd
VZ
496Removes a child from the sizer and destroys it if it is a sizer or a spacer,
497but not if it is a window (because windows are owned by their parent window,
498not the sizer). \arg{sizer} is the wxSizer to be removed,
499\arg{index} is the position of the child in the sizer, e.g. $0$ for the first item.
12a3f227 500This method does not cause any layout or resizing to take place, call
00976fe5
RL
501\helpref{wxSizer::Layout}{wxsizerlayout} to update the layout "on screen" after removing a
502child from the sizer.
503
8258c3dd
VZ
504{\bf NB:} The method taking a wxWindow* parameter is deprecated as it does not
505destroy the window as would usually be expected from Remove. You should use
506\helpref{wxSizer::Detach}{wxsizerdetach} in new code instead. There is
507currently no wxSizer method that will both detach and destroy a wxWindow item.
9c884972 508
cc81d32f 509Returns true if the child item was found and removed, false otherwise.
8fe05782 510
02c6137e 511
eae0338f
RR
512\membersection{wxSizer::Replace}\label{wxsizerreplace}
513
514\func{bool}{Replace}{\param{wxWindow* }{oldwin}, \param{wxWindow* }{newwin}, \param{bool }{recursive = false}}
515
516\func{bool}{Replace}{\param{wxSizer* }{oldsz}, \param{wxSizer* }{newsz}, \param{bool }{recursive = false}}
517
518\func{bool}{Remove}{\param{size\_t }{oldindex}, \param{wxSizerItem* }{newitem}}
519
520Detaches the given \arg{oldwin}, \arg{oldsz} child from the sizer and
521replaces it with the given window, sizer, or wxSizerItem.
522
523The detached child is removed {\bf only} if it is a sizer or a spacer
524(because windows are owned by their parent window, not the sizer).
525
526Use parameter \arg{recursive} to search the given element recursively in subsizers.
527
528
529This method does not cause any layout or resizing to take place, call
530\helpref{wxSizer::Layout}{wxsizerlayout} to update the layout "on screen" after replacing a
531child from the sizer.
532
533Returns true if the child item was found and removed, false otherwise.
534
535
8fe05782
VZ
536\membersection{wxSizer::SetDimension}\label{wxsizersetdimension}
537
538\func{void}{SetDimension}{\param{int }{x}, \param{int }{y}, \param{int }{width}, \param{int }{height}}
539
9c884972 540Call this to force the sizer to take the given dimension and thus force the items owned
2edb0bde 541by the sizer to resize themselves according to the rules defined by the parameter in the
f6bcfd97 542\helpref{Add}{wxsizeradd} and \helpref{Prepend}{wxsizerprepend} methods.
8fe05782 543
02c6137e 544
f6bcfd97 545\membersection{wxSizer::SetMinSize}\label{wxsizersetminsize}
8fe05782 546
f6bcfd97 547\func{void}{SetMinSize}{\param{int }{width}, \param{int }{height}}
8fe05782 548
fbfb8bcc 549\func{void}{SetMinSize}{\param{const wxSize\& }{size}}
8fe05782 550
f6bcfd97
BP
551Call this to give the sizer a minimal size. Normally, the sizer will calculate its
552minimal size based purely on how much space its children need. After calling this
553method \helpref{GetMinSize}{wxsizergetminsize} will return either the minimal size
554as requested by its children or the minimal size set here, depending on which is
555bigger.
8fe05782 556
02c6137e 557
f6bcfd97 558\membersection{wxSizer::SetItemMinSize}\label{wxsizersetitemminsize}
8fe05782 559
f6bcfd97 560\func{void}{SetItemMinSize}{\param{wxWindow* }{window}, \param{int}{ width}, \param{int}{ height}}
8fe05782 561
f6bcfd97 562\func{void}{SetItemMinSize}{\param{wxSizer* }{sizer}, \param{int}{ width}, \param{int}{ height}}
8fe05782 563
12a3f227 564\func{void}{SetItemMinSize}{\param{size\_t }{index}, \param{int}{ width}, \param{int}{ height}}
8fe05782 565
f6bcfd97
BP
566Set an item's minimum size by window, sizer, or position. The item will be found recursively
567in the sizer's descendants. This function enables an application to set the size of an item
568after initial creation.
8fe05782 569
02c6137e 570
8fe05782
VZ
571\membersection{wxSizer::SetSizeHints}\label{wxsizersetsizehints}
572
573\func{void}{SetSizeHints}{\param{wxWindow* }{window}}
574
fd52f255
RR
575This method first calls \helpref{wxSizer::Fit}{wxsizerfit} and then
576\helpref{SetSizeHints}{wxtoplevelwindowsetsizehints} on the {\it window}
577passed to it. This only makes sense when {\it window} is actually a
578\helpref{wxTopLevelWindow}{wxtoplevelwindow} such as a wxFrame or a
579wxDialog, since SetSizeHints only has any effect in these classes.
580It does nothing in normal windows or controls.
566d84a7 581
702a26fd
VZ
582This method is implicitly used by \helpref{wxWindow::SetSizerAndFit}{wxwindowsetsizerandfit}
583which is commonly invoked in the constructor of a toplevel window itself (see
584the sample in the description of \helpref{wxBoxSizer}{wxboxsizer}) if the
fd52f255 585toplevel window is resizable.
02c6137e 586
702a26fd 587
566d84a7
RL
588\membersection{wxSizer::SetVirtualSizeHints}\label{wxsizersetvirtualsizehints}
589
590\func{void}{SetVirtualSizeHints}{\param{wxWindow* }{window}}
591
e3950b18 592Tell the sizer to set the minimal size of the \arg{window} virtual area to match the sizer's
2b5f62a0 593minimal size. For windows with managed scrollbars this will set them appropriately.
566d84a7
RL
594
595\wxheading{See also}
596
597\helpref{wxScrolledWindow::SetScrollbars}{wxscrolledwindowsetscrollbars}
7e9a386e 598
02c6137e 599
2b5f62a0
VZ
600\membersection{wxSizer::Show}\label{wxsizershow}
601
8b2bac62 602\func{bool}{Show}{\param{wxWindow* }{window}, \param{bool }{show = true}, \param{bool }{recursive = false}}
2b5f62a0 603
8b2bac62 604\func{bool}{Show}{\param{wxSizer* }{sizer}, \param{bool }{show = true}, \param{bool }{recursive = false}}
2b5f62a0 605
8b2bac62 606\func{bool}{Show}{\param{size\_t }{index}, \param{bool }{show = true}}
12a3f227 607
e3950b18
VZ
608Shows or hides the \arg{window}, \arg{sizer}, or item at \arg{index}.
609To make a sizer item disappear or reappear, use Show() followed by \helpref{Layout()}{wxsizerlayout}.
610Use parameter \arg{recursive} to show or hide elements found in subsizers.
8b2bac62
WS
611
612Returns true if the child item was found, false otherwise.
2b5f62a0 613
e3950b18
VZ
614\wxheading{See also}
615
616\helpref{wxSizer::Hide}{wxsizerhide},\rtfsp
617\helpref{wxSizer::IsShown}{wxsizerisshown}
0497e172 618
2a3c8b65
RN
619
620
621
622\section{\class{wxSizerFlags}}\label{wxsizerflags}
623
62637495
VZ
624Normally, when you add an item to a sizer via
625\helpref{wxSizer::Add}{wxsizeradd}, you have to specify a lot of flags and
626parameters which can be unwieldy. This is where wxSizerFlags comes in: it
627allows you to specify all parameters using the named methods instead. For
628example, instead of
40210d8a 629
62637495 630\begin{verbatim}
58611b5a 631 sizer->Add(ctrl, 0, wxEXPAND | wxALL, 10);
62637495 632\end{verbatim}
2a3c8b65 633
62637495 634you can now write
2a3c8b65 635
62637495
VZ
636\begin{verbatim}
637 sizer->Add(ctrl, wxSizerFlags().Expand().Border(10));
638\end{verbatim}
639
640This is more readable and also allows you to create wxSizerFlags objects which
641can be reused for several sizer items.
642\begin{verbatim}
643 wxSizerFlags flagsExpand(1);
644 flagsExpand.Expand().Border(10);
645
646 sizer->Add(ctrl1, flagsExpand);
647 sizer->Add(ctrl2, flagsExpand);
648\end{verbatim}
649
650Note that by specification, all methods of wxSizerFlags return the wxSizerFlags
651object itself to allowing chaining multiple methods calls like in the examples
652above.
2a3c8b65 653
991ad6cd
VZ
654\wxheading{See also}
655
656\helpref{wxSizer}{wxsizer}
657
658\wxheading{Derived from}
659
660No base class
661
662\wxheading{Include files}
663
664<wx/sizer.h>
665
a7af285d
VZ
666\wxheading{Library}
667
668\helpref{wxCore}{librarieslist}
669
991ad6cd 670\latexignore{\rtfignore{\wxheading{Members}}}
f2fe4f67 671
9a75ba66 672\membersection{wxSizerFlags::wxSizerFlags}\label{wxsizerflagsctor}
2a3c8b65
RN
673
674\func{}{wxSizerFlags}{\param{int }{proportion = 0}}
675
2be7beda 676Creates the wxSizer with the proportion specified by \arg{proportion}.
2a3c8b65
RN
677
678
f2fe4f67 679\membersection{wxSizerFlags::Align}\label{wxsizerflagsalign}
2a3c8b65
RN
680
681\func{wxSizerFlags\& }{Align}{\param{int }{align = 0}}
682
2be7beda 683Sets the alignment of this wxSizerFlags to \arg{align}.
2a3c8b65
RN
684
685Note that if this method is not called, the wxSizerFlags has no specified alignment.
686
e72ac082
VZ
687\wxheading{See also}
688
ccee328e 689\helpref{Top}{wxsizerflagstop},\\
e72ac082
VZ
690\helpref{Left}{wxsizerflagsleft},\\
691\helpref{Right}{wxsizerflagsright},\\
ccee328e 692\helpref{Bottom}{wxsizerflagsbottom},\\
e72ac082
VZ
693\helpref{Centre}{wxsizerflagscentre}
694
2a3c8b65 695
f2fe4f67 696\membersection{wxSizerFlags::Border}\label{wxsizerflagsborder}
2a3c8b65
RN
697
698\func{wxSizerFlags\& }{Border}{\param{int }{direction}, \param{int }{borderinpixels}}
699
2a3c8b65
RN
700\func{wxSizerFlags\& }{Border}{\param{int }{direction = wxALL}}
701
2be7beda
VZ
702Sets the wxSizerFlags to have a border of a number of pixels specified by
703\arg{borderinpixels} with the directions specified by \arg{direction}.
704
705In the overloaded version without \arg{borderinpixels} parameter, the border of
706default size, as returned by \helpref{GetDefaultBorder}{wxsizerflagsgetdefaultborder},
707is used.
2a3c8b65
RN
708
709
ccee328e
VZ
710\membersection{wxSizerFlags::Bottom}\label{wxsizerflagsbottom}
711
712\func{wxSizerFlags\& }{Bottom}{\void}
713
714Aligns the object to the bottom, shortcut for \texttt{Align(wxALIGN\_BOTTOM)}
715
716\wxheading{See also}
717
718\helpref{Align}{wxsizerflagsalign}
719
720
f2fe4f67 721\membersection{wxSizerFlags::Center}\label{wxsizerflagscenter}
2a3c8b65
RN
722
723\func{wxSizerFlags\& }{Center}{\void}
724
725Sets the object of the wxSizerFlags to center itself in the area it is given.
726
727
f2fe4f67 728\membersection{wxSizerFlags::Centre}\label{wxsizerflagscentre}
2a3c8b65
RN
729
730\func{wxSizerFlags\& }{Centre}{\void}
731
732\helpref{wxSizerFlags::Center}{wxsizerflagscenter} for people with the other dialect of english.
733
734
25eb10d2
VZ
735\membersection{wxSizerFlags::DoubleBorder}\label{wxsizerflagsdoubleborder}
736
737\func{wxSizerFlags\& }{DoubleBorder}{\param{int }{direction = wxALL}}
738
739Sets the border in the given \arg{direction} having twice the default border
740size.
741
742
743\membersection{wxSizerFlags::DoubleHorzBorder}\label{wxsizerflagsdoublehorzborder}
744
745\func{wxSizerFlags\& }{DoubleHorzBorder}{\void}
746
747Sets the border in left and right directions having twice the default border
748size.
749
750
f2fe4f67 751\membersection{wxSizerFlags::Expand}\label{wxsizerflagsexpand}
2a3c8b65 752
0f353563 753\func{wxSizerFlags\& }{Expand}{\void}
2a3c8b65
RN
754
755Sets the object of the wxSizerFlags to expand to fill as much area as it can.
756
757
2be7beda
VZ
758\membersection{wxSizerFlags::GetDefaultBorder}\label{wxsizerflagsgetdefaultborder}
759
760\func{static int}{GetDefaultBorder}{\void}
761
762Returns the border used by default in \helpref{Border}{wxsizerflagsborder} method.
763
764
e72ac082
VZ
765\membersection{wxSizerFlags::Left}\label{wxsizerflagsleft}
766
767\func{wxSizerFlags\& }{Left}{\void}
768
769Aligns the object to the left, shortcut for \texttt{Align(wxALIGN\_LEFT)}
770
771\wxheading{See also}
772
773\helpref{Align}{wxsizerflagsalign}
774
775
d95527de
VZ
776\membersection{wxSizerFlags::FixedMinSize}\label{wxsizerflagsfixedminsize}
777
778\func{wxSizerFlags\& }{FixedMinSize}{\void}
779
780Set the \texttt{wxFIXED\_MINSIZE} flag which indicates that the initial size of
781the window should be also set as its minimal size.
782
783
f2fe4f67 784\membersection{wxSizerFlags::Proportion}\label{wxsizerflagsproportion}
2a3c8b65
RN
785
786\func{wxSizerFlags\& }{Proportion}{\param{int }{proportion = 0}}
787
2be7beda 788Sets the proportion of this wxSizerFlags to \arg{proportion}
2a3c8b65
RN
789
790
e72ac082
VZ
791\membersection{wxSizerFlags::Right}\label{wxsizerflagsright}
792
793\func{wxSizerFlags\& }{Right}{\void}
794
795Aligns the object to the right, shortcut for \texttt{Align(wxALIGN\_RIGHT)}
796
797\wxheading{See also}
798
799\helpref{Align}{wxsizerflagsalign}
2a3c8b65 800
25eb10d2 801
d95527de
VZ
802\membersection{wxSizerFlags::Shaped}\label{wxsizerflagsshaped}
803
804\func{wxSizerFlags\& }{Shaped}{\void}
805
806Set the \texttt{wx\_SHAPED} flag which indicates that the elements should
807always keep the fixed width to height ratio equal to its original value.
808
809
ccee328e
VZ
810\membersection{wxSizerFlags::Top}\label{wxsizerflagstop}
811
812\func{wxSizerFlags\& }{Top}{\void}
813
814Aligns the object to the top, shortcut for \texttt{Align(wxALIGN\_TOP)}
815
816\wxheading{See also}
817
818\helpref{Align}{wxsizerflagsalign}
819
820
25eb10d2
VZ
821\membersection{wxSizerFlags::TripleBorder}\label{wxsizerflagstriplebleborder}
822
823\func{wxSizerFlags\& }{TripleBorder}{\param{int }{direction = wxALL}}
824
825Sets the border in the given \arg{direction} having thrice the default border
826size.
827
828