E5Gui/E5PathPickerDialog.py

branch
corba_options
changeset 6440
81a4bebbc028
child 6441
b7c3b34661d5
diff -r 86dd19e45d95 -r 81a4bebbc028 E5Gui/E5PathPickerDialog.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/E5Gui/E5PathPickerDialog.py	Sat Jul 28 14:35:06 2018 +0200
@@ -0,0 +1,161 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2018 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to enter a file system path using a file picker.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel
+
+from .E5PathPicker import E5PathPicker, E5PathPickerModes
+
+class E5PathPickerDialog(QDialog):
+    """
+    Class implementing a dialog to enter a file system path using a file
+    picker.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super(E5PathPickerDialog, self).__init__(parent)
+        
+        self.setMinimumWidth(400)
+        
+        self.__layout = QVBoxLayout(self)
+        
+        self.__label = QLabel(self)
+        
+        self.__pathPicker = E5PathPicker(self)
+        self.__buttonBox = QDialogButtonBox(
+            QDialogButtonBox.Cancel | QDialogButtonBox.Ok, self)
+        
+        self.__layout.addWidget(self.__label)
+        self.__layout.addWidget(self.__pathPicker)
+        self.__layout.addWidget(self.__buttonBox)
+        
+        self.__buttonBox.accepted.connect(self.accept)
+        self.__buttonBox.rejected.connect(self.reject)
+    
+    def setLabelText(self, text):
+        """
+        Public method to set the label text.
+        
+        @param text label text
+        @type str
+        """
+        self.__label.setText(text)
+    
+    def setTitle(self, title):
+        """
+        Public method to set the window title.
+        
+        @param title window title
+        @type str
+        """
+        self.setWindowTitle(title)
+        self.__pathPicker.setWindowTitle(title)
+    
+    def setPickerMode(self, mode):
+        """
+        Public method to set the mode of the path picker.
+        
+        @param mode picker mode
+        @type E5PathPickerModes
+        """
+        self.__pathPicker.setMode(mode)
+    
+    def setPickerPath(self, path):
+        """
+        Public method to set the path of the path picker.
+        
+        @param path path to be set
+        @type str
+        """
+        self.__pathPicker.setPath(path)
+    
+    def setDefaultDirectory(self, directory):
+        """
+        Public method to set the default directory of the path picker.
+        
+        @param directory default directory
+        @type str
+        """
+        self.__pathPicker.setDefaultDirectory(directory)
+    
+    def setPickerFilters(self, filters):
+        """
+        Public method to set the filters of the path picker.
+        
+        Note: Multiple filters must be separated by ';;'.
+        
+        @param filters string containing the file filters
+        @type str
+        """
+        self.__pathPicker.setFilters(filters)
+    
+    def getPath(self):
+        """
+        Public method to get the current path.
+        
+        @return current path
+        @rtype str
+        """
+        return self.__pathPicker.path()
+
+
+def getPath(parent, title, label, mode=E5PathPickerModes.OpenFileMode,
+            path="", defaultDirectory="", filters=None):
+    """
+    Function to get a file or directory path from the user.
+    
+    @param parent reference to the parent widget
+    @type QWidget
+    @param title title of the dialog
+    @type str
+    @param label text to be shown above the path picker
+    @type str
+    @param mode mode of the path picker
+    @type E5PathPickerModes
+    @param path initial path to be shown
+    @type str
+    @param defaultDirectory default directory of the path picker selection
+        dialog
+    @type str
+    @param filters list of file filters
+    @type list of str
+    @return tuple containing the entered path and a flag indicating that the
+        user pressed the OK button
+    @rtype tuple of (str, bool)
+    """
+    # step 1: setup of the dialog
+    dlg = E5PathPickerDialog(parent)
+    if title:
+        dlg.setTitle(title)
+    if label:
+        dlg.setLabelText(label)
+    dlg.setPickerMode(mode)
+    if path:
+        dlg.setPickerPath(path)
+    if defaultDirectory:
+        dlg.setDefaultDirectory(defaultDirectory)
+    if filters is not None and len(filters) > 0:
+        dlg.setPickerFilters(";;".join(filters))
+    
+    # step 2: show the dialog and get the result
+    if dlg.exec_() == QDialog.Accepted:
+        ok = True
+        path = dlg.getPath()
+    else:
+        ok = False
+        path = ""
+    
+    # step 3: return the result
+    return path, ok

eric ide

mercurial