]> git.saurik.com Git - wxWidgets.git/blame_incremental - wxPython/demo/SplitTree.py
wxCheckListBox doesn't require wxUSE_OWNER_DRAWN when using WXUNIVERSAL
[wxWidgets.git] / wxPython / demo / SplitTree.py
... / ...
CommitLineData
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
20
21#----------------------------------------------------------------------
22
23class 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
47class TestValueWindow(gizmos.TreeCompanionWindow):
48 def __init__(self, parent, style=0):
49 gizmos.TreeCompanionWindow.__init__(self, parent, -1, style=style)
50 self.SetBackgroundColour("WHITE")
51
52 # This method is called to draw each item in the value window
53 def DrawItem(self, dc, itemId, rect):
54 tree = self.GetTreeCtrl()
55
56 if tree:
57 text = "This is "
58 parent = tree.GetItemParent(itemId)
59
60 if parent.IsOk():
61 ptext = tree.GetItemText(parent)
62 text = text + ptext + " --> "
63
64 text = text + tree.GetItemText(itemId)
65 pen = wx.Pen(
66 wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DLIGHT),
67 1, wx.SOLID
68 )
69
70 dc.SetPen(pen)
71 dc.SetBrush(wx.Brush(self.GetBackgroundColour(), wx.SOLID))
72 dc.DrawRectangle(rect.x, rect.y, rect.width+1, rect.height+1)
73 dc.SetTextForeground("BLACK")
74 dc.SetBackgroundMode(wx.TRANSPARENT)
75 tw, th = dc.GetTextExtent(text)
76 x = 5
77 y = rect.y + max(0, (rect.height - th) / 2)
78 dc.DrawText(text, x, y)
79
80
81
82class TestPanel(wx.Panel):
83 def __init__(self, parent, log):
84 wx.Panel.__init__(self, parent, -1, size=(640,480))
85 self.log = log
86
87 scroller = gizmos.SplitterScrolledWindow(
88 self, -1, style=wx.NO_BORDER | wx.CLIP_CHILDREN | wx.VSCROLL
89 )
90
91 splitter = gizmos.ThinSplitterWindow(
92 scroller, -1, style=wx.SP_3DBORDER | wx.CLIP_CHILDREN
93 )
94
95 splitter.SetSashSize(2)
96 tree = TestTree(splitter, style = wx.TR_HAS_BUTTONS |
97 wx.TR_NO_LINES |
98 wx.TR_ROW_LINES |
99 #wx.TR_HIDE_ROOT |
100 wx.NO_BORDER )
101
102 valueWindow = TestValueWindow(splitter, style=wx.NO_BORDER)
103
104 wx.CallAfter(splitter.SplitVertically, tree, valueWindow, 150)
105 scroller.SetTargetWindow(tree)
106 scroller.EnableScrolling(False, False)
107
108 valueWindow.SetTreeCtrl(tree)
109 tree.SetCompanionWindow(valueWindow)
110
111 sizer = wx.BoxSizer(wx.VERTICAL)
112 sizer.Add(scroller, 1, wx.EXPAND|wx.ALL, 25)
113 self.SetSizer(sizer)
114 self.Layout()
115
116#----------------------------------------------------------------------
117
118def runTest(frame, nb, log):
119 if wx.Platform == "__WXMAC__":
120 from Main import MessagePanel
121 win = MessagePanel(nb, 'This demo currently fails on the Mac. The problem is being looked into...',
122 'Sorry', wx.ICON_WARNING)
123 return win
124
125 win = TestPanel(nb, log)
126 return win
127
128
129#----------------------------------------------------------------------
130
131
132overview = """\
133This demo shows a collection of classes that were designed to operate
134together and provide a tree control with additional columns for each
135item. The classes are wx.RemotelyScrolledTreeCtrl, wx.TreeCompanionWindow,
136wx.ThinSplitterWindow, and wx.SplitterScrolledWindow, some of which may
137also be useful by themselves.
138"""
139
140
141
142if __name__ == '__main__':
143 import sys,os
144 import run
145 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
146