]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/SplitTree.py
wxCheckListBox doesn't require wxUSE_OWNER_DRAWN when using WXUNIVERSAL
[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
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
82 class 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
118 def 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
132 overview = """\
133 This demo shows a collection of classes that were designed to operate
134 together and provide a tree control with additional columns for each
135 item. The classes are wx.RemotelyScrolledTreeCtrl, wx.TreeCompanionWindow,
136 wx.ThinSplitterWindow, and wx.SplitterScrolledWindow, some of which may
137 also be useful by themselves.
138 """
139
140
141
142 if __name__ == '__main__':
143 import sys,os
144 import run
145 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
146