]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/SplitTree.py
Swtch to using Bind, and use better styles for the code viewer
[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
RD
69 pen = wx.Pen(
70 wx.SystemSettings_GetSystemColour(wx.SYS_COLOUR_3DLIGHT),
71 1, wx.SOLID
72 )
73
78e8819c 74 dc.SetPen(pen)
8fa876ca
RD
75 dc.SetBrush(wx.Brush(self.GetBackgroundColour(), wx.SOLID))
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)
8fa876ca 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)
8fa876ca
RD
100 tree = TestTree(splitter, -1, style = wx.TR_HAS_BUTTONS |
101 wx.TR_NO_LINES |
102 wx.TR_ROW_LINES |
103 #wx.TR_HIDE_ROOT |
104 wx.NO_BORDER )
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
RD
124 if wx.Platform == "__WXMAC__":
125 wx.MessageBox("This demo currently fails on the Mac. The problem is being looked into...", "Sorry")
1e4a197e
RD
126 return
127
611dc22c
RD
128 win = TestPanel(nb, log)
129 return win
130
131
132#----------------------------------------------------------------------
133
134
611dc22c
RD
135overview = """\
136This demo shows a collection of classes that were designed to operate
137together and provide a tree control with additional columns for each
8fa876ca
RD
138item. The classes are wx.RemotelyScrolledTreeCtrl, wx.TreeCompanionWindow,
139wx.ThinSplitterWindow, and wx.SplitterScrolledWindow, some of which may
611dc22c
RD
140also be useful by themselves.
141"""
142
143
63b6646e
RD
144
145if __name__ == '__main__':
146 import sys,os
147 import run
148 run.main(['', os.path.basename(sys.argv[0])])
149