E5Gui/E5PathPicker.py

changeset 4581
76999ca7bbf1
parent 4578
5d611151cdec
child 4589
b648ccbdbef9
--- a/E5Gui/E5PathPicker.py	Fri Nov 27 20:07:55 2015 +0100
+++ b/E5Gui/E5PathPicker.py	Sat Nov 28 19:47:23 2015 +0100
@@ -35,7 +35,7 @@
     OpenFileMode = 0
     OpenFilesMode = 1
     SaveFileMode = 2
-    DiretoryMode = 3
+    DirectoryMode = 3
 
 
 class E5PathPicker(QWidget):
@@ -44,10 +44,15 @@
     tool button to open a file dialog.
     
     @signal textChanged(path) emitted when the entered path has changed
+    @signal pathSelected(path) emitted after a path has been selected via the
+        file dialog
+    @signal aboutToShowPathPickerDialog emitted before the file dialog is shown
     """
     DefaultMode = E5PathPickerModes.OpenFileMode
     
     textChanged = pyqtSignal(str)
+    pathSelected = pyqtSignal(str)
+    aboutToShowPathPickerDialog = pyqtSignal()
     
     def __init__(self, parent=None):
         """
@@ -101,10 +106,18 @@
             self.__completer = None
             
             # Set a new completer
-            if mode == E5PathPickerModes.DiretoryMode:
+            if mode == E5PathPickerModes.DirectoryMode:
                 self.__completer = E5DirCompleter(self.__editor)
             else:
                 self.__completer = E5FileCompleter(self.__editor)
+            
+            # set inactive text
+            if mode == E5PathPickerModes.OpenFilesMode:
+                self.__editor.setInactiveText(
+                    self.tr("Enter Path Names separated by ';'"))
+            else:
+                self.__editor.setInactiveText(
+                    self.tr("Enter Path Name"))
     
     def mode(self):
         """
@@ -141,7 +154,9 @@
         @rtype str
         """
         if self.__mode == E5PathPickerModes.OpenFilesMode:
-            return self.__editor.text()
+            return ";".join(
+                [Utilities.toNativeSeparators(path)
+                 for path in self.__editor.text().split(";")])
         else:
             return os.path.expanduser(
                 Utilities.toNativeSeparators(self.__editor.text()))
@@ -164,6 +179,42 @@
         """
         return self.text()
     
+    def paths(self):
+        """
+        Public method to get the list of entered paths.
+        
+        @return entered paths
+        @rtype list of str
+        """
+        if self.__mode == E5PathPickerModes.OpenFilesMode:
+            return self.path().split(";")
+        else:
+            return [self.path()]
+    
+    def firstPath(self):
+        """
+        Public method to get the first path of a list of entered paths.
+        
+        @return first path
+        @rtype str
+        """
+        if self.__mode == E5PathPickerModes.OpenFilesMode:
+            return self.path().split(";")[0]
+        else:
+            return self.path()
+    
+    def lastPath(self):
+        """
+        Public method to get the last path of a list of entered paths.
+        
+        @return first path
+        @rtype str
+        """
+        if self.__mode == E5PathPickerModes.OpenFilesMode:
+            return self.path().split(";")[-1]
+        else:
+            return self.path()
+    
     def setEditorEnabled(self, enable):
         """
         Public method to set the path editor's enabled state.
@@ -280,6 +331,8 @@
         """
         Private slot to show the path picker dialog.
         """
+        self.aboutToShowPathPickerDialog.emit()
+        
         windowTitle = self.__windowTitle
         if not windowTitle:
             if self.__mode == E5PathPickerModes.OpenFileMode:
@@ -288,16 +341,19 @@
                 windowTitle = self.tr("Choose files to open")
             elif self.__mode == E5PathPickerModes.SaveFileMode:
                 windowTitle = self.tr("Choose a file to save")
-            elif self.__mode == E5PathPickerModes.DiretoryMode:
+            elif self.__mode == E5PathPickerModes.DirectoryMode:
                 windowTitle = self.tr("Choose a directory")
         
         directory = self.__editor.text()
+        if not directory and self.__defaultDirectory:
+            directory = self.__defaultDirectory
         if self.__mode == E5PathPickerModes.OpenFilesMode:
-            directory = os.path.expanduser(
-                Utilities.fromNativeSeparators(directory.split(";")[0]))
+            directory = os.path.expanduser(directory.split(";")[0])
         else:
