ProjectDjangoTagsMenu/DjangoTagInputDialog.py

Wed, 21 Dec 2022 09:34:06 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 21 Dec 2022 09:34:06 +0100
branch
eric7
changeset 67
807714618a59
parent 63
85418cf03fdb
child 69
9acb6987ce60
permissions
-rw-r--r--

Adapted some import statements to eric 23.1 and newer.

# -*- coding: utf-8 -*-

# Copyright (c) 2014 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a dialog to enter data for the creation of a tag.
"""

from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QLabel, QLineEdit, QVBoxLayout


class DjangoTagInputDialog(QDialog):
    """
    Class implementing a dialog to enter data for the creation of a tag.
    """

    def __init__(self, labels, defaults=None, parent=None):
        """
        Constructor

        @param labels list of labels for the entry fields
        @type list of str
        @param defaults list of default values for the entry fields
        @type list of str
        @param parent reference to the parent widget
        @type QWidget
        @exception RuntimeError raised to signal too many labels were given
        """
        super().__init__(parent)

        if len(labels) == 0 or len(labels) > 5:
            raise RuntimeError("Illegal number of labels given (max. 5 allowed)")

        self.__inputs = []

        self.__topLayout = QVBoxLayout(self)
        for index, label in enumerate(labels):
            self.__topLayout.addWidget(QLabel(label, self))
            entry = QLineEdit(self)
            entry.setClearButtonEnabled(True)
            if defaults and index < len(defaults):
                entry.setText(defaults[index])
            self.__inputs.append(entry)
            self.__topLayout.addWidget(entry)
        self.__buttonBox = QDialogButtonBox(
            QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel,
            Qt.Orientation.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
        @rtype tuple of str
        """
        data = [input.text().strip() for input in self.__inputs]
        return tuple(data)

    @staticmethod
    def getText(parent, title, labels, defaults=None):
        """
        Public static method to create the dialog and return the entered data.

        @param parent reference to the parent widget
        @type QWidget
        @param title title of the dialog
        @type str
        @param labels list of labels for the entry fields
        @type list of str
        @param defaults list of default values for the entry fields
        @type list of str
        @return tuple of a tuple containing the text of all entries
            and a flag indicating the acceptance state
        @rtype tuple of (tuple of str, bool)
        """
        if defaults is None:
            defaults = []

        dlg = DjangoTagInputDialog(labels, defaults, parent)
        dlg.setWindowTitle(title)
        if dlg.exec() == QDialog.DialogCode.Accepted:
            return dlg.getData(), True
        else:
            return (), False

eric ide

mercurial