ProjectFlask/FormSelectionDialog.py

changeset 18
d76a0939be6a
child 60
02243723ac17
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/FormSelectionDialog.py	Sun Nov 22 14:06:00 2020 +0100
@@ -0,0 +1,128 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2020 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to select the template type.
+"""
+
+from PyQt5.QtCore import pyqtSlot, QCoreApplication
+from PyQt5.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(FormSelectionDialog, self).__init__(parent)
+        self.setupUi(self)
+        
+        self.buttonBox.button(QDialogButtonBox.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.Ok).setEnabled(True)
+        else:
+            self.preview.clear()
+            self.buttonBox.button(QDialogButtonBox.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