-            directory = os.path.expanduser(
-                Utilities.fromNativeSeparators(directory))
+            directory = os.path.expanduser(directory)
+        if not os.path.isabs(directory) and self.__defaultDirectory:
+            directory = os.path.join(self.__defaultDirectory, directory)
+        directory = Utilities.fromNativeSeparators(directory)
         
         if self.__mode == E5PathPickerModes.OpenFileMode:
             path = E5FileDialog.getOpenFileName(
@@ -322,7 +378,7 @@
                 self.__filters,
                 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
             path = Utilities.toNativeSeparators(path)
-        elif self.__mode == E5PathPickerModes.DiretoryMode:
+        elif self.__mode == E5PathPickerModes.DirectoryMode:
             path = E5FileDialog.getExistingDirectory(
                 self,
                 windowTitle,
@@ -334,6 +390,7 @@
         
         if path:
             self.__editor.setText(path)
+            self.pathSelected.emit(path)
 
 
 class E5ComboPathPicker(QWidget):
@@ -342,10 +399,15 @@
     tool button to open a file dialog.
     
     @signal editTextChanged(path) emitted when the entered path has changed
+    @signal pathSelected(path) emitted after a path has been selected via the
+        file dialog
+    @signal aboutToShowPathPickerDialog emitted before the file dialog is shown
     """
     DefaultMode = E5PathPickerModes.OpenFileMode
     
     editTextChanged = pyqtSignal(str)
+    pathSelected = pyqtSignal(str)
+    aboutToShowPathPickerDialog = pyqtSignal()
     
     def __init__(self, parent=None):
         """
@@ -399,10 +461,18 @@
             self.__completer = None
             
             # Set a new completer
-            if mode == E5PathPickerModes.DiretoryMode:
+            if mode == E5PathPickerModes.DirectoryMode:
                 self.__completer = E5DirCompleter(self.__editor)
             else:
                 self.__completer = E5FileCompleter(self.__editor)
+            
+            # set inactive text
+            if mode == E5PathPickerModes.OpenFilesMode:
+                self.__editor.setInactiveText(
+                    self.tr("Enter Path Names separated by ';'"))
+            else:
+                self.__editor.setInactiveText(
+                    self.tr("Enter Path Name"))
     
     def mode(self):
         """
@@ -445,7 +515,9 @@
         @rtype str
         """
         if self.__mode == E5PathPickerModes.OpenFilesMode:
-            return self.__editor.currentText()
+            return ";".join(
+                [Utilities.toNativeSeparators(path)
+                 for path in self.__editor.currentText().split(";")])
         else:
             return os.path.expanduser(
                 Utilities.toNativeSeparators(self.__editor.currentText()))
@@ -468,6 +540,42 @@
         """
         return self.currentText()
     
+    def paths(self):
+        """
+        Public method to get the list of entered paths.
+        
+        @return entered paths
+        @rtype list of str
+        """
+        if self.__mode == E5PathPickerModes.OpenFilesMode:
+            return self.path().split(";")
+        else:
+            return [self.path()]
+    
+    def firstPath(self):
+        """
+        Public method to get the first path of a list of entered paths.
+        
+        @return first path
+        @rtype str
+        """
+        if self.__mode == E5PathPickerModes.OpenFilesMode:
+            return self.path().split(";")[0]
+        else:
+            return self.path()
+    
+    def lastPath(self):
+        """
+        Public method to get the last path of a list of entered paths.
+        
+        @return first path
+        @rtype str
+        """
+        if self.__mode == E5PathPickerModes.OpenFilesMode:
+            return self.path().split(";")[-1]
+        else:
+            return self.path()
+    
     def addItems(self, pathsList):
         """
         Public method to add paths to the current list.
@@ -621,6 +729,8 @@
         """
         Private slot to show the path picker dialog.
         """
+        self.aboutToShowPathPickerDialog.emit()
+        
         windowTitle = self.__windowTitle
         if not windowTitle:
             if self.__mode == E5PathPickerModes.OpenFileMode:
@@ -629,16 +739,19 @@
                 windowTitle = self.tr("Choose files to open")
             elif self.__mode == E5PathPickerModes.SaveFileMode:
                 windowTitle = self.tr("Choose a file to save")
-            elif self.__mode == E5PathPickerModes.DiretoryMode:
+            elif self.__mode == E5PathPickerModes.DirectoryMode:
                 windowTitle = self.tr("Choose a directory")
         
         directory = self.__editor.currentText()
+        if not directory and self.__defaultDirectory:
+            directory = self.__defaultDirectory
         if self.__mode == E5PathPickerModes.OpenFilesMode:
-            directory = os.path.expanduser(
-                Utilities.fromNativeSeparators(directory.split(";")[0]))
+            directory = os.path.expanduser(directory.split(";")[0])
         else:
-            directory = os.path.expanduser(
-                Utilities.fromNativeSeparators(directory))
+            directory = os.path.expanduser(directory)
+        if not os.path.isabs(directory) and self.__defaultDirectory:
+            directory = os.path.join(self.__defaultDirectory, directory)
+        directory = Utilities.fromNativeSeparators(directory)
         
         if self.__mode == E5PathPickerModes.OpenFileMode:
             path = E5FileDialog.getOpenFileName(
@@ -663,7 +776,7 @@
                 self.__filters,
                 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
             path = Utilities.toNativeSeparators(path)
-        elif self.__mode == E5PathPickerModes.DiretoryMode:
+        elif self.__mode == E5PathPickerModes.DirectoryMode:
             path = E5FileDialog.getExistingDirectory(
                 self,
                 windowTitle,
@@ -675,3 +788,4 @@
         
         if path:
             self.__editor.setEditText(path)
+            self.pathSelected.emit(path)

eric ide

mercurial