]> git.saurik.com Git - wxWidgets.git/blame - include/wx/sizer.h
Expand tabs
[wxWidgets.git] / include / wx / sizer.h
CommitLineData
5279a24d
RR
1/////////////////////////////////////////////////////////////////////////////
2// Name: sizer.h
a4ab8ed5 3// Purpose: provide wxSizer class for layout
5279a24d 4// Author: Robert Roebling and Robin Dunn
5f813ad6 5// Modified by: Ron Lee, Vadim Zeitlin (wxSizerFlags)
0c0d686f 6// Created:
5279a24d 7// RCS-ID: $Id$
a4ab8ed5 8// Copyright: (c) Robin Dunn, Robert Roebling
65571936 9// Licence: wxWindows licence
5279a24d
RR
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef __WXSIZER_H__
13#define __WXSIZER_H__
14
12028905 15#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
5279a24d
RR
16#pragma interface "sizer.h"
17#endif
18
19#include "wx/defs.h"
20
acf2ac37 21#include "wx/button.h"
5279a24d
RR
22#include "wx/window.h"
23#include "wx/frame.h"
24#include "wx/dialog.h"
c845a197 25#include "wx/bookctrl.h"
5279a24d
RR
26
27//---------------------------------------------------------------------------
28// classes
29//---------------------------------------------------------------------------
30
446e5259
VS
31class WXDLLEXPORT wxSizerItem;
32class WXDLLEXPORT wxSizer;
33class WXDLLEXPORT wxBoxSizer;
5279a24d 34
5f813ad6
VZ
35
36// ----------------------------------------------------------------------------
37// wxSizerFlags: flags used for an item in the sizer
38// ----------------------------------------------------------------------------
39
40class WXDLLEXPORT wxSizerFlags
41{
42public:
43 // construct the flags object initialized with the given proportion (0 by
44 // default)
45 wxSizerFlags(int proportion = 0) : m_proportion(proportion)
46 {
47 m_flags = 0;
48 m_borderInPixels = 0;
49 }
50
51 // setters for all sizer flags, they all return the object itself so that
52 // calls to them can be chained
53
54 wxSizerFlags& Proportion(int proportion)
55 {
56 m_proportion = proportion;
57 return *this;
58 }
59
60 wxSizerFlags& Align(int alignment) // combination of wxAlignment values
61 {
62 m_flags &= wxALL;
63 m_flags |= alignment;
64
65 return *this;
66 }
67
68 // some shortcuts for Align()
69 wxSizerFlags& Expand() { return Align(wxEXPAND); }
70 wxSizerFlags& Centre() { return Align(wxCENTRE); }
71 wxSizerFlags& Center() { return Centre(); }
e72ac082
VZ
72 wxSizerFlags& Left() { return Align(wxALIGN_LEFT); }
73 wxSizerFlags& Right() { return Align(wxALIGN_RIGHT); }
5f813ad6
VZ
74
75
76 wxSizerFlags& Border(int direction, int borderInPixels)
77 {
78 m_flags &= ~wxALL;
79 m_flags |= direction;
80
81 m_borderInPixels = borderInPixels;
82
83 return *this;
84 }
85
86 wxSizerFlags& Border(int direction = wxALL)
87 {
88 // FIXME: default border size shouldn't be hardcoded
89 return Border(direction, 5);
90 }
91
92
93 // accessors for wxSizer only
94 int GetProportion() const { return m_proportion; }
95 int GetFlags() const { return m_flags; }
96 int GetBorderInPixels() const { return m_borderInPixels; }
97
98private:
99 int m_proportion;
100 int m_flags;
101 int m_borderInPixels;
102};
103
104
50c06297
VZ
105// ----------------------------------------------------------------------------
106// wxSizerSpacer: used by wxSizerItem to represent a spacer
107// ----------------------------------------------------------------------------
5279a24d 108
50c06297 109class WXDLLEXPORT wxSizerSpacer
5279a24d
RR
110{
111public:
50c06297 112 wxSizerSpacer(const wxSize& size) : m_size(size), m_isShown(true) { }
5f813ad6 113
50c06297
VZ
114 void SetSize(const wxSize& size) { m_size = size; }
115 const wxSize& GetSize() const { return m_size; }
5f813ad6 116
50c06297
VZ
117 void Show(bool show) { m_isShown = show; }
118 bool IsShown() const { return m_isShown; }
5f813ad6 119
50c06297
VZ
120private:
121 // the size, in pixel
122 wxSize m_size;
df5ddbca 123
50c06297
VZ
124 // is the spacer currently shown?
125 bool m_isShown;
126};
127
128// ----------------------------------------------------------------------------
129// wxSizerItem
130// ----------------------------------------------------------------------------
131
132class WXDLLEXPORT wxSizerItem : public wxObject
133{
134public:
df5ddbca 135 // window
12a3f227
RL
136 wxSizerItem( wxWindow *window,
137 int proportion,
138 int flag,
139 int border,
140 wxObject* userData );
df5ddbca 141
50c06297
VZ
142 // window with flags
143 wxSizerItem(wxWindow *window, const wxSizerFlags& flags)
144 {
145 Init(flags);
146
147 SetWindow(window);
148 }
149
df5ddbca 150 // subsizer
12a3f227
RL
151 wxSizerItem( wxSizer *sizer,
152 int proportion,
153 int flag,
154 int border,
155 wxObject* userData );
df5ddbca 156
50c06297
VZ
157 // sizer with flags
158 wxSizerItem(wxSizer *sizer, const wxSizerFlags& flags)
159 {
160 Init(flags);
161
162 SetSizer(sizer);
163 }
164
5f813ad6
VZ
165 // spacer
166 wxSizerItem( int width,
167 int height,
168 int proportion,
169 int flag,
170 int border,
171 wxObject* userData);
172
50c06297
VZ
173 // spacer with flags
174 wxSizerItem(int width, int height, const wxSizerFlags& flags)
175 {
176 Init(flags);
177
178 SetSpacer(width, height);
179 }
180
20b35a69
RD
181 wxSizerItem();
182 virtual ~wxSizerItem();
dc259b79 183
84f7908b 184 virtual void DeleteWindows();
df5ddbca 185
96fdbb60 186 // Enable deleting the SizerItem without destroying the contained sizer.
50c06297 187 void DetachSizer() { m_sizer = NULL; }
96fdbb60 188
9cbee2ce 189 virtual wxSize GetSize() const;
df5ddbca
RR
190 virtual wxSize CalcMin();
191 virtual void SetDimension( wxPoint pos, wxSize size );
192
9cbee2ce 193 wxSize GetMinSize() const
df5ddbca 194 { return m_minSize; }
ba763a45
RD
195 wxSize GetMinSizeWithBorder() const;
196
1eba2193 197 void SetMinSize(const wxSize& size)
50c06297
VZ
198 {
199 if ( IsWindow() )
200 m_window->SetMinSize(size);
201 m_minSize = size;
202 }
1eba2193 203 void SetMinSize( int x, int y )
8b2bac62 204 { SetMinSize(wxSize(x, y)); }
12a3f227 205 void SetInitSize( int x, int y )
1eba2193 206 { SetMinSize(wxSize(x, y)); }
df5ddbca 207
50c06297
VZ
208 // if either of dimensions is zero, ratio is assumed to be 1
209 // to avoid "divide by zero" errors
210 void SetRatio(int width, int height)
df5ddbca 211 { m_ratio = (width && height) ? ((float) width / (float) height) : 1; }
50c06297
VZ
212 void SetRatio(const wxSize& size)
213 { SetRatio(size.x, size.y); }
214 void SetRatio(float ratio)
df5ddbca 215 { m_ratio = ratio; }
2aab8f16 216 float GetRatio() const
df5ddbca
RR
217 { return m_ratio; }
218
50c06297 219 virtual wxRect GetRect() { return m_rect; }
56eee37f 220
50c06297
VZ
221 bool IsWindow() const { return m_kind == Item_Window; }
222 bool IsSizer() const { return m_kind == Item_Sizer; }
223 bool IsSpacer() const { return m_kind == Item_Spacer; }
2aab8f16 224
12a3f227
RL
225 // Deprecated in 2.6, use {G,S}etProportion instead.
226 wxDEPRECATED( void SetOption( int option ) );
227 wxDEPRECATED( int GetOption() const );
228
229 void SetProportion( int proportion )
230 { m_proportion = proportion; }
231 int GetProportion() const
232 { return m_proportion; }
df5ddbca
RR
233 void SetFlag( int flag )
234 { m_flag = flag; }
12a3f227
RL
235 int GetFlag() const
236 { return m_flag; }
df5ddbca
RR
237 void SetBorder( int border )
238 { m_border = border; }
12a3f227
RL
239 int GetBorder() const
240 { return m_border; }
df5ddbca
RR
241
242 wxWindow *GetWindow() const
50c06297 243 { return m_kind == Item_Window ? m_window : NULL; }
df5ddbca 244 wxSizer *GetSizer() const
50c06297
VZ
245 { return m_kind == Item_Sizer ? m_sizer : NULL; }
246 wxSize GetSpacer() const;
12a3f227 247
50c06297
VZ
248 void Show(bool show);
249 bool IsShown() const;
12a3f227 250
9cbee2ce 251 wxObject* GetUserData() const
df5ddbca 252 { return m_userData; }
9cbee2ce 253 wxPoint GetPosition() const
df5ddbca 254 { return m_pos; }
0c0d686f 255
50c06297
VZ
256
257 // these functions do not free old sizer/spacer
258 void SetWindow(wxWindow *window);
259 void SetSizer(wxSizer *sizer);
260 void SetSpacer(const wxSize& size);
261 void SetSpacer(int width, int height) { SetSpacer(wxSize(width, height)); }
262
c62ac5b6 263protected:
5f813ad6 264 // common part of several ctors
50c06297 265 void Init() { m_userData = NULL; }
5f813ad6
VZ
266
267 // common part of ctors taking wxSizerFlags
268 void Init(const wxSizerFlags& flags);
269
50c06297
VZ
270 enum
271 {
272 Item_None,
273 Item_Window,
274 Item_Sizer,
275 Item_Spacer,
276 Item_Max
277 } m_kind;
278 union
279 {
280 wxWindow *m_window;
281 wxSizer *m_sizer;
282 wxSizerSpacer *m_spacer;
283 };
5f813ad6 284
df5ddbca
RR
285 wxPoint m_pos;
286 wxSize m_minSize;
12a3f227 287 int m_proportion;
df5ddbca
RR
288 int m_border;
289 int m_flag;
2b5f62a0 290
50c06297
VZ
291 // on screen rectangle of this item (not including borders)
292 wxRect m_rect;
12a3f227
RL
293
294 // Aspect ratio can always be calculated from m_size,
295 // but this would cause precision loss when the window
296 // is shrunk. It is safer to preserve the initial value.
df5ddbca 297 float m_ratio;
2b5f62a0 298
df5ddbca 299 wxObject *m_userData;
2aab8f16 300
9cbee2ce 301private:
4393b50c 302 DECLARE_CLASS(wxSizerItem)
22f3361e 303 DECLARE_NO_COPY_CLASS(wxSizerItem)
c62ac5b6 304};
5279a24d 305
12a3f227
RL
306WX_DECLARE_EXPORTED_LIST( wxSizerItem, wxSizerItemList );
307
5f813ad6 308
5279a24d 309//---------------------------------------------------------------------------
3417c2cd 310// wxSizer
5279a24d
RR
311//---------------------------------------------------------------------------
312
2aab8f16 313class WXDLLEXPORT wxSizer: public wxObject, public wxClientDataContainer
5279a24d
RR
314{
315public:
f6bcfd97
BP
316 wxSizer();
317 ~wxSizer();
318
436ae7cf
VZ
319 // methods for adding elements to the sizer: there are Add/Insert/Prepend
320 // overloads for each of window/sizer/spacer/wxSizerItem
56eee37f
WS
321 inline wxSizerItem* Add( wxWindow *window,
322 int proportion = 0,
323 int flag = 0,
324 int border = 0,
325 wxObject* userData = NULL );
326 inline wxSizerItem* Add( wxSizer *sizer,
327 int proportion = 0,
328 int flag = 0,
329 int border = 0,
330 wxObject* userData = NULL );
331 inline wxSizerItem* Add( int width,
332 int height,
333 int proportion = 0,
334 int flag = 0,
335 int border = 0,
336 wxObject* userData = NULL );
337 inline wxSizerItem* Add( wxWindow *window, const wxSizerFlags& flags );
338 inline wxSizerItem* Add( wxSizer *sizer, const wxSizerFlags& flags );
339 inline wxSizerItem* Add( wxSizerItem *item );
340
341 inline wxSizerItem* AddSpacer(int size);
342 inline wxSizerItem* AddStretchSpacer(int prop = 1);
343
344 inline wxSizerItem* Insert( size_t index,
345 wxWindow *window,
346 int proportion = 0,
347 int flag = 0,
348 int border = 0,
349 wxObject* userData = NULL );
350 inline wxSizerItem* Insert( size_t index,
351 wxSizer *sizer,
352 int proportion = 0,
353 int flag = 0,
354 int border = 0,
355 wxObject* userData = NULL );
356 inline wxSizerItem* Insert( size_t index,
357 int width,
358 int height,
359 int proportion = 0,
360 int flag = 0,
361 int border = 0,
362 wxObject* userData = NULL );
363 inline wxSizerItem* Insert( size_t index,
364 wxWindow *window,
365 const wxSizerFlags& flags );
366 inline wxSizerItem* Insert( size_t index,
367 wxSizer *sizer,
368 const wxSizerFlags& flags );
369 virtual wxSizerItem* Insert( size_t index, wxSizerItem *item );
370
371 inline wxSizerItem* InsertSpacer(size_t index, int size);
372 inline wxSizerItem* InsertStretchSpacer(size_t index, int prop = 1);
373
374 inline wxSizerItem* Prepend( wxWindow *window,
375 int proportion = 0,
376 int flag = 0,
377 int border = 0,
378 wxObject* userData = NULL );
379 inline wxSizerItem* Prepend( wxSizer *sizer,
380 int proportion = 0,
381 int flag = 0,
382 int border = 0,
383 wxObject* userData = NULL );
384 inline wxSizerItem* Prepend( int width,
385 int height,
386 int proportion = 0,
387 int flag = 0,
388 int border = 0,
389 wxObject* userData = NULL );
390 inline wxSizerItem* Prepend( wxWindow *window, const wxSizerFlags& flags );
391 inline wxSizerItem* Prepend( wxSizer *sizer, const wxSizerFlags& flags );
392 inline wxSizerItem* Prepend( wxSizerItem *item );
393
394 inline wxSizerItem* PrependSpacer(int size);
395 inline wxSizerItem* PrependStretchSpacer(int prop = 1);
8e32ea1c 396
749bb9f1 397
12a3f227
RL
398 // Deprecated in 2.6 since historically it does not delete the window,
399 // use Detach instead.
400 wxDEPRECATED( virtual bool Remove( wxWindow *window ) );
f6bcfd97 401 virtual bool Remove( wxSizer *sizer );
e0d8fb45 402 virtual bool Remove( int index );
00976fe5 403
12a3f227 404 virtual bool Detach( wxWindow *window );
00976fe5 405 virtual bool Detach( wxSizer *sizer );
e0d8fb45 406 virtual bool Detach( int index );
00976fe5 407
e0d8fb45 408 virtual void Clear( bool delete_windows = false );
84f7908b 409 virtual void DeleteWindows();
f6bcfd97
BP
410
411 void SetMinSize( int width, int height )
412 { DoSetMinSize( width, height ); }
413 void SetMinSize( wxSize size )
414 { DoSetMinSize( size.x, size.y ); }
1e6feb95 415
50c06297 416 // Searches recursively
f6bcfd97
BP
417 bool SetItemMinSize( wxWindow *window, int width, int height )
418 { return DoSetItemMinSize( window, width, height ); }
419 bool SetItemMinSize( wxWindow *window, wxSize size )
420 { return DoSetItemMinSize( window, size.x, size.y ); }
1e6feb95 421
50c06297 422 // Searches recursively
f6bcfd97
BP
423 bool SetItemMinSize( wxSizer *sizer, int width, int height )
424 { return DoSetItemMinSize( sizer, width, height ); }
425 bool SetItemMinSize( wxSizer *sizer, wxSize size )
426 { return DoSetItemMinSize( sizer, size.x, size.y ); }
1e6feb95 427
12a3f227
RL
428 bool SetItemMinSize( size_t index, int width, int height )
429 { return DoSetItemMinSize( index, width, height ); }
430 bool SetItemMinSize( size_t index, wxSize size )
431 { return DoSetItemMinSize( index, size.x, size.y ); }
1e6feb95 432
9cbee2ce 433 wxSize GetSize() const
f6bcfd97 434 { return m_size; }
9cbee2ce 435 wxPoint GetPosition() const
f6bcfd97 436 { return m_position; }
1e6feb95 437
50c06297 438 // Calculate the minimal size or return m_minSize if bigger.
f6bcfd97
BP
439 wxSize GetMinSize();
440
441 virtual void RecalcSizes() = 0;
442 virtual wxSize CalcMin() = 0;
443
444 virtual void Layout();
445
e5251d4f 446 wxSize Fit( wxWindow *window );
566d84a7 447 void FitInside( wxWindow *window );
f6bcfd97 448 void SetSizeHints( wxWindow *window );
566d84a7 449 void SetVirtualSizeHints( wxWindow *window );
f6bcfd97 450
12a3f227 451 wxSizerItemList& GetChildren()
f6bcfd97
BP
452 { return m_children; }
453
454 void SetDimension( int x, int y, int width, int height );
0c0d686f 455
9f13661f
WS
456 wxSizerItem* GetItem( wxWindow *window, bool recursive = false );
457 wxSizerItem* GetItem( wxSizer *sizer, bool recursive = false );
458 wxSizerItem* GetItem( size_t index );
459
12a3f227 460 // Manage whether individual scene items are considered
2b5f62a0 461 // in the layout calculations or not.
8b2bac62
WS
462 bool Show( wxWindow *window, bool show = true, bool recursive = false );
463 bool Show( wxSizer *sizer, bool show = true, bool recursive = false );
464 bool Show( size_t index, bool show = true );
12a3f227 465
8b2bac62
WS
466 bool Hide( wxSizer *sizer, bool recursive = false )
467 { return Show( sizer, false, recursive ); }
468 bool Hide( wxWindow *window, bool recursive = false )
469 { return Show( window, false, recursive ); }
470 bool Hide( size_t index )
471 { return Show( index, false ); }
2b5f62a0 472
9cbee2ce
RL
473 bool IsShown( wxWindow *window ) const;
474 bool IsShown( wxSizer *sizer ) const;
475 bool IsShown( size_t index ) const;
dc259b79 476
2b5f62a0 477 // Recursively call wxWindow::Show () on all sizer items.
eb2a7883 478 virtual void ShowItems (bool show);
2b5f62a0 479
3a5910cb
DE
480 void Show(bool show)
481 { m_isShown = show;
482 ShowItems(show);
483 }
50c06297
VZ
484 bool IsShown() const { return m_isShown; }
485
f6bcfd97 486protected:
12a3f227
RL
487 wxSize m_size;
488 wxSize m_minSize;
489 wxPoint m_position;
490 wxSizerItemList m_children;
50c06297 491 bool m_isShown;
f6bcfd97 492
9cbee2ce 493 wxSize GetMaxWindowSize( wxWindow *window ) const;
f6bcfd97 494 wxSize GetMinWindowSize( wxWindow *window );
9cbee2ce 495 wxSize GetMaxClientSize( wxWindow *window ) const;
566d84a7 496 wxSize GetMinClientSize( wxWindow *window );
65ba4113 497 wxSize FitSize( wxWindow *window );
566d84a7 498 wxSize VirtualFitSize( wxWindow *window );
65ba4113 499
f6bcfd97
BP
500 virtual void DoSetMinSize( int width, int height );
501 virtual bool DoSetItemMinSize( wxWindow *window, int width, int height );
502 virtual bool DoSetItemMinSize( wxSizer *sizer, int width, int height );
12a3f227 503 virtual bool DoSetItemMinSize( size_t index, int width, int height );
1e6feb95 504
9cbee2ce 505private:
4393b50c 506 DECLARE_CLASS(wxSizer)
f6bcfd97 507};
c62ac5b6 508
f6bcfd97
BP
509//---------------------------------------------------------------------------
510// wxGridSizer
511//---------------------------------------------------------------------------
0c0d686f 512
f6bcfd97
BP
513class WXDLLEXPORT wxGridSizer: public wxSizer
514{
515public:
516 wxGridSizer( int rows, int cols, int vgap, int hgap );
517 wxGridSizer( int cols, int vgap = 0, int hgap = 0 );
1e6feb95 518
5d76f462
VZ
519 virtual void RecalcSizes();
520 virtual wxSize CalcMin();
f6bcfd97
BP
521
522 void SetCols( int cols ) { m_cols = cols; }
523 void SetRows( int rows ) { m_rows = rows; }
524 void SetVGap( int gap ) { m_vgap = gap; }
525 void SetHGap( int gap ) { m_hgap = gap; }
9cbee2ce
RL
526 int GetCols() const { return m_cols; }
527 int GetRows() const { return m_rows; }
528 int GetVGap() const { return m_vgap; }
529 int GetHGap() const { return m_hgap; }
1e6feb95 530
f6bcfd97
BP
531protected:
532 int m_rows;
533 int m_cols;
534 int m_vgap;
535 int m_hgap;
1e6feb95 536
0ca5105b
VZ
537 // return the number of total items and the number of columns and rows
538 int CalcRowsCols(int& rows, int& cols) const;
539
f6bcfd97 540 void SetItemBounds( wxSizerItem *item, int x, int y, int w, int h );
1e6feb95 541
9cbee2ce 542private:
4393b50c 543 DECLARE_CLASS(wxGridSizer)
f6bcfd97 544};
5279a24d 545
f6bcfd97
BP
546//---------------------------------------------------------------------------
547// wxFlexGridSizer
548//---------------------------------------------------------------------------
0c0d686f 549
5d76f462
VZ
550// the bevaiour for resizing wxFlexGridSizer cells in the "non-flexible"
551// direction
552enum wxFlexSizerGrowMode
553{
554 // don't resize the cells in non-flexible direction at all
555 wxFLEX_GROWMODE_NONE,
556
557 // uniformly resize only the specified ones (default)
558 wxFLEX_GROWMODE_SPECIFIED,
559
560 // uniformly resize all cells
561 wxFLEX_GROWMODE_ALL
562};
563
f6bcfd97
BP
564class WXDLLEXPORT wxFlexGridSizer: public wxGridSizer
565{
566public:
5d76f462 567 // ctors/dtor
f6bcfd97
BP
568 wxFlexGridSizer( int rows, int cols, int vgap, int hgap );
569 wxFlexGridSizer( int cols, int vgap = 0, int hgap = 0 );
5d76f462 570 virtual ~wxFlexGridSizer();
1e6feb95 571
1e6feb95 572
5d76f462
VZ
573 // set the rows/columns which will grow (the others will remain of the
574 // constant initial size)
e8800dcf 575 void AddGrowableRow( size_t idx, int proportion = 0 );
f6bcfd97 576 void RemoveGrowableRow( size_t idx );
e8800dcf 577 void AddGrowableCol( size_t idx, int proportion = 0 );
f6bcfd97 578 void RemoveGrowableCol( size_t idx );
0c0d686f 579
1e6feb95 580
5d76f462
VZ
581 // the sizer cells may grow in both directions, not grow at all or only
582 // grow in one direction but not the other
583
584 // the direction may be wxVERTICAL, wxHORIZONTAL or wxBOTH (default)
585 void SetFlexibleDirection(int direction) { m_flexDirection = direction; }
586 int GetFlexibleDirection() const { return m_flexDirection; }
587
588 // note that the grow mode only applies to the direction which is not
589 // flexible
590 void SetNonFlexibleGrowMode(wxFlexSizerGrowMode mode) { m_growMode = mode; }
591 wxFlexSizerGrowMode GetNonFlexibleGrowMode() const { return m_growMode; }
592
fc1fcd0e
RD
593 // Read-only access to the row heights and col widths arrays
594 const wxArrayInt& GetRowHeights() const { return m_rowHeights; }
595 const wxArrayInt& GetColWidths() const { return m_colWidths; }
8b2bac62 596
5d76f462
VZ
597 // implementation
598 virtual void RecalcSizes();
599 virtual wxSize CalcMin();
600
601protected:
20b35a69
RD
602 void AdjustForFlexDirection();
603 void AdjustForGrowables(const wxSize& sz, const wxSize& minsz,
604 int nrows, int ncols);
8b2bac62 605
5d76f462
VZ
606 // the heights/widths of all rows/columns
607 wxArrayInt m_rowHeights,
608 m_colWidths;
609
610 // indices of the growable columns and rows
611 wxArrayInt m_growableRows,
612 m_growableCols;
613
e8800dcf
VZ
614 // proportion values of the corresponding growable rows and columns
615 wxArrayInt m_growableRowsProportions,
616 m_growableColsProportions;
617
5d76f462
VZ
618 // parameters describing whether the growable cells should be resized in
619 // both directions or only one
620 int m_flexDirection;
621 wxFlexSizerGrowMode m_growMode;
1e6feb95 622
ba763a45
RD
623 // saves CalcMin result to optimize RecalcSizes
624 wxSize m_calculatedMinSize;
625
9cbee2ce 626private:
4393b50c 627 DECLARE_CLASS(wxFlexGridSizer)
22f3361e 628 DECLARE_NO_COPY_CLASS(wxFlexGridSizer)
c62ac5b6
RR
629};
630
631//---------------------------------------------------------------------------
92afa2b1 632// wxBoxSizer
c62ac5b6
RR
633//---------------------------------------------------------------------------
634
92afa2b1 635class WXDLLEXPORT wxBoxSizer: public wxSizer
61d514bb
RR
636{
637public:
f6bcfd97 638 wxBoxSizer( int orient );
0c0d686f 639
f6bcfd97
BP
640 void RecalcSizes();
641 wxSize CalcMin();
0c0d686f 642
9cbee2ce 643 int GetOrientation() const
f6bcfd97 644 { return m_orient; }
0c0d686f 645
b657b4c9
JS
646 void SetOrientation(int orient)
647 { m_orient = orient; }
648
61d514bb
RR
649protected:
650 int m_orient;
651 int m_stretchable;
652 int m_minWidth;
653 int m_minHeight;
654 int m_fixedWidth;
655 int m_fixedHeight;
1e6feb95 656
9cbee2ce 657private:
4393b50c 658 DECLARE_CLASS(wxBoxSizer)
61d514bb 659};
0c0d686f 660
27ea1d8a
RR
661//---------------------------------------------------------------------------
662// wxStaticBoxSizer
663//---------------------------------------------------------------------------
664
1e6feb95
VZ
665#if wxUSE_STATBOX
666
667class WXDLLEXPORT wxStaticBox;
668
27ea1d8a
RR
669class WXDLLEXPORT wxStaticBoxSizer: public wxBoxSizer
670{
671public:
6c1635b5 672 wxStaticBoxSizer(wxStaticBox *box, int orient);
450a1593 673 wxStaticBoxSizer(int orient, wxWindow *win, const wxString& label = wxEmptyString);
0c0d686f 674
f6bcfd97
BP
675 void RecalcSizes();
676 wxSize CalcMin();
0c0d686f 677
9cbee2ce 678 wxStaticBox *GetStaticBox() const
f6bcfd97 679 { return m_staticBox; }
0c0d686f 680
eb2a7883
VZ
681 // override to hide/show the static box as well
682 virtual void ShowItems (bool show);
683
27ea1d8a 684protected:
f6bcfd97 685 wxStaticBox *m_staticBox;
1e6feb95 686
9cbee2ce 687private:
4393b50c 688 DECLARE_CLASS(wxStaticBoxSizer)
22f3361e 689 DECLARE_NO_COPY_CLASS(wxStaticBoxSizer)
27ea1d8a
RR
690};
691
1e6feb95
VZ
692#endif // wxUSE_STATBOX
693
974c2a59
WS
694#if wxUSE_BUTTON
695
acf2ac37
RR
696class WXDLLEXPORT wxStdDialogButtonSizer: public wxBoxSizer
697{
698public:
acf2ac37
RR
699 // Constructor just creates a new wxBoxSizer, not much else.
700 // Box sizer orientation is automatically determined here:
701 // vertical for PDAs, horizontal for everything else?
b181a505 702 wxStdDialogButtonSizer();
acf2ac37 703
acf2ac37 704 // Checks button ID against system IDs and sets one of the pointers below
b181a505
RR
705 // to this button. Does not do any sizer-related things here.
706 void AddButton(wxButton *button);
acf2ac37 707
b181a505
RR
708 // Use these if no standard ID can/should be used
709 void SetAffirmativeButton( wxButton *button );
710 void SetNegativeButton( wxButton *button );
711 void SetCancelButton( wxButton *button );
acf2ac37 712
acf2ac37
RR
713 // All platform-specific code here, checks which buttons exist and add
714 // them to the sizer accordingly.
715 // Note - one potential hack on Mac we could use here,
716 // if m_buttonAffirmative is wxID_SAVE then ensure wxID_SAVE
717 // is set to _("Save") and m_buttonNegative is set to _("Don't Save")
718 // I wouldn't add any other hacks like that into here,
719 // but this one I can see being useful.
718903fe 720 void Realize();
974c2a59 721
acf2ac37
RR
722 wxButton *GetAffirmativeButton() const { return m_buttonAffirmative; }
723 wxButton *GetApplyButton() const { return m_buttonApply; }
724 wxButton *GetNegativeButton() const { return m_buttonNegative; }
725 wxButton *GetCancelButton() const { return m_buttonCancel; }
726 wxButton *GetHelpButton() const { return m_buttonHelp; }
727
728protected:
b181a505 729 wxButton *m_buttonAffirmative; // wxID_OK, wxID_YES, wxID_SAVE go here
acf2ac37 730 wxButton *m_buttonApply;
b181a505 731 wxButton *m_buttonNegative; // wxID_NO
acf2ac37
RR
732 wxButton *m_buttonCancel;
733 wxButton *m_buttonHelp;
974c2a59 734
acf2ac37
RR
735private:
736 DECLARE_CLASS(wxStdDialogButtonSizer)
b181a505 737 DECLARE_NO_COPY_CLASS(wxStdDialogButtonSizer)
acf2ac37 738};
adbf2d73 739
6b5c4761 740#endif // wxUSE_BUTTON
974c2a59 741
adbf2d73
VS
742#if WXWIN_COMPATIBILITY_2_4
743// NB: wxBookCtrlSizer and wxNotebookSizer are deprecated, they
61c083e7 744// don't do anything. wxBookCtrlBase::DoGetBestSize does the job now.
adbf2d73 745
ade4eb65
VZ
746// ----------------------------------------------------------------------------
747// wxBookCtrlSizer
748// ----------------------------------------------------------------------------
83edc0a5 749
ade4eb65 750#if wxUSE_BOOKCTRL
65e4f9b9 751
8e32ea1c 752// this sizer works with wxNotebook/wxListbook/... and sizes the control to
ade4eb65 753// fit its pages
61c083e7 754class WXDLLEXPORT wxBookCtrlBase;
1e6feb95 755
ade4eb65 756class WXDLLEXPORT wxBookCtrlSizer : public wxSizer
83edc0a5 757{
83edc0a5 758public:
61c083e7 759 wxDEPRECATED( wxBookCtrlSizer(wxBookCtrlBase *bookctrl) );
83edc0a5 760
61c083e7 761 wxBookCtrlBase *GetControl() const { return m_bookctrl; }
8b2bac62 762
ade4eb65
VZ
763 virtual void RecalcSizes();
764 virtual wxSize CalcMin();
83edc0a5 765
83edc0a5 766protected:
adbf2d73 767 // this protected ctor lets us mark the real one above as deprecated
749bb9f1 768 // and still have warning-free build of the library itself:
adbf2d73 769 wxBookCtrlSizer() {}
8b2bac62 770
61c083e7 771 wxBookCtrlBase *m_bookctrl;
ade4eb65
VZ
772
773private:
774 DECLARE_CLASS(wxBookCtrlSizer)
775 DECLARE_NO_COPY_CLASS(wxBookCtrlSizer)
776};
777
778
779#if wxUSE_NOTEBOOK
780
61c083e7 781// before wxBookCtrlBase we only had wxNotebookSizer, keep it for backwards
ade4eb65
VZ
782// compatibility
783class WXDLLEXPORT wxNotebook;
784
785class WXDLLEXPORT wxNotebookSizer : public wxBookCtrlSizer
786{
787public:
adbf2d73 788 wxDEPRECATED( wxNotebookSizer(wxNotebook *nb) );
ade4eb65
VZ
789
790 wxNotebook *GetNotebook() const { return (wxNotebook *)m_bookctrl; }
1e6feb95 791
9cbee2ce 792private:
4393b50c 793 DECLARE_CLASS(wxNotebookSizer)
22f3361e 794 DECLARE_NO_COPY_CLASS(wxNotebookSizer)
83edc0a5
RR
795};
796
1e6feb95 797#endif // wxUSE_NOTEBOOK
65e4f9b9 798
ade4eb65
VZ
799#endif // wxUSE_BOOKCTRL
800
adbf2d73
VS
801#endif // WXWIN_COMPATIBILITY_2_4
802
8e32ea1c
VZ
803// ----------------------------------------------------------------------------
804// inline functions implementation
805// ----------------------------------------------------------------------------
806
56eee37f 807inline wxSizerItem*
8e32ea1c
VZ
808wxSizer::Add( wxWindow *window, int proportion, int flag, int border, wxObject* userData )
809{
56eee37f 810 return Add( new wxSizerItem( window, proportion, flag, border, userData ) );
8e32ea1c
VZ
811}
812
56eee37f 813inline wxSizerItem*
8e32ea1c
VZ
814wxSizer::Add( wxSizer *sizer, int proportion, int flag, int border, wxObject* userData )
815{
56eee37f 816 return Add( new wxSizerItem( sizer, proportion, flag, border, userData ) );
8e32ea1c
VZ
817}
818
56eee37f 819inline wxSizerItem*
8e32ea1c
VZ
820wxSizer::Add( int width, int height, int proportion, int flag, int border, wxObject* userData )
821{
56eee37f 822 return Add( new wxSizerItem( width, height, proportion, flag, border, userData ) );
8e32ea1c
VZ
823}
824
56eee37f 825inline wxSizerItem*
5f813ad6
VZ
826wxSizer::Add( wxWindow *window, const wxSizerFlags& flags )
827{
56eee37f 828 return Add( new wxSizerItem(window, flags) );
5f813ad6
VZ
829}
830
56eee37f 831inline wxSizerItem*
5f813ad6
VZ
832wxSizer::Add( wxSizer *sizer, const wxSizerFlags& flags )
833{
56eee37f 834 return Add( new wxSizerItem(sizer, flags) );
5f813ad6
VZ
835}
836
56eee37f 837inline wxSizerItem*
8e32ea1c
VZ
838wxSizer::Add( wxSizerItem *item )
839{
56eee37f 840 return Insert( m_children.GetCount(), item );
8e32ea1c
VZ
841}
842
56eee37f 843inline wxSizerItem*
8e32ea1c
VZ
844wxSizer::AddSpacer(int size)
845{
56eee37f 846 return Add(size, size);
8e32ea1c
VZ
847}
848
56eee37f 849inline wxSizerItem*
8e32ea1c
VZ
850wxSizer::AddStretchSpacer(int prop)
851{
56eee37f 852 return Add(0, 0, prop);
8e32ea1c
VZ
853}
854
56eee37f 855inline wxSizerItem*
8e32ea1c
VZ
856wxSizer::Prepend( wxWindow *window, int proportion, int flag, int border, wxObject* userData )
857{
56eee37f 858 return Prepend( new wxSizerItem( window, proportion, flag, border, userData ) );
8e32ea1c
VZ
859}
860
56eee37f 861inline wxSizerItem*
8e32ea1c
VZ
862wxSizer::Prepend( wxSizer *sizer, int proportion, int flag, int border, wxObject* userData )
863{
56eee37f 864 return Prepend( new wxSizerItem( sizer, proportion, flag, border, userData ) );
8e32ea1c
VZ
865}
866
56eee37f 867inline wxSizerItem*
8e32ea1c
VZ
868wxSizer::Prepend( int width, int height, int proportion, int flag, int border, wxObject* userData )
869{
56eee37f 870 return Prepend( new wxSizerItem( width, height, proportion, flag, border, userData ) );
8e32ea1c
VZ
871}
872
56eee37f 873inline wxSizerItem*
8e32ea1c
VZ
874wxSizer::Prepend( wxSizerItem *item )
875{
56eee37f 876 return Insert( 0, item );
8e32ea1c
VZ
877}
878
56eee37f 879inline wxSizerItem*
8e32ea1c
VZ
880wxSizer::PrependSpacer(int size)
881{
56eee37f 882 return Prepend(size, size);
8e32ea1c
VZ
883}
884
56eee37f 885inline wxSizerItem*
8e32ea1c
VZ
886wxSizer::PrependStretchSpacer(int prop)
887{
56eee37f 888 return Prepend(0, 0, prop);
8e32ea1c
VZ
889}
890
56eee37f 891inline wxSizerItem*
5f813ad6
VZ
892wxSizer::Prepend( wxWindow *window, const wxSizerFlags& flags )
893{
56eee37f 894 return Prepend( new wxSizerItem(window, flags) );
5f813ad6
VZ
895}
896
56eee37f 897inline wxSizerItem*
5f813ad6
VZ
898wxSizer::Prepend( wxSizer *sizer, const wxSizerFlags& flags )
899{
56eee37f 900 return Prepend( new wxSizerItem(sizer, flags) );
5f813ad6
VZ
901}
902
56eee37f 903inline wxSizerItem*
8e32ea1c 904wxSizer::Insert( size_t index,
5f813ad6
VZ
905 wxWindow *window,
906 int proportion,
907 int flag,
908 int border,
909 wxObject* userData )
8e32ea1c 910{
56eee37f 911 return Insert( index, new wxSizerItem( window, proportion, flag, border, userData ) );
8e32ea1c
VZ
912}
913
56eee37f 914inline wxSizerItem*
8e32ea1c 915wxSizer::Insert( size_t index,
5f813ad6
VZ
916 wxSizer *sizer,
917 int proportion,
918 int flag,
919 int border,
920 wxObject* userData )
8e32ea1c 921{
56eee37f 922 return Insert( index, new wxSizerItem( sizer, proportion, flag, border, userData ) );
8e32ea1c
VZ
923}
924
56eee37f 925inline wxSizerItem*
8e32ea1c 926wxSizer::Insert( size_t index,
5f813ad6
VZ
927 int width,
928 int height,
929 int proportion,
930 int flag,
931 int border,
932 wxObject* userData )
8e32ea1c 933{
56eee37f 934 return Insert( index, new wxSizerItem( width, height, proportion, flag, border, userData ) );
8e32ea1c
VZ
935}
936
56eee37f 937inline wxSizerItem*
5f813ad6
VZ
938wxSizer::Insert( size_t index, wxWindow *window, const wxSizerFlags& flags )
939{
56eee37f 940 return Insert( index, new wxSizerItem(window, flags) );
5f813ad6
VZ
941}
942
56eee37f 943inline wxSizerItem*
5f813ad6
VZ
944wxSizer::Insert( size_t index, wxSizer *sizer, const wxSizerFlags& flags )
945{
56eee37f 946 return Insert( index, new wxSizerItem(sizer, flags) );
5f813ad6
VZ
947}
948
56eee37f 949inline wxSizerItem*
8e32ea1c
VZ
950wxSizer::InsertSpacer(size_t index, int size)
951{
56eee37f 952 return Insert(index, size, size);
8e32ea1c
VZ
953}
954
56eee37f 955inline wxSizerItem*
8e32ea1c
VZ
956wxSizer::InsertStretchSpacer(size_t index, int prop)
957{
56eee37f 958 return Insert(index, 0, 0, prop);
8e32ea1c
VZ
959}
960
adbf2d73 961
ade4eb65 962#endif // __WXSIZER_H__
65e4f9b9 963