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