"""
import sys
import os
+from time import sleep
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import SIGNAL
from qmenutooltip import QMenuToolTip
Default actions are builded and profile manager stored from argument (instance of ProfHandler """
self.app = QtGui.QApplication(sys.argv)
-
+ for i in range(3):
+ if not QtGui.QSystemTrayIcon.isSystemTrayAvailable():
+ sleep(4)
+ else:
+ break
#check if system tray is avaiable on the system
if not QtGui.QSystemTrayIcon.isSystemTrayAvailable():
QtGui.QMessageBox.critical(None, "Systray",
super(Gui, self).__init__()
+ self.profiles = []
+
self.createActions()
self.createTrayIcon()
+ self.createMainDialog()
self.trayIcon.show()
-
- self.setWindowTitle("Profile manager / Dboxswitch - dropbox profile switcher")
- self.resize(200, 200)
-
+
self.profileManager = prManager
def main(self):
""" Create actions for the various components """
self.manageprofiles = QtGui.QAction("Manage &Profiles", self,
- triggered=self.hide)
+ triggered=self.show)
self.quitAction = QtGui.QAction("&Quit", self,
triggered=QtGui.qApp.quit)
#profile manager component
- self.addProfile = QtGui.QAction(" Add &Profile ", self,
+ self.addProfileAction = QtGui.QAction(" Add &Profile ", self,
triggered=self.addProfile)
+ def createMainDialog(self):
+ """ Build the main dialog layout """
+
+ self.setWindowTitle("Profile manager / Dboxswitch - dropbox profile switcher")
+ #add a default action to create a profile
+ self.addButton = QtGui.QPushButton(QtGui.QIcon(appconf.addpicon),
+ "Add Profile")
+ self.addButton.clicked.connect(self.addProfile)
+ self.addButton.setVisible(False)
+
+ self.la = QtGui.QFormLayout()
+
+ self.la.addRow(self.addButton)
+ self.la.sizePolicy = QtGui.QSizePolicy.Minimum
+ self.la.setVerticalSpacing(15)
+ self.la.setHorizontalSpacing(15)
+ self.formGroupBox = QtGui.QGroupBox("Manage profiles:")
+ self.formGroupBox.setLayout(self.la)
+ mainLayout = QtGui.QVBoxLayout()
+ mainLayout.addWidget(self.formGroupBox)
+ self.setLayout(mainLayout)
+
+
+ def show(self):
+ """ Show the main dialog for dealing with profiles """
+
+ profiles = self.profileManager.getProfilesList()
+
+ for pr in profiles:
+ prname = self.profileManager.getBaseProfileName(pr)
+ delButton = QtGui.QToolButton()
+ label = QtGui.QLabel(prname)
+ self.la.addRow(label, delButton)
+ delAction = QtGui.QAction(QtGui.QIcon(appconf.delpicon),"Delete", self,
+ triggered=self.deleteProfileAction(prname, (label, delButton)))
+ delButton.setDefaultAction(delAction)
+ self.profiles.append((label, delButton))
+
+ #if profiles was empty
+ if len(profiles) == 0:
+ self.addButton.setVisible(True)
+ else:
+ self.addButton.setVisible(False)
+
+ super(Gui, self).show()
+
+ def hide(self):
+ """ Hides the main dialog """
+
+ #Hides all the profiles in the Dialog
+ #User can deal with profiles like removing the dir manually
+
+ for ws in self.profiles:
+ for w in ws:
+ w.setVisible(False)
+ w.setParent(None)
+ super(Gui, self).hide()
def createTrayIcon(self):
""" Builds a new tray icon with a context menu and an action for the profile manager menu """
profiles = self.profileManager.getProfilesList()
for prpath in profiles:
- pr = os.path.basename(prpath)
+ pr = self.profileManager.getBaseProfileName(prpath)
receiver = self.activateProfileAction(prpath)
menuItem_Profile = self.menuProfiles.addAction(pr)
if self.profileManager.isCurrentProfile(prpath):
self.menuProfiles.addSeparator()
#action and menu item for adding a New Profile
- self.menuProfiles.addAction(self.addProfile)
+ self.menuProfiles.addAction(self.addProfileAction)
self.menuProfiles.activateWindow()
self.menuProfiles.popup(QtGui.QCursor.pos())
self.showError(str(e))
return f
+ def deleteProfileAction(self, pr, prWidgets):
+ """ Returns a callable to be passed as an action for the profile manager 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.delProfile(pr)
+ for w in prWidgets:
+ w.setParent(None)
+ w.setVisible(False)
+ 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 """