1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: SWIG interface defs for wxNotebook and such
7 // Created: 2-June-1998
9 // Copyright: (c) 2003 by Total Control Software
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
16 //---------------------------------------------------------------------------
18 MAKE_CONST_WXSTRING(NotebookNameStr);
20 //---------------------------------------------------------------------------
34 wxBK_HITTEST_NOWHERE = 1, // not on tab
35 wxBK_HITTEST_ONICON = 2, // on icon
36 wxBK_HITTEST_ONLABEL = 4, // on label
37 wxBK_HITTEST_ONITEM = wxBK_HITTEST_ONICON | wxBK_HITTEST_ONLABEL,
38 wxBK_HITTEST_ONPAGE = 8, // not on tab control, but over the selected page
42 // TODO: Virtualize this class so other book controls can be derived in Python
44 MustHaveApp(wxBookCtrlBase);
46 // Common base class for wxList/Tree/Notebook
47 class wxBookCtrlBase : public wxControl
50 // This is an ABC, it can't be constructed...
52 // wxBookCtrlBase(wxWindow *parent,
54 // const wxPoint& pos = wxDefaultPosition,
55 // const wxSize& size = wxDefaultSize,
57 // const wxString& name = wxPyEmptyString);
58 // %RenameCtor(PreBookCtrlBase, wxBookCtrlBase());
59 // bool Create(wxWindow *parent,
61 // const wxPoint& pos = wxDefaultPosition,
62 // const wxSize& size = wxDefaultSize,
64 // const wxString& name = wxPyEmptyString);
67 // get number of pages in the dialog
68 virtual size_t GetPageCount() const;
70 // get the panel which represents the given page
71 virtual wxWindow *GetPage(size_t n);
73 // get the current page or NULL if none
74 wxWindow* GetCurrentPage() const;
76 // get the currently selected page or wxNOT_FOUND if none
77 virtual int GetSelection() const/* = 0*/;
79 // set/get the title of a page
80 virtual bool SetPageText(size_t n, const wxString& strText)/* = 0*/;
81 virtual wxString GetPageText(size_t n) const/* = 0*/;
84 // image list stuff: each page may have an image associated with it (all
85 // images belong to the same image list)
87 // sets the image list to use, it is *not* deleted by the control
88 virtual void SetImageList(wxImageList *imageList);
90 // as SetImageList() but we will delete the image list ourselves
91 %disownarg( wxImageList *imageList );
92 void AssignImageList(wxImageList *imageList);
93 %cleardisown( wxImageList *imageList );
95 // get pointer (may be NULL) to the associated image list
96 wxImageList* GetImageList() const;
98 // sets/returns item's image index in the current image list
99 virtual int GetPageImage(size_t n) const/* = 0*/;
100 virtual bool SetPageImage(size_t n, int imageId)/* = 0*/;
103 // resize the notebook so that all pages will have the specified size
104 virtual void SetPageSize(const wxSize& size);
106 // calculate the size of the control from the size of its page
107 virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const/* = 0*/;
110 // get/set size of area between book control area and page area
111 unsigned int GetInternalBorder() const;
112 void SetInternalBorder(unsigned int internalBorder);
114 // returns true if we have wxCHB_TOP or wxCHB_BOTTOM style
115 bool IsVertical() const;
117 // Sets/gets the margin around the controller
118 void SetControlMargin(int margin);
119 int GetControlMargin() const;
121 // set/get option to shrink to fit current page
122 void SetFitToCurrentPage(bool fit);
123 bool GetFitToCurrentPage() const;
125 // returns the sizer containing the control, if any
126 wxSizer* GetControlSizer() const;
129 // remove one page from the control and delete it
130 virtual bool DeletePage(size_t n);
132 // remove one page from the notebook, without deleting it
133 virtual bool RemovePage(size_t n);
135 // remove all pages and delete them
136 virtual bool DeleteAllPages();
138 // adds a new page to the control
139 virtual bool AddPage(wxWindow *page,
140 const wxString& text,
144 // the same as AddPage(), but adds the page at the specified position
145 virtual bool InsertPage(size_t n,
147 const wxString& text,
149 int imageId = -1)/* = 0*/;
151 // set the currently selected page, return the index of the previously
152 // selected one (or -1 on error)
154 // NB: this function will _not_ generate PAGE_CHANGING/ED events
155 virtual int SetSelection(size_t n)/* = 0*/;
158 // acts as SetSelection but does not generate events
159 virtual int ChangeSelection(size_t n)/* = 0*/;
161 // cycle thru the pages
162 void AdvanceSelection(bool forward = true);
165 virtual int, HitTest(const wxPoint& pt, long* OUTPUT) const,
166 "HitTest(Point pt) -> (tab, where)",
167 "Returns the page/tab which is hit, and flags indicating where using
168 wx.NB_HITTEST flags.", "");
170 static wxVisualAttributes
171 GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
173 %property(ControlMargin, GetControlMargin, SetControlMargin, doc="See `GetControlMargin` and `SetControlMargin`");
174 %property(ControlSizer, GetControlSizer, doc="See `GetControlSizer`");
175 %property(CurrentPage, GetCurrentPage, doc="See `GetCurrentPage`");
176 %property(FitToCurrentPage, GetFitToCurrentPage, SetFitToCurrentPage, doc="See `GetFitToCurrentPage` and `SetFitToCurrentPage`");
177 %property(ImageList, GetImageList, SetImageList, doc="See `GetImageList` and `SetImageList`");
178 %property(InternalBorder, GetInternalBorder, SetInternalBorder, doc="See `GetInternalBorder` and `SetInternalBorder`");
179 %property(Page, GetPage, doc="See `GetPage`");
180 %property(PageCount, GetPageCount, doc="See `GetPageCount`");
181 %property(PageImage, GetPageImage, SetPageImage, doc="See `GetPageImage` and `SetPageImage`");
182 %property(PageText, GetPageText, SetPageText, doc="See `GetPageText` and `SetPageText`");
183 %property(Selection, GetSelection, SetSelection, doc="See `GetSelection` and `SetSelection`");
189 class wxBookCtrlBaseEvent : public wxNotifyEvent
192 wxBookCtrlBaseEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
193 int nSel = -1, int nOldSel = -1);
195 // the currently selected page (-1 if none)
196 int GetSelection() const;
197 void SetSelection(int nSel);
198 // the page that was selected before the change (-1 if none)
199 int GetOldSelection() const;
200 void SetOldSelection(int nOldSel);
202 %property(OldSelection, GetOldSelection, SetOldSelection, doc="See `GetOldSelection` and `SetOldSelection`");
203 %property(Selection, GetSelection, SetSelection, doc="See `GetSelection` and `SetSelection`");
209 //---------------------------------------------------------------------------
222 // for backwards compatibility only
223 wxNB_HITTEST_NOWHERE,
225 wxNB_HITTEST_ONLABEL,
232 MustHaveApp(wxNotebook);
234 class wxNotebook : public wxBookCtrlBase {
236 %pythonAppend wxNotebook "self._setOORInfo(self)"
237 %pythonAppend wxNotebook() ""
238 %typemap(out) wxNotebook*; // turn off this typemap
240 wxNotebook(wxWindow *parent,
242 const wxPoint& pos = wxDefaultPosition,
243 const wxSize& size = wxDefaultSize,
245 const wxString& name = wxPyNotebookNameStr);
246 %RenameCtor(PreNotebook, wxNotebook());
248 // Turn it back on again
249 %typemap(out) wxNotebook* { $result = wxPyMake_wxObject($1, $owner); }
251 bool Create(wxWindow *parent,
253 const wxPoint& pos = wxDefaultPosition,
254 const wxSize& size = wxDefaultSize,
256 const wxString& name = wxPyNotebookNameStr);
259 // get the number of rows for a control with wxNB_MULTILINE style (not all
260 // versions support it - they will always return 1 then)
261 virtual int GetRowCount() const;
263 // set the padding between tabs (in pixels)
264 virtual void SetPadding(const wxSize& padding);
266 // set the size of the tabs for wxNB_FIXEDWIDTH controls
267 virtual void SetTabSize(const wxSize& sz);
269 // implement some base class functions
270 virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
272 // On platforms that support it, get the theme page background colour,
273 // else invalid colour
274 wxColour GetThemeBackgroundColour() const;
276 static wxVisualAttributes
277 GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
279 // returns false if the change to nPage is vetoed by the program
280 bool SendPageChangingEvent(int nPage);
282 // sends the event about page change from old to new (or GetSelection() if
284 void SendPageChangedEvent(int nPageOld, int nPageNew = -1);
286 %property(RowCount, GetRowCount, doc="See `GetRowCount`");
287 %property(ThemeBackgroundColour, GetThemeBackgroundColour, doc="See `GetThemeBackgroundColour`");
292 class wxNotebookEvent : public wxBookCtrlBaseEvent
295 wxNotebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
296 int nSel = -1, int nOldSel = -1);
300 // notebook control event types
301 %constant wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED;
302 %constant wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING;
307 EVT_NOTEBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, 1 )
308 EVT_NOTEBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, 1 )
313 %#----------------------------------------------------------------------------
315 class NotebookPage(wx.Panel):
317 There is an old (and apparently unsolvable) bug when placing a
318 window with a nonstandard background colour in a wx.Notebook on
319 wxGTK1, as the notbooks's background colour would always be used
320 when the window is refreshed. The solution is to place a panel in
321 the notbook and the coloured window on the panel, sized to cover
322 the panel. This simple class does that for you, just put an
323 instance of this in the notebook and make your regular window a
324 child of this one and it will handle the resize for you.
326 def __init__(self, parent, id=-1,
327 pos=wx.DefaultPosition, size=wx.DefaultSize,
328 style=wx.TAB_TRAVERSAL, name="panel"):
329 wx.Panel.__init__(self, parent, id, pos, size, style, name)
331 self.Bind(wx.EVT_SIZE, self.OnSize)
333 def OnSize(self, evt):
334 if self.child is None:
335 children = self.GetChildren()
337 self.child = children[0]
339 self.child.SetPosition((0,0))
340 self.child.SetSize(self.GetSize())
344 //---------------------------------------------------------------------------
350 // default alignment: left everywhere except Mac where it is top
353 // put the list control to the left/right/top/bottom of the page area
359 // the mask which can be used to extract the alignment from the style
360 wxLB_ALIGN_MASK = 0xf,
365 MustHaveApp(wxListbook);
367 // wxListCtrl and wxNotebook combination
368 class wxListbook : public wxBookCtrlBase
371 %pythonAppend wxListbook "self._setOORInfo(self)"
372 %pythonAppend wxListbook() ""
374 wxListbook(wxWindow *parent,
376 const wxPoint& pos = wxDefaultPosition,
377 const wxSize& size = wxDefaultSize,
379 const wxString& name = wxPyEmptyString);
380 %RenameCtor(PreListbook, wxListbook());
382 bool Create(wxWindow *parent,
384 const wxPoint& pos = wxDefaultPosition,
385 const wxSize& size = wxDefaultSize,
387 const wxString& name = wxPyEmptyString);
389 wxListView* GetListView();
390 %property(ListView, GetListView, doc="See `GetListView`");
395 class wxListbookEvent : public wxBookCtrlBaseEvent
398 wxListbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
399 int nSel = -1, int nOldSel = -1);
403 %constant wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED;
404 %constant wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING;
407 EVT_LISTBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED, 1 )
408 EVT_LISTBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, 1 )
412 //---------------------------------------------------------------------------
428 MustHaveApp(wxChoicebook);
430 class wxChoicebook : public wxBookCtrlBase
433 %pythonAppend wxChoicebook "self._setOORInfo(self)"
434 %pythonAppend wxChoicebook() ""
436 wxChoicebook(wxWindow *parent,
438 const wxPoint& pos = wxDefaultPosition,
439 const wxSize& size = wxDefaultSize,
441 const wxString& name = wxPyEmptyString);
442 %RenameCtor(PreChoicebook, wxChoicebook());
445 bool Create(wxWindow *parent,
447 const wxPoint& pos = wxDefaultPosition,
448 const wxSize& size = wxDefaultSize,
450 const wxString& name = wxPyEmptyString);
453 // returns the choice control
454 wxChoice* GetChoiceCtrl() const;
456 virtual bool DeleteAllPages();
458 %property(ChoiceCtrl, GetChoiceCtrl, doc="See `GetChoiceCtrl`");
463 class wxChoicebookEvent : public wxBookCtrlBaseEvent
466 wxChoicebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
467 int nSel = -1, int nOldSel = -1);
470 %constant wxEventType wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED;
471 %constant wxEventType wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING;
474 EVT_CHOICEBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED, 1 )
475 EVT_CHOICEBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, 1 )
478 //---------------------------------------------------------------------------
481 MustHaveApp(wxTreebook);
483 class wxTreebook : public wxBookCtrlBase
486 %pythonAppend wxTreebook "self._setOORInfo(self)"
487 %pythonAppend wxTreebook() ""
490 // This ctor creates the tree book control
491 wxTreebook(wxWindow *parent,
493 const wxPoint& pos = wxDefaultPosition,
494 const wxSize& size = wxDefaultSize,
495 long style = wxBK_DEFAULT,
496 const wxString& name = wxPyEmptyString);
498 %RenameCtor(PreTreebook, wxTreebook());
501 // Really creates the control
502 bool Create(wxWindow *parent,
504 const wxPoint& pos = wxDefaultPosition,
505 const wxSize& size = wxDefaultSize,
506 long style = wxBK_DEFAULT,
507 const wxString& name = wxPyEmptyString);
510 // Notice that page pointer may be NULL in which case the next non NULL
511 // page (usually the first child page of a node) is shown when this page is
514 // Inserts a new page just before the page indicated by page.
515 // The new page is placed on the same level as page.
516 virtual bool InsertPage(size_t pos,
518 const wxString& text,
520 int imageId = wxNOT_FOUND);
522 // Inserts a new sub-page to the end of children of the page at given pos.
523 virtual bool InsertSubPage(size_t pos,
525 const wxString& text,
527 int imageId = wxNOT_FOUND);
529 // Adds a new page at top level after all other pages.
530 virtual bool AddPage(wxWindow *page,
531 const wxString& text,
533 int imageId = wxNOT_FOUND);
535 // Adds a new child-page to the last top-level page inserted.
536 // Useful when constructing 1 level tree structure.
537 virtual bool AddSubPage(wxWindow *page,
538 const wxString& text,
540 int imageId = wxNOT_FOUND);
542 // Deletes the page and ALL its children. Could trigger page selection
543 // change in a case when selected page is removed. In that case its parent
544 // is selected (or the next page if no parent).
545 virtual bool DeletePage(size_t pos);
551 // Gets the page node state -- node is expanded or collapsed
552 virtual bool IsNodeExpanded(size_t pos) const;
554 // Expands or collapses the page node. Returns the previous state.
555 // May generate page changing events (if selected page
556 // is under the collapsed branch, then parent is autoselected).
557 virtual bool ExpandNode(size_t pos, bool expand = true);
559 // shortcut for ExpandNode(pos, false)
560 bool CollapseNode(size_t pos);
562 // get the parent page or wxNOT_FOUND if this is a top level page
563 int GetPageParent(size_t pos) const;
565 // the tree control we use for showing the pages index tree
566 wxPyTreeCtrl* GetTreeCtrl() const;
568 %property(TreeCtrl, GetTreeCtrl, doc="See `GetTreeCtrl`");
572 class wxTreebookEvent : public wxBookCtrlBaseEvent
575 wxTreebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
576 int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND);
579 %constant wxEventType wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED;
580 %constant wxEventType wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING;
581 %constant wxEventType wxEVT_COMMAND_TREEBOOK_NODE_COLLAPSED;
582 %constant wxEventType wxEVT_COMMAND_TREEBOOK_NODE_EXPANDED;
586 EVT_TREEBOOK_PAGE_CHANGED= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED, 1 )
587 EVT_TREEBOOK_PAGE_CHANGING= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING, 1)
588 EVT_TREEBOOK_NODE_COLLAPSED= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_NODE_COLLAPSED, 1 )
589 EVT_TREEBOOK_NODE_EXPANDED= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_NODE_EXPANDED, 1 )
592 //---------------------------------------------------------------------------
595 MustHaveApp(wxTreebook);
597 class wxToolbook : public wxBookCtrlBase
600 %pythonAppend wxToolbook "self._setOORInfo(self)"
601 %pythonAppend wxToolbook() ""
604 // This ctor creates the tree book control
605 wxToolbook(wxWindow *parent,
607 const wxPoint& pos = wxDefaultPosition,
608 const wxSize& size = wxDefaultSize,
609 long style = wxBK_DEFAULT,
610 const wxString& name = wxPyEmptyString);
612 %RenameCtor(PreToolbook, wxToolbook());
615 bool Create(wxWindow *parent,
617 const wxPoint& pos = wxDefaultPosition,
618 const wxSize& size = wxDefaultSize,
620 const wxString& name = wxEmptyString);
623 wxToolBarBase* GetToolBar() const;
625 // Not part of the wxBookctrl API, but must be called in OnIdle or
626 // by application to realize the toolbar and select the initial page.
629 %property(ToolBar, GetToolBar, doc="See `GetToolBar`");
633 class wxToolbookEvent : public wxBookCtrlBaseEvent
636 wxToolbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
637 int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND);
641 %constant wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED;
642 %constant wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING;
646 EVT_TOOLBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED, 1)
647 EVT_TOOLBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING, 1)
650 //---------------------------------------------------------------------------