X-Git-Url: http://git.onelab.eu/?p=sface.git;a=blobdiff_plain;f=sfamainscreen.py;h=3ba9c03176eaaa3af47d8f4e8f33f8d158cf0b38;hp=3d1f1efc63f846de67d58f0a63572e4108911006;hb=7b355516dc4d4dd5b44e02a03d293d696e0566a1;hpb=d8beeb8ad0c9cf2eab771d68e5006c5bb94d521b diff --git a/sfamainscreen.py b/sfamainscreen.py index 3d1f1ef..3ba9c03 100644 --- a/sfamainscreen.py +++ b/sfamainscreen.py @@ -1,5 +1,8 @@ -from PyQt4.QtGui import QWidget, QLabel +from PyQt4.QtCore import Qt, QString, SIGNAL +from PyQt4.QtGui import QWidget, QLabel, QTreeView, QStandardItemModel, QVBoxLayout, QSizePolicy + +from sfa.util.rspecHelper import RSpec from sfadata import SfaData from sfascreen import SfaScreen @@ -8,11 +11,64 @@ from sfascreen import SfaScreen class SliceWidget(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) - label = QLabel("slice widget", self) + + self.nodeView = QTreeView(self) + self.nodeView.setRootIsDecorated(False) + self.nodeView.setAlternatingRowColors(True) + self.nodeView.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + self.nodeModel = QStandardItemModel(0, 2, self) + self.nodeModel.setHeaderData(0, Qt.Horizontal, QString("Testbed")) + self.nodeModel.setHeaderData(1, Qt.Horizontal, QString("Hostname")) + + self.nodeView.setModel(self.nodeModel) + + label = QLabel("Refresh", self) + label.setScaledContents(False) + + layout = QVBoxLayout() + layout.addWidget(label) + layout.addWidget(self.nodeView) + self.setLayout(layout) + self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + + self.connect(label, SIGNAL('linkActivated(QString)'), + self.refresh) + + + # TODO: use the methods from sfa-trunk + def rspec_get_networks(self, rspec_string): + rspec = RSpec (rspec_string) + return rspec.rspec.xpath("./network[@name]/@name") + def rspec_get_nodes_from_network(self, rspec_string, network): + rspec = RSpec (rspec_string) + return rspec.rspec.xpath("./network[@name='%s']/site/node/hostname/text()" % network) + + def refresh(self, link=None): + data = SfaData() + rspec = data.getRSpecFromSM() +# import os +# xml = open(os.path.expanduser("~/.sfi/ple.inria.heartbeat.rspec")).read() +# rspec = RSpec(xml) + + networks = self.rspec_get_networks(rspec) + networks.reverse() + + for network in networks: + nodes = self.rspec_get_nodes_from_network(rspec, network) + for node in nodes: + self.addNode(network, node) + + def addNode(self, testbed, hostname): + self.nodeModel.insertRow(0) + self.nodeModel.setData(self.nodeModel.index(0,0), QString(testbed)) + self.nodeModel.setData(self.nodeModel.index(0,1), QString(hostname)) + class SfaMainScreen(SfaScreen): def __init__(self, parent=None): SfaScreen.__init__(self, parent) + slice = SliceWidget(self) self.init(slice, "Main Window", "PlanetLab Federation GUI")