E5Gui/E5PathPicker.py

changeset 4593
cc745fa6c914
parent 4589
b648ccbdbef9
child 4594
1071d7ec6976
diff -r 9fdd473c68fb -r cc745fa6c914 E5Gui/E5PathPicker.py
--- a/E5Gui/E5PathPicker.py	Sun Nov 29 17:25:42 2015 +0100
+++ b/E5Gui/E5PathPicker.py	Sun Nov 29 19:29:34 2015 +0100
@@ -16,7 +16,7 @@
 except ImportError:
     from ThirdParty.enum import Enum
 
-from PyQt5.QtCore import pyqtSignal, Qt
+from PyQt5.QtCore import pyqtSignal, Qt, QFileInfo
 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QToolButton
 
 from . import E5FileDialog
@@ -35,7 +35,8 @@
     OpenFileMode = 0
     OpenFilesMode = 1
     SaveFileMode = 2
-    DirectoryMode = 3
+    SaveFileEnsureExtensionMode = 3
+    DirectoryMode = 4
 
 # TODO: Refactor the classes using a base class with common functions
 
@@ -312,6 +313,15 @@
         """
         return self.__filters
     
+    def setNameFilters(self, filters):
+        """
+        Public method to set the name filters for the completer.
+        
+        @param filter list of file name filters
+        @type list of str
+        """
+        self.__editor.completer().model().setNameFilters(filters)
+    
     def setButtonToolTip(self, tooltip):
         """
         Public method to set the tool button tool tip.
@@ -360,7 +370,9 @@
                 windowTitle = self.tr("Choose a file to open")
             elif self.__mode == E5PathPickerModes.OpenFilesMode:
                 windowTitle = self.tr("Choose files to open")
-            elif self.__mode == E5PathPickerModes.SaveFileMode:
+            elif self.__mode in [
+                E5PathPickerModes.SaveFileMode,
+                    E5PathPickerModes.SaveFileEnsureExtensionMode]:
                 windowTitle = self.tr("Choose a file to save")
             elif self.__mode == E5PathPickerModes.DirectoryMode:
                 windowTitle = self.tr("Choose a directory")
@@ -399,6 +411,21 @@
                 self.__filters,
                 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
             path = Utilities.toNativeSeparators(path)
+        elif self.__mode == E5PathPickerModes.SaveFileEnsureExtensionMode:
+            path, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
+                self,
+                windowTitle,
+                directory,
+                self.__filters,
+                None,
+                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
+            path = Utilities.toNativeSeparators(path)
+            if path:
+                ext = QFileInfo(path).suffix()
+                if not ext:
+                    ex = selectedFilter.split("(*")[1].split(")")[0]
+                    if ex:
+                        path += ex
         elif self.__mode == E5PathPickerModes.DirectoryMode:
             path = E5FileDialog.getExistingDirectory(
                 self,
@@ -835,6 +862,21 @@
                 self.__filters,
                 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
             path = Utilities.toNativeSeparators(path)
+        elif self.__mode == E5PathPickerModes.SaveFileEnsureExtensionMode:
+            path, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
+                self,
+                windowTitle,
+                directory,
+                self.__filters,
+                None,
+                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
+            path = Utilities.toNativeSeparators(path)
+            if path:
+                ext = QFileInfo(path).suffix()
+                if not ext:
+                    ex = selectedFilter.split("(*")[1].split(")")[0]
+                    if ex:
+                        path += ex
         elif self.__mode == E5PathPickerModes.DirectoryMode:
             path = E5FileDialog.getExistingDirectory(
                 self,

eric ide

mercurial