Added wx.CollapsiblePane
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43301 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
119
wxPython/demo/CollapsiblePane.py
Normal file
119
wxPython/demo/CollapsiblePane.py
Normal file
@@ -0,0 +1,119 @@
|
||||
|
||||
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:])
|
||||
|
@@ -69,6 +69,7 @@ _treeList = [
|
||||
'AnimateCtrl',
|
||||
'AlphaDrawing',
|
||||
'GraphicsContext',
|
||||
'CollapsiblePane',
|
||||
]),
|
||||
|
||||
# managed windows == things with a (optional) caption you can close
|
||||
@@ -177,6 +178,7 @@ _treeList = [
|
||||
'Calendar',
|
||||
'CalendarCtrl',
|
||||
'CheckListCtrlMixin',
|
||||
'CollapsiblePane',
|
||||
'ContextHelp',
|
||||
'DatePickerCtrl',
|
||||
'DynamicSashWindow',
|
||||
@@ -1255,27 +1257,23 @@ class wxPythonDemo(wx.Frame):
|
||||
|
||||
# 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
|
||||
@@ -1319,7 +1317,12 @@ class wxPythonDemo(wx.Frame):
|
||||
|
||||
# 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)
|
||||
@@ -1335,7 +1338,7 @@ class wxPythonDemo(wx.Frame):
|
||||
|
||||
# select initial items
|
||||
self.nb.SetSelection(0)
|
||||
self.tree.SelectItem(root)
|
||||
self.tree.SelectItem(self.root)
|
||||
|
||||
# Load 'Main' module
|
||||
self.LoadDemo(self.overviewText)
|
||||
@@ -1353,6 +1356,27 @@ class wxPythonDemo(wx.Frame):
|
||||
|
||||
|
||||
#---------------------------------------------
|
||||
|
||||
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]
|
||||
|
Reference in New Issue
Block a user