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 //---------------------------------------------------------------------------