X-Git-Url: http://git.onelab.eu/?p=sface.git;a=blobdiff_plain;f=sface%2Fscreens%2Frspecscreen.py;h=75be23a9e0b5b632239c98c14d5a723b1e604f5d;hp=e6a75d12147e12a3d65df1a95a8965bc211242b1;hb=654a48a3138958f039b4ab8b214fe7c1ab2235d8;hpb=7760969495974344c6418f273dad8e67770572ac diff --git a/sface/screens/rspecscreen.py b/sface/screens/rspecscreen.py index e6a75d1..75be23a 100644 --- a/sface/screens/rspecscreen.py +++ b/sface/screens/rspecscreen.py @@ -25,6 +25,14 @@ class DomModel(QAbstractItemModel): def __init__(self, document, parent = 0): QAbstractItemModel.__init__(self, parent) self.domDocument = document + # one of the children of the rootItem is the 'xml' thing. + # here I delete it. + childList = document.childNodes() + for i in range(childList.count()): + currElem = childList.item(i) + if (currElem.nodeType() == QDomNode.ProcessingInstructionNode): + document.removeChild(currElem) + break self.rootItem = DomItem(document, 0); def data(self, index, role): @@ -41,16 +49,9 @@ class DomModel(QAbstractItemModel): qslist = QStringList() for i in range(attributeMap.count()): attr = attributeMap.item(i) - elem = (attr.nodeName() - .append(QString('="')) - .append(attr.nodeValue()) - .append(QString('"'))) + elem = '%s="%s"' % (attr.nodeName(), attr.nodeValue()) qslist.append(elem) - return (QString('<'). - append(node.nodeName()). - append(' '). - append(qslist.join(' ')). - append('>')) + return QString("<%s %s>" % (node.nodeName(), qslist.join(' '))) elif node.nodeType() == QDomNode.AttributeNode: return QString('Whozat?!') elif node.nodeType() == QDomNode.TextNode: @@ -62,7 +63,8 @@ class DomModel(QAbstractItemModel): elif node.nodeType() == QDomNode.EntityNode: return QString('unsupported node type') elif node.nodeType() == QDomNode.ProcessingInstructionNode: - return node.nodeName() + return QVariant() + #return node.nodeName() elif node.nodeType() == QDomNode.CommentNode: return QString('#').append(node.nodeValue()) elif node.nodeType() == QDomNode.DocumentNode: @@ -85,14 +87,13 @@ class DomModel(QAbstractItemModel): 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): return QVariant() - def index(self, row, column, parent): - if not parent.isValid(): + def index(self, row, column, parent=None): + if not parent or not parent.isValid(): parentItem = self.rootItem else: parentItem = parent.internalPointer() @@ -123,16 +124,14 @@ class DomModel(QAbstractItemModel): return parentItem.node().childNodes().count() def columnCount(self, parent): - # just one column - # we'll print tag name (and attributes) - # or the tag content + # 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 + # 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 @@ -161,28 +160,36 @@ class DomItem: return self.rowNumber - class RSpecWidget(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) - self.updateView() + self.document = None + self.model = None + + self.view = RSpecView(self) + layout = QVBoxLayout() + layout.addWidget(self.view) + self.setLayout(layout) + + self.updateView() + def updateView(self): - document = QDomDocument("RSpec") + del self.document + del self.model + self.document = None + self.model = None + rspec_file = config.getSliceRSpecFile() if not os.path.exists(rspec_file): return - document.setContent(open(rspec_file,'r').read()) - model = DomModel(document, self) - - view = RSpecView(self) - view.setModel(model) - view.expandAll() + self.document = QDomDocument("RSpec") + self.document.setContent(open(rspec_file,'r').read()) + self.model = DomModel(self.document, self) - layout = QVBoxLayout() - layout.addWidget(view) - self.setLayout(layout) + self.view.setModel(self.model) + self.view.expand(self.model.index(0, 0)) #expand first level only class RSpecScreen(SfaScreen): @@ -194,3 +201,6 @@ class RSpecScreen(SfaScreen): def rspecUpdated(self): self.widget.updateView() + + def configurationChanged(self): + self.widget.updateView()