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