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
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
_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
'CheckBox',
'CheckListBox',
'Choice',
- 'Choicebook',
'ComboBox',
'Gauge',
'Grid',
'ListCtrl',
'ListCtrl_virtual',
'ListCtrl_edit',
- 'Listbook',
'Menu',
- 'Notebook',
'PopupMenu',
'PopupWindow',
'RadioBox',
'TreeCtrl',
'Validator',
]),
+
+ ('"Book" Controls', [
+ 'Choicebook',
+ 'Listbook',
+ 'Notebook',
+ 'Toolbook',
+ 'Treebook',
+ ]),
('Custom Controls', [
'AnalogClockWindow',
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
--- /dev/null
+
+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 = """\
+<html><body>
+<h2>wx.Toolbook</h2>
+<p>
+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:])
+
+
+
--- /dev/null
+
+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 = """\
+<html><body>
+<h2>wx.Treebook</h2>
+<p>
+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:])
+
+
+
wx.EventLoop is now implemented for wxMac.
+Added wxPython wrappers for the new wx.Treebook and wx.Toolbook
+classes.
+
#include <wx/taskbar.h>
#include <wx/tglbtn.h>
#include <wx/tipwin.h>
+#include <wx/toolbook.h>
#include <wx/tooltip.h>
+#include <wx/treebook.h>
#include <wx/vlbox.h>
#include <wx/vscroll.h>
#include <wx/dateevt.h>
%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;
%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;
//---------------------------------------------------------------------------
%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);
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);
// 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);
};
long style = 0,
const wxString& name = wxPyEmptyString);
- // returns True if we have wxLB_TOP or wxLB_BOTTOM style
- bool IsVertical() const;
-
wxListView* GetListView();
};
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;
//---------------------------------------------------------------------------
%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() ""
+
+
+ // 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);
- wxBookCtrlSizer( wxBookCtrlBase *nb );
- void RecalcSizes();
- wxSize CalcMin();
- wxBookCtrlBase *GetControl();
+ // 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 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;
-class wxNotebookSizer: public wxSizer {
+
+%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 );
- void RecalcSizes();
- wxSize CalcMin();
- wxNotebook *GetNotebook();
+ 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);
};
-%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_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)
+}
//---------------------------------------------------------------------------
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
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