File: XMLView.py

package info (click to toggle)
boa-constructor 0.4.4cvs20050714-4
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 10,080 kB
  • ctags: 9,175
  • sloc: python: 56,189; sh: 545; makefile: 40
file content (138 lines) | stat: -rw-r--r-- 4,452 bytes parent folder | download
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
#-----------------------------------------------------------------------------
# Name:        XMLView.py
# Purpose:
#
# Author:      Riaan Booysen
#              Based on xml tree example in wxPython demo
#
# Created:     2001/01/06
# RCS-ID:      $Id: XMLView.py,v 1.9 2005/05/18 12:47:24 riaan Exp $
# Copyright:   (c) 2001 - 2005
# Licence:     GPL
#-----------------------------------------------------------------------------

import sys

import wx

from EditorViews import EditorView


class XMLTreeView(wx.TreeCtrl, EditorView):
    viewName = 'XMLTree'
    gotoLineBmp = 'Images/Editor/GotoLine.png'

    def __init__(self, parent, model):
        id = wx.NewId()
        wx.TreeCtrl.__init__(self, parent, id)#, style=wx.TR_HAS_BUTTONS | wx.SUNKEN_BORDER)
        EditorView.__init__(self, model,
          (('Goto line', self.OnGoto, self.gotoLineBmp, ''),), 0)

        self.nodeStack = []

        self.Bind(wx.EVT_KEY_UP, self.OnKeyPressed)

        self.active = True

    def buildTree(self, parent, dict):
        for item in dict.keys():
            child = self.AppendItem(parent, item, 0)
            if len(dict[item].keys()):
                self.buildTree(child, dict[item])
            self.Expand(child)

    def refreshCtrl(self):
        self.nodeStack = [self.AddRoot('Root')]
        self.loadTree(self.model.filename)
        self.Expand(self.nodeStack[0])
        return

    # Define a handler for start element events
    def startElement(self, name, attrs ):
        name = name.encode()
        if attrs:
            if attrs.has_key('class'):
                if attrs.has_key('name'):
                    name = '%s (%s:%s)' % (name, attrs['name'], attrs['class'])
                else:
                    name = '%s (%s)' % (name, attrs['class'])
            else:
                if attrs.has_key('name'):
                    name = '%s :%s' % (name, attrs['name'])

        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():
            data = data.encode()
            self.AppendItem(self.nodeStack[-1], data)


    def loadTree(self, filename):
        # Create a parser

        from xml.parsers import expat
        Parser = expat.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(self.model.data, 1)

    def OnGoto(self, event):
        idx  = self.GetSelection()
        if idx.IsOk():
            name = self.GetItemText(idx)
            if self.model.views.has_key('Source') and \
              self.model.getModule().classes.has_key(name):
                srcView = self.model.views['Source']
                srcView.focus()
                module = self.model.getModule()
                srcView.gotoLine(int(module.classes[name].block.start) -1)

    def OnKeyPressed(self, event):
        key = event.KeyCode()
        if key == 13:
            if self.defaultActionIdx != -1:
                self.actions[self.defaultActionIdx][1](event)

##class XMLTree(wx.TreeCtrl):
##    def __init__(self, parent, ID):
##        wx.TreeCtrl.__init__(self, parent, ID)
##        self.nodeStack = [self.AddRoot(Root)]
##
##    # 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)