File: SplitTree.py

package info (click to toggle)
wxwindows2.4 2.4.5.1.1
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 59,920 kB
  • ctags: 97,489
  • sloc: cpp: 610,307; ansic: 111,957; python: 103,357; makefile: 3,676; sh: 3,391; lex: 192; yacc: 128; xml: 95; pascal: 74
file content (123 lines) | stat: -rw-r--r-- 4,172 bytes parent folder | download | duplicates (3)
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
from wxPython.wx import *
from wxPython.gizmos import *

import images

#----------------------------------------------------------------------

class TestTree(wxRemotelyScrolledTreeCtrl):
    def __init__(self, parent, ID, pos=wxDefaultPosition, size=wxDefaultSize,
                 style=wxTR_HAS_BUTTONS):
        wxRemotelyScrolledTreeCtrl.__init__(self, parent, ID, pos, size, style)

        # make an image list
        im1 = im2 = -1
        self.il = wxImageList(16, 16)
        im1 = self.il.Add(images.getFolder1Bitmap())
        im2 = self.il.Add(images.getFile1Bitmap())
        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(wxTreeCompanionWindow):
    def __init__(self, parent, ID, pos=wxDefaultPosition, size=wxDefaultSize, style=0):
        wxTreeCompanionWindow.__init__(self, parent, ID, pos, size, style)
        self.SetBackgroundColour("WHITE")
        EVT_ERASE_BACKGROUND(self, self.OEB)

    def OEB(self, evt):
        pass

    # 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 = wxPen(wxSystemSettings_GetSystemColour(wxSYS_COLOUR_3DLIGHT), 1, wxSOLID)
            dc.SetPen(pen)
            dc.SetBrush(wxBrush(self.GetBackgroundColour(), wxSOLID))
            dc.DrawRectangle(rect.x, rect.y, rect.width+1, rect.height+1)
            dc.SetTextForeground("BLACK")
            dc.SetBackgroundMode(wxTRANSPARENT)
            tw, th = dc.GetTextExtent(text)
            x = 5
            y = rect.y + max(0, (rect.height - th) / 2)
            dc.DrawText(text, x, y)



class TestPanel(wxPanel):
    def __init__(self, parent, log):
        wxPanel.__init__(self, parent, -1)
        self.log = log

        scroller = wxSplitterScrolledWindow(self, -1, #(50,50), (350, 250),
                                      style=wxNO_BORDER | wxCLIP_CHILDREN | wxVSCROLL)
        splitter = wxThinSplitterWindow(scroller, -1, style=wxSP_3DBORDER | wxCLIP_CHILDREN)
        splitter.SetSashSize(2)
        tree = TestTree(splitter, -1, style = wxTR_HAS_BUTTONS |
                                              wxTR_NO_LINES |
                                              wxTR_ROW_LINES |
                                              #wxTR_HIDE_ROOT |
                                              wxNO_BORDER )
        valueWindow = TestValueWindow(splitter, -1, style=wxNO_BORDER)

        splitter.SplitVertically(tree, valueWindow, 150)
        scroller.SetTargetWindow(tree)
        scroller.EnableScrolling(False, False)

        valueWindow.SetTreeCtrl(tree)
        tree.SetCompanionWindow(valueWindow)

        sizer = wxBoxSizer(wxVERTICAL)
        sizer.Add(scroller, 1, wxEXPAND|wxALL, 25)
        self.SetAutoLayout(True)
        self.SetSizer(sizer)


#----------------------------------------------------------------------

def runTest(frame, nb, log):
    if wxPlatform == "__WXMAC__":
        wxMessageBox("This demo currently fails on the Mac. The problem is being looked into...", "Sorry")
        return

    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 wxRemotelyScrolledTreeCtrl, wxTreeCompanionWindow,
wxThinSplitterWindow, and wxSplitterScrolledWindow, 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])])