diff --git a/wxPython/demo/Choicebook.py b/wxPython/demo/Choicebook.py
index de304a996e..4b92842e82 100644
--- a/wxPython/demo/Choicebook.py
+++ b/wxPython/demo/Choicebook.py
@@ -14,8 +14,7 @@ pageTexts = [ "Yet",
class TestCB(wx.Choicebook):
def __init__(self, parent, id, log):
- wx.Choicebook.__init__(self, parent, id
- )
+ wx.Choicebook.__init__(self, parent, id)
self.log = log
# Now make a bunch of panels for the choice book
diff --git a/wxPython/demo/Listbook.py b/wxPython/demo/Listbook.py
index 20115cbf60..7c92d02bd3 100644
--- a/wxPython/demo/Listbook.py
+++ b/wxPython/demo/Listbook.py
@@ -14,11 +14,11 @@ colourList = [ "Aquamarine", "Black", "Blue", "Blue Violet", "Brown", "Cadet Blu
class TestLB(wx.Listbook):
def __init__(self, parent, id, log):
wx.Listbook.__init__(self, parent, id, style=
- wx.LB_DEFAULT
- #wxLB_TOP
- #wxLB_BOTTOM
- #wxLB_LEFT
- #wxLB_RIGHT
+ wx.BK_DEFAULT
+ #wx.BK_TOP
+ #wx.BK_BOTTOM
+ #wx.BK_LEFT
+ #wx.BK_RIGHT
)
self.log = log
diff --git a/wxPython/demo/Main.py b/wxPython/demo/Main.py
index d0711e384f..9632a378fc 100644
--- a/wxPython/demo/Main.py
+++ b/wxPython/demo/Main.py
@@ -47,13 +47,8 @@ import images
_treeList = [
# new stuff
('Recent Additions/Updates', [
- 'FoldPanelBar',
- 'GIFAnimationCtrl',
- 'HyperLinkCtrl',
- 'MultiSplitterWindow',
- 'Throbber',
- 'GetMouseState',
- 'FloatCanvas',
+ 'Treebook',
+ 'Toolbook',
]),
# managed windows == things with a (optional) caption you can close
@@ -94,7 +89,6 @@ _treeList = [
'CheckBox',
'CheckListBox',
'Choice',
- 'Choicebook',
'ComboBox',
'Gauge',
'Grid',
@@ -103,9 +97,7 @@ _treeList = [
'ListCtrl',
'ListCtrl_virtual',
'ListCtrl_edit',
- 'Listbook',
'Menu',
- 'Notebook',
'PopupMenu',
'PopupWindow',
'RadioBox',
@@ -127,6 +119,14 @@ _treeList = [
'TreeCtrl',
'Validator',
]),
+
+ ('"Book" Controls', [
+ 'Choicebook',
+ 'Listbook',
+ 'Notebook',
+ 'Toolbook',
+ 'Treebook',
+ ]),
('Custom Controls', [
'AnalogClockWindow',
diff --git a/wxPython/demo/Notebook.py b/wxPython/demo/Notebook.py
index 3f369001f3..797f453e71 100644
--- a/wxPython/demo/Notebook.py
+++ b/wxPython/demo/Notebook.py
@@ -13,12 +13,13 @@ import images
class TestNB(wx.Notebook):
def __init__(self, parent, id, log):
- wx.Notebook.__init__(self, parent, id, size=(21,21),
- #style=
- #wx.NB_TOP # | wx.NB_MULTILINE
- #wx.NB_BOTTOM
- #wx.NB_LEFT
- #wx.NB_RIGHT
+ wx.Notebook.__init__(self, parent, id, size=(21,21), style=
+ wx.BK_DEFAULT
+ #wx.BK_TOP
+ #wx.BK_BOTTOM
+ #wx.BK_LEFT
+ #wx.BK_RIGHT
+ # | wx.NB_MULTILINE
)
self.log = log
diff --git a/wxPython/demo/Toolbook.py b/wxPython/demo/Toolbook.py
new file mode 100644
index 0000000000..1dd87fc269
--- /dev/null
+++ b/wxPython/demo/Toolbook.py
@@ -0,0 +1,109 @@
+
+import wx
+
+import ColorPanel
+import images
+
+colourList = [ "Aquamarine", "Grey", "Blue", "Blue Violet", "Brown", "Cadet Blue",
+ "Coral", "Wheat", #"Cyan", "Dark Grey", "Dark Green",
+ #"Steel Blue",
+ ]
+
+#----------------------------------------------------------------------------
+
+def getNextImageID(count):
+ imID = 0
+ while True:
+ yield imID
+ imID += 1
+ if imID == count:
+ imID = 0
+
+
+class TestTB(wx.Toolbook):
+ def __init__(self, parent, id, log):
+ wx.Toolbook.__init__(self, parent, id, style=
+ wx.BK_DEFAULT
+ #wx.BK_TOP
+ #wx.BK_BOTTOM
+ #wx.BK_LEFT
+ #wx.BK_RIGHT
+ )
+ self.log = log
+
+ # make an image list using the LBXX images
+ il = wx.ImageList(32, 32)
+ for x in range(12):
+ f = getattr(images, 'getLB%02dBitmap' % (x+1))
+ bmp = f()
+ il.Add(bmp)
+ self.AssignImageList(il)
+ imageIdGenerator = getNextImageID(il.GetImageCount())
+
+ # Now make a bunch of panels for the list book
+ first = True
+ for colour in colourList:
+ win = self.makeColorPanel(colour)
+ self.AddPage(win, colour, imageId=imageIdGenerator.next())
+ if first:
+ st = wx.StaticText(win.win, -1,
+ "You can put nearly any type of window here,\n"
+ "and the toolbar can be on either side of the Toolbook",
+ wx.Point(10, 10))
+ first = False
+
+ self.Bind(wx.EVT_TOOLBOOK_PAGE_CHANGED, self.OnPageChanged)
+ self.Bind(wx.EVT_TOOLBOOK_PAGE_CHANGING, self.OnPageChanging)
+
+
+ def makeColorPanel(self, color):
+ p = wx.Panel(self, -1)
+ win = ColorPanel.ColoredPanel(p, color)
+ p.win = win
+ def OnCPSize(evt, win=win):
+ win.SetSize(evt.GetSize())
+ p.Bind(wx.EVT_SIZE, OnCPSize)
+ return p
+
+
+ def OnPageChanged(self, event):
+ old = event.GetOldSelection()
+ new = event.GetSelection()
+ sel = self.GetSelection()
+ self.log.write('OnPageChanged, old:%d, new:%d, sel:%d\n' % (old, new, sel))
+ event.Skip()
+
+ def OnPageChanging(self, event):
+ old = event.GetOldSelection()
+ new = event.GetSelection()
+ sel = self.GetSelection()
+ self.log.write('OnPageChanging, old:%d, new:%d, sel:%d\n' % (old, new, sel))
+ event.Skip()
+
+#----------------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+ testWin = TestTB(nb, -1, log)
+ return testWin
+
+#----------------------------------------------------------------------------
+
+
+overview = """\
+
+wx.Toolbook
+
+This class is a control similar to a notebook control, but with a
+wx.Toolbar instead of a set of tabs.
+
+"""
+
+
+
+if __name__ == '__main__':
+ import sys,os
+ import run
+ run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
+
+
+
diff --git a/wxPython/demo/Treebook.py b/wxPython/demo/Treebook.py
new file mode 100644
index 0000000000..d69d41d5e5
--- /dev/null
+++ b/wxPython/demo/Treebook.py
@@ -0,0 +1,114 @@
+
+import wx
+
+import ColorPanel
+import images
+
+colourList = [ "Aquamarine", "Grey", "Blue", "Blue Violet", "Brown", "Cadet Blue",
+ "Coral", "Wheat", "Cyan", "Dark Grey", "Dark Green",
+ "Steel Blue",
+ ]
+
+#----------------------------------------------------------------------------
+
+def getNextImageID(count):
+ imID = 0
+ while True:
+ yield imID
+ imID += 1
+ if imID == count:
+ imID = 0
+
+
+class TestTB(wx.Treebook):
+ def __init__(self, parent, id, log):
+ wx.Treebook.__init__(self, parent, id, style=
+ wx.BK_DEFAULT
+ #wx.BK_TOP
+ #wx.BK_BOTTOM
+ #wx.BK_LEFT
+ #wx.BK_RIGHT
+ )
+ self.log = log
+
+ # make an image list using the LBXX images
+ il = wx.ImageList(32, 32)
+ for x in range(12):
+ f = getattr(images, 'getLB%02dBitmap' % (x+1))
+ bmp = f()
+ il.Add(bmp)
+ self.AssignImageList(il)
+ imageIdGenerator = getNextImageID(il.GetImageCount())
+
+ # Now make a bunch of panels for the list book
+ first = True
+ for colour in colourList:
+ win = self.makeColorPanel(colour)
+ self.AddPage(win, colour, imageId=imageIdGenerator.next())
+ if first:
+ st = wx.StaticText(win.win, -1,
+ "You can put nearly any type of window here,\n"
+ "and the wx.TreeCtrl can be on either side of the\n"
+ "Treebook",
+ wx.Point(10, 10))
+ first = False
+
+ win = self.makeColorPanel(colour)
+ st = wx.StaticText(win.win, -1, "this is a sub-page", (10,10))
+ self.AddSubPage(win, 'a sub-page', imageId=imageIdGenerator.next())
+
+ self.Bind(wx.EVT_TREEBOOK_PAGE_CHANGED, self.OnPageChanged)
+ self.Bind(wx.EVT_TREEBOOK_PAGE_CHANGING, self.OnPageChanging)
+
+
+ def makeColorPanel(self, color):
+ p = wx.Panel(self, -1)
+ win = ColorPanel.ColoredPanel(p, color)
+ p.win = win
+ def OnCPSize(evt, win=win):
+ win.SetSize(evt.GetSize())
+ p.Bind(wx.EVT_SIZE, OnCPSize)
+ return p
+
+
+ def OnPageChanged(self, event):
+ old = event.GetOldSelection()
+ new = event.GetSelection()
+ sel = self.GetSelection()
+ self.log.write('OnPageChanged, old:%d, new:%d, sel:%d\n' % (old, new, sel))
+ event.Skip()
+
+ def OnPageChanging(self, event):
+ old = event.GetOldSelection()
+ new = event.GetSelection()
+ sel = self.GetSelection()
+ self.log.write('OnPageChanging, old:%d, new:%d, sel:%d\n' % (old, new, sel))
+ event.Skip()
+
+#----------------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+ testWin = TestTB(nb, -1, log)
+ return testWin
+
+#----------------------------------------------------------------------------
+
+
+overview = """\
+
+wx.Treebook
+
+This class is a control similar to a notebook control, but with a
+wx.TreeCtrl instead of a set of tabs.
+
+"""
+
+
+
+if __name__ == '__main__':
+ import sys,os
+ import run
+ run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
+
+
+
diff --git a/wxPython/docs/CHANGES.txt b/wxPython/docs/CHANGES.txt
index 6dd2c9a49f..51214a4173 100644
--- a/wxPython/docs/CHANGES.txt
+++ b/wxPython/docs/CHANGES.txt
@@ -22,6 +22,9 @@ The following deprecated items have been removed:
wx.EventLoop is now implemented for wxMac.
+Added wxPython wrappers for the new wx.Treebook and wx.Toolbook
+classes.
+
diff --git a/wxPython/include/wx/wxPython/wxPython_int.h b/wxPython/include/wx/wxPython/wxPython_int.h
index fb611c3d7a..5cc05f5da5 100644
--- a/wxPython/include/wx/wxPython/wxPython_int.h
+++ b/wxPython/include/wx/wxPython/wxPython_int.h
@@ -64,7 +64,9 @@
#include
#include
#include
+#include
#include
+#include
#include
#include
#include
diff --git a/wxPython/src/__controls_rename.i b/wxPython/src/__controls_rename.i
index 45cbb2f0f0..4d6dd18ae8 100644
--- a/wxPython/src/__controls_rename.i
+++ b/wxPython/src/__controls_rename.i
@@ -105,6 +105,12 @@
%rename(SL_INVERSE) wxSL_INVERSE;
%rename(Slider) wxSlider;
%rename(ToggleButton) wxToggleButton;
+%rename(BK_DEFAULT) wxBK_DEFAULT;
+%rename(BK_TOP) wxBK_TOP;
+%rename(BK_BOTTOM) wxBK_BOTTOM;
+%rename(BK_LEFT) wxBK_LEFT;
+%rename(BK_RIGHT) wxBK_RIGHT;
+%rename(BK_ALIGN_MASK) wxBK_ALIGN_MASK;
%rename(BookCtrlBase) wxBookCtrlBase;
%rename(BookCtrlBaseEvent) wxBookCtrlBaseEvent;
%rename(NB_FIXEDWIDTH) wxNB_FIXEDWIDTH;
@@ -136,6 +142,10 @@
%rename(CHB_ALIGN_MASK) wxCHB_ALIGN_MASK;
%rename(Choicebook) wxChoicebook;
%rename(ChoicebookEvent) wxChoicebookEvent;
+%rename(Treebook) wxTreebook;
+%rename(TreebookEvent) wxTreebookEvent;
+%rename(Toolbook) wxToolbook;
+%rename(ToolbookEvent) wxToolbookEvent;
%rename(TOOL_STYLE_BUTTON) wxTOOL_STYLE_BUTTON;
%rename(TOOL_STYLE_SEPARATOR) wxTOOL_STYLE_SEPARATOR;
%rename(TOOL_STYLE_CONTROL) wxTOOL_STYLE_CONTROL;
diff --git a/wxPython/src/_notebook.i b/wxPython/src/_notebook.i
index 3f5e131b6f..8f2e0b4846 100644
--- a/wxPython/src/_notebook.i
+++ b/wxPython/src/_notebook.i
@@ -20,6 +20,17 @@ MAKE_CONST_WXSTRING(NotebookNameStr);
//---------------------------------------------------------------------------
%newgroup
+
+enum {
+ wxBK_DEFAULT,
+ wxBK_TOP,
+ wxBK_BOTTOM,
+ wxBK_LEFT,
+ wxBK_RIGHT,
+ wxBK_ALIGN_MASK
+};
+
+
// TODO: Virtualize this class so other book controls can be derived in Python
MustHaveApp(wxBookCtrlBase);
@@ -88,6 +99,17 @@ 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;
+
+ // set/get option to shrink to fit current page
+ void SetShrinkMode(bool shrink);
+ bool GetShrinkMode() const;
+
// remove one page from the control and delete it
virtual bool DeletePage(size_t n);
@@ -217,7 +239,7 @@ wx.NB_HITTEST flags.", "");
// 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);
};
@@ -321,9 +343,6 @@ public:
long style = 0,
const wxString& name = wxPyEmptyString);
- // returns True if we have wxLB_TOP or wxLB_BOTTOM style
- bool IsVertical() const;
-
wxListView* GetListView();
};
@@ -387,9 +406,6 @@ public:
const wxString& name = wxPyEmptyString);
- // returns true if we have wxCHB_TOP or wxCHB_BOTTOM style
- bool IsVertical() const;
-
// returns the choice control
wxChoice* GetChoiceCtrl() const;
@@ -415,34 +431,171 @@ public:
//---------------------------------------------------------------------------
%newgroup;
-// WXWIN_COMPATIBILITY_2_4
-#if 0
-class wxBookCtrlSizer: public wxSizer
+MustHaveApp(wxTreebook);
+
+class wxTreebook : public wxBookCtrlBase
{
public:
- %pythonAppend wxBookCtrlSizer "self._setOORInfo(self)"
+ %pythonAppend wxTreebook "self._setOORInfo(self)"
+ %pythonAppend wxTreebook() ""
- wxBookCtrlSizer( wxBookCtrlBase *nb );
- void RecalcSizes();
- wxSize CalcMin();
- wxBookCtrlBase *GetControl();
+ // 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.
+ %Rename(InsertSubPage,
+ virtual bool, AddSubPage(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);
+
+
+ // 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;
+
};
-class wxNotebookSizer: public wxSizer {
+class wxTreebookEvent : public wxBookCtrlBaseEvent
+{
public:
- %pythonAppend wxNotebookSizer "self._setOORInfo(self)"
-
- wxNotebookSizer( wxNotebook *nb );
-
- void RecalcSizes();
- wxSize CalcMin();
- wxNotebook *GetNotebook();
+ wxTreebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
+ int nSel = wxNOT_FOUND, int nOldSel = wxNOT_FOUND);
};
-%pythoncode { NotebookSizer.__init__ = wx._deprecated(NotebookSizer.__init__, "NotebookSizer is no longer needed.") }
-%pythoncode { BookCtrlSizer.__init__ = wx._deprecated(BookCtrlSizer.__init__, "BookCtrlSizer is no longer needed.") }
-#endif
+%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 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);
+
+
+ wxToolBarBase* GetToolBar() const;
+
+ // 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)
+}
//---------------------------------------------------------------------------
diff --git a/wxPython/wxPython/_controls.py b/wxPython/wxPython/_controls.py
index 36a950ec73..ddf343e7c0 100644
--- a/wxPython/wxPython/_controls.py
+++ b/wxPython/wxPython/_controls.py
@@ -209,6 +209,12 @@ wxToggleButtonPtr = wx._controls.ToggleButtonPtr
wxPreToggleButton = wx._controls.PreToggleButton
wxToggleButton_GetClassDefaultAttributes = wx._controls.ToggleButton_GetClassDefaultAttributes
wxNotebookNameStr = wx._controls.NotebookNameStr
+wxBK_DEFAULT = wx._controls.BK_DEFAULT
+wxBK_TOP = wx._controls.BK_TOP
+wxBK_BOTTOM = wx._controls.BK_BOTTOM
+wxBK_LEFT = wx._controls.BK_LEFT
+wxBK_RIGHT = wx._controls.BK_RIGHT
+wxBK_ALIGN_MASK = wx._controls.BK_ALIGN_MASK
wxBookCtrlBase = wx._controls.BookCtrlBase
wxBookCtrlBasePtr = wx._controls.BookCtrlBasePtr
wxBookCtrlBase_GetClassDefaultAttributes = wx._controls.BookCtrlBase_GetClassDefaultAttributes
@@ -259,6 +265,22 @@ wxChoicebookEvent = wx._controls.ChoicebookEvent
wxChoicebookEventPtr = wx._controls.ChoicebookEventPtr
wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED = wx._controls.wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED
wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING = wx._controls.wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING
+wxTreebook = wx._controls.Treebook
+wxTreebookPtr = wx._controls.TreebookPtr
+wxPreTreebook = wx._controls.PreTreebook
+wxTreebookEvent = wx._controls.TreebookEvent
+wxTreebookEventPtr = wx._controls.TreebookEventPtr
+wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED = wx._controls.wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED
+wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING = wx._controls.wxEVT_COMMAND_TREEBOOK_PAGE_CHANGING
+wxEVT_COMMAND_TREEBOOK_NODE_COLLAPSED = wx._controls.wxEVT_COMMAND_TREEBOOK_NODE_COLLAPSED
+wxEVT_COMMAND_TREEBOOK_NODE_EXPANDED = wx._controls.wxEVT_COMMAND_TREEBOOK_NODE_EXPANDED
+wxToolbook = wx._controls.Toolbook
+wxToolbookPtr = wx._controls.ToolbookPtr
+wxPreToolbook = wx._controls.PreToolbook
+wxToolbookEvent = wx._controls.ToolbookEvent
+wxToolbookEventPtr = wx._controls.ToolbookEventPtr
+wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED = wx._controls.wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGED
+wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING = wx._controls.wxEVT_COMMAND_TOOLBOOK_PAGE_CHANGING
wxTOOL_STYLE_BUTTON = wx._controls.TOOL_STYLE_BUTTON
wxTOOL_STYLE_SEPARATOR = wx._controls.TOOL_STYLE_SEPARATOR
wxTOOL_STYLE_CONTROL = wx._controls.TOOL_STYLE_CONTROL