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(NOTEBOOK_NAME);
 
  20 //---------------------------------------------------------------------------
 
  23 // TODO:  Virtualize this class so other book controls can be derived in Python
 
  25 //  Common base class for wxList/Tree/Notebook
 
  26 class wxBookCtrl : public wxControl
 
  29     // This is an ABC, it can't be constructed...
 
  31 //     wxBookCtrl(wxWindow *parent,
 
  33 //                const wxPoint& pos = wxDefaultPosition,
 
  34 //                const wxSize& size = wxDefaultSize,
 
  36 //                const wxString& name = wxPyEmptyString);
 
  37 //     %name(PreBookCtrl)wxBookCtrl();
 
  38 //     bool Create(wxWindow *parent,
 
  40 //                 const wxPoint& pos = wxDefaultPosition,
 
  41 //                 const wxSize& size = wxDefaultSize,
 
  43 //                 const wxString& name = wxPyEmptyString);
 
  46     // get number of pages in the dialog
 
  47     virtual size_t GetPageCount() const;
 
  49     // get the panel which represents the given page
 
  50     virtual wxWindow *GetPage(size_t n);
 
  52     // get the currently selected page or wxNOT_FOUND if none
 
  53     virtual int GetSelection() const/* = 0*/;
 
  55     // set/get the title of a page
 
  56     virtual bool SetPageText(size_t n, const wxString& strText)/* = 0*/;
 
  57     virtual wxString GetPageText(size_t n) const/* = 0*/;
 
  60     // image list stuff: each page may have an image associated with it (all
 
  61     // images belong to the same image list)
 
  63     // sets the image list to use, it is *not* deleted by the control
 
  64     virtual void SetImageList(wxImageList *imageList);
 
  66     // as SetImageList() but we will delete the image list ourselves
 
  67     %apply SWIGTYPE *DISOWN { wxImageList *imageList };
 
  68     void AssignImageList(wxImageList *imageList);
 
  69     %clear wxImageList *imageList;
 
  71     // get pointer (may be NULL) to the associated image list
 
  72     wxImageList* GetImageList() const;
 
  74     // sets/returns item's image index in the current image list
 
  75     virtual int GetPageImage(size_t n) const/* = 0*/;
 
  76     virtual bool SetPageImage(size_t n, int imageId)/* = 0*/;
 
  79     // resize the notebook so that all pages will have the specified size
 
  80     virtual void SetPageSize(const wxSize& size);
 
  82     // calculate the size of the control from the size of its page
 
  83     virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const/* = 0*/;
 
  87     // remove one page from the control and delete it
 
  88     virtual bool DeletePage(size_t n);
 
  90     // remove one page from the notebook, without deleting it
 
  91     virtual bool RemovePage(size_t n);
 
  93     // remove all pages and delete them
 
  94     virtual bool DeleteAllPages();
 
  96     // adds a new page to the control
 
  97     virtual bool AddPage(wxWindow *page,
 
 102     // the same as AddPage(), but adds the page at the specified position
 
 103     virtual bool InsertPage(size_t n,
 
 105                             const wxString& text,
 
 107                             int imageId = -1)/* = 0*/;
 
 109     // set the currently selected page, return the index of the previously
 
 110     // selected one (or -1 on error)
 
 112     // NB: this function will _not_ generate PAGE_CHANGING/ED events
 
 113     virtual int SetSelection(size_t n)/* = 0*/;
 
 116     // cycle thru the pages
 
 117     void AdvanceSelection(bool forward = True);
 
 122 class wxBookCtrlEvent : public wxNotifyEvent
 
 125     wxBookCtrlEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
 
 126                     int nSel = -1, int nOldSel = -1);
 
 128         // the currently selected page (-1 if none)
 
 129     int GetSelection() const;
 
 130     void SetSelection(int nSel);
 
 131         // the page that was selected before the change (-1 if none)
 
 132     int GetOldSelection() const;
 
 133     void SetOldSelection(int nOldSel);
 
 138 //---------------------------------------------------------------------------
 
 151     wxNB_HITTEST_NOWHERE = 1,   // not on tab
 
 152     wxNB_HITTEST_ONICON  = 2,   // on icon
 
 153     wxNB_HITTEST_ONLABEL = 4,   // on label
 
 154     wxNB_HITTEST_ONITEM  = wxNB_HITTEST_ONICON | wxNB_HITTEST_ONLABEL,
 
 160 class wxNotebook : public wxBookCtrl {
 
 162     %pythonAppend wxNotebook         "self._setOORInfo(self)"
 
 163     %pythonAppend wxNotebook()       ""
 
 165     wxNotebook(wxWindow *parent,
 
 167                const wxPoint& pos = wxDefaultPosition,
 
 168                const wxSize& size = wxDefaultSize,
 
 170                const wxString& name = wxPyNOTEBOOK_NAME);
 
 171     %name(PreNotebook)wxNotebook();
 
 173     bool Create(wxWindow *parent,
 
 175                const wxPoint& pos = wxDefaultPosition,
 
 176                const wxSize& size = wxDefaultSize,
 
 178                const wxString& name = wxPyNOTEBOOK_NAME);
 
 181     // get the number of rows for a control with wxNB_MULTILINE style (not all
 
 182     // versions support it - they will always return 1 then)
 
 183     virtual int GetRowCount() const;
 
 185     // set the padding between tabs (in pixels)
 
 186     virtual void SetPadding(const wxSize& padding);
 
 188     // set the size of the tabs for wxNB_FIXEDWIDTH controls
 
 189     virtual void SetTabSize(const wxSize& sz);
 
 191     // hit test, returns which tab is hit and, optionally, where (icon, label)
 
 192     // (not implemented on all platforms)
 
 194         virtual int, HitTest(const wxPoint& pt, long* OUTPUT) const,
 
 195         "HitTest(Point pt) -> (tab, where)",
 
 196         "Returns the tab which is hit, and flags indicating where using wx.NB_HITTEST_ flags.");
 
 198     // implement some base class functions
 
 199     virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
 
 202     // Windows only: attempts to apply the UX theme page background to this page
 
 203   void ApplyThemeBackground(wxWindow* window, const wxColour& colour);
 
 209 class wxNotebookEvent : public wxBookCtrlEvent
 
 212     wxNotebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
 
 213                     int nSel = -1, int nOldSel = -1);
 
 217 // notebook control event types
 
 218 %constant wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED;
 
 219 %constant wxEventType wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING;
 
 224     EVT_NOTEBOOK_PAGE_CHANGED  = wx.PyEventBinder( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, 1 )
 
 225     EVT_NOTEBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, 1 )
 
 230 %#----------------------------------------------------------------------------
 
 232 class NotebookPage(wx.Panel):
 
 234     There is an old (and apparently unsolvable) bug when placing a
 
 235     window with a nonstandard background colour in a wxNotebook on
 
 236     wxGTK, as the notbooks's background colour would always be used
 
 237     when the window is refreshed.  The solution is to place a panel in
 
 238     the notbook and the coloured window on the panel, sized to cover
 
 239     the panel.  This simple class does that for you, just put an
 
 240     instance of this in the notebook and make your regular window a
 
 241     child of this one and it will handle the resize for you.
 
 243     def __init__(self, parent, id=-1,
 
 244                  pos=wx.DefaultPosition, size=wx.DefaultSize,
 
 245                  style=wx.TAB_TRAVERSAL, name="panel"):
 
 246         wx.Panel.__init__(self, parent, id, pos, size, style, name)
 
 248         EVT_SIZE(self, self.OnSize)
 
 250     def OnSize(self, evt):
 
 251         if self.child is None:
 
 252             children = self.GetChildren()
 
 254                 self.child = children[0]
 
 256             self.child.SetPosition((0,0))
 
 257             self.child.SetSize(self.GetSize())
 
 261 //---------------------------------------------------------------------------
 
 267     // default alignment: left everywhere except Mac where it is top
 
 270     // put the list control to the left/right/top/bottom of the page area
 
 276     // the mask which can be used to extract the alignment from the style
 
 277     wxLB_ALIGN_MASK = 0xf,
 
 282 //  wxListCtrl and wxNotebook combination
 
 283 class wxListbook : public wxBookCtrl
 
 286     %pythonAppend wxListbook         "self._setOORInfo(self)"
 
 287     %pythonAppend wxListbook()       ""
 
 289     wxListbook(wxWindow *parent,
 
 291                const wxPoint& pos = wxDefaultPosition,
 
 292                const wxSize& size = wxDefaultSize,
 
 294                const wxString& name = wxPyEmptyString);
 
 295     %name(PreListbook)wxListbook();
 
 297     bool Create(wxWindow *parent,
 
 299                 const wxPoint& pos = wxDefaultPosition,
 
 300                 const wxSize& size = wxDefaultSize,
 
 302                 const wxString& name = wxPyEmptyString);
 
 304     // returns True if we have wxLB_TOP or wxLB_BOTTOM style
 
 305     bool IsVertical() const;
 
 311 class wxListbookEvent : public wxBookCtrlEvent
 
 314     wxListbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
 
 315                     int nSel = -1, int nOldSel = -1);
 
 319 %constant wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED;
 
 320 %constant wxEventType wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING;
 
 323     EVT_LISTBOOK_PAGE_CHANGED  = wx.PyEventBinder( wxEVT_COMMAND_LISTBOOK_PAGE_CHANGED, 1 )
 
 324     EVT_LISTBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_LISTBOOK_PAGE_CHANGING, 1 )
 
 328 //---------------------------------------------------------------------------
 
 332 class wxBookCtrlSizer: public wxSizer
 
 335     %pythonAppend wxBookCtrlSizer "self._setOORInfo(self)"
 
 337     wxBookCtrlSizer( wxBookCtrl *nb );
 
 341     wxBookCtrl *GetControl();
 
 345 class wxNotebookSizer: public wxSizer {
 
 347     %pythonAppend wxNotebookSizer "self._setOORInfo(self)"
 
 349     wxNotebookSizer( wxNotebook *nb );
 
 353     wxNotebook *GetNotebook();
 
 356 //---------------------------------------------------------------------------