File: XMLtreeview.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 (120 lines) | stat: -rw-r--r-- 3,278 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

import sys

py2 = sys.version[0] == '2'

from wxPython.wx import *
try:
    if py2:
        from xml.parsers import expat
        parsermodule = expat
    else:
        from xml.parsers import pyexpat
        parsermodule = pyexpat
    haveXML = True
except ImportError:
    haveXML = False

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

if not haveXML:
    def runTest(frame, nb, log):
        dlg = wxMessageDialog(frame, 'This demo requires the XML package.  '
                              'See http://www.python.org/sigs/xml-sig/',
                          'Sorry', wxOK | wxICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()

else:

    class XMLTree(wxTreeCtrl):
        def __init__(self, parent, ID):
            wxTreeCtrl.__init__(self, parent, ID)
            self.nodeStack = [self.AddRoot("Root")]

            # Trees need an image list to do DnD...
            self.il = wxImageList(16,16)
            self.SetImageList(self.il)

            # event handlers for DnD
            EVT_TREE_BEGIN_DRAG(self, ID, self.OnBeginDrag)
            EVT_TREE_END_DRAG(self, ID, self.OnEndDrag)


        def OnBeginDrag(self, event):
            item = event.GetItem()
            if item != self.GetRootItem():
                self.draggingItem = item
                event.Allow()  # if DnD of this item is okay Allow it.


        def OnEndDrag(self, evt):
            itemSrc = self.draggingItem
            itemDst = evt.GetItem()
            self.draggingItem = None

            if not itemDst.IsOk():
                print "Can't drag to here..."
                return

            # For this simple example just take the text of the source item
            # and append it to the destination item.  In real life you would
            # possibly want to copy subtrees...
            text = self.GetItemText(itemSrc)
            self.AppendItem(itemDst, text)
            self.Delete(itemSrc)


        # Define a handler for start element events
        def StartElement(self, name, attrs ):
            if py2:
                name = name.encode()
            id = self.AppendItem(self.nodeStack[-1], name)
            self.nodeStack.append(id)

        def EndElement(self,  name ):
            self.nodeStack = self.nodeStack[:-1]

        def CharacterData(self, data ):
            if data.strip():
                if py2:
                    data = data.encode()
                self.AppendItem(self.nodeStack[-1], data)


        def LoadTree(self, filename):
            # Create a parser
            Parser = parsermodule.ParserCreate()

            # Tell the parser what the start element handler is
            Parser.StartElementHandler = self.StartElement
            Parser.EndElementHandler = self.EndElement
            Parser.CharacterDataHandler = self.CharacterData

            # Parse the XML File
            ParserStatus = Parser.Parse(open(filename,'r').read(), 1)


    def runTest(frame, nb, log):
        win = XMLTree(nb, -1)
        win.LoadTree("paper.xml")
        return win

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






overview = """\
"""





if __name__ == '__main__':
    import sys,os
    import run
    run.main(['', os.path.basename(sys.argv[0])])