]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/aui/auibook.h
document wxFSVolume (fixes #3977)
[wxWidgets.git] / interface / wx / aui / auibook.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: aui/auibook.h
e54c96f1 3// Purpose: interface of wxAuiNotebook
23324ae1
FM
4// Author: wxWidgets team
5// RCS-ID: $Id$
6// Licence: wxWindows license
7/////////////////////////////////////////////////////////////////////////////
8
9/**
10 @class wxAuiNotebook
7c913512 11
23324ae1 12 wxAuiNotebook is part of the wxAUI class framework.
47d602c1 13 See also @ref overview_aui.
7c913512 14
23324ae1
FM
15 wxAuiNotebook is a notebook control which implements many features common in
16 applications with dockable panes.
17 Specifically, wxAuiNotebook implements functionality which allows the user to
47d602c1
FM
18 rearrange tab order via drag-and-drop, split the tab window into many different
19 splitter configurations, and toggle through different themes to customize
23324ae1 20 the control's look and feel.
7c913512 21
23324ae1 22 An effort has been made to try to maintain an API as similar to that of
4a15036c 23 wxNotebook (note that wxAuiNotebook does not derive from wxNotebook!).
7c913512 24
23324ae1
FM
25 The default theme that is used is wxAuiDefaultTabArt, which provides a modern,
26 glossy look and feel.
27 The theme can be changed by calling wxAuiNotebook::SetArtProvider.
7c913512 28
23324ae1 29 @beginStyleTable
8c6791e4 30 @style{wxAUI_NB_DEFAULT_STYLE}
23324ae1
FM
31 Defined as wxAUI_NB_TOP | wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_MOVE |
32 wxAUI_NB_SCROLL_BUTTONS | wxAUI_NB_CLOSE_ON_ACTIVE_TAB.
8c6791e4 33 @style{wxAUI_NB_TAB_SPLIT}
23324ae1 34 Allows the tab control to be split by dragging a tab.
8c6791e4 35 @style{wxAUI_NB_TAB_MOVE}
23324ae1 36 Allows a tab to be moved horizontally by dragging.
8c6791e4 37 @style{wxAUI_NB_TAB_EXTERNAL_MOVE}
23324ae1 38 Allows a tab to be moved to another tab control.
8c6791e4 39 @style{wxAUI_NB_TAB_FIXED_WIDTH}
23324ae1 40 With this style, all tabs have the same width.
8c6791e4 41 @style{wxAUI_NB_SCROLL_BUTTONS}
23324ae1 42 With this style, left and right scroll buttons are displayed.
8c6791e4 43 @style{wxAUI_NB_WINDOWLIST_BUTTON}
23324ae1 44 With this style, a drop-down list of windows is available.
8c6791e4 45 @style{wxAUI_NB_CLOSE_BUTTON}
23324ae1 46 With this style, a close button is available on the tab bar.
8c6791e4 47 @style{wxAUI_NB_CLOSE_ON_ACTIVE_TAB}
23324ae1 48 With this style, the close button is visible on the active tab.
8c6791e4 49 @style{wxAUI_NB_CLOSE_ON_ALL_TABS}
23324ae1 50 With this style, the close button is visible on all tabs.
8c6791e4 51 @style{wxAUI_NB_TOP}
23324ae1 52 With this style, tabs are drawn along the top of the notebook.
8c6791e4 53 @style{wxAUI_NB_BOTTOM}
23324ae1
FM
54 With this style, tabs are drawn along the bottom of the notebook.
55 @endStyleTable
7c913512 56
4a15036c
FM
57
58 @beginEventTable{wxAuiNotebookEvent}
59 @event{EVT_AUINOTEBOOK_PAGE_CLOSE(id, func)}
60 @todo Provide description.
61 @event{EVT_AUINOTEBOOK_PAGE_CHANGED(id, func)}
62 @todo Provide description.
63 @event{EVT_AUINOTEBOOK_PAGE_CHANGING(id, func)}
64 @todo Provide description.
65 @event{EVT_AUINOTEBOOK_BUTTON(id, func)}
66 @todo Provide description.
67 @event{EVT_AUINOTEBOOK_BEGIN_DRAG(id, func)}
68 @todo Provide description.
69 @event{EVT_AUINOTEBOOK_END_DRAG(id, func)}
70 @todo Provide description.
71 @event{EVT_AUINOTEBOOK_DRAG_MOTION(id, func)}
72 @todo Provide description.
73 @event{EVT_AUINOTEBOOK_ALLOW_DND(id, func)}
74 @todo Provide description.
75 @endEventTable
76
23324ae1
FM
77 @library{wxaui}
78 @category{aui}
79*/
80class wxAuiNotebook : public wxControl
81{
82public:
4a15036c
FM
83 /**
84 Default ctor.
85 */
47d602c1
FM
86 wxAuiNotebook();
87
23324ae1
FM
88 /**
89 Constructor. Creates a wxAuiNotebok control.
90 */
7c913512
FM
91 wxAuiNotebook(wxWindow* parent, wxWindowID id = wxID_ANY,
92 const wxPoint& pos = wxDefaultPosition,
93 const wxSize& size = wxDefaultSize,
94 long style = wxAUI_NB_DEFAULT_STYLE);
23324ae1
FM
95
96 /**
47d602c1
FM
97 Adds a page.
98 If the @a select parameter is @true, calling this will generate a page change event.
23324ae1
FM
99 */
100 bool AddPage(wxWindow* page, const wxString& caption,
4cc4bfaf 101 bool select = false,
23324ae1
FM
102 const wxBitmap& bitmap = wxNullBitmap);
103
104 /**
105 Sets the selection to the next or previous page.
106 */
4cc4bfaf 107 void AdvanceSelection(bool forward = true);
23324ae1
FM
108
109 /**
110 Creates the notebook window.
111 */
112 bool Create(wxWindow* parent, wxWindowID id = wxID_ANY,
113 const wxPoint& pos = wxDefaultPosition,
114 const wxSize& size = wxDefaultSize,
115 long style = 0);
116
117 /**
47d602c1
FM
118 Deletes a page at the given index.
119 Calling this method will generate a page change event.
23324ae1
FM
120 */
121 bool DeletePage(size_t page);
122
123 /**
124 Returns the associated art provider.
125 */
328f5751 126 wxAuiTabArt* GetArtProvider() const;
23324ae1
FM
127
128 /**
47d602c1
FM
129 Returns the desired height of the notebook for the given page height.
130 Use this to fit the notebook to a given page size.
23324ae1
FM
131 */
132 int GetHeightForPageHeight(int pageHeight);
133
134 /**
135 Returns the page specified by the given index.
136 */
328f5751 137 wxWindow* GetPage(size_t page_idx) const;
23324ae1
FM
138
139 /**
140 Returns the tab bitmap for the page.
141 */
328f5751 142 wxBitmap GetPageBitmap(size_t page) const;
23324ae1
FM
143
144 /**
145 Returns the number of pages in the notebook.
146 */
328f5751 147 size_t GetPageCount() const;
23324ae1
FM
148
149 /**
1d497b99 150 Returns the page index for the specified window.
47d602c1 151 If the window is not found in the notebook, wxNOT_FOUND is returned.
23324ae1 152 */
328f5751 153 int GetPageIndex(wxWindow* page_wnd) const;
23324ae1
FM
154
155 /**
156 Returns the tab label for the page.
157 */
328f5751 158 wxString GetPageText(size_t page) const;
23324ae1
FM
159
160 /**
161 Returns the currently selected page.
162 */
328f5751 163 int GetSelection() const;
23324ae1
FM
164
165 /**
166 Returns the height of the tab control.
167 */
328f5751 168 int GetTabCtrlHeight() const;
23324ae1
FM
169
170 /**
171 InsertPage() is similar to AddPage, but allows the ability to specify the
172 insert location.
4cc4bfaf 173 If the @a select parameter is @true, calling this will generate a page change
23324ae1
FM
174 event.
175 */
176 bool InsertPage(size_t page_idx, wxWindow* page,
177 const wxString& caption,
4cc4bfaf 178 bool select = false,
23324ae1
FM
179 const wxBitmap& bitmap = wxNullBitmap);
180
181 /**
182 Removes a page, without deleting the window pointer.
183 */
184 bool RemovePage(size_t page);
185
186 /**
187 Sets the art provider to be used by the notebook.
188 */
189 void SetArtProvider(wxAuiTabArt* art);
190
191 /**
192 Sets the font for drawing the tab labels, using a bold version of the font for
193 selected tab labels.
194 */
d2aa927a 195 virtual bool SetFont(const wxFont& font);
23324ae1
FM
196
197 /**
198 Sets the font for measuring tab labels.
199 */
200 void SetMeasuringFont(const wxFont& font);
201
202 /**
203 Sets the font for drawing unselected tab labels.
204 */
205 void SetNormalFont(const wxFont& font);
206
207 /**
208 Sets the bitmap for the page. To remove a bitmap from the tab caption, pass
209 wxNullBitmap.
210 */
211 bool SetPageBitmap(size_t page, const wxBitmap& bitmap);
212
213 /**
214 Sets the tab label for the page.
215 */
216 bool SetPageText(size_t page, const wxString& text);
217
218 /**
219 Sets the font for drawing selected tab labels.
220 */
221 void SetSelectedFont(const wxFont& font);
222
223 /**
224 Sets the page selection. Calling this method will generate a page change event.
225 */
226 size_t SetSelection(size_t new_page);
227
228 /**
47d602c1
FM
229 Sets the tab height. By default, the tab control height is calculated
230 by measuring the text height and bitmap sizes on the tab captions. Calling this
23324ae1 231 method will override that calculation and set the tab control to the specified
47d602c1 232 height parameter. A call to this method will override any call to
23324ae1 233 SetUniformBitmapSize().
47d602c1 234
23324ae1
FM
235 Specifying -1 as the height will return the control to its default auto-sizing
236 behaviour.
237 */
d2aa927a 238 virtual void SetTabCtrlHeight(int height);
23324ae1
FM
239
240 //@{
241 /**
4cc4bfaf 242 Split performs a split operation programmatically. The argument @a page
47d602c1
FM
243 indicates the page that will be split off. This page will also become the
244 active page after the split.
245
246 The @a direction argument specifies where the pane should go, it should be one
23324ae1
FM
247 of the following: wxTOP, wxBOTTOM, wxLEFT, or wxRIGHT.
248 */
249 void SetUniformBitmapSize(const wxSize& size);
7c913512 250 void Split(size_t page, int direction);
23324ae1
FM
251 //@}
252
253 /**
254 Shows the window menu for the active tab control associated with this notebook,
255 and returns @true if a selection was made.
256 */
257 bool ShowWindowMenu();
258};
259
260
e54c96f1 261
23324ae1
FM
262/**
263 @class wxAuiTabArt
7c913512 264
23324ae1 265 Tab art class.
7c913512 266
47d602c1
FM
267 @todo BETTER DESCRIPTION NEEDED
268
23324ae1
FM
269 @library{wxaui}
270 @category{aui}
271*/
7c913512 272class wxAuiTabArt
23324ae1
FM
273{
274public:
275 /**
276 Constructor.
277 */
278 wxAuiTabArt();
279
280 /**
281 Clones the art object.
282 */
d2aa927a 283 virtual wxAuiTabArt* Clone() = 0;
23324ae1
FM
284
285 /**
286 Draws a background on the given area.
287 */
d2aa927a 288 virtual void DrawBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect) = 0;
23324ae1
FM
289
290 /**
291 Draws a button.
292 */
1d497b99
FM
293 virtual void DrawButton(wxDC& dc, wxWindow* wnd, const wxRect& in_rect,
294 int bitmap_id, int button_state, int orientation,
295 wxRect* out_rect) = 0;
23324ae1
FM
296
297 /**
298 Draws a tab.
299 */
1d497b99
FM
300 virtual void DrawTab(wxDC& dc, wxWindow* wnd, const wxAuiNotebookPage& page,
301 const wxRect& rect, int close_button_state,
302 wxRect* out_tab_rect, wxRect* out_button_rect, int* x_extent) = 0;
23324ae1
FM
303
304 /**
305 Returns the tab control size.
306 */
1d497b99 307 virtual int GetBestTabCtrlSize(wxWindow*, const wxAuiNotebookPageArray&, const wxSize&) = 0;
23324ae1
FM
308
309 /**
310 Returns the indent size.
311 */
d2aa927a 312 virtual int GetIndentSize() = 0;
23324ae1
FM
313
314 /**
315 Returns the tab size for the given caption, bitmap and state.
316 */
1d497b99
FM
317 virtual wxSize GetTabSize(wxDC& dc, wxWindow* wnd, const wxString& caption,
318 const wxBitmap& bitmap, bool active,
319 int close_button_state, int* x_extent) = 0;
23324ae1
FM
320
321 /**
322 Sets flags.
323 */
d2aa927a 324 virtual void SetFlags(unsigned int flags) = 0;
23324ae1
FM
325
326 /**
327 Sets the font used for calculating measurements.
328 */
d2aa927a 329 virtual void SetMeasuringFont(const wxFont& font) = 0;
23324ae1
FM
330
331 /**
332 Sets the normal font for drawing labels.
333 */
d2aa927a 334 virtual void SetNormalFont(const wxFont& font) = 0;
23324ae1
FM
335
336 /**
337 Sets the font for drawing text for selected UI elements.
338 */
d2aa927a 339 virtual void SetSelectedFont(const wxFont& font) = 0;
23324ae1
FM
340
341 /**
342 Sets sizing information.
343 */
d2aa927a 344 virtual void SetSizingInfo(const wxSize& tab_ctrl_size, size_t tab_count) = 0;
23324ae1 345};
e54c96f1 346