]> git.saurik.com Git - wxWidgets.git/blob - wxPython/src/_notebook.i
395720b69fd15407678fbf58d4a9609828ec0437
[wxWidgets.git] / wxPython / src / _notebook.i
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: _notebook.i
3 // Purpose: SWIG interface defs for wxNotebook and such
4 //
5 // Author: Robin Dunn
6 //
7 // Created: 2-June-1998
8 // RCS-ID: $Id$
9 // Copyright: (c) 2003 by Total Control Software
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
12
13 // Not a %module
14
15
16 //---------------------------------------------------------------------------
17
18 MAKE_CONST_WXSTRING(NotebookNameStr);
19
20 //---------------------------------------------------------------------------
21 %newgroup
22
23
24 enum {
25 wxBK_DEFAULT,
26 wxBK_TOP,
27 wxBK_BOTTOM,
28 wxBK_LEFT,
29 wxBK_RIGHT,
30 wxBK_ALIGN_MASK,
31 wxBK_BUTTONBAR
32 };
33
34
35 // TODO: Virtualize this class so other book controls can be derived in Python
36
37 MustHaveApp(wxBookCtrlBase);
38
39 // Common base class for wxList/Tree/Notebook
40 class wxBookCtrlBase : public wxControl
41 {
42 public:
43 // This is an ABC, it can't be constructed...
44
45 // wxBookCtrlBase(wxWindow *parent,
46 // wxWindowID id,
47 // const wxPoint& pos = wxDefaultPosition,
48 // const wxSize& size = wxDefaultSize,
49 // long style = 0,
50 // const wxString& name = wxPyEmptyString);
51 // %RenameCtor(PreBookCtrlBase, wxBookCtrlBase());
52 // bool Create(wxWindow *parent,
53 // wxWindowID id,
54 // const wxPoint& pos = wxDefaultPosition,
55 // const wxSize& size = wxDefaultSize,
56 // long style = 0,
57 // const wxString& name = wxPyEmptyString);
58
59
60 // get number of pages in the dialog
61 virtual size_t GetPageCount() const;
62
63 // get the panel which represents the given page
64 virtual wxWindow *GetPage(size_t n);
65
66 // get the current page or NULL if none
67 wxWindow* GetCurrentPage() const;
68
69 // get the currently selected page or wxNOT_FOUND if none
70 virtual int GetSelection() const/* = 0*/;
71
72 // set/get the title of a page
73 virtual bool SetPageText(size_t n, const wxString& strText)/* = 0*/;
74 virtual wxString GetPageText(size_t n) const/* = 0*/;
75
76
77 // image list stuff: each page may have an image associated with it (all
78 // images belong to the same image list)
79
80 // sets the image list to use, it is *not* deleted by the control
81 virtual void SetImageList(wxImageList *imageList);
82
83 // as SetImageList() but we will delete the image list ourselves
84 %disownarg( wxImageList *imageList );
85 void AssignImageList(wxImageList *imageList);
86 %cleardisown( wxImageList *imageList );
87
88 // get pointer (may be NULL) to the associated image list
89 wxImageList* GetImageList() const;
90
91 // sets/returns item's image index in the current image list
92 virtual int GetPageImage(size_t n) const/* = 0*/;
93 virtual bool SetPageImage(size_t n, int imageId)/* = 0*/;
94
95
96 // resize the notebook so that all pages will have the specified size
97 virtual void SetPageSize(const wxSize& size);
98
99 // calculate the size of the control from the size of its page
100 virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const/* = 0*/;
101
102
103 // get/set size of area between book control area and page area
104 unsigned int GetInternalBorder() const;
105 void SetInternalBorder(unsigned int internalBorder);
106
107 // returns true if we have wxCHB_TOP or wxCHB_BOTTOM style
108 bool IsVertical() const;
109
110 // Sets/gets the margin around the controller
111 void SetControlMargin(int margin);
112 int GetControlMargin() const;
113
114 // set/get option to shrink to fit current page
115 void SetFitToCurrentPage(bool fit);
116 bool GetFitToCurrentPage() const;
117
118 // returns the sizer containing the control, if any
119 wxSizer* GetControlSizer() const;
120
121
122 // remove one page from the control and delete it
123 virtual bool DeletePage(size_t n);
124
125 // remove one page from the notebook, without deleting it
126 virtual bool RemovePage(size_t n);
127
128 // remove all pages and delete them
129 virtual bool DeleteAllPages();
130
131 // adds a new page to the control
132 virtual bool AddPage(wxWindow *page,
133 const wxString& text,
134 bool select = false,
135 int imageId = -1);
136
137 // the same as AddPage(), but adds the page at the specified position
138 virtual bool InsertPage(size_t n,
139 wxWindow *page,
140 const wxString& text,
141 bool select = false,
142 int imageId = -1)/* = 0*/;
143
144 // set the currently selected page, return the index of the previously
145 // selected one (or -1 on error)
146 //
147 // NB: this function will _not_ generate PAGE_CHANGING/ED events
148 virtual int SetSelection(size_t n)/* = 0*/;
149
150
151 // cycle thru the pages
152 void AdvanceSelection(bool forward = true);
153
154 DocDeclAStr(
155 virtual int, HitTest(const wxPoint& pt, long* OUTPUT) const,
156 "HitTest(Point pt) -> (tab, where)",
157 "Returns the page/tab which is hit, and flags indicating where using
158 wx.NB_HITTEST flags.", "");
159
160 static wxVisualAttributes
161 GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
162 };
163
164
165
166 class wxBookCtrlBaseEvent : public wxNotifyEvent
167 {
168 public:
169 wxBookCtrlBaseEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
170 int nSel = -1, int nOldSel = -1);
171
172 // the currently selected page (-1 if none)
173 int GetSelection() const;
174 void SetSelection(int nSel);
175 // the page that was selected before the change (-1 if none)
176 int GetOldSelection() const;
177 void SetOldSelection(int nOldSel);
178 };
179
180
181
182 //---------------------------------------------------------------------------
183 %newgroup
184
185 enum {
186 // styles
187 wxNB_FIXEDWIDTH,
188 wxNB_TOP,
189 wxNB_LEFT,
190 wxNB_RIGHT,
191 wxNB_BOTTOM,
192 wxNB_MULTILINE,
193 wxNB_NOPAGETHEME,
194
195 // hittest flags
196 wxBK_HITTEST_NOWHERE = 1, // not on tab
197 wxBK_HITTEST_ONICON = 2, // on icon
198 wxBK_HITTEST_ONLABEL = 4, // on label
199 wxBK_HITTEST_ONITEM = wxBK_HITTEST_ONICON | wxBK_HITTEST_ONLABEL,
200 wxBK_HITTEST_ONPAGE = 8, // not on tab control, but over the selected page
201
202 // for backwards compatibility only
203 wxNB_HITTEST_NOWHERE,
204 wxNB_HITTEST_ONICON,
205 wxNB_HITTEST_ONLABEL,
206 wxNB_HITTEST_ONITEM,
207 wxNB_HITTEST_ONPAGE,
208 };
209
210
211
212 MustHaveApp(wxNotebook);
213
214 class wxNotebook : public wxBookCtrlBase {
215 public:
216 %pythonAppend wxNotebook "self._setOORInfo(self)"
217 %pythonAppend wxNotebook() ""
218 %typemap(out) wxNotebook*; // turn off this typemap
219
220 wxNotebook(wxWindow *parent,
221 wxWindowID id=-1,
222 const wxPoint& pos = wxDefaultPosition,
223 const wxSize& size = wxDefaultSize,
224 long style = 0,
225 const wxString& name = wxPyNotebookNameStr);
226 %RenameCtor(PreNotebook, wxNotebook());
227
228 // Turn it back on again
229 %typemap(out) wxNotebook* { $result = wxPyMake_wxObject($1, $owner); }
230
231 bool Create(wxWindow *parent,
232 wxWindowID id=-1,
233 const wxPoint& pos = wxDefaultPosition,
234 const wxSize& size = wxDefaultSize,
235 long style = 0,
236 const wxString& name = wxPyNotebookNameStr);
237
238
239 // get the number of rows for a control with wxNB_MULTILINE style (not all
240 // versions support it - they will always return 1 then)
241 virtual int GetRowCount() const;
242
243 // set the padding between tabs (in pixels)
244 virtual void SetPadding(const wxSize& padding);
245
246 // set the size of the tabs for wxNB_FIXEDWIDTH controls
247 virtual void SetTabSize(const wxSize& sz);
248
249 // implement some base class functions
250 virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
251
252 // On platforms that support it, get the theme page background colour,
253 // else invalid colour
254 wxColour GetThemeBackgroundColour() const;
255
256 static wxVisualAttributes
257 GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
258 };
259
260
261
262 class wxNotebookEvent : public wxBookCtrlBaseEvent
263 {
264 public:
265 wxNotebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
266 int nSel = -1, int nOldSel = -1);
267
268 };
269
270 // notebook control event types
271 %constant wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED;
272 %constant wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING;
273
274
275 %pythoncode {
276 %# wxNotebook events
277 EVT_NOTEBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, 1 )
278 EVT_NOTEBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, 1 )
279 }
280
281
282 %pythoncode {
283 %#----------------------------------------------------------------------------
284
285 class NotebookPage(wx.Panel):
286 """
287 There is an old (and apparently unsolvable) bug when placing a
288 window with a nonstandard background colour in a wx.Notebook on
289 wxGTK1, as the notbooks's background colour would always be used
290 when the window is refreshed. The solution is to place a panel in
291 the notbook and the coloured window on the panel, sized to cover
292 the panel. This simple class does that for you, just put an
293 instance of this in the notebook and make your regular window a
294 child of this one and it will handle the resize for you.
295 """
296 def __init__(self, parent, id=-1,
297 pos=wx.DefaultPosition, size=wx.DefaultSize,
298 style=wx.TAB_TRAVERSAL, name="panel"):
299 wx.Panel.__init__(self, parent, id, pos, size, style, name)
300 self.child = None
301 self.Bind(wx.EVT_SIZE, self.OnSize)
302
303 def OnSize(self, evt):
304 if self.child is None:
305 children = self.GetChildren()
306 if len(children):
307 self.child = children[0]
308 if self.child:
309 self.child.SetPosition((0,0))
310 self.child.SetSize(self.GetSize())
311
312 }
313
314 //---------------------------------------------------------------------------
315 %newgroup
316
317
318 enum
319 {
320 // default alignment: left everywhere except Mac where it is top
321 wxLB_DEFAULT = 0,
322
323 // put the list control to the left/right/top/bottom of the page area
324 wxLB_TOP = 0x1,
325 wxLB_BOTTOM = 0x2,
326 wxLB_LEFT = 0x4,
327 wxLB_RIGHT = 0x8,
328
329 // the mask which can be used to extract the alignment from the style
330 wxLB_ALIGN_MASK = 0xf,
331 };
332
333
334
335 MustHaveApp(wxListbook);
336
337 // wxListCtrl and wxNotebook combination
338 class wxListbook : public wxBookCtrlBase
339 {
340 public:
341 %pythonAppend wxListbook "self._setOORInfo(self)"
342 %pythonAppend wxListbook() ""
343
344 wxListbook(wxWindow *parent,
345 wxWindowID id=-1,
346 const wxPoint& pos = wxDefaultPosition,
347 const wxSize& size = wxDefaultSize,
348 long style = 0,
349 const wxString& name = wxPyEmptyString);
350 %RenameCtor(PreListbook, wxListbook());
351
352 bool Create(wxWindow *parent,
353 wxWindowID id=-1,
354 const wxPoint& pos = wxDefaultPosition,
355 const wxSize& size = wxDefaultSize,
356 long style = 0,
357 const wxString& name = wxPyEmptyString);
358
359 wxListView* GetListView();
360 };
361
362
363
364 class wxListbookEvent : public wxBookCtrlBaseEvent
365 {
366 public:
367 wxListbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
368 int nSel = -1, int nOldSel = -1);
369 };
370
371
372 %constant wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED;
373 %constant wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING;
374
375 %pythoncode {
376 EVT_LISTBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED, 1 )
377 EVT_LISTBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, 1 )
378 }
379
380
381 //---------------------------------------------------------------------------
382
383
384 /*
385 * wxChoicebook flags
386 */
387 enum {
388 wxCHB_DEFAULT,
389 wxCHB_TOP,
390 wxCHB_BOTTOM,
391 wxCHB_LEFT,
392 wxCHB_RIGHT,
393 wxCHB_ALIGN_MASK
394 };
395
396
397 MustHaveApp(wxChoicebook);
398
399 class wxChoicebook : public wxBookCtrlBase
400 {
401 public:
402 %pythonAppend wxChoicebook "self._setOORInfo(self)"
403 %pythonAppend wxChoicebook() ""
404
405 wxChoicebook(wxWindow *parent,
406 wxWindowID id,
407 const wxPoint& pos = wxDefaultPosition,
408 const wxSize& size = wxDefaultSize,
409 long style = 0,
410 const wxString& name = wxPyEmptyString);
411 %RenameCtor(PreChoicebook, wxChoicebook());
412
413 // quasi ctor
414 bool Create(wxWindow *parent,
415 wxWindowID id,
416 const wxPoint& pos = wxDefaultPosition,
417 const wxSize& size = wxDefaultSize,
418 long style = 0,
419 const wxString& name = wxPyEmptyString);
420
421
422 // returns the choice control
423 wxChoice* GetChoiceCtrl() const;
424
425 virtual bool DeleteAllPages();
426 };
427
428
429 class wxChoicebookEvent : public wxBookCtrlBaseEvent
430 {
431 public:
432 wxChoicebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
433 int nSel = -1, int nOldSel = -1);
434 };
435
436 %constant wxEventType wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED;
437 %constant wxEventType wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING;
438
439 %pythoncode {
440 EVT_CHOICEBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED, 1 )
441 EVT_CHOICEBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, 1 )
442 }
443
444 //---------------------------------------------------------------------------
445 %newgroup;
446
447 MustHaveApp(wxTreebook);
448
449 class wxTreebook : public wxBookCtrlBase
450 {
451 public:
452 %pythonAppend wxTreebook "self._setOORInfo(self)"
453 %pythonAppend wxTreebook() ""
454
455
456 // This ctor creates the tree book control
457 wxTreebook(wxWindow *parent,
458 wxWindowID id,
459 const wxPoint& pos = wxDefaultPosition,
460 const wxSize& size = wxDefaultSize,
461 long style = wxBK_DEFAULT,
462 const wxString& name = wxPyEmptyString);
463
464 %RenameCtor(PreTreebook, wxTreebook());
465
466
467 // Really creates the control
468 bool Create(wxWindow *parent,
469 wxWindowID id,
470 const wxPoint& pos = wxDefaultPosition,
471 const wxSize& size = wxDefaultSize,
472 long style = wxBK_DEFAULT,
473 const wxString& name = wxPyEmptyString);
474
475
476 // Notice that page pointer may be NULL in which case the next non NULL
477 // page (usually the first child page of a node) is shown when this page is
478 // selected
479
480 // Inserts a new page just before the page indicated by page.
481 // The new page is placed on the same level as page.
482 virtual bool InsertPage(size_t pos,
483 wxWindow *page,
484 const wxString& text,
485 bool select = false,
486 int imageId = wxNOT_FOUND);
487
488 // Inserts a new sub-page to the end of children of the page at given pos.
489 virtual bool InsertSubPage(size_t pos,
490 wxWindow *page,
491 const wxString& text,
492 bool select = false,
493 int imageId = wxNOT_FOUND);
494
495 // Adds a new page at top level after all other pages.
496 virtual bool AddPage(wxWindow *page,
497 const wxString& text,
498 bool select = false,
499 int imageId = wxNOT_FOUND);
500
501 // Adds a new child-page to the last top-level page inserted.
502 // Useful when constructing 1 level tree structure.
503 virtual bool AddSubPage(wxWindow *page,
504 const wxString& text,
505 bool select = false,
506 int imageId = wxNOT_FOUND);
507
508 // Deletes the page and ALL its children. Could trigger page selection
509 // change in a case when selected page is removed. In that case its parent
510 // is selected (or the next page if no parent).
511 virtual bool DeletePage(size_t pos);
512
513
514 // Tree operations
515 // ---------------
516
517 // Gets the page node state -- node is expanded or collapsed
518 virtual bool IsNodeExpanded(size_t pos) const;
519
520 // Expands or collapses the page node. Returns the previous state.
521 // May generate page changing events (if selected page
522 // is under the collapsed branch, then parent is autoselected).
523 virtual bool ExpandNode(size_t pos, bool expand = true);
524
525 // shortcut for ExpandNode(pos, false)
526 bool CollapseNode(size_t pos);
527
528 // get the parent page or wxNOT_FOUND if this is a top level page
529 int GetPageParent(size_t pos) const;
530
531 // the tree control we use for showing the pages index tree
532 wxTreeCtrl* GetTreeCtrl() const;
533
534 };
535
536
537 class wxTreebookEvent : public wxBookCtrlBaseEvent
538 {
539 public:
540 wxTreebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
541 int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND);
542 };
543
544 %constant wxEventType wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED;
545 %constant wxEventType wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING;
546 %constant wxEventType wxEVT_COMMAND_TREEBOOK_NODE_COLLAPSED;
547 %constant wxEventType wxEVT_COMMAND_TREEBOOK_NODE_EXPANDED;
548
549
550 %pythoncode {
551 EVT_TREEBOOK_PAGE_CHANGED= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED, 1 )
552 EVT_TREEBOOK_PAGE_CHANGING= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING, 1)
553 EVT_TREEBOOK_NODE_COLLAPSED= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_NODE_COLLAPSED, 1 )
554 EVT_TREEBOOK_NODE_EXPANDED= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_NODE_EXPANDED, 1 )
555 }
556
557 //---------------------------------------------------------------------------
558 %newgroup;
559
560 MustHaveApp(wxTreebook);
561
562 class wxToolbook : public wxBookCtrlBase
563 {
564 public:
565 %pythonAppend wxToolbook "self._setOORInfo(self)"
566 %pythonAppend wxToolbook() ""
567
568
569 // This ctor creates the tree book control
570 wxToolbook(wxWindow *parent,
571 wxWindowID id,
572 const wxPoint& pos = wxDefaultPosition,
573 const wxSize& size = wxDefaultSize,
574 long style = wxBK_DEFAULT,
575 const wxString& name = wxPyEmptyString);
576
577 %RenameCtor(PreToolbook, wxToolbook());
578
579 // quasi ctor
580 bool Create(wxWindow *parent,
581 wxWindowID id,
582 const wxPoint& pos = wxDefaultPosition,
583 const wxSize& size = wxDefaultSize,
584 long style = 0,
585 const wxString& name = wxEmptyString);
586
587
588 wxToolBarBase* GetToolBar() const;
589
590 // Not part of the wxBookctrl API, but must be called in OnIdle or
591 // by application to realize the toolbar and select the initial page.
592 void Realize();
593 };
594
595
596 class wxToolbookEvent : public wxBookCtrlBaseEvent
597 {
598 public:
599 wxToolbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
600 int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND);
601 };
602
603
604 %constant wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED;
605 %constant wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING;
606
607
608 %pythoncode {
609 EVT_TOOLBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED, 1)
610 EVT_TOOLBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING, 1)
611 }
612
613 //---------------------------------------------------------------------------