X-Git-Url: https://v.licheni.net/stack/code/dboxswitch.git/blobdiff_plain/86b7bff5277f8681b1dcb4d722481e5173fe590f..d12658f79e38f8a8b3c42cbaa97b76cfd63f25e7:/gui.py diff --git a/gui.py b/gui.py index 5f16273..7b7fd57 100755 --- a/gui.py +++ b/gui.py @@ -1,4 +1,3 @@ -#!/usr/bin/python # -*- coding: utf-8 -*- """ @@ -34,8 +33,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """ import sys import os -from PyQt4 import QtGui +from PyQt4 import QtGui, QtCore 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) + def createTrayIcon(self): """ Builds a new tray icon with a context menu and an action for the profile manager menu """ @@ -114,32 +118,46 @@ 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") + QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_DontShowIconsInMenus, False) #Get profiles from the ProfHandler embedded in the gui profiles = self.profileManager.getProfilesList() - for pr in profiles: - pr = os.path.basename(pr) + for prpath in profiles: + pr = os.path.basename(prpath) + receiver = self.activateProfileAction(prpath) menuItem_Profile = self.menuProfiles.addAction(pr) - + if self.profileManager.isCurrentProfile(prpath): + menuItem_Profile.setIcon(QtGui.QIcon(appconf.cpicon)) + #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 """