1 from PyQt4.QtCore import QAbstractItemModel, QVariant, QString, QStringList
2 from PyQt4.QtCore import QModelIndex
3 from PyQt4.QtCore import Qt
4 from PyQt4.QtXml import QDomNode
5 from domItem import domItem
7 class domModel(QAbstractItemModel):
8 def __init__(self, document, parent = 0):
9 QAbstractItemModel.__init__(self, parent)
10 self.domDocument = document
11 self.rootItem = domItem(document, 0);
13 def data(self, index, role):
14 if not index.isValid():
16 if role != Qt.DisplayRole:
18 node = index.internalPointer().node()
19 attributeMap = node.attributes()
23 if node.nodeType() == QDomNode.ElementNode:
24 qslist = QStringList()
25 for i in range(attributeMap.count()):
26 attr = attributeMap.item(i)
27 elem = (attr.nodeName()
28 .append(QString('="'))
29 .append(attr.nodeValue())
30 .append(QString('"')))
33 append(node.nodeName()).
35 append(qslist.join(' ')).
37 elif node.nodeType() == QDomNode.AttributeNode:
38 return QString('Whozat?!')
39 elif node.nodeType() == QDomNode.TextNode:
40 return node.nodeValue()
41 elif node.nodeType() == QDomNode.CDATASectionNode:
42 return QString('unsupported node type')
43 elif node.nodeType() == QDomNode.EntityReferenceNode:
44 return QString('unsupported node type')
45 elif node.nodeType() == QDomNode.EntityNode:
46 return QString('unsupported node type')
47 elif node.nodeType() == QDomNode.ProcessingInstructionNode:
48 return node.nodeName()
49 elif node.nodeType() == QDomNode.CommentNode:
50 return QString('#').append(node.nodeValue())
51 elif node.nodeType() == QDomNode.DocumentNode:
52 return QString('unsupported node type')
53 elif node.nodeType() == QDomNode.DocumentTypeNode:
54 return QString('unsupported node type')
55 elif node.nodeType() == QDomNode.DocumentFragmentNode:
56 return QString('unsupported node type')
57 elif node.nodeType() == QDomNode.NotationNode:
58 return QString('unsupported node type')
59 elif node.nodeType() == QDomNode.BaseNode:
60 return QString('unsupported node type')
61 elif node.nodeType() == QDomNode.CharacterDataNode:
62 return QString('unsupported node type')
68 def flags(self, index):
69 if not index.isValid():
70 return Qt.ItemIsEnabled
71 # does this `|` thing hold?
72 return Qt.ItemIsEnabled | Qt.ItemIsSelectable
74 def headerData(self, section, orientation, role):
75 if orientation == Qt.Horizontal and role == Qt.DisplayRole:
77 return QString("Do I need an header?")
83 def index(self, row, column, parent):
84 if not parent.isValid():
85 parentItem = self.rootItem
87 parentItem = parent.internalPointer()
89 childItem = parentItem.child(row)
90 # childItem would be None to say "false"?
92 return self.createIndex(row, column, childItem)
96 def parent(self, child):
97 if not child.isValid():
99 childItem = child.internalPointer()
100 parentItem = childItem.parent()
102 if not parentItem or parentItem == self.rootItem:
104 return self.createIndex(parentItem.row(), 0, parentItem)
106 def rowCount(self, parent):
107 if not parent.isValid():
108 parentItem = self.rootItem
110 parentItem = parent.internalPointer()
112 return parentItem.node().childNodes().count()
114 def columnCount(self, parent):
116 # we'll print tag name (and attributes)