ProjectDjangoTagsMenu/DjangoTagInputDialog.py

changeset 4
ba04ed0b14a1
child 5
e2b08694e945
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectDjangoTagsMenu/DjangoTagInputDialog.py	Wed Feb 05 19:13:12 2014 +0100
@@ -0,0 +1,73 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to enter data for the creation of a tag.
+"""
+
+from PyQt4.QtCore import Qt
+from PyQt4.QtGui import QDialog, QDialogButtonBox, QVBoxLayout, QLabel
+
+from E5Gui.E5LineEdit import E5ClearableLineEdit
+
+
+class DjangoTagInputDialog(QDialog):
+    """
+    Class implementing a dialog to enter data for the creation of a tag.
+    """
+    def __init__(self, labels, defaults=None, parent=None):
+        super(DjangoTagInputDialog, self).__init__(parent)
+        
+        assert 0 < len(labels) < 6      # max 5 entries allowed
+        self.__inputs = []
+        
+        self.__topLayout = QVBoxLayout(self)
+        index = 0
+        for label in labels:
+            self.__topLayout.addWidget(QLabel(label, self))
+            entry = E5ClearableLineEdit(self)
+            if defaults and index < len(defaults):
+                entry.setText(defaults[index])
+            self.__inputs.append(entry)
+            self.__topLayout.addWidget(entry)
+            index += 1
+        self.__buttonBox = QDialogButtonBox(
+            QDialogButtonBox.Ok | QDialogButtonBox.Cancel,
+            Qt.Horizontal, self)
+        self.__topLayout.addWidget(self.__buttonBox)
+        
+        self.resize(400, self.minimumSizeHint().height())
+        self.setSizeGripEnabled(True)
+        
+        self.__buttonBox.accepted.connect(self.accept)
+        self.__buttonBox.rejected.connect(self.reject)
+        
+        self.__inputs[0].selectAll()
+        self.__inputs[0].setFocus()
+    
+    def getData(self):
+        """
+        Public method to retrieve the entered data.
+        
+        @return tuple containing the text of all entries (tuple of string)
+        """
+        data = [input.text().strip() for input in self.__inputs]
+        return tuple(data)
+    
+    @staticmethod
+    def getText(parent, title, labels, defaults=[]):
+        """
+        Static method to create the dialog and return the entered data.
+        
+        @return tuple of a tuple containing the text of all entries
+            (tuple of string) and a flag indicating the acceptance
+            state (boolean)
+        """
+        dlg = DjangoTagInputDialog(labels, defaults, parent)
+        dlg.setWindowTitle(title)
+        if dlg.exec_() == QDialog.Accepted:
+            return dlg.getData(), True
+        else:
+            return tuple(), False

eric ide

mercurial