ProjectFlask/FormSelectionDialog.py

Sat, 23 Dec 2023 15:48:52 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 23 Dec 2023 15:48:52 +0100
branch
eric7
changeset 83
d8788dc3442f
parent 82
bb14c648099b
child 87
075f7667f69d
permissions
-rw-r--r--

Updated copyright for 2024.

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

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

"""
Module implementing a dialog to select the template type.
"""

from PyQt6.QtCore import QCoreApplication, pyqtSlot
from PyQt6.QtWidgets import QDialog, QDialogButtonBox

from .Ui_FormSelectionDialog import Ui_FormSelectionDialog


class FormSelectionDialog(QDialog, Ui_FormSelectionDialog):
    """
    Class implementing a dialog to select the template type.
    """

    Templates = {
        "html5": {
            "title": QCoreApplication.translate(
                "FormSelectionDialog", "Standard HTML 5 template"
            ),
            "template": """<!DOCTYPE html>\n"""
            """  <head>\n"""
            """    <title></title>\n"""
            """    <style>\n"""
            """    </style>\n"""
            """  </head>\n"""
            """\n"""
            """  <body>\n"""
            """  </body>\n"""
            """</html>\n""",
        },
        "basic_jinja": {
            "title": QCoreApplication.translate(
                "FormSelectionDialog", "Basic Jinja template"
            ),
            "template": """<!DOCTYPE html>\n"""
            """  <head>\n"""
            """    {% if title %}\n"""
            """    <title>{{ title }}</title>\n"""
            """    {% else %}\n"""
            """    <title>Title</title>\n"""
            """    {% endif %}\n"""
            """  </head>\n"""
            """\n"""
            """  <body>\n"""
            """    <h1>Hello, {{ user.username }}!</h1>\n"""
            """  </body>\n"""
            """</html>\n""",
        },
        "jinja_base": {
            "title": QCoreApplication.translate(
                "FormSelectionDialog", "Jinja base template"
            ),
            "template": """<!DOCTYPE html>\n"""
            """  <head>\n"""
            """    {% if title %}\n"""
            """    <title>{{ title }}</title>\n"""
            """    {% else %}\n"""
            """    <title>Title</title>\n"""
            """    {% endif %}\n"""
            """  </head>\n"""
            """\n"""
            """  <body>\n"""
            """    {% block content %}{% endblock %}\n"""
            """  </body>\n"""
            """</html>\n""",
        },
        "jinja_extends": {
            "title": QCoreApplication.translate(
                "FormSelectionDialog", "Jinja extension template"
            ),
            "template": """{% extends "base.html" %}\n"""
            """\n"""
            """{% block content %}\n"""
            """  <h1>{{ user.username }}</h1>\n"""
            """  {% for item in items %}\n"""
            """  <div><p>{{ item.field1 }}: {{ item.field2 }}"""
            """</p></div>\n"""
            """  {% endfor %}\n"""
            """{% endblock %}\n""",
        },
    }

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

        @param parent reference to the parent widget
        @type QWidget
        """
        super().__init__(parent)
        self.setupUi(self)

        self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(False)

        self.typeCombo.addItem("")
        for templateType in FormSelectionDialog.Templates:
            self.typeCombo.addItem(
                FormSelectionDialog.Templates[templateType]["title"], templateType
            )
        self.typeCombo.setCurrentIndex(0)

    @pyqtSlot(int)
    def on_typeCombo_currentIndexChanged(self, index):
        """
        Private slot to act upon a change of the selected template type.

        @param index selected index
        @type int
        """
        templateType = self.typeCombo.itemData(index)
        if templateType:
            self.preview.setPlainText(
                FormSelectionDialog.Templates[templateType]["template"]
            )
            self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(True)
        else:
            self.preview.clear()
            self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(False)

    def getTemplateText(self):
        """
        Public method to get the template text.

        @return text of the template
        @rtype str
        """
        templateType = self.typeCombo.currentData()
        return FormSelectionDialog.Templates[templateType]["template"]

eric ide

mercurial