profiling switching works on linux and maybe on osx, not yet tested
[stack/code/dboxswitch.git] / gui.py
diff --git a/gui.py b/gui.py
index 5f16273..a54d423 100755 (executable)
--- a/gui.py
+++ b/gui.py
@@ -1,4 +1,3 @@
-#!/usr/bin/python
 # -*- coding: utf-8 -*-
 
 """
@@ -36,6 +35,7 @@ import sys
 import os
 from PyQt4 import QtGui
 from PyQt4.QtCore import SIGNAL
+from qmenutooltip import QMenuToolTip
 
 from apperror import AppError
 from settings import appconf
@@ -89,6 +89,10 @@ class Gui(QtGui.QDialog):
         self.quitAction = QtGui.QAction("&Quit", self,
                 triggered=QtGui.qApp.quit)
 
+        #profile manager component
+        self.addProfile = QtGui.QAction("  Add &Profile  ", self,
+                triggered=self.addProfile, icon=QtGui.QIcon(appconf.icon))
+
 
     def createTrayIcon(self):
          """ Builds a new tray icon with a context menu and an action for the profile manager menu """
@@ -114,32 +118,43 @@ class Gui(QtGui.QDialog):
         action to add a new One """
 
         if reason in (QtGui.QSystemTrayIcon.Trigger, QtGui.QSystemTrayIcon.DoubleClick):
-            self.menuProfiles = QtGui.QMenu()
+            self.menuProfiles = QMenuToolTip()
             self.menuProfiles.setTitle("Profiles")
 
             #Get profiles from the ProfHandler embedded in the gui
             profiles = self.profileManager.getProfilesList()
 
             for pr in profiles:
+                #pr is a profile path
+                receiver = self.activateProfileAction(pr)
                 pr = os.path.basename(pr)
                 menuItem_Profile = self.menuProfiles.addAction(pr)
-
                 #Using lambda function to pass additional arguments to the function, in this case the path of the profile
-                receiver = lambda pr=pr: self.profileManager.activateProfile(pr)
                 self.connect(menuItem_Profile, SIGNAL('triggered()'), receiver)
+                #set menu item ToolTip
+                menuItem_Profile.setToolTip("Activate profile: "+pr)
 
                 self.menuProfiles.addAction(menuItem_Profile)
 
-            #menuItem_Profile = self.menuProfiles.addAction("")
-            #self.menuProfiles.addAction(menuItem_Profile)
             self.menuProfiles.addSeparator()
-            menuItem_Profile = QtGui.QAction("  Add &Profile  ", self,
-            triggered=self.addProfile, icon=QtGui.QIcon(appconf.icon))
-            self.menuProfiles.addAction(menuItem_Profile)
+            #action and menu item for adding a New Profile
+            self.menuProfiles.addAction(self.addProfile)
 
             self.menuProfiles.activateWindow()
             self.menuProfiles.popup(QtGui.QCursor.pos())
 
+    def activateProfileAction(self, pr):
+        """ Returns a callable to be passed as an action for the switching profile mechanism 
+        to self.connect(menuItem_Profile... 
+        It compiles a function with a profile name as argument and also handle the displaying of errors."""
+
+        def f():
+            try:
+                self.profileManager.activateProfile(pr)
+            except AppError, e:
+                self.showError(str(e))
+        return f
+
     def addProfile(self):
         """ Gui frontend to add a new Profile, it requests the user a profile name 
         through a QInputDialog and creates a new profile with the help of the ProfHandler embedded in the Gui """