X-Git-Url: http://git.onelab.eu/?p=sface.git;a=blobdiff_plain;f=sface%2Frspecwindow.py;fp=sface%2Fscreens%2Frspecscreen.py;h=17bef6a0561b71470c89adbd32f7ed46c727c402;hp=75be23a9e0b5b632239c98c14d5a723b1e604f5d;hb=dd3e0cf249a536798fcbb3aaf788dca1d674ab26;hpb=32eb5fc79ad9745b7b1c3da1c96f442b0feb965c diff --git a/sface/screens/rspecscreen.py b/sface/rspecwindow.py similarity index 84% rename from sface/screens/rspecscreen.py rename to sface/rspecwindow.py index 75be23a..17bef6a 100644 --- a/sface/screens/rspecscreen.py +++ b/sface/rspecwindow.py @@ -20,6 +20,32 @@ class RSpecView(QTreeView): self.setAttribute(Qt.WA_MacShowFocusRect, 0) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + def expandMatchingText(self, txt): + self.collapseAll() + self.expandToDepth(0) + + def recursiveExpand(index): + parent = index.parent() + if parent and parent.isValid(): + recursiveExpand(parent) + self.expand(index) + + def search(index): + if index.data().toString() == txt: + recursiveExpand(index) + self.scrollTo(index, self.PositionAtCenter) + + rows = model.rowCount(index) + for r in range(rows): + child_index = index.child(r, 0) + search(child_index) + + model = self.model() + root_rows = model.rowCount() + for r in range(root_rows): + index = model.index(r, 0) + search(index) + class DomModel(QAbstractItemModel): def __init__(self, document, parent = 0): @@ -115,8 +141,8 @@ class DomModel(QAbstractItemModel): return QModelIndex() return self.createIndex(parentItem.row(), 0, parentItem) - def rowCount(self, parent): - if not parent.isValid(): + def rowCount(self, parent=None): + if not parent or not parent.isValid(): parentItem = self.rootItem else: parentItem = parent.internalPointer() @@ -160,9 +186,10 @@ class DomItem: return self.rowNumber -class RSpecWidget(QWidget): +class RSpecWindow(QDialog): def __init__(self, parent=None): - QWidget.__init__(self, parent) + QDialog.__init__(self, parent) + self.setWindowTitle("RSPec View") self.document = None self.model = None @@ -173,7 +200,14 @@ class RSpecWidget(QWidget): self.setLayout(layout) self.updateView() + + def show(self): + self.updateView() + QDialog.show(self) + def showNode(self, hostname): + self.view.expandMatchingText(hostname) + def updateView(self): del self.document del self.model @@ -192,15 +226,3 @@ class RSpecWidget(QWidget): self.view.expand(self.model.index(0, 0)) #expand first level only -class RSpecScreen(SfaScreen): - def __init__(self, parent): - SfaScreen.__init__(self, parent) - - widget = RSpecWidget(self) - self.init(widget, "RSpec Window", "RSPec View") - - def rspecUpdated(self): - self.widget.updateView() - - def configurationChanged(self): - self.widget.updateView()