]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/sizer.h
The exact version it was included doesn't appear to be documented
[wxWidgets.git] / include / wx / sizer.h
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: sizer.h
3// Purpose: provide wxSizer class for layouting
4// Author: Robert Roebling and Robin Dunn
5// Modified by: Ron Lee
6// Created:
7// RCS-ID: $Id$
8// Copyright: (c) Robin Dunn, Dirk Holtwick and Robert Roebling
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef __WXSIZER_H__
13#define __WXSIZER_H__
14
15#if defined(__GNUG__) && !defined(__APPLE__)
16#pragma interface "sizer.h"
17#endif
18
19#include "wx/defs.h"
20
21#include "wx/window.h"
22#include "wx/frame.h"
23#include "wx/dialog.h"
24
25//---------------------------------------------------------------------------
26// classes
27//---------------------------------------------------------------------------
28
29class wxSizerItem;
30class wxSizer;
31class wxBoxSizer;
32
33//---------------------------------------------------------------------------
34// wxSizerItem
35//---------------------------------------------------------------------------
36
37class WXDLLEXPORT wxSizerItem: public wxObject
38{
39public:
40 // spacer
41 wxSizerItem( int width, int height, int option, int flag, int border, wxObject* userData);
42
43 // window
44 wxSizerItem( wxWindow *window, int option, int flag, int border, wxObject* userData );
45
46 // subsizer
47 wxSizerItem( wxSizer *sizer, int option, int flag, int border, wxObject* userData );
48
49 ~wxSizerItem();
50
51 virtual void DeleteWindows();
52
53 // Enable deleting the SizerItem without destroying the contained sizer.
54 void DetachSizer()
55 { m_sizer = 0; }
56
57 virtual wxSize GetSize();
58 virtual wxSize CalcMin();
59 virtual void SetDimension( wxPoint pos, wxSize size );
60
61 wxSize GetMinSize()
62 { return m_minSize; }
63
64 void SetRatio( int width, int height )
65 // if either of dimensions is zero, ratio is assumed to be 1
66 // to avoid "divide by zero" errors
67 { m_ratio = (width && height) ? ((float) width / (float) height) : 1; }
68 void SetRatio( wxSize size )
69 { m_ratio = (size.x && size.y) ? ((float) size.x / (float) size.y) : 1; }
70 void SetRatio( float ratio )
71 { m_ratio = ratio; }
72 float GetRatio() const
73 { return m_ratio; }
74
75 bool IsWindow();
76 bool IsSizer();
77 bool IsSpacer();
78
79 void SetInitSize( int x, int y )
80 { m_minSize.x = x; m_minSize.y = y; }
81 void SetOption( int option )
82 { m_option = option; }
83 void SetFlag( int flag )
84 { m_flag = flag; }
85 void SetBorder( int border )
86 { m_border = border; }
87 void Show ( bool show )
88 { m_show = show; }
89
90 wxWindow *GetWindow() const
91 { return m_window; }
92 void SetWindow( wxWindow *window )
93 { m_window = window; }
94 wxSizer *GetSizer() const
95 { return m_sizer; }
96 void SetSizer( wxSizer *sizer )
97 { m_sizer = sizer; }
98 int GetOption() const
99 { return m_option; }
100 int GetFlag() const
101 { return m_flag; }
102 int GetBorder() const
103 { return m_border; }
104 bool IsShown() const
105 { return m_show; }
106 wxObject* GetUserData()
107 { return m_userData; }
108 wxPoint GetPosition()
109 { return m_pos; }
110
111protected:
112 wxWindow *m_window;
113 wxSizer *m_sizer;
114 wxSize m_size;
115 wxPoint m_pos;
116 wxSize m_minSize;
117 int m_option;
118 int m_border;
119 int m_flag;
120
121 // If TRUE, then this item is considered in the layout
122 // calculation. Otherwise, it is skipped over.
123 bool m_show;
124 // als: aspect ratio can always be calculated from m_size,
125 // but this would cause precision loss when the window
126 // is shrinked. it is safer to preserve initial value.
127 float m_ratio;
128
129 wxObject *m_userData;
130
131private:
132 DECLARE_CLASS(wxSizerItem);
133 DECLARE_NO_COPY_CLASS(wxSizerItem)
134};
135
136//---------------------------------------------------------------------------
137// wxSizer
138//---------------------------------------------------------------------------
139
140class WXDLLEXPORT wxSizer: public wxObject, public wxClientDataContainer
141{
142public:
143 wxSizer();
144 ~wxSizer();
145
146 /* These should be called Append() really. */
147 virtual void Add( wxWindow *window, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
148 virtual void Add( wxSizer *sizer, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
149 virtual void Add( int width, int height, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
150
151 virtual void Insert( int before, wxWindow *window, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
152 virtual void Insert( int before, wxSizer *sizer, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
153 virtual void Insert( int before, int width, int height, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
154
155 virtual void Prepend( wxWindow *window, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
156 virtual void Prepend( wxSizer *sizer, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
157 virtual void Prepend( int width, int height, int option = 0, int flag = 0, int border = 0, wxObject* userData = NULL );
158
159 // Remove will delete a sizer, but not a window.
160 virtual bool Remove( wxWindow *window );
161 virtual bool Remove( wxSizer *sizer );
162 virtual bool Remove( int pos );
163
164 // Detach will never destroy a sizer or window.
165 virtual bool Detach( wxWindow *window )
166 { return Remove( window ); }
167 virtual bool Detach( wxSizer *sizer );
168 virtual bool Detach( int pos );
169
170 virtual void Clear( bool delete_windows=FALSE );
171 virtual void DeleteWindows();
172
173 void SetMinSize( int width, int height )
174 { DoSetMinSize( width, height ); }
175 void SetMinSize( wxSize size )
176 { DoSetMinSize( size.x, size.y ); }
177
178 /* Searches recursively */
179 bool SetItemMinSize( wxWindow *window, int width, int height )
180 { return DoSetItemMinSize( window, width, height ); }
181 bool SetItemMinSize( wxWindow *window, wxSize size )
182 { return DoSetItemMinSize( window, size.x, size.y ); }
183
184 /* Searches recursively */
185 bool SetItemMinSize( wxSizer *sizer, int width, int height )
186 { return DoSetItemMinSize( sizer, width, height ); }
187 bool SetItemMinSize( wxSizer *sizer, wxSize size )
188 { return DoSetItemMinSize( sizer, size.x, size.y ); }
189
190 bool SetItemMinSize( int pos, int width, int height )
191 { return DoSetItemMinSize( pos, width, height ); }
192 bool SetItemMinSize( int pos, wxSize size )
193 { return DoSetItemMinSize( pos, size.x, size.y ); }
194
195 wxSize GetSize()
196 { return m_size; }
197 wxPoint GetPosition()
198 { return m_position; }
199
200 /* Calculate the minimal size or return m_minSize if bigger. */
201 wxSize GetMinSize();
202
203 virtual void RecalcSizes() = 0;
204 virtual wxSize CalcMin() = 0;
205
206 virtual void Layout();
207
208 wxSize Fit( wxWindow *window );
209 void FitInside( wxWindow *window );
210 void SetSizeHints( wxWindow *window );
211 void SetVirtualSizeHints( wxWindow *window );
212
213 wxList& GetChildren()
214 { return m_children; }
215
216 void SetDimension( int x, int y, int width, int height );
217
218 // Manage whether individual windows or sub-sizers are considered
219 // in the layout calculations or not.
220 void Show( wxWindow *window, bool show = TRUE );
221 void Hide( wxWindow *window )
222 { Show (window, FALSE); }
223 void Show( wxSizer *sizer, bool show = TRUE );
224 void Hide( wxSizer *sizer )
225 { Show (sizer, FALSE); }
226
227 bool IsShown( wxWindow *window );
228 bool IsShown( wxSizer *sizer );
229
230 // Recursively call wxWindow::Show () on all sizer items.
231 void ShowItems (bool show);
232
233protected:
234 wxSize m_size;
235 wxSize m_minSize;
236 wxPoint m_position;
237 wxList m_children;
238
239 wxSize GetMaxWindowSize( wxWindow *window );
240 wxSize GetMinWindowSize( wxWindow *window );
241 wxSize GetMaxClientSize( wxWindow *window );
242 wxSize GetMinClientSize( wxWindow *window );
243 wxSize FitSize( wxWindow *window );
244 wxSize VirtualFitSize( wxWindow *window );
245
246 virtual void DoSetMinSize( int width, int height );
247 virtual bool DoSetItemMinSize( wxWindow *window, int width, int height );
248 virtual bool DoSetItemMinSize( wxSizer *sizer, int width, int height );
249 virtual bool DoSetItemMinSize( int pos, int width, int height );
250
251private:
252 DECLARE_CLASS(wxSizer);
253};
254
255//---------------------------------------------------------------------------
256// wxGridSizer
257//---------------------------------------------------------------------------
258
259class WXDLLEXPORT wxGridSizer: public wxSizer
260{
261public:
262 wxGridSizer( int rows, int cols, int vgap, int hgap );
263 wxGridSizer( int cols, int vgap = 0, int hgap = 0 );
264
265 void RecalcSizes();
266 wxSize CalcMin();
267
268 void SetCols( int cols ) { m_cols = cols; }
269 void SetRows( int rows ) { m_rows = rows; }
270 void SetVGap( int gap ) { m_vgap = gap; }
271 void SetHGap( int gap ) { m_hgap = gap; }
272 int GetCols() { return m_cols; }
273 int GetRows() { return m_rows; }
274 int GetVGap() { return m_vgap; }
275 int GetHGap() { return m_hgap; }
276
277protected:
278 int m_rows;
279 int m_cols;
280 int m_vgap;
281 int m_hgap;
282
283 // return the number of total items and the number of columns and rows
284 int CalcRowsCols(int& rows, int& cols) const;
285
286 void SetItemBounds( wxSizerItem *item, int x, int y, int w, int h );
287
288private:
289 DECLARE_CLASS(wxGridSizer);
290};
291
292//---------------------------------------------------------------------------
293// wxFlexGridSizer
294//---------------------------------------------------------------------------
295
296class WXDLLEXPORT wxFlexGridSizer: public wxGridSizer
297{
298public:
299 wxFlexGridSizer( int rows, int cols, int vgap, int hgap );
300 wxFlexGridSizer( int cols, int vgap = 0, int hgap = 0 );
301 ~wxFlexGridSizer();
302
303 void RecalcSizes();
304 wxSize CalcMin();
305
306 void AddGrowableRow( size_t idx );
307 void RemoveGrowableRow( size_t idx );
308 void AddGrowableCol( size_t idx );
309 void RemoveGrowableCol( size_t idx );
310
311protected:
312 int *m_rowHeights;
313 int *m_colWidths;
314 wxArrayInt m_growableRows;
315 wxArrayInt m_growableCols;
316
317 void CreateArrays();
318
319private:
320 DECLARE_CLASS(wxFlexGridSizer);
321 DECLARE_NO_COPY_CLASS(wxFlexGridSizer)
322};
323
324//---------------------------------------------------------------------------
325// wxBoxSizer
326//---------------------------------------------------------------------------
327
328class WXDLLEXPORT wxBoxSizer: public wxSizer
329{
330public:
331 wxBoxSizer( int orient );
332
333 void RecalcSizes();
334 wxSize CalcMin();
335
336 int GetOrientation()
337 { return m_orient; }
338
339 void SetOrientation(int orient)
340 { m_orient = orient; }
341
342protected:
343 int m_orient;
344 int m_stretchable;
345 int m_minWidth;
346 int m_minHeight;
347 int m_fixedWidth;
348 int m_fixedHeight;
349
350private:
351 DECLARE_CLASS(wxBoxSizer);
352};
353
354//---------------------------------------------------------------------------
355// wxStaticBoxSizer
356//---------------------------------------------------------------------------
357
358#if wxUSE_STATBOX
359
360class WXDLLEXPORT wxStaticBox;
361
362class WXDLLEXPORT wxStaticBoxSizer: public wxBoxSizer
363{
364public:
365 wxStaticBoxSizer( wxStaticBox *box, int orient );
366
367 void RecalcSizes();
368 wxSize CalcMin();
369
370 wxStaticBox *GetStaticBox()
371 { return m_staticBox; }
372
373protected:
374 wxStaticBox *m_staticBox;
375
376private:
377 DECLARE_CLASS(wxStaticBoxSizer);
378 DECLARE_NO_COPY_CLASS(wxStaticBoxSizer)
379};
380
381#endif // wxUSE_STATBOX
382
383//---------------------------------------------------------------------------
384// wxNotebookSizer
385//---------------------------------------------------------------------------
386
387#if wxUSE_NOTEBOOK
388
389class WXDLLEXPORT wxNotebook;
390
391class WXDLLEXPORT wxNotebookSizer: public wxSizer
392{
393public:
394 wxNotebookSizer( wxNotebook *nb );
395
396 void RecalcSizes();
397 wxSize CalcMin();
398
399 wxNotebook *GetNotebook()
400 { return m_notebook; }
401
402protected:
403 wxNotebook *m_notebook;
404
405private:
406 DECLARE_CLASS(wxNotebookSizer);
407 DECLARE_NO_COPY_CLASS(wxNotebookSizer)
408};
409
410#endif // wxUSE_NOTEBOOK
411
412
413#endif
414 // __WXSIZER_H__