]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_notebook.i
3 parameter wx.ImageList.Replace is now available everywhere
[wxWidgets.git] / wxPython / src / _notebook.i
index 0e14515827b7a69f872bbca5c291c0ac402cda49..8b557960b5ebfd7a8fea641c52082f648ba6158c 100644 (file)
 
 //---------------------------------------------------------------------------
 
-MAKE_CONST_WXSTRING(NOTEBOOK_NAME);
+MAKE_CONST_WXSTRING(NotebookNameStr);
 
 //---------------------------------------------------------------------------
 %newgroup
 
+
+enum {
+    wxBK_DEFAULT,
+    wxBK_TOP,
+    wxBK_BOTTOM,
+    wxBK_LEFT,
+    wxBK_RIGHT,
+    wxBK_ALIGN_MASK,
+    wxBK_BUTTONBAR
+};
+
+
 // TODO:  Virtualize this class so other book controls can be derived in Python
 
-MustHaveApp(wxBookCtrl);
+MustHaveApp(wxBookCtrlBase);
 
 //  Common base class for wxList/Tree/Notebook
-class wxBookCtrl : public wxControl
+class wxBookCtrlBase : public wxControl
 {
 public:
     // This is an ABC, it can't be constructed...
 
-//     wxBookCtrl(wxWindow *parent,
+//     wxBookCtrlBase(wxWindow *parent,
 //                wxWindowID id,
 //                const wxPoint& pos = wxDefaultPosition,
 //                const wxSize& size = wxDefaultSize,
 //                long style = 0,
 //                const wxString& name = wxPyEmptyString);
-//     %name(PreBookCtrl)wxBookCtrl();
+//     %RenameCtor(PreBookCtrlBase, wxBookCtrlBase());
 //     bool Create(wxWindow *parent,
 //                 wxWindowID id,
 //                 const wxPoint& pos = wxDefaultPosition,
@@ -51,6 +63,9 @@ public:
     // get the panel which represents the given page
     virtual wxWindow *GetPage(size_t n);
 
+    // get the current page or NULL if none
+    wxWindow* GetCurrentPage() const;
+
     // get the currently selected page or wxNOT_FOUND if none
     virtual int GetSelection() const/* = 0*/;
 
@@ -66,9 +81,9 @@ public:
     virtual void SetImageList(wxImageList *imageList);
 
     // as SetImageList() but we will delete the image list ourselves
-    %apply SWIGTYPE *DISOWN { wxImageList *imageList };
+    %disownarg( wxImageList *imageList );
     void AssignImageList(wxImageList *imageList);
-    %clear wxImageList *imageList;
+    %cleardisown( wxImageList *imageList );
 
     // get pointer (may be NULL) to the associated image list
     wxImageList* GetImageList() const;
@@ -85,6 +100,24 @@ public:
     virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const/* = 0*/;
 
 
+    // get/set size of area between book control area and page area
+    unsigned int GetInternalBorder() const;
+    void SetInternalBorder(unsigned int internalBorder);
+
+    // returns true if we have wxCHB_TOP or wxCHB_BOTTOM style
+    bool IsVertical() const;
+
+    // Sets/gets the margin around the controller
+    void SetControlMargin(int margin);
+    int GetControlMargin() const;
+
+    // set/get option to shrink to fit current page
+    void SetFitToCurrentPage(bool fit);
+    bool GetFitToCurrentPage() const;
+
+    // returns the sizer containing the control, if any
+    wxSizer* GetControlSizer() const;
+
 
     // remove one page from the control and delete it
     virtual bool DeletePage(size_t n);
@@ -124,10 +157,10 @@ public:
 
 
 
-class wxBookCtrlEvent : public wxNotifyEvent
+class wxBookCtrlBaseEvent : public wxNotifyEvent
 {
 public:
-    wxBookCtrlEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
+    wxBookCtrlBaseEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
                     int nSel = -1, int nOldSel = -1);
 
         // the currently selected page (-1 if none)
@@ -151,6 +184,7 @@ enum {
     wxNB_RIGHT,
     wxNB_BOTTOM,
     wxNB_MULTILINE,
+    wxNB_NOPAGETHEME,
 
     // hittest flags
     wxNB_HITTEST_NOWHERE = 1,   // not on tab
@@ -164,7 +198,7 @@ enum {
 
 MustHaveApp(wxNotebook);
 
-class wxNotebook : public wxBookCtrl {
+class wxNotebook : public wxBookCtrlBase {
 public:
     %pythonAppend wxNotebook         "self._setOORInfo(self)"
     %pythonAppend wxNotebook()       ""
@@ -175,8 +209,8 @@ public:
                const wxPoint& pos = wxDefaultPosition,
                const wxSize& size = wxDefaultSize,
                long style = 0,
-               const wxString& name = wxPyNOTEBOOK_NAME);
-    %name(PreNotebook)wxNotebook();
+               const wxString& name = wxPyNotebookNameStr);
+    %RenameCtor(PreNotebook, wxNotebook());
 
     // Turn it back on again
     %typemap(out) wxNotebook* { $result = wxPyMake_wxObject($1, $owner); }
@@ -186,7 +220,7 @@ public:
                const wxPoint& pos = wxDefaultPosition,
                const wxSize& size = wxDefaultSize,
                long style = 0,
-               const wxString& name = wxPyNOTEBOOK_NAME);
+               const wxString& name = wxPyNotebookNameStr);
 
 
     // get the number of rows for a control with wxNB_MULTILINE style (not all
@@ -210,10 +244,9 @@ wx.NB_HITTEST flags.", "");
     // implement some base class functions
     virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
 
-#ifdef __WXMSW__
-    // Windows only: attempts to apply the UX theme page background to this page
-  void ApplyThemeBackground(wxWindow* window, const wxColour& colour);
-#endif
+    // On platforms that support it, get the theme page background colour,
+    // else invalid colour
+    wxColour GetThemeBackgroundColour() const;
 
     static wxVisualAttributes
     GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
@@ -221,7 +254,7 @@ wx.NB_HITTEST flags.", "");
 
 
 
-class wxNotebookEvent : public wxBookCtrlEvent
+class wxNotebookEvent : public wxBookCtrlBaseEvent
 {
 public:
     wxNotebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
@@ -247,8 +280,8 @@ public:
 class NotebookPage(wx.Panel):
     """
     There is an old (and apparently unsolvable) bug when placing a
-    window with a nonstandard background colour in a wxNotebook on
-    wxGTK, as the notbooks's background colour would always be used
+    window with a nonstandard background colour in a wx.Notebook on
+    wxGTK1, as the notbooks's background colour would always be used
     when the window is refreshed.  The solution is to place a panel in
     the notbook and the coloured window on the panel, sized to cover
     the panel.  This simple class does that for you, just put an
@@ -260,7 +293,7 @@ class NotebookPage(wx.Panel):
                  style=wx.TAB_TRAVERSAL, name="panel"):
         wx.Panel.__init__(self, parent, id, pos, size, style, name)
         self.child = None
-        EVT_SIZE(self, self.OnSize)
+        self.Bind(wx.EVT_SIZE, self.OnSize)
 
     def OnSize(self, evt):
         if self.child is None:
@@ -297,7 +330,7 @@ enum
 MustHaveApp(wxListbook);
 
 //  wxListCtrl and wxNotebook combination
-class wxListbook : public wxBookCtrl
+class wxListbook : public wxBookCtrlBase
 {
 public:
     %pythonAppend wxListbook         "self._setOORInfo(self)"
@@ -309,7 +342,7 @@ public:
                const wxSize& size = wxDefaultSize,
                long style = 0,
                const wxString& name = wxPyEmptyString);
-    %name(PreListbook)wxListbook();
+    %RenameCtor(PreListbook, wxListbook());
 
     bool Create(wxWindow *parent,
                 wxWindowID id=-1,
@@ -318,15 +351,12 @@ public:
                 long style = 0,
                 const wxString& name = wxPyEmptyString);
 
-    // returns True if we have wxLB_TOP or wxLB_BOTTOM style
-    bool IsVertical() const;
-
     wxListView* GetListView();
 };
 
 
 
-class wxListbookEvent : public wxBookCtrlEvent
+class wxListbookEvent : public wxBookCtrlBaseEvent
 {
 public:
     wxListbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
@@ -361,7 +391,7 @@ enum {
 
 MustHaveApp(wxChoicebook);
 
-class wxChoicebook : public wxBookCtrl
+class wxChoicebook : public wxBookCtrlBase
 {
 public:
     %pythonAppend wxChoicebook         "self._setOORInfo(self)"
@@ -373,7 +403,7 @@ public:
                  const wxSize& size = wxDefaultSize,
                  long style = 0,
                  const wxString& name = wxPyEmptyString);
-    %name(PreChoicebook)wxChoicebook();
+    %RenameCtor(PreChoicebook, wxChoicebook());
 
     // quasi ctor
     bool Create(wxWindow *parent,
@@ -384,14 +414,14 @@ public:
                 const wxString& name = wxPyEmptyString);
 
 
-    // returns true if we have wxCHB_TOP or wxCHB_BOTTOM style
-    bool IsVertical() const { return HasFlag(wxCHB_BOTTOM | wxCHB_TOP); }
+    // returns the choice control
+    wxChoice* GetChoiceCtrl() const;
 
     virtual bool DeleteAllPages();
 };
 
 
-class wxChoicebookEvent : public wxBookCtrlEvent
+class wxChoicebookEvent : public wxBookCtrlBaseEvent
 {
 public:
     wxChoicebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
@@ -409,29 +439,170 @@ public:
 //---------------------------------------------------------------------------
 %newgroup;
 
+MustHaveApp(wxTreebook);
 
-class wxBookCtrlSizer: public wxSizer
+class wxTreebook : public wxBookCtrlBase
 {
 public:
-    %pythonAppend wxBookCtrlSizer "self._setOORInfo(self)"
+    %pythonAppend wxTreebook         "self._setOORInfo(self)"
+    %pythonAppend wxTreebook()       ""
+
+
+    // This ctor creates the tree book control
+    wxTreebook(wxWindow *parent,
+               wxWindowID id,
+               const wxPoint& pos = wxDefaultPosition,
+               const wxSize& size = wxDefaultSize,
+               long style = wxBK_DEFAULT,
+               const wxString& name = wxPyEmptyString);
+
+    %RenameCtor(PreTreebook, wxTreebook());
+
+
+    // Really creates the control
+    bool Create(wxWindow *parent,
+                wxWindowID id,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = wxBK_DEFAULT,
+                const wxString& name = wxPyEmptyString);
+
+
+    // Notice that page pointer may be NULL in which case the next non NULL
+    // page (usually the first child page of a node) is shown when this page is
+    // selected
+
+    // Inserts a new page just before the page indicated by page.
+    // The new page is placed on the same level as page.
+    virtual bool InsertPage(size_t pos,
+                            wxWindow *page,
+                            const wxString& text,
+                            bool select = false,
+                            int imageId = wxNOT_FOUND);
+
+    // Inserts a new sub-page to the end of children of the page at given pos.
+    virtual bool InsertSubPage(size_t pos,
+                               wxWindow *page,
+                               const wxString& text,
+                               bool select = false,
+                               int imageId = wxNOT_FOUND);
+
+    // Adds a new page at top level after all other pages.
+    virtual bool AddPage(wxWindow *page,
+                         const wxString& text,
+                         bool select = false,
+                         int imageId = wxNOT_FOUND);
+
+    // Adds a new child-page to the last top-level page inserted.
+    // Useful when constructing 1 level tree structure.
+    virtual bool AddSubPage(wxWindow *page,
+                            const wxString& text,
+                            bool select = false,
+                            int imageId = wxNOT_FOUND);
+
+    // Deletes the page and ALL its children. Could trigger page selection
+    // change in a case when selected page is removed. In that case its parent
+    // is selected (or the next page if no parent).
+    virtual bool DeletePage(size_t pos);
+
 
-    wxBookCtrlSizer( wxBookCtrl *nb );
+    // Tree operations
+    // ---------------
+
+    // Gets the page node state -- node is expanded or collapsed
+    virtual bool IsNodeExpanded(size_t pos) const;
+
+    // Expands or collapses the page node. Returns the previous state.
+    // May generate page changing events (if selected page
+    // is under the collapsed branch, then parent is autoselected).
+    virtual bool ExpandNode(size_t pos, bool expand = true);
+
+    // shortcut for ExpandNode(pos, false)
+    bool CollapseNode(size_t pos);
+
+    // get the parent page or wxNOT_FOUND if this is a top level page
+    int GetPageParent(size_t pos) const;
+
+    // the tree control we use for showing the pages index tree
+    wxTreeCtrl* GetTreeCtrl() const;
 
-    void RecalcSizes();
-    wxSize CalcMin();
-    wxBookCtrl *GetControl();
 };
 
 
-class wxNotebookSizer: public wxSizer {
+class wxTreebookEvent : public wxBookCtrlBaseEvent
+{
+public:
+    wxTreebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
+                    int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND);
+};
+
+%constant wxEventType wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED;
+%constant wxEventType wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING;
+%constant wxEventType wxEVT_COMMAND_TREEBOOK_NODE_COLLAPSED;
+%constant wxEventType wxEVT_COMMAND_TREEBOOK_NODE_EXPANDED;
+
+
+%pythoncode {
+    EVT_TREEBOOK_PAGE_CHANGED= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED, 1 )
+    EVT_TREEBOOK_PAGE_CHANGING= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING, 1)
+    EVT_TREEBOOK_NODE_COLLAPSED= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_NODE_COLLAPSED, 1 )
+    EVT_TREEBOOK_NODE_EXPANDED= wx.PyEventBinder( wxEVT_COMMAND_TREEBOOK_NODE_EXPANDED, 1 )
+}
+
+//---------------------------------------------------------------------------
+%newgroup;
+
+MustHaveApp(wxTreebook);
+
+class wxToolbook : public wxBookCtrlBase
+{
 public:
-    %pythonAppend wxNotebookSizer "self._setOORInfo(self)"
+    %pythonAppend wxToolbook         "self._setOORInfo(self)"
+    %pythonAppend wxToolbook()       ""
+
+
+    // This ctor creates the tree book control
+    wxToolbook(wxWindow *parent,
+               wxWindowID id,
+               const wxPoint& pos = wxDefaultPosition,
+               const wxSize& size = wxDefaultSize,
+               long style = wxBK_DEFAULT,
+               const wxString& name = wxPyEmptyString);
+
+    %RenameCtor(PreToolbook, wxToolbook());
+
+    // quasi ctor
+    bool Create(wxWindow *parent,
+                wxWindowID id,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = 0,
+                const wxString& name = wxEmptyString);
+
 
-    wxNotebookSizer( wxNotebook *nb );
+    wxToolBarBase* GetToolBar() const;
 
-    void RecalcSizes();
-    wxSize CalcMin();
-    wxNotebook *GetNotebook();
+    // Not part of the wxBookctrl API, but must be called in OnIdle or
+    // by application to realize the toolbar and select the initial page.
+    void Realize();
 };
 
+
+class wxToolbookEvent : public wxBookCtrlBaseEvent
+{
+public:
+    wxToolbookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
+                    int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND);
+};
+
+
+%constant wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED;
+%constant wxEventType wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING;
+
+
+%pythoncode {
+    EVT_TOOLBOOK_PAGE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED, 1)
+    EVT_TOOLBOOK_PAGE_CHANGING = wx.PyEventBinder( wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING, 1)
+}
+
 //---------------------------------------------------------------------------