]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/SplitTree.py
Licence line
[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)
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 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.SetAutoLayout(True)
118 self.SetSizer(sizer)
119
120
121 #----------------------------------------------------------------------
122
123 def runTest(frame, nb, log):
124 if wx.Platform == "__WXMAC__":
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
129
130 win = TestPanel(nb, log)
131 return win
132
133
134 #----------------------------------------------------------------------
135
136
137 overview = """\
138 This demo shows a collection of classes that were designed to operate
139 together and provide a tree control with additional columns for each
140 item. The classes are wx.RemotelyScrolledTreeCtrl, wx.TreeCompanionWindow,
141 wx.ThinSplitterWindow, and wx.SplitterScrolledWindow, some of which may
142 also be useful by themselves.
143 """
144
145
146
147 if __name__ == '__main__':
148 import sys,os
149 import run
150 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
151