]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/SplitTree.py
Use sizers for layout
[wxWidgets.git] / wxPython / demo / SplitTree.py
CommitLineData
8fa876ca
RD
1# 11/13/2003 - Jeff Grimmett (grimmtooth@softhome.net)
2#
3# o Updated for wx namespace
4#
5# 11/26/2003 - Jeff Grimmett (grimmtooth@softhome.net)
6#
7# o Bigtime errors on startup. Blows up with a program error.
8# Error:
9#
10# 21:04:11: Debug: ..\..\src\msw\treectrl.cpp(1508): assert "IsVisible(item)"
11# failed: The item you call GetNextVisible() for must be visible itself!
12#
13# I suspect this error is in the lib itself.
14#
15
16import wx
17import wx.gizmos as gizmos
18
19import images
611dc22c
RD
20
21#----------------------------------------------------------------------
22
8fa876ca
RD
23class TestTree(gizmos.RemotelyScrolledTreeCtrl):
24 def __init__(self, parent, style=wx.TR_HAS_BUTTONS):
25 gizmos.RemotelyScrolledTreeCtrl.__init__(self, parent, -1, style=style)
611dc22c
RD
26
27 # make an image list
68673975 28 im1 = im2 = -1
8fa876ca 29 self.il = wx.ImageList(16, 16)
78e8819c
RD
30 im1 = self.il.Add(images.getFolder1Bitmap())
31 im2 = self.il.Add(images.getFile1Bitmap())
32 self.SetImageList(self.il)
611dc22c
RD
33
34 # Add some items
35 root = self.AddRoot("Root")
8fa876ca 36
611dc22c
RD
37 for i in range(30):
38 item = self.AppendItem(root, "Item %d" % i, im1)
8fa876ca 39
611dc22c 40 for j in range(10):
78e8819c 41 child = self.AppendItem(item, "Child %d" % j, im2)
611dc22c
RD
42
43 self.Expand(root)
44
45
46
8fa876ca
RD
47class TestValueWindow(gizmos.TreeCompanionWindow):
48 def __init__(self, parent, style=0):
49 gizmos.TreeCompanionWindow.__init__(self, parent, -1, style=style)
611dc22c 50 self.SetBackgroundColour("WHITE")
8fa876ca 51 self.Bind(wx.EVT_ERASE_BACKGROUND, self.OEB)
78e8819c
RD
52
53 def OEB(self, evt):
54 pass
611dc22c
RD
55
56 # This method is called to draw each item in the value window
57 def DrawItem(self, dc, itemId, rect):
58 tree = self.GetTreeCtrl()
8fa876ca 59
611dc22c
RD
60 if tree:
61 text = "This is "
62 parent = tree.GetItemParent(itemId)
8fa876ca 63
611dc22c
RD
64 if parent.IsOk():
65 ptext = tree.GetItemText(parent)
66 text = text + ptext + " --> "
8fa876ca 67
611dc22c 68 text = text + tree.GetItemText(itemId)
8fa876ca 69 pen = wx.Pen(
317d1550 70 wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DLIGHT),
8fa876ca
RD
71 1, wx.SOLID
72 )
73
78e8819c 74 dc.SetPen(pen)
8fa876ca 75 dc.SetBrush(wx.Brush(self.GetBackgroundColour(), wx.SOLID))
d7403ad2 76 dc.DrawRectangle(rect.x, rect.y, rect.width+1, rect.height+1)
611dc22c 77 dc.SetTextForeground("BLACK")
8fa876ca 78 dc.SetBackgroundMode(wx.TRANSPARENT)
611dc22c
RD
79 tw, th = dc.GetTextExtent(text)
80 x = 5
81 y = rect.y + max(0, (rect.height - th) / 2)
d7403ad2 82 dc.DrawText(text, x, y)
611dc22c
RD
83
84
85
8fa876ca 86class TestPanel(wx.Panel):
611dc22c 87 def __init__(self, parent, log):
8fa876ca 88 wx.Panel.__init__(self, parent, -1)
611dc22c
RD
89 self.log = log
90
8fa876ca
RD
91 scroller = gizmos.SplitterScrolledWindow(
92 self, -1, style=wx.NO_BORDER | wx.CLIP_CHILDREN | wx.VSCROLL
93 )
94
95 splitter = gizmos.ThinSplitterWindow(
96 scroller, -1, style=wx.SP_3DBORDER | wx.CLIP_CHILDREN
97 )
98
611dc22c 99 splitter.SetSashSize(2)
317d1550
RD
100 tree = TestTree(splitter, style = wx.TR_HAS_BUTTONS |
101 wx.TR_NO_LINES |
102 wx.TR_ROW_LINES |
103 #wx.TR_HIDE_ROOT |
104 wx.NO_BORDER )
8fa876ca
RD
105
106 valueWindow = TestValueWindow(splitter, style=wx.NO_BORDER)
611dc22c 107
1e4a197e 108 splitter.SplitVertically(tree, valueWindow, 150)
52ad59c2 109 scroller.SetTargetWindow(tree)
1e4a197e 110 scroller.EnableScrolling(False, False)
611dc22c 111
52ad59c2
RD
112 valueWindow.SetTreeCtrl(tree)
113 tree.SetCompanionWindow(valueWindow)
611dc22c 114
8fa876ca
RD
115 sizer = wx.BoxSizer(wx.VERTICAL)
116 sizer.Add(scroller, 1, wx.EXPAND|wx.ALL, 25)
1e4a197e 117 self.SetAutoLayout(True)
68320e40 118 self.SetSizer(sizer)
611dc22c
RD
119
120
121#----------------------------------------------------------------------
122
123def runTest(frame, nb, log):
8fa876ca 124 if wx.Platform == "__WXMAC__":
c4ef95da
RD
125 from Main import MessagePanel
126 win = MessagePanel(nb, 'This demo currently fails on the Mac. The problem is being looked into...',
127 'Sorry', wx.ICON_WARNING)
128 return win
1e4a197e 129
611dc22c
RD
130 win = TestPanel(nb, log)
131 return win
132
133
134#----------------------------------------------------------------------
135
136
611dc22c
RD
137overview = """\
138This demo shows a collection of classes that were designed to operate
139together and provide a tree control with additional columns for each
8fa876ca
RD
140item. The classes are wx.RemotelyScrolledTreeCtrl, wx.TreeCompanionWindow,
141wx.ThinSplitterWindow, and wx.SplitterScrolledWindow, some of which may
611dc22c
RD
142also be useful by themselves.
143"""
144
145
63b6646e
RD
146
147if __name__ == '__main__':
148 import sys,os
149 import run
8eca4fef 150 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
63b6646e 151