]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/SplitTree.py
When running samples from the demo standalone you can now add a
[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 wx.MessageBox("This demo currently fails on the Mac. The problem is being looked into...", "Sorry")
126 return
127
128 win = TestPanel(nb, log)
129 return win
130
131
132 #----------------------------------------------------------------------
133
134
135 overview = """\
136 This demo shows a collection of classes that were designed to operate
137 together and provide a tree control with additional columns for each
138 item. The classes are wx.RemotelyScrolledTreeCtrl, wx.TreeCompanionWindow,
139 wx.ThinSplitterWindow, and wx.SplitterScrolledWindow, some of which may
140 also be useful by themselves.
141 """
142
143
144
145 if __name__ == '__main__':
146 import sys,os
147 import run
148 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
149