]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/SplitTree.py
fix text scrolling in GTK2 (patch 703988)
[wxWidgets.git] / wxPython / demo / SplitTree.py
1 from wxPython.wx import *
2 from wxPython.gizmos import *
3
4 import images
5
6 #----------------------------------------------------------------------
7
8 class TestTree(wxRemotelyScrolledTreeCtrl):
9 def __init__(self, parent, ID, pos=wxDefaultPosition, size=wxDefaultSize,
10 style=wxTR_HAS_BUTTONS):
11 wxRemotelyScrolledTreeCtrl.__init__(self, parent, ID, pos, size, style)
12
13 # make an image list
14 im1 = im2 = -1
15 self.il = wxImageList(16, 16)
16 im1 = self.il.Add(images.getFolder1Bitmap())
17 im2 = self.il.Add(images.getFile1Bitmap())
18 self.SetImageList(self.il)
19
20 # Add some items
21 root = self.AddRoot("Root")
22 for i in range(30):
23 item = self.AppendItem(root, "Item %d" % i, im1)
24 for j in range(10):
25 child = self.AppendItem(item, "Child %d" % j, im2)
26
27 self.Expand(root)
28
29
30
31 class TestValueWindow(wxTreeCompanionWindow):
32 def __init__(self, parent, ID, pos=wxDefaultPosition, size=wxDefaultSize, style=0):
33 wxTreeCompanionWindow.__init__(self, parent, ID, pos, size, style)
34 self.SetBackgroundColour("WHITE")
35 EVT_ERASE_BACKGROUND(self, self.OEB)
36
37 def OEB(self, evt):
38 pass
39
40 # This method is called to draw each item in the value window
41 def DrawItem(self, dc, itemId, rect):
42 tree = self.GetTreeCtrl()
43 if tree:
44 text = "This is "
45 parent = tree.GetItemParent(itemId)
46 if parent.IsOk():
47 ptext = tree.GetItemText(parent)
48 text = text + ptext + " --> "
49 text = text + tree.GetItemText(itemId)
50 pen = wxPen(wxSystemSettings_GetSystemColour(wxSYS_COLOUR_3DLIGHT), 1, wxSOLID)
51 dc.SetPen(pen)
52 dc.SetBrush(wxBrush(self.GetBackgroundColour(), wxSOLID))
53 dc.DrawRectangle(rect.x, rect.y, rect.width+1, rect.height+1)
54 dc.SetTextForeground("BLACK")
55 dc.SetBackgroundMode(wxTRANSPARENT)
56 tw, th = dc.GetTextExtent(text)
57 x = 5
58 y = rect.y + max(0, (rect.height - th) / 2)
59 dc.DrawText(text, x, y)
60
61
62
63 class TestPanel(wxPanel):
64 def __init__(self, parent, log):
65 wxPanel.__init__(self, parent, -1)
66 self.log = log
67
68 scroller = wxSplitterScrolledWindow(self, -1, #(50,50), (350, 250),
69 style=wxNO_BORDER | wxCLIP_CHILDREN | wxVSCROLL)
70 splitter = wxThinSplitterWindow(scroller, -1, style=wxSP_3DBORDER | wxCLIP_CHILDREN)
71 splitter.SetSashSize(2)
72 tree = TestTree(splitter, -1, style = wxTR_HAS_BUTTONS |
73 wxTR_NO_LINES |
74 wxTR_ROW_LINES |
75 #wxTR_HIDE_ROOT |
76 wxNO_BORDER )
77 valueWindow = TestValueWindow(splitter, -1, style=wxNO_BORDER)
78
79 splitter.SplitVertically(tree, valueWindow, 150)
80 scroller.SetTargetWindow(tree)
81 scroller.EnableScrolling(False, False)
82
83 valueWindow.SetTreeCtrl(tree)
84 tree.SetCompanionWindow(valueWindow)
85
86 sizer = wxBoxSizer(wxVERTICAL)
87 sizer.Add(scroller, 1, wxEXPAND|wxALL, 25)
88 self.SetAutoLayout(True)
89 self.SetSizer(sizer)
90
91
92 #----------------------------------------------------------------------
93
94 def runTest(frame, nb, log):
95 if wxPlatform == "__WXMAC__":
96 wxMessageBox("This demo currently fails on the Mac. The problem is being looked into...", "Sorry")
97 return
98
99 win = TestPanel(nb, log)
100 return win
101
102
103 #----------------------------------------------------------------------
104
105
106
107
108
109 overview = """\
110 This demo shows a collection of classes that were designed to operate
111 together and provide a tree control with additional columns for each
112 item. The classes are wxRemotelyScrolledTreeCtrl, wxTreeCompanionWindow,
113 wxThinSplitterWindow, and wxSplitterScrolledWindow, some of which may
114 also be useful by themselves.
115 """
116
117
118
119 if __name__ == '__main__':
120 import sys,os
121 import run
122 run.main(['', os.path.basename(sys.argv[0])])
123