add a global status widget
authorBarış Metin <Talip-Baris.Metin@sophia.inria.fr>
Fri, 10 Sep 2010 08:10:58 +0000 (10:10 +0200)
committerBarış Metin <Talip-Baris.Metin@sophia.inria.fr>
Fri, 10 Sep 2010 08:10:58 +0000 (10:10 +0200)
sface/screens/configscreen.py
sface/screens/mainscreen.py
sface/screens/sfascreen.py
sface/sfawindow.py

index 7cb3ef7..fd2babc 100644 (file)
@@ -6,7 +6,7 @@ from sface.sficonfig import config
 from sface.screens.sfascreen import SfaScreen
 
 class ConfigWidget(QWidget):
-    def __init__(self, parent=None):
+    def __init__(self, parent):
         QWidget.__init__(self, parent)
 
         label1 = QLabel("User HRN:", self)
@@ -31,10 +31,11 @@ class ConfigWidget(QWidget):
         config.setUser("%s" % self.user.text())
         config.setSlice("%s" % self.slice.text())
         config.save_config()
+        self.parent().setStatus("<font color='green'>Configuration saved!</font>")
         
 
 class ConfigScreen(SfaScreen):
-    def __init__(self, parent=None):
+    def __init__(self, parent):
         SfaScreen.__init__(self, parent)
         
         widget = ConfigWidget(self)
index 9b834fa..15f0ed0 100644 (file)
@@ -11,7 +11,7 @@ from sface.screens.sfascreen import SfaScreen
 
 
 class SliceWidget(QWidget):
-    def __init__(self, parent=None):
+    def __init__(self, parent):
         QWidget.__init__(self, parent)
 
         self.nodeView = QTreeView(self)
@@ -31,8 +31,6 @@ class SliceWidget(QWidget):
         slicename = QLabel ("Slice : %s"%(config.getSlice() or "None"),self)
         slicename.setScaledContents(False)
 
-        self.status = QLabel("")
-
         hlayout = QHBoxLayout()
         hlayout.addWidget(slicename)
         hlayout.addStretch()
@@ -41,7 +39,6 @@ class SliceWidget(QWidget):
         layout = QVBoxLayout()
         layout.addLayout(hlayout)
         layout.addWidget(self.nodeView)
-        layout.addWidget(self.status)
         self.setLayout(layout)
         self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
 
@@ -58,18 +55,18 @@ class SliceWidget(QWidget):
 
     def refresh(self, link=None):
         if not config.getSlice():
-            self.status.setText("Slice not set yet!")
+            self.parent().setStatus("<font color='red'>Slice not set yet!</font>")
             return
 
         self.process = SfiProcess()
         outfile = self.process.getRSpecFromSM()
-        self.status.setText("Updating slice data. This may take some time...")
+        self.parent().setStatus("Updating slice data. This may take some time...")
         
         self.connect(self.process, SIGNAL('finished()'), self.refreshFinished)
 
     def refreshFinished(self):
         del self.process
-        self.status.setText("Slice data updated.")
+        self.parent().setStatus("<font color='green'>Slice data updated.</font>")
         self.updateView()
 
     def updateView(self):
@@ -104,9 +101,8 @@ class SliceWidget(QWidget):
 
 
 class MainScreen(SfaScreen):
-    def __init__(self, parent=None):
+    def __init__(self, parent):
         SfaScreen.__init__(self, parent)
 
         slice = SliceWidget(self)
         self.init(slice, "Main Window", "PlanetLab Federation GUI")
-#        slice.refresh()
index b3f68e8..3271f2d 100644 (file)
@@ -6,6 +6,7 @@ from PyQt4.QtGui import *
 class SfaScreen(QWidget):
     def __init__(self, parent):
         QWidget.__init__(self, parent)
+        self.mainwin = parent
         self.name = self.title = self.widget = None
 
     def init(self, widget, name, title):
@@ -26,3 +27,6 @@ class SfaScreen(QWidget):
 
     def getTitleText(self):
         return "<b>%s</b>" % self.title
+
+    def setStatus(self, msg):
+        self.mainwin.setStatus(msg)
index 4def49a..84439a9 100644 (file)
@@ -5,9 +5,40 @@ from PyQt4.QtGui import *
 from sface.screens.configscreen import ConfigScreen
 from sface.screens.mainscreen import MainScreen
 
+class Nav(QWidget):
+    def __init__(self, parent=None):
+        QWidget.__init__(self, parent)
+        
+        self.title = QLabel("", self)
+        self.link = QLabel("", self)
+        self.link.setAlignment(Qt.AlignRight)
+        
+        hlayout = QHBoxLayout()
+        hlayout.addWidget(self.title)
+        hlayout.addStretch()
+        hlayout.addWidget(self.link)
+        self.setLayout(hlayout)
+
+    def setTitle(self, title):
+        self.title.setText(title)
+
+    def setLink(self, link):
+        self.link.setText(link)
+
+
+class Status(QLabel):
+    def __init__(self, parent=None):
+        QLabel.__init__(self, "", parent)
+
+    def set(self, msg):
+        self.setText(msg)
+        QTimer.singleShot(3000, self, SLOT("clear()"))
+
+    def clear(self):
+        self.setText("")
+
 
 class SfaWindow(QWidget):
-    
     def __init__(self, parent=None):
         QWidget.__init__(self, parent)
 
@@ -18,22 +49,20 @@ class SfaWindow(QWidget):
         self.screens.addWidget(self.main_screen)
         self.screens.addWidget(self.config_screen)
 
-        self.title = QLabel(self.main_screen.getTitleText(), self)
-        self.switch = QLabel(self.config_screen.getLinkText(), self)
-        self.switch.setAlignment(Qt.AlignRight)
-        
-        hlayout = QHBoxLayout()
-        hlayout.addWidget(self.title)
-        hlayout.addStretch()
-        hlayout.addWidget(self.switch)
+        self.nav = Nav(self)
+        self.nav.setTitle(self.main_screen.getTitleText())
+        self.nav.setLink(self.config_screen.getLinkText())
+
+        self.status = Status(self)
 
         layout = QVBoxLayout()
-        layout.addLayout(hlayout)
+        layout.addWidget(self.nav)
         layout.addWidget(self.screens)
+        layout.addWidget(self.status)
         self.setLayout(layout)
         self.resize(800, 600)
 
-        self.connect(self.switch, SIGNAL('linkActivated(QString)'),
+        self.connect(self.nav.link, SIGNAL('linkActivated(QString)'),
                      self.toScreen)
 
     def toScreen(self, link):
@@ -44,13 +73,13 @@ class SfaWindow(QWidget):
 
     def toConfigScreen(self):
         self.screens.setCurrentWidget(self.config_screen)
-        self.switch.setText(self.main_screen.getLinkText())
-        self.title.setText(self.config_screen.getTitleText())
+        self.nav.setLink(self.main_screen.getLinkText())
+        self.nav.setTitle(self.config_screen.getTitleText())
 
     def toMainScreen(self):
         self.screens.setCurrentWidget(self.main_screen)
-        self.switch.setText(self.config_screen.getLinkText())
-        self.title.setText(self.main_screen.getTitleText())
-
-        
+        self.nav.setLink(self.config_screen.getLinkText())
+        self.nav.setTitle(self.main_screen.getTitleText())
 
+    def setStatus(self, msg):
+        self.status.set(msg)