FirstImplementation of main dialog profile manager
authorstack <stack@inventati.org>
Wed, 11 Jul 2012 16:44:36 +0000 (18:44 +0200)
committerstack <stack@inventati.org>
Wed, 11 Jul 2012 16:44:36 +0000 (18:44 +0200)
Profiles could be deleted from a main dialog with a layout that has
still some resizong problem.
The layout builds a label and a qtoolbutton that calls the action that
hides those widgets and deletes the profile.
The actual call to profHandler.delProfile is commented out.

delete.png [new file with mode: 0644]
gui.py
settings.py

diff --git a/delete.png b/delete.png
new file mode 100644 (file)
index 0000000..ec35ed2
Binary files /dev/null and b/delete.png differ
diff --git a/gui.py b/gui.py
index 920ee85..a0c10f5 100644 (file)
--- a/gui.py
+++ b/gui.py
@@ -58,20 +58,21 @@ class Gui(QtGui.QDialog):
     
         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): 
         """ Like Gtk application this main executes the app, thi is somewhat writed for
         compatibility in porting the app """
 
+        self.show()
         sys.exit(self.app.exec_())
 
     def closeEvent(self, event):
@@ -85,7 +86,7 @@ class Gui(QtGui.QDialog):
         """ 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)
 
@@ -93,6 +94,51 @@ class Gui(QtGui.QDialog):
         self.addProfile = QtGui.QAction("  Add &Profile  ", self,
                 triggered=self.addProfile)
 
+    def createMainDialog(self):    
+        """ Build the main dialog layout """ 
+        
+        self.setWindowTitle("Profile manager / Dboxswitch - dropbox profile switcher")
+
+        self.la            = QtGui.QFormLayout()
+        self.la.sizePolicy = QtGui.QSizePolicy.Expanding
+        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))
+
+        self.sizeHint()
+        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.setParent(None)
+                w.close()
+        super(Gui, self).hide()
 
     def createTrayIcon(self):
          """ Builds a new tray icon with a context menu and an action for the profile manager menu """
@@ -158,6 +204,22 @@ class Gui(QtGui.QDialog):
                 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.close()
+            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 """
index 43d7bb7..7e8e1f0 100644 (file)
@@ -37,14 +37,14 @@ import os, sys
 class Settings():
     def __init__(self):
         path = __file__ if __file__ is not None else sys.argv[0]
-        __location__ = os.path.realpath(
-                os.path.join(os.getcwd(), os.path.dirname(path)))
+        __location__ = os.path.realpath(os.path.join(os.getcwd(), 
+            os.path.dirname(path)))
 
-        print(os.path.join(__location__,"icon.png"))
         self.appname = "dboxswitch"
         self.appversion = "0.1"
-        self.icon    = os.path.join(__location__,"icon.png")
-        self.cpicon  = os.path.join(__location__,"current-profile.png")
+        self.icon     = os.path.join(__location__,"icon.png")
+        self.cpicon   = os.path.join(__location__,"current-profile.png")
+        self.delpicon = os.path.join(__location__,"delete.png")
 
 global conf
 appconf = Settings()