]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/SplitTree.py
demo tweaks
[wxWidgets.git] / wxPython / demo / SplitTree.py
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
16 import wx
17 import wx.gizmos as gizmos
18
19 import images
20
21 #----------------------------------------------------------------------
22
23 class TestTree(gizmos.RemotelyScrolledTreeCtrl):
24 def __init__(self, parent, style=wx.TR_HAS_BUTTONS):
25 gizmos.RemotelyScrolledTreeCtrl.__init__(self, parent, -1, style=style)
26
27 # make an image list
28 im1 = im2 = -1
29 self.il = wx.ImageList(16, 16)
30 im1 = self.il.Add(images.getFolder1Bitmap())
31 im2 = self.il.Add(images.getFile1Bitmap())
32 self.SetImageList(self.il)
33
34 # Add some items
35 root = self.AddRoot("Root")
36
37 for i in range(30):
38 item = self.AppendItem(root, "Item %d" % i, im1)
39
40 for j in range(10):
41 child = self.AppendItem(item, "Child %d" % j, im2)
42
43 self.Expand(root)
44
45
46
47 class TestValueWindow(gizmos.TreeCompanionWindow):
48 def __init__(self, parent, style=0):
49 gizmos.TreeCompanionWindow.__init__(self, parent, -1, style=style)
50 self.SetBackgroundColour("WHITE")
51 self.Bind(wx.EVT_ERASE_BACKGROUND, self.OEB)
52
53 def OEB(self, evt):
54 pass
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()
59
60 if tree:
61 text = "This is "
62 parent = tree.GetItemParent(itemId)
63
64 if parent.IsOk():
65 ptext = tree.GetItemText(parent)
66 text = text + ptext + " --> "
67
68 text = text + tree.GetItemText(itemId)
69 pen = wx.Pen(
70 wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DLIGHT),
71 1, wx.SOLID
72 )
73
74 dc.SetPen(pen)
75 dc.SetBrush(wx.Brush(self.GetBackgroundColour(), wx.SOLID))
76 dc.DrawRectangle(rect.x, rect.y, rect.width+1, rect.height+1)
77 dc.SetTextForeground("BLACK")
78 dc.SetBackgroundMode(wx.TRANSPARENT)
79 tw, th = dc.GetTextExtent(text)
80 x = 5
81 y = rect.y + max(0, (rect.height - th) / 2)
82 dc.DrawText(text, x, y)
83
84
85
86 class TestPanel(wx.Panel):
87 def __init__(self, parent, log):
88 wx.Panel.__init__(self, parent, -1, size=(640,480))
89 self.log = log
90
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
99 splitter.SetSashSize(2)
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 )
105
106 valueWindow = TestValueWindow(splitter, style=wx.NO_BORDER)
107
108 wx.CallAfter(splitter.SplitVertically, tree, valueWindow, 150)
109 scroller.SetTargetWindow(tree)
110 scroller.EnableScrolling(False, False)
111
112 valueWindow.SetTreeCtrl(tree)
113 tree.SetCompanionWindow(valueWindow)
114
115 sizer = wx.BoxSizer(wx.VERTICAL)
116 sizer.Add(scroller, 1, wx.EXPAND|wx.ALL, 25)
117 self.SetSizer(sizer)
118 self.Layout()
119
120 #----------------------------------------------------------------------
121
122 def runTest(frame, nb, log):
123 if wx.Platform == "__WXMAC__":
124 from Main import MessagePanel
125 win = MessagePanel(nb, 'This demo currently fails on the Mac. The problem is being looked into...',
126 'Sorry', wx.ICON_WARNING)
127 return win
128
129 win = TestPanel(nb, log)
130 return win
131
132
133 #----------------------------------------------------------------------
134
135
136 overview = """\
137 This demo shows a collection of classes that were designed to operate
138 together and provide a tree control with additional columns for each
139 item. The classes are wx.RemotelyScrolledTreeCtrl, wx.TreeCompanionWindow,
140 wx.ThinSplitterWindow, and wx.SplitterScrolledWindow, some of which may
141 also be useful by themselves.
142 """
143
144
145
146 if __name__ == '__main__':
147 import sys,os
148 import run
149 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
150