add logo in mainwindow
[sface.git] / sface / mainwindow.py
index fde8ad8..2e9664a 100644 (file)
@@ -1,42 +1,54 @@
-
 import os
 import sys
 import time
 
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
 import os
 import sys
 import time
 
 from PyQt4.QtCore import *
 from PyQt4.QtGui import *
+from PyQt4.QtOpenGL 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.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.helpscreen import HelpScreen
 
 class Nav(QWidget):
     def __init__(self, parent=None):
         QWidget.__init__(self, parent)
         
         self.title = QLabel("", self)
 
 class Nav(QWidget):
     def __init__(self, parent=None):
         QWidget.__init__(self, parent)
         
         self.title = QLabel("", self)
+        scene=QGraphicsScene()
+        scene.addPixmap(QPixmap('/Users/parmentelat/git/sface/macos/graphic-sfa64.png'))
+        self.logoview=QGraphicsView()
+        self.logoview.setViewport(QGLWidget())
+        self.logoview.setScene(scene)
         self.main = QLabel("", self)
         self.main.setAlignment(Qt.AlignRight)
 
         self.config = QLabel("", self)
         self.config.setAlignment(Qt.AlignRight)
         
         self.main = QLabel("", self)
         self.main.setAlignment(Qt.AlignRight)
 
         self.config = QLabel("", self)
         self.config.setAlignment(Qt.AlignRight)
         
+        self.help = QLabel("", self)
+        self.help.setAlignment(Qt.AlignRight)
+
         hlayout = QHBoxLayout()
         hlayout = QHBoxLayout()
+        hlayout.addWidget(self.logoview)
         hlayout.addWidget(self.title)
         hlayout.addStretch()
         hlayout.addWidget(QLabel("Go to: ", self))
         hlayout.addWidget(self.main)
         hlayout.addWidget(self.config)
         hlayout.addWidget(self.title)
         hlayout.addStretch()
         hlayout.addWidget(QLabel("Go to: ", self))
         hlayout.addWidget(self.main)
         hlayout.addWidget(self.config)
+        hlayout.addWidget(self.help)
         self.setLayout(hlayout)
 
     def setTitle(self, title):
         self.title.setText(title)
 
         self.setLayout(hlayout)
 
     def setTitle(self, title):
         self.title.setText(title)
 
-    def setLinks(self, main, config):
+    def setLinks(self, main, config, help):
         self.main.setText(main)
         self.config.setText(config)
         self.main.setText(main)
         self.config.setText(config)
+        self.help.setText(help)
 
 
 class Status(QLabel):
 
 
 class Status(QLabel):
@@ -73,17 +85,20 @@ class MainWindow(QWidget):
         self.pix = QLabel(self)
         self.config_screen = ConfigScreen(self)
         self.main_screen = MainScreen(self)
         self.pix = QLabel(self)
         self.config_screen = ConfigScreen(self)
         self.main_screen = MainScreen(self)
+        self.help_screen = HelpScreen(self)
 
         self.screens = QStackedWidget(self)
         self.screens.addWidget(self.main_screen)
         self.screens.addWidget(self.config_screen)
 
         self.screens = QStackedWidget(self)
         self.screens.addWidget(self.main_screen)
         self.screens.addWidget(self.config_screen)
+        self.screens.addWidget(self.help_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.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.config_screen.getLinkText())
+                          self.config_screen.getLinkText(),
+                          self.help_screen.getLinkText())
 
         self.status = Status(self)
         self.log = QLabel("<a href='showlog'>Show Log</a>", self)
 
         self.status = Status(self)
         self.log = QLabel("<a href='showlog'>Show Log</a>", self)
@@ -100,9 +115,9 @@ class MainWindow(QWidget):
         layout.addWidget(self.screens)
         layout.addLayout(hlayout)
         self.setLayout(layout)
         layout.addWidget(self.screens)
         layout.addLayout(hlayout)
         self.setLayout(layout)
-        self.resize(800, 600)
+        self.resize(800, 500)
 
 
-        for link in (self.nav.main, self.nav.config):
+        for link in (self.nav.main, self.nav.config, self.nav.help):
             self.connect(link, SIGNAL('linkActivated(QString)'),
                          self.animateToScreen)
 
             self.connect(link, SIGNAL('linkActivated(QString)'),
                          self.animateToScreen)
 
@@ -116,7 +131,7 @@ class MainWindow(QWidget):
 
     def showLogWindow(self, link):
         self.logWindow.show()
 
     def showLogWindow(self, link):
         self.logWindow.show()
-        self.logWindow.resize(800, 400)
+        self.logWindow.resize(800, 200)
         self.logWindow.raise_()
         self.logWindow.activateWindow()
 
         self.logWindow.raise_()
         self.logWindow.activateWindow()
 
@@ -135,6 +150,8 @@ class MainWindow(QWidget):
             self.next_screen = self.config_screen
         elif link == self.main_screen.name:
             self.next_screen = self.main_screen
             self.next_screen = self.config_screen
         elif link == self.main_screen.name:
             self.next_screen = self.main_screen
+        elif link == self.help_screen.name:
+            self.next_screen = self.help_screen
 
         curr_screen = self.screens.currentWidget()
 
 
         curr_screen = self.screens.currentWidget()
 
@@ -142,6 +159,9 @@ class MainWindow(QWidget):
             self.setStatus("Already showing %s" % curr_screen.getTitleText(), timeout=1000)
             return
 
             self.setStatus("Already showing %s" % curr_screen.getTitleText(), timeout=1000)
             return
 
+        # This is an optimization to have a smoother animation. We
+        # render the widget into a pixmap and animate that instead of
+        # moving the whole widget around.
         pixmap = QPixmap(self.screens.size())
         curr_screen.render(pixmap)
         self.screens.setCurrentWidget(self.pix)
         pixmap = QPixmap(self.screens.size())
         curr_screen.render(pixmap)
         self.screens.setCurrentWidget(self.pix)
@@ -159,11 +179,17 @@ class MainWindow(QWidget):
             self.toConfigScreen()
         elif self.next_screen == self.main_screen:
             self.toMainScreen()
             self.toConfigScreen()
         elif self.next_screen == self.main_screen:
             self.toMainScreen()
+        elif self.next_screen == self.help_screen:
+            self.toHelpScreen()
 
     def toConfigScreen(self):
         self.screens.setCurrentWidget(self.config_screen)
         self.nav.setTitle(self.config_screen.getTitleText())
 
 
     def toConfigScreen(self):
         self.screens.setCurrentWidget(self.config_screen)
         self.nav.setTitle(self.config_screen.getTitleText())
 
+    def toHelpScreen(self):
+        self.screens.setCurrentWidget(self.help_screen)
+        self.nav.setTitle(self.help_screen.getTitleText())
+
     def toMainScreen(self):
         self.screens.setCurrentWidget(self.main_screen)
         self.nav.setTitle(self.main_screen.getTitleText())
     def toMainScreen(self):
         self.screens.setCurrentWidget(self.main_screen)
         self.nav.setTitle(self.main_screen.getTitleText())
@@ -172,4 +198,5 @@ class MainWindow(QWidget):
         self.status.set(msg, timeout)
 
     def nodeSelectionChanged(self, hostname):
         self.status.set(msg, timeout)
 
     def nodeSelectionChanged(self, hostname):
-        self.rspecWindow.showNode(hostname)
+        if self.rspecWindow.isVisible():
+            self.rspecWindow.showNode(hostname)