From: Barış Metin Date: Wed, 15 Sep 2010 08:53:20 +0000 (+0200) Subject: move domItem and domModel in xmlwindow X-Git-Tag: sface-0.1-1~29 X-Git-Url: http://git.onelab.eu/?p=sface.git;a=commitdiff_plain;h=e3ff7b1a829714d72e135fd11f7746a01bc2492b;ds=sidebyside move domItem and domModel in xmlwindow --- diff --git a/sface/domItem.py b/sface/domItem.py deleted file mode 100644 index 8ee3940..0000000 --- a/sface/domItem.py +++ /dev/null @@ -1,33 +0,0 @@ -# from PyQt4.QtXml import QDomNode - -class domItem: - # wrapper around PyQt4.QtXml.QDomNode - # it keeps an hash of childrens for - # performance reasons - - def __init__(self, node, row, parent = 0): - # node is of type PyQt4.QtXml.QDomNode - self.domNode = node - self.parentItem = parent - self.rowNumber = row - self.childItems = {} - - def child(self, i): - if i in self.childItems: - return self.childItems[i] - if i >= 0 and i < self.domNode.childNodes().count(): - childNode = self.domNode.childNodes().item(i) - childItem = domItem(childNode, i, self) - self.childItems[i] = childItem - return childItem - return None - - def parent(self): - return self.parentItem - - def node(self): - return self.domNode - - def row(self): - return self.rowNumber - diff --git a/sface/domModel.py b/sface/domModel.py deleted file mode 100644 index 0c8a103..0000000 --- a/sface/domModel.py +++ /dev/null @@ -1,118 +0,0 @@ -from PyQt4.QtCore import QAbstractItemModel, QVariant, QString, QStringList -from PyQt4.QtCore import QModelIndex -from PyQt4.QtCore import Qt -from PyQt4.QtXml import QDomNode -from domItem import domItem - -class domModel(QAbstractItemModel): - def __init__(self, document, parent = 0): - QAbstractItemModel.__init__(self, parent) - self.domDocument = document - self.rootItem = domItem(document, 0); - - def data(self, index, role): - if not index.isValid(): - return QVariant() - if role != Qt.DisplayRole: - return QVariant() - node = index.internalPointer().node() - attributeMap = node.attributes() - - col = index.column() - if col == 0: - if node.nodeType() == QDomNode.ElementNode: - qslist = QStringList() - for i in range(attributeMap.count()): - attr = attributeMap.item(i) - elem = (attr.nodeName() - .append(QString('="')) - .append(attr.nodeValue()) - .append(QString('"'))) - qslist.append(elem) - return (QString('<'). - append(node.nodeName()). - append(' '). - append(qslist.join(' ')). - append('>')) - elif node.nodeType() == QDomNode.AttributeNode: - return QString('Whozat?!') - elif node.nodeType() == QDomNode.TextNode: - return node.nodeValue() - elif node.nodeType() == QDomNode.CDATASectionNode: - return QString('unsupported node type') - elif node.nodeType() == QDomNode.EntityReferenceNode: - return QString('unsupported node type') - elif node.nodeType() == QDomNode.EntityNode: - return QString('unsupported node type') - elif node.nodeType() == QDomNode.ProcessingInstructionNode: - return node.nodeName() - elif node.nodeType() == QDomNode.CommentNode: - return QString('#').append(node.nodeValue()) - elif node.nodeType() == QDomNode.DocumentNode: - return QString('unsupported node type') - elif node.nodeType() == QDomNode.DocumentTypeNode: - return QString('unsupported node type') - elif node.nodeType() == QDomNode.DocumentFragmentNode: - return QString('unsupported node type') - elif node.nodeType() == QDomNode.NotationNode: - return QString('unsupported node type') - elif node.nodeType() == QDomNode.BaseNode: - return QString('unsupported node type') - elif node.nodeType() == QDomNode.CharacterDataNode: - return QString('unsupported node type') - else: - return QVariant() - else: - return QVariant() - - def flags(self, index): - if not index.isValid(): - return Qt.ItemIsEnabled - # does this `|` thing hold? - return Qt.ItemIsEnabled | Qt.ItemIsSelectable - - def headerData(self, section, orientation, role): - if orientation == Qt.Horizontal and role == Qt.DisplayRole: - if section == 0: - return QString("Do I need an header?") - else: - return QVariant() - else: - return QVariant() - - def index(self, row, column, parent): - if not parent.isValid(): - parentItem = self.rootItem - else: - parentItem = parent.internalPointer() - - childItem = parentItem.child(row) - # childItem would be None to say "false"? - if childItem: - return self.createIndex(row, column, childItem) - else: - return QModelIndex() - - def parent(self, child): - if not child.isValid(): - return QModelIndex() - childItem = child.internalPointer() - parentItem = childItem.parent() - - if not parentItem or parentItem == self.rootItem: - return QModelIndex() - return self.createIndex(parentItem.row(), 0, parentItem) - - def rowCount(self, parent): - if not parent.isValid(): - parentItem = self.rootItem - else: - parentItem = parent.internalPointer() - - return parentItem.node().childNodes().count() - - def columnCount(self, parent): - # just one column - # we'll print tag name (and attributes) - # or the tag content - return 1 diff --git a/sface/xmlwindow.py b/sface/xmlwindow.py index 951cd16..0171e4e 100644 --- a/sface/xmlwindow.py +++ b/sface/xmlwindow.py @@ -1,10 +1,159 @@ import sys + from PyQt4.QtCore import * from PyQt4.QtGui import * -from PyQt4.QtXml import QDomDocument -from domModel import domModel +from PyQt4.QtXml import * + from sface.config import config + +class DomModel(QAbstractItemModel): + def __init__(self, document, parent = 0): + QAbstractItemModel.__init__(self, parent) + self.domDocument = document + self.rootItem = DomItem(document, 0); + + def data(self, index, role): + if not index.isValid(): + return QVariant() + if role != Qt.DisplayRole: + return QVariant() + node = index.internalPointer().node() + attributeMap = node.attributes() + + col = index.column() + if col == 0: + if node.nodeType() == QDomNode.ElementNode: + qslist = QStringList() + for i in range(attributeMap.count()): + attr = attributeMap.item(i) + elem = (attr.nodeName() + .append(QString('="')) + .append(attr.nodeValue()) + .append(QString('"'))) + qslist.append(elem) + return (QString('<'). + append(node.nodeName()). + append(' '). + append(qslist.join(' ')). + append('>')) + elif node.nodeType() == QDomNode.AttributeNode: + return QString('Whozat?!') + elif node.nodeType() == QDomNode.TextNode: + return node.nodeValue() + elif node.nodeType() == QDomNode.CDATASectionNode: + return QString('unsupported node type') + elif node.nodeType() == QDomNode.EntityReferenceNode: + return QString('unsupported node type') + elif node.nodeType() == QDomNode.EntityNode: + return QString('unsupported node type') + elif node.nodeType() == QDomNode.ProcessingInstructionNode: + return node.nodeName() + elif node.nodeType() == QDomNode.CommentNode: + return QString('#').append(node.nodeValue()) + elif node.nodeType() == QDomNode.DocumentNode: + return QString('unsupported node type') + elif node.nodeType() == QDomNode.DocumentTypeNode: + return QString('unsupported node type') + elif node.nodeType() == QDomNode.DocumentFragmentNode: + return QString('unsupported node type') + elif node.nodeType() == QDomNode.NotationNode: + return QString('unsupported node type') + elif node.nodeType() == QDomNode.BaseNode: + return QString('unsupported node type') + elif node.nodeType() == QDomNode.CharacterDataNode: + return QString('unsupported node type') + else: + return QVariant() + else: + return QVariant() + + def flags(self, index): + if not index.isValid(): + return Qt.ItemIsEnabled + # does this `|` thing hold? + return Qt.ItemIsEnabled | Qt.ItemIsSelectable + + def headerData(self, section, orientation, role): + if orientation == Qt.Horizontal and role == Qt.DisplayRole: + if section == 0: + return QString("Do I need an header?") + else: + return QVariant() + else: + return QVariant() + + def index(self, row, column, parent): + if not parent.isValid(): + parentItem = self.rootItem + else: + parentItem = parent.internalPointer() + + childItem = parentItem.child(row) + # childItem would be None to say "false"? + if childItem: + return self.createIndex(row, column, childItem) + else: + return QModelIndex() + + def parent(self, child): + if not child.isValid(): + return QModelIndex() + childItem = child.internalPointer() + parentItem = childItem.parent() + + if not parentItem or parentItem == self.rootItem: + return QModelIndex() + return self.createIndex(parentItem.row(), 0, parentItem) + + def rowCount(self, parent): + if not parent.isValid(): + parentItem = self.rootItem + else: + parentItem = parent.internalPointer() + + return parentItem.node().childNodes().count() + + def columnCount(self, parent): + # just one column + # we'll print tag name (and attributes) + # or the tag content + return 1 + + +class DomItem: + # wrapper around PyQt4.QtXml.QDomNode + # it keeps an hash of childrens for + # performance reasons + + def __init__(self, node, row, parent = 0): + # node is of type PyQt4.QtXml.QDomNode + self.domNode = node + self.parentItem = parent + self.rowNumber = row + self.childItems = {} + + def child(self, i): + if i in self.childItems: + return self.childItems[i] + if i >= 0 and i < self.domNode.childNodes().count(): + childNode = self.domNode.childNodes().item(i) + childItem = DomItem(childNode, i, self) + self.childItems[i] = childItem + return childItem + return None + + def parent(self): + return self.parentItem + + def node(self): + return self.domNode + + def row(self): + return self.rowNumber + + + class XmlWindow(QDialog): def __init__(self, parent=None): QDialog.__init__(self, parent) @@ -13,7 +162,7 @@ class XmlWindow(QDialog): rspec_file = config.getSliceRSpecFile() document.setContent(open(rspec_file,'r').read()) - model = domModel(document, self) + model = DomModel(document, self) self.view = QTreeView() self.view.setModel(model)