Added wxPython wrappers for the new wx.Treebook and wx.Toolbook

classes.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37256 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2006-02-01 23:46:43 +00:00
parent 917cd965fa
commit 6aabc8da32
11 changed files with 462 additions and 49 deletions

View File

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

View File

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

View File

@@ -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',
@@ -128,6 +120,14 @@ _treeList = [
'Validator',
]),
('"Book" Controls', [
'Choicebook',
'Listbook',
'Notebook',
'Toolbook',
'Treebook',
]),
('Custom Controls', [
'AnalogClockWindow',
'ColourSelect',

View File

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

109
wxPython/demo/Toolbook.py Normal file
View File

@@ -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 = """\
<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:])

114
wxPython/demo/Treebook.py Normal file
View File

@@ -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 = """\
<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:])

View File

@@ -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.

View File

@@ -64,7 +64,9 @@
#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>

View File

@@ -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;

View File

@@ -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);
@@ -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)
}
//---------------------------------------------------------------------------

View File

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