--- /dev/null
+
+import wx
+
+#----------------------------------------------------------------------
+
+label1 = "Click here to show pane"
+label2 = "Click here to hide pane"
+
+btnlbl1 = "call Expand(True)"
+btnlbl2 = "call Expand(False)"
+
+
+class TestPanel(wx.Panel):
+ def __init__(self, parent, log):
+ self.log = log
+ wx.Panel.__init__(self, parent, -1)
+
+ title = wx.StaticText(self, label="wx.CollapsiblePane")
+ title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
+ title.SetForegroundColour("blue")
+
+ self.cp = cp = wx.CollapsiblePane(self, label=label1)
+ self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged, cp)
+ self.MakePaneContent(cp.GetPane())
+
+ sizer = wx.BoxSizer(wx.VERTICAL)
+ self.SetSizer(sizer)
+ sizer.Add(title, 0, wx.ALL, 25)
+ sizer.Add(cp, 0, wx.RIGHT|wx.LEFT|wx.EXPAND, 25)
+
+ self.btn = btn = wx.Button(self, label=btnlbl1)
+ self.Bind(wx.EVT_BUTTON, self.OnToggle, btn)
+ sizer.Add(btn, 0, wx.ALL, 25)
+
+
+ def OnToggle(self, evt):
+ self.cp.Collapse(self.cp.IsExpanded())
+ self.OnPaneChanged()
+
+
+ def OnPaneChanged(self, evt=None):
+ self.log.write('wx.EVT_COLLAPSIBLEPANE_CHANGED')
+ self.Layout()
+ if self.cp.IsExpanded():
+ self.cp.SetLabel(label2)
+ self.btn.SetLabel(btnlbl2)
+ else:
+ self.cp.SetLabel(label1)
+ self.btn.SetLabel(btnlbl1)
+ self.btn.SetInitialSize()
+
+
+ def MakePaneContent(self, pane):
+ '''Just make a few controls to put on the collapsible pane'''
+ nameLbl = wx.StaticText(pane, -1, "Name:")
+ name = wx.TextCtrl(pane, -1, "");
+
+ addrLbl = wx.StaticText(pane, -1, "Address:")
+ addr1 = wx.TextCtrl(pane, -1, "");
+ addr2 = wx.TextCtrl(pane, -1, "");
+
+ cstLbl = wx.StaticText(pane, -1, "City, State, Zip:")
+ city = wx.TextCtrl(pane, -1, "", size=(150,-1));
+ state = wx.TextCtrl(pane, -1, "", size=(50,-1));
+ zip = wx.TextCtrl(pane, -1, "", size=(70,-1));
+
+ addrSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
+ addrSizer.Add((10,10))
+ addrSizer.Add((10,10))
+ addrSizer.AddGrowableCol(1)
+ addrSizer.Add(nameLbl, 0,
+ wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
+ addrSizer.Add(name, 0, wx.EXPAND)
+ addrSizer.Add(addrLbl, 0,
+ wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
+ addrSizer.Add(addr1, 0, wx.EXPAND)
+ addrSizer.Add((10,10))
+ addrSizer.Add(addr2, 0, wx.EXPAND)
+
+ addrSizer.Add(cstLbl, 0,
+ wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)
+
+ cstSizer = wx.BoxSizer(wx.HORIZONTAL)
+ cstSizer.Add(city, 1)
+ cstSizer.Add(state, 0, wx.LEFT|wx.RIGHT, 5)
+ cstSizer.Add(zip)
+ addrSizer.Add(cstSizer, 0, wx.EXPAND)
+
+ pane.SetSizer(addrSizer)
+
+
+
+#----------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+ win = TestPanel(nb, log)
+ return win
+
+#----------------------------------------------------------------------
+
+
+
+overview = """<html><body>
+<h2><center>wx.CollapsiblePane</center></h2>
+
+A collapsable panel is a container with an embedded button-like
+control which can be used by the user to collapse or expand the pane's
+contents.
+
+</body></html>
+"""
+
+
+
+if __name__ == '__main__':
+ import sys,os
+ import run
+ run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
+
'AnimateCtrl',
'AlphaDrawing',
'GraphicsContext',
+ 'CollapsiblePane',
]),
# managed windows == things with a (optional) caption you can close
'Calendar',
'CalendarCtrl',
'CheckListCtrlMixin',
+ 'CollapsiblePane',
'ContextHelp',
'DatePickerCtrl',
'DynamicSashWindow',
# Create a TreeCtrl
tID = wx.NewId()
+ leftPanel = wx.Panel(splitter)
+
+ self.filter = wx.TextCtrl(leftPanel)
+ self.filter.Bind(wx.EVT_TEXT, self.RecreateTree)
+
self.treeMap = {}
- self.tree = wx.TreeCtrl(splitter, tID, style =
+ self.tree = wx.TreeCtrl(leftPanel, tID, style =
wx.TR_DEFAULT_STYLE #| wx.TR_HAS_VARIABLE_ROW_HEIGHT
)
- root = self.tree.AddRoot("wxPython Overview")
- firstChild = None
- for item in _treeList:
- child = self.tree.AppendItem(root, item[0])
- if not firstChild: firstChild = child
- for childItem in item[1]:
- theDemo = self.tree.AppendItem(child, childItem)
- self.treeMap[childItem] = theDemo
-
- self.tree.Expand(root)
- self.tree.Expand(firstChild)
+ self.root = self.tree.AddRoot("wxPython Overview")
+ self.RecreateTree()
self.tree.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded, id=tID)
self.tree.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, id=tID)
self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=tID)
self.tree.Bind(wx.EVT_LEFT_DOWN, self.OnTreeLeftDown)
-
+
# Set up a wx.html.HtmlWindow on the Overview Notebook page
# we put it in a panel first because there seems to be a
# refresh bug of some sort (wxGTK) when it is directly in
# add the windows to the splitter and split it.
splitter2.SplitHorizontally(self.nb, self.log, -160)
- splitter.SplitVertically(self.tree, splitter2, 200)
+ leftBox = wx.BoxSizer(wx.VERTICAL)
+ leftBox.Add(self.tree, 1, wx.EXPAND)
+ leftBox.Add(wx.StaticText(leftPanel, label = "Filter Demos:"), 0, wx.TOP|wx.LEFT, 5)
+ leftBox.Add(self.filter, 0, wx.EXPAND|wx.ALL, 5)
+ leftPanel.SetSizer(leftBox)
+ splitter.SplitVertically(leftPanel, splitter2, 220)
splitter.SetMinimumPaneSize(120)
splitter2.SetMinimumPaneSize(60)
# select initial items
self.nb.SetSelection(0)
- self.tree.SelectItem(root)
+ self.tree.SelectItem(self.root)
# Load 'Main' module
self.LoadDemo(self.overviewText)
#---------------------------------------------
+
+ def RecreateTree(self, evt=None):
+ self.tree.DeleteAllItems()
+ self.root = self.tree.AddRoot("wxPython Overview")
+ firstChild = None
+ filter = self.filter.GetValue()
+ for category, items in _treeList:
+ if filter:
+ items = [item for item in items if filter in item.lower()]
+ if items:
+ child = self.tree.AppendItem(self.root, category)
+ if not firstChild: firstChild = child
+ for childItem in items:
+ theDemo = self.tree.AppendItem(child, childItem)
+ self.treeMap[childItem] = theDemo
+
+ self.tree.Expand(self.root)
+ if firstChild:
+ self.tree.Expand(firstChild)
+
+
def WriteText(self, text):
if text[-1:] == '\n':
text = text[:-1]
=====================================================================
+2.8.0.0
+-------
+*
+
+Lots of fixes and updates to AUI classes.
+
+Added wx.CollapsiblePane.
+
+
+
+
2.7.2.0
-------
* 7-Nov-2006
# Extension for the GDI module
swig_sources = run_swig(['gdi.i'], 'src', GENDIR, PKGDIR,
USE_SWIG, swig_force, swig_args, swig_deps +
- ['src/__gdi_rename.i',
- 'src/_bitmap.i',
+ ['src/_bitmap.i',
'src/_colour.i',
'src/_dc.i',
'src/_graphics.i',
# Extension for the windows module
swig_sources = run_swig(['windows.i'], 'src', GENDIR, PKGDIR,
USE_SWIG, swig_force, swig_args, swig_deps +
- ['src/__windows_rename.i',
- 'src/__windows_reverse.txt',
- 'src/_panel.i',
+ ['src/_panel.i',
'src/_toplvl.i',
'src/_statusbar.i',
'src/_splitter.i',
# Extension for the controls module
swig_sources = run_swig(['controls.i'], 'src', GENDIR, PKGDIR,
USE_SWIG, swig_force, swig_args, swig_deps +
- [ 'src/__controls_rename.i',
- 'src/__controls_reverse.txt',
- 'src/_toolbar.i',
+ [ 'src/_toolbar.i',
'src/_button.i',
'src/_checkbox.i',
'src/_choice.i',
'src/_datectrl.i',
'src/_hyperlink.i',
'src/_picker.i',
+ 'src/_collpane.i',
],
True)
ext = Extension('_controls_', swig_sources,
# Extension for the misc module
swig_sources = run_swig(['misc.i'], 'src', GENDIR, PKGDIR,
USE_SWIG, swig_force, swig_args, swig_deps +
- [ 'src/__misc_rename.i',
- 'src/__misc_reverse.txt',
- 'src/_settings.i',
+ [ 'src/_settings.i',
'src/_functions.i',
'src/_misc.i',
'src/_tipdlg.i',
swig_sources = run_swig(['xrc.i'], 'src', GENDIR, PKGDIR,
USE_SWIG, swig_force, swig_args, swig_deps +
- [ 'src/_xrc_rename.i',
- 'src/_xrc_ex.py',
+ [ 'src/_xrc_ex.py',
'src/_xmlres.i',
'src/_xmlsub.i',
'src/_xml.i',
--- /dev/null
+/////////////////////////////////////////////////////////////////////////////
+// Name: _collpane.i
+// Purpose: SWIG interface for wxCollapsiblePane
+//
+// Author: Robin Dunn
+//
+// Created: 10-Nov-2006
+// RCS-ID: $Id$
+// Copyright: (c) 2006 by Total Control Software
+// Licence: wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
+// Not a %module
+
+
+//---------------------------------------------------------------------------
+%newgroup
+
+%{
+#include <wx/collpane.h>
+%}
+
+MAKE_CONST_WXSTRING(CollapsiblePaneNameStr);
+
+enum {
+ wxCP_DEFAULT_STYLE,
+ wxCP_NO_TLW_RESIZE
+};
+
+
+
+MustHaveApp(wxCollapsiblePane);
+DocStr(wxCollapsiblePane,
+"A collapsable pane is a container with an embedded button-like
+control which can be used by the user to collapse or expand the pane's
+contents.
+
+Once constructed you should use the `GetPane` function to access the
+pane and add your controls inside it (i.e. use the window returned
+from `GetPane` as the parent for the controls which must go in the
+pane, NOT the wx.CollapsiblePane itself!).
+
+Note that because of its nature of control which can dynamically (and
+drastically) change its size at run-time under user-input, when
+putting a wx.CollapsiblePane inside a `wx.Sizer` you should be careful
+to add it with a proportion value of zero; this is because otherwise
+all other windows with non-zero proportion values would automatically
+get resized each time the user expands or collapses the pane window,
+usually resulting a weird, flickering effect.", "");
+
+class wxCollapsiblePane : public wxControl
+{
+public:
+ %pythonAppend wxCollapsiblePane "self._setOORInfo(self)";
+ %pythonAppend wxCollapsiblePane() "";
+
+ DocCtorStr(
+ wxCollapsiblePane(wxWindow *parent,
+ wxWindowID winid = -1,
+ const wxString& label = wxPyEmptyString,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = wxCP_DEFAULT_STYLE,
+ const wxValidator& val = wxDefaultValidator,
+ const wxString& name = wxPyCollapsiblePaneNameStr),
+ "Create and show a wx.CollapsiblePane", "");
+
+ DocCtorStrName(
+ wxCollapsiblePane(),
+ "Precreate a wx.CollapsiblePane for 2-phase creation.", "",
+ PreCollapsiblePane);
+
+
+ DocDeclStr(
+ bool , Create(wxWindow *parent,
+ wxWindowID winid =-1,
+ const wxString& label = wxPyEmptyString,
+ const wxPoint& pos = wxDefaultPosition,
+ const wxSize& size = wxDefaultSize,
+ long style = wxCP_DEFAULT_STYLE,
+ const wxValidator& val = wxDefaultValidator,
+ const wxString& name = wxPyCollapsiblePaneNameStr),
+ "", "");
+
+
+
+
+ DocDeclStr(
+ virtual void , Collapse(bool collapse = true),
+ "Collapses or expands the pane window.", "");
+
+ DocDeclStr(
+ void , Expand(),
+ "Same as Collapse(False).", "");
+
+
+ DocDeclStr(
+ virtual bool , IsCollapsed() const,
+ "Returns ``True`` if the pane window is currently hidden.", "");
+
+ DocDeclStr(
+ bool , IsExpanded() const,
+ "Returns ``True`` if the pane window is currently shown.", "");
+
+
+ DocDeclStr(
+ virtual wxWindow *, GetPane() const,
+ "Returns a reference to the pane window. Use the returned `wx.Window`
+as the parent of widgets to make them part of the collapsible area.", "");
+
+};
+
+
+
+//---------------------------------------------------------------------------
+
+
+%constant wxEventType wxEVT_COMMAND_COLLPANE_CHANGED;
+%pythoncode {
+ EVT_COLLAPSIBLEPANE_CHANGED = wx.PyEventBinder( wxEVT_COMMAND_COLLPANE_CHANGED, 1 )
+}
+
+class wxCollapsiblePaneEvent : public wxCommandEvent
+{
+public:
+ //wxCollapsiblePaneEvent() {}
+ wxCollapsiblePaneEvent(wxObject *generator, int id, bool collapsed);
+
+ bool GetCollapsed() const;
+ void SetCollapsed(bool c);
+};
+
+//---------------------------------------------------------------------------
%include _datectrl.i
%include _hyperlink.i
%include _picker.i
+%include _collpane.i
+
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------