From: Barış Metin Date: Wed, 15 Sep 2010 15:29:36 +0000 (+0200) Subject: show node in rspecwindow when it's selected X-Git-Tag: sface-0.1-1~11 X-Git-Url: http://git.onelab.eu/?p=sface.git;a=commitdiff_plain;h=dd3e0cf249a536798fcbb3aaf788dca1d674ab26;hp=32eb5fc79ad9745b7b1c3da1c96f442b0feb965c show node in rspecwindow when it's selected --- diff --git a/sface/mainwindow.py b/sface/mainwindow.py index b04e638..c1c80b6 100644 --- a/sface/mainwindow.py +++ b/sface/mainwindow.py @@ -8,9 +8,9 @@ from PyQt4.QtGui import * from sface.config import config from sface.logwindow import LogWindow +from sface.rspecwindow import RSpecWindow from sface.screens.configscreen import ConfigScreen from sface.screens.mainscreen import MainScreen -from sface.screens.rspecscreen import RSpecScreen class Nav(QWidget): def __init__(self, parent=None): @@ -20,9 +20,6 @@ class Nav(QWidget): self.main = QLabel("", self) self.main.setAlignment(Qt.AlignRight) - self.rspec = QLabel("", self) - self.rspec.setAlignment(Qt.AlignRight) - self.config = QLabel("", self) self.config.setAlignment(Qt.AlignRight) @@ -31,16 +28,14 @@ class Nav(QWidget): hlayout.addStretch() hlayout.addWidget(QLabel("Go to: ", self)) hlayout.addWidget(self.main) - hlayout.addWidget(self.rspec) hlayout.addWidget(self.config) self.setLayout(hlayout) def setTitle(self, title): self.title.setText(title) - def setLinks(self, main, rspec, config): + def setLinks(self, main, config): self.main.setText(main) - self.rspec.setText(rspec) self.config.setText(config) @@ -72,31 +67,31 @@ class MainWindow(QWidget): QWidget.__init__(self, parent) self.logWindow = LogWindow(self) + self.rspecWindow = RSpecWindow(self) self.pix = QLabel(self) self.config_screen = ConfigScreen(self) self.main_screen = MainScreen(self) - self.rspec_screen = RSpecScreen(self) self.screens = QStackedWidget(self) self.screens.addWidget(self.main_screen) self.screens.addWidget(self.config_screen) - self.screens.addWidget(self.rspec_screen) self.screens.addWidget(self.pix) self.next_screen = None self.nav = Nav(self) self.nav.setTitle(self.main_screen.getTitleText()) self.nav.setLinks(self.main_screen.getLinkText(), - self.rspec_screen.getLinkText(), self.config_screen.getLinkText()) self.status = Status(self) self.log = QLabel("Show Log", self) + self.rspec = QLabel("Show RSpec", self) hlayout = QHBoxLayout() hlayout.addWidget(self.status) hlayout.addStretch() + hlayout.addWidget(self.rspec) hlayout.addWidget(self.log) layout = QVBoxLayout() @@ -106,12 +101,14 @@ class MainWindow(QWidget): self.setLayout(layout) self.resize(800, 600) - for link in (self.nav.main, self.nav.rspec, self.nav.config): + for link in (self.nav.main, self.nav.config): self.connect(link, SIGNAL('linkActivated(QString)'), self.animateToScreen) self.connect(self.log, SIGNAL('linkActivated(QString)'), self.showLogWindow) + self.connect(self.rspec, SIGNAL('linkActivated(QString)'), + self.showRSpecWindow) def redirectOutputToLog(self): self.logWindow.redirectOutput() @@ -122,6 +119,13 @@ class MainWindow(QWidget): self.logWindow.raise_() self.logWindow.activateWindow() + def showRSpecWindow(self, link): + self.rspecWindow.show() + self.rspecWindow.resize(500, 640) + self.rspecWindow.raise_() + self.rspecWindow.activateWindow() + + def animatePixmap(self, y): self.pix.move(0, y) @@ -130,8 +134,6 @@ class MainWindow(QWidget): self.next_screen = self.config_screen elif link == self.main_screen.name: self.next_screen = self.main_screen - elif link == self.rspec_screen.name: - self.next_screen = self.rspec_screen curr_screen = self.screens.currentWidget() @@ -156,8 +158,6 @@ class MainWindow(QWidget): self.toConfigScreen() elif self.next_screen == self.main_screen: self.toMainScreen() - elif self.next_screen == self.rspec_screen: - self.toRSpecScreen() def toConfigScreen(self): self.screens.setCurrentWidget(self.config_screen) @@ -167,10 +167,8 @@ class MainWindow(QWidget): self.screens.setCurrentWidget(self.main_screen) self.nav.setTitle(self.main_screen.getTitleText()) - def toRSpecScreen(self): - self.screens.setCurrentWidget(self.rspec_screen) - self.nav.setTitle(self.rspec_screen.getTitleText()) - def setStatus(self, msg, timeout): self.status.set(msg, timeout) + def nodeSelectionChanged(self, hostname): + self.rspecWindow.showNode(hostname) 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() diff --git a/sface/screens/mainscreen.py b/sface/screens/mainscreen.py index a47ba3c..d56bca5 100644 --- a/sface/screens/mainscreen.py +++ b/sface/screens/mainscreen.py @@ -46,6 +46,15 @@ class NodeView(QTreeView): else: model.setData(status_index, QString(node_status['out'])) model.emit(SIGNAL("dataChanged(QModelIndex, QModelIndex)"), hostname_index, hostname_index) + + def mouseReleaseEvent(self, event): + index = self.currentIndex() + model = index.model() + hostname_index = model.index(index.row(), 1, index.parent()) + hostname_data = hostname_index.data().toString() + + self.emit(SIGNAL('hostnameClicked(QString)'), hostname_data) + class NodeNameDelegate(QStyledItemDelegate): @@ -314,14 +323,11 @@ class SliceWidget(QWidget): self.connect(refresh, SIGNAL('clicked()'), self.refresh) self.connect(submit, SIGNAL('clicked()'), self.submit) self.connect(searchbox, SIGNAL('textChanged(QString)'), self.filter) - self.connect(self.process, SIGNAL('readyReadStandardOutput()'), self.processOutputReady) - self.connect(self.process, SIGNAL('readyReadStandardError()'), self.processOutputReady) + self.connect(self.nodeView, SIGNAL('hostnameClicked(QString)'), + self.nodeSelectionChanged) self.updateView() - def processOutputReady(self): - self.parent().logWindow.setText(self.process.readOutput()) - def submitFinished(self): self.setStatus("Slice data submitted.") QTimer.singleShot(1000, self.refresh) @@ -445,6 +451,8 @@ class SliceWidget(QWidget): def updateSliceName(self): self.slicename.setText("Slice : %s" % (config.getSlice() or "None")) + def nodeSelectionChanged(self, hostname): + self.parent().nodeSelectionChanged(hostname) class MainScreen(SfaScreen): def __init__(self, parent): @@ -457,3 +465,5 @@ class MainScreen(SfaScreen): self.widget.updateSliceName() self.widget.updateView() + def nodeSelectionChanged(self, hostname): + self.mainwin.nodeSelectionChanged(hostname)