- changed to the new style header eric7 release-10.5.0

Mon, 28 Oct 2024 17:11:28 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 28 Oct 2024 17:11:28 +0100
branch
eric7
changeset 85
fcb5126077b1
parent 84
f39230b845e4
child 86
3d172343601b

- changed to the new style header
- ensured proper parent relationship of modal dialogs
- included compiled form files

.hgignore file | annotate | diff | comparison | revisions
ChangeLog file | annotate | diff | comparison | revisions
PKGLIST file | annotate | diff | comparison | revisions
PluginFlask.epj file | annotate | diff | comparison | revisions
PluginProjectFlask.py file | annotate | diff | comparison | revisions
PluginProjectFlask.zip file | annotate | diff | comparison | revisions
ProjectFlask/ConfigurationPage/Ui_FlaskPage.py file | annotate | diff | comparison | revisions
ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py file | annotate | diff | comparison | revisions
ProjectFlask/FlaskBabelExtension/Ui_PyBabelConfigDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/FlaskConfigDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py file | annotate | diff | comparison | revisions
ProjectFlask/FlaskMigrateExtension/Ui_MigrateConfigDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/FlaskMigrateExtension/Ui_MigrateSummaryDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/Project.py file | annotate | diff | comparison | revisions
ProjectFlask/RunServerDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/Ui_FlaskCommandDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/Ui_FlaskConfigDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/Ui_FlaskVirtualenvConfigurationDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/Ui_FormSelectionDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/Ui_RoutesDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/Ui_RunServerDialog.py file | annotate | diff | comparison | revisions
ProjectFlask/Ui_ServerStartOptionsDialog.py file | annotate | diff | comparison | revisions
--- a/.hgignore	Sat Dec 23 17:08:59 2023 +0100
+++ b/.hgignore	Mon Oct 28 17:11:28 2024 +0100
@@ -1,5 +1,4 @@
 glob:.eric7project
-glob:.eric6project
 glob:.ropeproject
 glob:.jedi
 glob:.directory
@@ -13,4 +12,3 @@
 glob:tmp
 glob:__pycache__
 glob:**.DS_Store
-glob:Ui_*.py
--- a/ChangeLog	Sat Dec 23 17:08:59 2023 +0100
+++ b/ChangeLog	Mon Oct 28 17:11:28 2024 +0100
@@ -1,5 +1,10 @@
 ChangeLog
 ---------
+Version 10.5.0
+- changed to the new style header
+- ensured proper parent relationship of modal dialogs
+- included compiled form files
+
 Version 10.4.0
 - adapted some import statements to eric 23.1 and newer
 
--- a/PKGLIST	Sat Dec 23 17:08:59 2023 +0100
+++ b/PKGLIST	Mon Oct 28 17:11:28 2024 +0100
@@ -24,6 +24,7 @@
 ProjectFlask/AnsiTools.py
 ProjectFlask/ConfigurationPage/FlaskPage.py
 ProjectFlask/ConfigurationPage/FlaskPage.ui
+ProjectFlask/ConfigurationPage/Ui_FlaskPage.py
 ProjectFlask/ConfigurationPage/__init__.py
 ProjectFlask/Documentation/LICENSE.GPL3
 ProjectFlask/FlaskBabelExtension/FlaskBabelDetector.py
@@ -31,6 +32,7 @@
 ProjectFlask/FlaskBabelExtension/PyBabelConfigDialog.py
 ProjectFlask/FlaskBabelExtension/PyBabelConfigDialog.ui
 ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py
+ProjectFlask/FlaskBabelExtension/Ui_PyBabelConfigDialog.py
 ProjectFlask/FlaskBabelExtension/__init__.py
 ProjectFlask/FlaskCommandDialog.py
 ProjectFlask/FlaskCommandDialog.ui
@@ -42,6 +44,8 @@
 ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py
 ProjectFlask/FlaskMigrateExtension/MigrateSummaryDialog.py
 ProjectFlask/FlaskMigrateExtension/MigrateSummaryDialog.ui
+ProjectFlask/FlaskMigrateExtension/Ui_MigrateConfigDialog.py
+ProjectFlask/FlaskMigrateExtension/Ui_MigrateSummaryDialog.py
 ProjectFlask/FlaskMigrateExtension/__init__.py
 ProjectFlask/FlaskVirtualenvConfigurationDialog.py
 ProjectFlask/FlaskVirtualenvConfigurationDialog.ui
@@ -54,6 +58,13 @@
 ProjectFlask/RunServerDialog.ui
 ProjectFlask/ServerStartOptionsDialog.py
 ProjectFlask/ServerStartOptionsDialog.ui
+ProjectFlask/Ui_FlaskCommandDialog.py
+ProjectFlask/Ui_FlaskConfigDialog.py
+ProjectFlask/Ui_FlaskVirtualenvConfigurationDialog.py
+ProjectFlask/Ui_FormSelectionDialog.py
+ProjectFlask/Ui_RoutesDialog.py
+ProjectFlask/Ui_RunServerDialog.py
+ProjectFlask/Ui_ServerStartOptionsDialog.py
 ProjectFlask/__init__.py
 ProjectFlask/i18n/flask_de.qm
 ProjectFlask/i18n/flask_en.qm
--- a/PluginFlask.epj	Sat Dec 23 17:08:59 2023 +0100
+++ b/PluginFlask.epj	Mon Oct 28 17:11:28 2024 +0100
@@ -1,7 +1,7 @@
 {
   "header": {
     "comment": "eric project file for project PluginFlask",
-    "copyright": "Copyright (C) 2023 Detlev Offenbach, detlev@die-offenbachs.de"
+    "copyright": "Copyright (C) 2024 Detlev Offenbach, detlev@die-offenbachs.de"
   },
   "project": {
     "AUTHOR": "Detlev Offenbach",
@@ -27,6 +27,7 @@
           "OverloadDecorators": [
             "overload"
           ],
+          "RespectTypeIgnore": false,
           "SuppressDummyArgs": false,
           "SuppressNoneReturning": false
         },
@@ -68,7 +69,7 @@
         "DocstringType": "eric_black",
         "EnabledCheckerCategories": "C, D, E, I, L, M, NO, N, Y, U, W",
         "ExcludeFiles": "*/Ui_*.py,",
-        "ExcludeMessages": "C101,E265,E266,E305,E402,M201,M301,M302,M303,M304,M305,M306,M307,M308,M311,M312,M313,M314,M315,M321,M701,M702,M811,M834,M852,N802,N803,N807,N808,N821,W293,W503,Y401,Y402",
+        "ExcludeMessages": "C101,E265,E266,E305,E402,M251,M301,M302,M303,M304,M305,M306,M307,M308,M311,M312,M313,M314,M315,M321,M701,M702,M811,M834,M852,N802,N803,N807,N808,N821,W293,W503,Y401,Y402",
         "FixCodes": "",
         "FixIssues": false,
         "FutureChecker": "",
@@ -189,7 +190,6 @@
       "Makefile": "OTHERS",
       "README": "OTHERS",
       "README.*": "OTHERS",
-      "Ui_*.py": "__IGNORE__",
       "makefile": "OTHERS"
     },
     "FORMS": [
@@ -242,13 +242,14 @@
     "OTHERTOOLSPARMS": {
       "Black": {
         "exclude": "/(\\.direnv|\\.eggs|\\.git|\\.hg|\\.ipynb_checkpoints|\\.mypy_cache|\\.nox|\\.pytest_cache|\\.ruff_cache|\\.tox|\\.svn|\\.venv|\\.vscode|__pypackages__|_build|buck-out|build|dist|venv)/",
-        "extend-exclude": "",
+        "extend-exclude": "Ui_.*\\.py",
         "force-exclude": "",
         "line-length": 88,
         "skip-magic-trailing-comma": false,
         "skip-string-normalization": false,
         "source": "project",
         "target-version": [
+          "py313",
           "py312",
           "py311",
           "py310",
@@ -291,11 +292,13 @@
       "PluginProjectFlask.py",
       "ProjectFlask/AnsiTools.py",
       "ProjectFlask/ConfigurationPage/FlaskPage.py",
+      "ProjectFlask/ConfigurationPage/Ui_FlaskPage.py",
       "ProjectFlask/ConfigurationPage/__init__.py",
       "ProjectFlask/FlaskBabelExtension/FlaskBabelDetector.py",
       "ProjectFlask/FlaskBabelExtension/PyBabelCommandDialog.py",
       "ProjectFlask/FlaskBabelExtension/PyBabelConfigDialog.py",
       "ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py",
+      "ProjectFlask/FlaskBabelExtension/Ui_PyBabelConfigDialog.py",
       "ProjectFlask/FlaskBabelExtension/__init__.py",
       "ProjectFlask/FlaskCommandDialog.py",
       "ProjectFlask/FlaskConfigDialog.py",
@@ -303,6 +306,8 @@
       "ProjectFlask/FlaskMigrateExtension/MigrateConfigDialog.py",
       "ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py",
       "ProjectFlask/FlaskMigrateExtension/MigrateSummaryDialog.py",
+      "ProjectFlask/FlaskMigrateExtension/Ui_MigrateConfigDialog.py",
+      "ProjectFlask/FlaskMigrateExtension/Ui_MigrateSummaryDialog.py",
       "ProjectFlask/FlaskMigrateExtension/__init__.py",
       "ProjectFlask/FlaskVirtualenvConfigurationDialog.py",
       "ProjectFlask/FormSelectionDialog.py",
@@ -310,6 +315,13 @@
       "ProjectFlask/RoutesDialog.py",
       "ProjectFlask/RunServerDialog.py",
       "ProjectFlask/ServerStartOptionsDialog.py",
+      "ProjectFlask/Ui_FlaskCommandDialog.py",
+      "ProjectFlask/Ui_FlaskConfigDialog.py",
+      "ProjectFlask/Ui_FlaskVirtualenvConfigurationDialog.py",
+      "ProjectFlask/Ui_FormSelectionDialog.py",
+      "ProjectFlask/Ui_RoutesDialog.py",
+      "ProjectFlask/Ui_RunServerDialog.py",
+      "ProjectFlask/Ui_ServerStartOptionsDialog.py",
       "ProjectFlask/__init__.py",
       "__init__.py"
     ],
@@ -380,4 +392,4 @@
     "VCSOTHERDATA": {},
     "VERSION": ""
   }
-}
\ No newline at end of file
+}
--- a/PluginProjectFlask.py	Sat Dec 23 17:08:59 2023 +0100
+++ b/PluginProjectFlask.py	Mon Oct 28 17:11:28 2024 +0100
@@ -24,17 +24,20 @@
 from ProjectFlask.Project import Project
 
 # Start-of-Header
-name = "Flask Project Plugin"
-author = "Detlev Offenbach <detlev@die-offenbachs.de>"
-autoactivate = True
-deactivateable = True
-version = "10.4.0"
-className = "ProjectFlaskPlugin"
-packageName = "ProjectFlask"
-shortDescription = "Project support for Flask projects."
-longDescription = """This plugin implements project support for Flask projects."""
-needsRestart = False
-pyqtApi = 2
+__header__ = {
+    "name": "Flask Project Plugin",
+    "author": "Detlev Offenbach <detlev@die-offenbachs.de>",
+    "autoactivate": True,
+    "deactivateable": True,
+    "version": "10.5.0",
+    "className": "ProjectFlaskPlugin",
+    "packageName": "ProjectFlask",
+    "shortDescription": "Project support for Flask projects.",
+    "longDescription": "This plugin implements project support for Flask projects.",
+    "needsRestart": False,
+    "hasCompiledForms": True,
+    "pyqtApi": 2,
+}
 # End-of-Header
 
 error = ""
Binary file PluginProjectFlask.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/ConfigurationPage/Ui_FlaskPage.py	Mon Oct 28 17:11:28 2024 +0100
@@ -0,0 +1,163 @@
+# Form implementation generated from reading ui file '/home/detlev/Development/Python/Eric/eric7_plugins/Plugin_Project_Flask/ProjectFlask/ConfigurationPage/FlaskPage.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_FlaskPage(object):
+    def setupUi(self, FlaskPage):
+        FlaskPage.setObjectName("FlaskPage")
+        FlaskPage.resize(500, 740)
+        self.verticalLayout_3 = QtWidgets.QVBoxLayout(FlaskPage)
+        self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.headerLabel = QtWidgets.QLabel(FlaskPage)
+        self.headerLabel.setObjectName("headerLabel")
+        self.verticalLayout_3.addWidget(self.headerLabel)
+        self.line15 = QtWidgets.QFrame(FlaskPage)
+        self.line15.setFrameShape(QtWidgets.QFrame.Shape.HLine)
+        self.line15.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
+        self.line15.setFrameShape(QtWidgets.QFrame.Shape.HLine)
+        self.line15.setObjectName("line15")
+        self.verticalLayout_3.addWidget(self.line15)
+        self.pyramidConsoleGroup = QtWidgets.QGroupBox(FlaskPage)
+        self.pyramidConsoleGroup.setObjectName("pyramidConsoleGroup")
+        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.pyramidConsoleGroup)
+        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        self.label_2 = QtWidgets.QLabel(self.pyramidConsoleGroup)
+        self.label_2.setObjectName("label_2")
+        self.horizontalLayout_3.addWidget(self.label_2)
+        self.consoleCommandCombo = QtWidgets.QComboBox(self.pyramidConsoleGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.consoleCommandCombo.sizePolicy().hasHeightForWidth())
+        self.consoleCommandCombo.setSizePolicy(sizePolicy)
+        self.consoleCommandCombo.setEditable(True)
+        self.consoleCommandCombo.setObjectName("consoleCommandCombo")
+        self.horizontalLayout_3.addWidget(self.consoleCommandCombo)
+        self.verticalLayout_3.addWidget(self.pyramidConsoleGroup)
+        self.flaskBrowserGroup = QtWidgets.QGroupBox(FlaskPage)
+        self.flaskBrowserGroup.setObjectName("flaskBrowserGroup")
+        self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.flaskBrowserGroup)
+        self.verticalLayout_5.setObjectName("verticalLayout_5")
+        self.externalBrowserCheckBox = QtWidgets.QCheckBox(self.flaskBrowserGroup)
+        self.externalBrowserCheckBox.setObjectName("externalBrowserCheckBox")
+        self.verticalLayout_5.addWidget(self.externalBrowserCheckBox)
+        self.verticalLayout_3.addWidget(self.flaskBrowserGroup)
+        self.flaskVirtualEnvironmentPy3Group = QtWidgets.QGroupBox(FlaskPage)
+        self.flaskVirtualEnvironmentPy3Group.setObjectName("flaskVirtualEnvironmentPy3Group")
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.flaskVirtualEnvironmentPy3Group)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.label_13 = QtWidgets.QLabel(self.flaskVirtualEnvironmentPy3Group)
+        self.label_13.setWordWrap(True)
+        self.label_13.setObjectName("label_13")
+        self.verticalLayout_2.addWidget(self.label_13)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.py3VenvNameComboBox = QtWidgets.QComboBox(self.flaskVirtualEnvironmentPy3Group)
+        self.py3VenvNameComboBox.setObjectName("py3VenvNameComboBox")
+        self.horizontalLayout.addWidget(self.py3VenvNameComboBox)
+        self.py3VenvNamesReloadButton = QtWidgets.QToolButton(self.flaskVirtualEnvironmentPy3Group)
+        self.py3VenvNamesReloadButton.setObjectName("py3VenvNamesReloadButton")
+        self.horizontalLayout.addWidget(self.py3VenvNamesReloadButton)
+        self.verticalLayout_2.addLayout(self.horizontalLayout)
+        self.verticalLayout_3.addWidget(self.flaskVirtualEnvironmentPy3Group)
+        self.groupBox = QtWidgets.QGroupBox(FlaskPage)
+        self.groupBox.setObjectName("groupBox")
+        self.gridLayout = QtWidgets.QGridLayout(self.groupBox)
+        self.gridLayout.setObjectName("gridLayout")
+        self.label = QtWidgets.QLabel(self.groupBox)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
+        self.colorSchemeComboBox = QtWidgets.QComboBox(self.groupBox)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.colorSchemeComboBox.sizePolicy().hasHeightForWidth())
+        self.colorSchemeComboBox.setSizePolicy(sizePolicy)
+        self.colorSchemeComboBox.setObjectName("colorSchemeComboBox")
+        self.gridLayout.addWidget(self.colorSchemeComboBox, 0, 1, 1, 1)
+        self.verticalLayout_3.addWidget(self.groupBox)
+        self.flaskDocumentationGroup = QtWidgets.QGroupBox(FlaskPage)
+        self.flaskDocumentationGroup.setObjectName("flaskDocumentationGroup")
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.flaskDocumentationGroup)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.label_6 = QtWidgets.QLabel(self.flaskDocumentationGroup)
+        self.label_6.setObjectName("label_6")
+        self.horizontalLayout_2.addWidget(self.label_6)
+        self.urlEdit = QtWidgets.QLineEdit(self.flaskDocumentationGroup)
+        self.urlEdit.setObjectName("urlEdit")
+        self.horizontalLayout_2.addWidget(self.urlEdit)
+        self.urlResetButton = QtWidgets.QToolButton(self.flaskDocumentationGroup)
+        self.urlResetButton.setObjectName("urlResetButton")
+        self.horizontalLayout_2.addWidget(self.urlResetButton)
+        self.verticalLayout_3.addWidget(self.flaskDocumentationGroup)
+        self.TranslationsGroup = QtWidgets.QGroupBox(FlaskPage)
+        self.TranslationsGroup.setObjectName("TranslationsGroup")
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.TranslationsGroup)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.label_10 = QtWidgets.QLabel(self.TranslationsGroup)
+        self.label_10.setMinimumSize(QtCore.QSize(0, 40))
+        self.label_10.setWordWrap(True)
+        self.label_10.setObjectName("label_10")
+        self.verticalLayout.addWidget(self.label_10)
+        self.translationsEditorPicker = EricPathPicker(self.TranslationsGroup)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.translationsEditorPicker.sizePolicy().hasHeightForWidth())
+        self.translationsEditorPicker.setSizePolicy(sizePolicy)
+        self.translationsEditorPicker.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
+        self.translationsEditorPicker.setObjectName("translationsEditorPicker")
+        self.verticalLayout.addWidget(self.translationsEditorPicker)
+        self.verticalLayout_3.addWidget(self.TranslationsGroup)
+        spacerItem = QtWidgets.QSpacerItem(20, 64, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+        self.verticalLayout_3.addItem(spacerItem)
+
+        self.retranslateUi(FlaskPage)
+        QtCore.QMetaObject.connectSlotsByName(FlaskPage)
+        FlaskPage.setTabOrder(self.consoleCommandCombo, self.externalBrowserCheckBox)
+        FlaskPage.setTabOrder(self.externalBrowserCheckBox, self.py3VenvNameComboBox)
+        FlaskPage.setTabOrder(self.py3VenvNameComboBox, self.py3VenvNamesReloadButton)
+        FlaskPage.setTabOrder(self.py3VenvNamesReloadButton, self.colorSchemeComboBox)
+        FlaskPage.setTabOrder(self.colorSchemeComboBox, self.urlEdit)
+        FlaskPage.setTabOrder(self.urlEdit, self.urlResetButton)
+
+    def retranslateUi(self, FlaskPage):
+        _translate = QtCore.QCoreApplication.translate
+        self.headerLabel.setText(_translate("FlaskPage", "<b>Configure Flask</b>"))
+        self.pyramidConsoleGroup.setTitle(_translate("FlaskPage", "Console Command"))
+        self.label_2.setText(_translate("FlaskPage", "Console Command:"))
+        self.consoleCommandCombo.setToolTip(_translate("FlaskPage", "Enter the console command"))
+        self.flaskBrowserGroup.setTitle(_translate("FlaskPage", "Web-Browser"))
+        self.externalBrowserCheckBox.setToolTip(_translate("FlaskPage", "Select to use an external web-browser"))
+        self.externalBrowserCheckBox.setText(_translate("FlaskPage", "Use external web-browser"))
+        self.flaskVirtualEnvironmentPy3Group.setTitle(_translate("FlaskPage", "Flask Virtual Environment"))
+        self.label_13.setText(_translate("FlaskPage", "Select the Virtual Environment to be used with Flask"))
+        self.py3VenvNamesReloadButton.setToolTip(_translate("FlaskPage", "Press to reload the names of the virtual environments"))
+        self.groupBox.setTitle(_translate("FlaskPage", "Server Output"))
+        self.label.setText(_translate("FlaskPage", "Color Scheme for ANSI Escape Codes:"))
+        self.colorSchemeComboBox.setToolTip(_translate("FlaskPage", "Select the color scheme to be applied for ANSI color escape codes"))
+        self.flaskDocumentationGroup.setTitle(_translate("FlaskPage", "Flask Documentation"))
+        self.label_6.setText(_translate("FlaskPage", "URL:"))
+        self.urlEdit.setToolTip(_translate("FlaskPage", "Enter the URL of the Flask documentation"))
+        self.urlResetButton.setToolTip(_translate("FlaskPage", "Press to reset the URL to the default URL"))
+        self.TranslationsGroup.setTitle(_translate("FlaskPage", "Translations Editor"))
+        self.label_10.setText(_translate("FlaskPage", "Enter the path of an editor to use to do the translations. Leave empty to disable this feature."))
+        self.translationsEditorPicker.setToolTip(_translate("FlaskPage", "Enter the path of the translations editor"))
+from eric7.EricWidgets.EricPathPicker import EricPathPicker
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    FlaskPage = QtWidgets.QWidget()
+    ui = Ui_FlaskPage()
+    ui.setupUi(FlaskPage)
+    FlaskPage.show()
+    sys.exit(app.exec())
--- a/ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py	Sat Dec 23 17:08:59 2023 +0100
+++ b/ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py	Mon Oct 28 17:11:28 2024 +0100
@@ -40,13 +40,14 @@
         @type ProjectFlaskPlugin
         @param project reference to the project object
         @type Project
-        @param parent parent
-        @type QObject
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super().__init__(parent)
 
         self.__plugin = plugin
         self.__project = project
+        self.__ui = parent
 
         self.__ericProject = ericApp().getObject("Project")
 
@@ -278,7 +279,7 @@
         from .PyBabelConfigDialog import PyBabelConfigDialog
 
         config = self.__project.getData("flask-babel", "")
-        dlg = PyBabelConfigDialog(config)
+        dlg = PyBabelConfigDialog(config, parent=self.__ui)
         if dlg.exec() == QDialog.DialogCode.Accepted:
             config = dlg.getConfiguration()
             self.__project.setData("flask-babel", "", config)
@@ -480,7 +481,10 @@
             args += ["-o", os.path.relpath(potFile, workdir), "."]
 
             dlg = PyBabelCommandDialog(
-                self, title, msgSuccess=self.tr("\nMessages extracted successfully.")
+                self,
+                title,
+                msgSuccess=self.tr("\nMessages extracted successfully."),
+                parent=self.__ui,
             )
             res = dlg.startCommand("extract", args, workdir)
             if res:
@@ -516,6 +520,7 @@
                 self,
                 title,
                 msgSuccess=self.tr("\nMessage catalog initialized successfully."),
+                parent=self.__ui,
             )
             res = dlg.startCommand("init", args, workdir)
             if res:
@@ -551,6 +556,7 @@
                 self,
                 title,
                 msgSuccess=self.tr("\nMessage catalogs compiled successfully."),
+                parent=self.__ui,
             )
             res = dlg.startCommand("compile", args, workdir)
             if res:
@@ -606,6 +612,7 @@
                 self,
                 title=title,
                 msgSuccess=self.tr("\nMessage catalogs compiled successfully."),
+                parent=self.__ui,
             )
             res = dlg.startBatchCommand(argsList, workdir)
             if res:
@@ -651,6 +658,7 @@
                 self,
                 title,
                 msgSuccess=self.tr("\nMessage catalogs updated successfully."),
+                parent=self.__ui,
             )
             res = dlg.startCommand("update", args, workdir)
             if res:
@@ -714,6 +722,7 @@
                 self,
                 title=title,
                 msgSuccess=self.tr("\nMessage catalogs updated successfully."),
+                parent=self.__ui,
             )
             res = dlg.startBatchCommand(argsList, workdir)
             if res:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/FlaskBabelExtension/Ui_PyBabelConfigDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -0,0 +1,107 @@
+# Form implementation generated from reading ui file '/home/detlev/Development/Python/Eric/eric7_plugins/Plugin_Project_Flask/ProjectFlask/FlaskBabelExtension/PyBabelConfigDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_PyBabelConfigDialog(object):
+    def setupUi(self, PyBabelConfigDialog):
+        PyBabelConfigDialog.setObjectName("PyBabelConfigDialog")
+        PyBabelConfigDialog.resize(600, 180)
+        PyBabelConfigDialog.setSizeGripEnabled(True)
+        self.gridLayout = QtWidgets.QGridLayout(PyBabelConfigDialog)
+        self.gridLayout.setObjectName("gridLayout")
+        self.label = QtWidgets.QLabel(PyBabelConfigDialog)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
+        self.configFilePicker = EricPathPicker(PyBabelConfigDialog)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.configFilePicker.sizePolicy().hasHeightForWidth())
+        self.configFilePicker.setSizePolicy(sizePolicy)
+        self.configFilePicker.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
+        self.configFilePicker.setObjectName("configFilePicker")
+        self.gridLayout.addWidget(self.configFilePicker, 0, 1, 1, 1)
+        self.label_4 = QtWidgets.QLabel(PyBabelConfigDialog)
+        self.label_4.setObjectName("label_4")
+        self.gridLayout.addWidget(self.label_4, 1, 0, 1, 1)
+        self.translationsDirectoryPicker = EricPathPicker(PyBabelConfigDialog)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.translationsDirectoryPicker.sizePolicy().hasHeightForWidth())
+        self.translationsDirectoryPicker.setSizePolicy(sizePolicy)
+        self.translationsDirectoryPicker.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
+        self.translationsDirectoryPicker.setObjectName("translationsDirectoryPicker")
+        self.gridLayout.addWidget(self.translationsDirectoryPicker, 1, 1, 1, 1)
+        self.label_5 = QtWidgets.QLabel(PyBabelConfigDialog)
+        self.label_5.setObjectName("label_5")
+        self.gridLayout.addWidget(self.label_5, 2, 0, 1, 1)
+        self.domainEdit = QtWidgets.QLineEdit(PyBabelConfigDialog)
+        self.domainEdit.setClearButtonEnabled(True)
+        self.domainEdit.setObjectName("domainEdit")
+        self.gridLayout.addWidget(self.domainEdit, 2, 1, 1, 1)
+        self.label_2 = QtWidgets.QLabel(PyBabelConfigDialog)
+        self.label_2.setObjectName("label_2")
+        self.gridLayout.addWidget(self.label_2, 3, 0, 1, 1)
+        self.catalogFilePicker = EricPathPicker(PyBabelConfigDialog)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.catalogFilePicker.sizePolicy().hasHeightForWidth())
+        self.catalogFilePicker.setSizePolicy(sizePolicy)
+        self.catalogFilePicker.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
+        self.catalogFilePicker.setObjectName("catalogFilePicker")
+        self.gridLayout.addWidget(self.catalogFilePicker, 3, 1, 1, 1)
+        self.label_3 = QtWidgets.QLabel(PyBabelConfigDialog)
+        self.label_3.setObjectName("label_3")
+        self.gridLayout.addWidget(self.label_3, 4, 0, 1, 1)
+        self.markersEdit = QtWidgets.QLineEdit(PyBabelConfigDialog)
+        self.markersEdit.setClearButtonEnabled(True)
+        self.markersEdit.setObjectName("markersEdit")
+        self.gridLayout.addWidget(self.markersEdit, 4, 1, 1, 1)
+        self.buttonBox = QtWidgets.QDialogButtonBox(PyBabelConfigDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.gridLayout.addWidget(self.buttonBox, 5, 0, 1, 2)
+
+        self.retranslateUi(PyBabelConfigDialog)
+        self.buttonBox.accepted.connect(PyBabelConfigDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(PyBabelConfigDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(PyBabelConfigDialog)
+        PyBabelConfigDialog.setTabOrder(self.configFilePicker, self.translationsDirectoryPicker)
+        PyBabelConfigDialog.setTabOrder(self.translationsDirectoryPicker, self.domainEdit)
+        PyBabelConfigDialog.setTabOrder(self.domainEdit, self.catalogFilePicker)
+        PyBabelConfigDialog.setTabOrder(self.catalogFilePicker, self.markersEdit)
+
+    def retranslateUi(self, PyBabelConfigDialog):
+        _translate = QtCore.QCoreApplication.translate
+        PyBabelConfigDialog.setWindowTitle(_translate("PyBabelConfigDialog", "flask-babel Configuration"))
+        self.label.setText(_translate("PyBabelConfigDialog", "Configuration File:"))
+        self.configFilePicker.setToolTip(_translate("PyBabelConfigDialog", "Enter the name of the PyBabel configuration file"))
+        self.label_4.setText(_translate("PyBabelConfigDialog", "Translations Directory:"))
+        self.translationsDirectoryPicker.setToolTip(_translate("PyBabelConfigDialog", "Enter the name of the directory containing the translations"))
+        self.label_5.setText(_translate("PyBabelConfigDialog", "Domain:"))
+        self.domainEdit.setToolTip(_translate("PyBabelConfigDialog", "Enter the name of the translations domain (leave empty for default)"))
+        self.label_2.setText(_translate("PyBabelConfigDialog", "Message Catalog:"))
+        self.catalogFilePicker.setToolTip(_translate("PyBabelConfigDialog", "Enter the name of the message catalog file"))
+        self.label_3.setText(_translate("PyBabelConfigDialog", "Translation Markers:"))
+        self.markersEdit.setToolTip(_translate("PyBabelConfigDialog", "Enter the translation markers separated by space (_ is included by default)"))
+from eric7.EricWidgets.EricPathPicker import EricPathPicker
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    PyBabelConfigDialog = QtWidgets.QDialog()
+    ui = Ui_PyBabelConfigDialog()
+    ui.setupUi(PyBabelConfigDialog)
+    PyBabelConfigDialog.show()
+    sys.exit(app.exec())
--- a/ProjectFlask/FlaskConfigDialog.py	Sat Dec 23 17:08:59 2023 +0100
+++ b/ProjectFlask/FlaskConfigDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -101,13 +101,15 @@
 
         ericProject = ericApp().getObject("Project")
         dlg = FlaskVirtualenvConfigurationDialog(
-            ericProject.getProjectPath(), ericProject.getProjectName(), self
+            ericProject.getProjectPath(), ericProject.getProjectName(), parent=self
         )
         if dlg.exec() == QDialog.DialogCode.Accepted:
             resultDict = dlg.getData()
 
             # now do the call
-            dia = VirtualenvExecDialog(resultDict, self.__virtualEnvManager, self)
+            dia = VirtualenvExecDialog(
+                resultDict, self.__virtualEnvManager, parent=self
+            )
             dia.show()
             dia.start(resultDict["arguments"])
             dia.exec()
@@ -142,7 +144,7 @@
         else:
             args = ["-m", "pip", "install"]
         args.append("flask")
-        dia = PipDialog(self.tr("Install Flask"), self)
+        dia = PipDialog(self.tr("Install Flask"), parent=self)
         res = dia.startProcess(interpreter, args)
         if res:
             dia.exec()
--- a/ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py	Sat Dec 23 17:08:59 2023 +0100
+++ b/ProjectFlask/FlaskMigrateExtension/MigrateProjectExtension.py	Mon Oct 28 17:11:28 2024 +0100
@@ -40,13 +40,14 @@
         @type ProjectFlaskPlugin
         @param project reference to the project object
         @type Project
-        @param parent parent
-        @type QObject
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super().__init__(parent)
 
         self.__plugin = plugin
         self.__project = project
+        self.__ui = parent
 
         self.__ericProject = ericApp().getObject("Project")
 
@@ -384,7 +385,7 @@
         from .MigrateConfigDialog import MigrateConfigDialog
 
         config = self.__project.getData("flask-migrate", "")
-        dlg = MigrateConfigDialog(config)
+        dlg = MigrateConfigDialog(config, parent=self.__ui)
         if dlg.exec() == QDialog.DialogCode.Accepted:
             config = dlg.getConfiguration()
             self.__project.setData("flask-migrate", "", config)
@@ -463,6 +464,7 @@
             self.__project,
             title=title,
             msgSuccess=self.tr("\nMigrations initialized successfully."),
+            parent=self.__ui,
         )
         if dlg.startCommand("db", args):
             dlg.exec()
@@ -513,6 +515,7 @@
                 self.__project,
                 title=title,
                 msgSuccess=self.tr("\nMigration created successfully."),
+                parent=self.__ui,
             )
             if dlg.startCommand("db", args):
                 dlg.exec()
@@ -550,6 +553,7 @@
             self.__project,
             title=title,
             msgSuccess=self.tr("\nDatabase upgraded successfully."),
+            parent=self.__ui,
         )
         if dlg.startCommand("db", args):
             dlg.exec()
@@ -577,6 +581,7 @@
             self.__project,
             title=title,
             msgSuccess=self.tr("\nDatabase downgraded successfully."),
+            parent=self.__ui,
         )
         if dlg.startCommand("db", args):
             dlg.exec()
@@ -616,6 +621,6 @@
         if migrations:
             args += ["--directory", migrations]
 
-        dlg = FlaskCommandDialog(self.__project, title=title)
+        dlg = FlaskCommandDialog(self.__project, title=title, parent=self.__ui)
         if dlg.startCommand("db", args):
             dlg.exec()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/FlaskMigrateExtension/Ui_MigrateConfigDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -0,0 +1,64 @@
+# Form implementation generated from reading ui file '/home/detlev/Development/Python/Eric/eric7_plugins/Plugin_Project_Flask/ProjectFlask/FlaskMigrateExtension/MigrateConfigDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_MigrateConfigDialog(object):
+    def setupUi(self, MigrateConfigDialog):
+        MigrateConfigDialog.setObjectName("MigrateConfigDialog")
+        MigrateConfigDialog.resize(627, 129)
+        MigrateConfigDialog.setSizeGripEnabled(True)
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout(MigrateConfigDialog)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.groupBox = QtWidgets.QGroupBox(MigrateConfigDialog)
+        self.groupBox.setObjectName("groupBox")
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.migrationsDirectoryPicker = EricPathPicker(self.groupBox)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.migrationsDirectoryPicker.sizePolicy().hasHeightForWidth())
+        self.migrationsDirectoryPicker.setSizePolicy(sizePolicy)
+        self.migrationsDirectoryPicker.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
+        self.migrationsDirectoryPicker.setObjectName("migrationsDirectoryPicker")
+        self.verticalLayout.addWidget(self.migrationsDirectoryPicker)
+        self.label = QtWidgets.QLabel(self.groupBox)
+        self.label.setWordWrap(True)
+        self.label.setObjectName("label")
+        self.verticalLayout.addWidget(self.label)
+        self.verticalLayout_2.addWidget(self.groupBox)
+        self.buttonBox = QtWidgets.QDialogButtonBox(MigrateConfigDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.verticalLayout_2.addWidget(self.buttonBox)
+
+        self.retranslateUi(MigrateConfigDialog)
+        self.buttonBox.accepted.connect(MigrateConfigDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(MigrateConfigDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(MigrateConfigDialog)
+
+    def retranslateUi(self, MigrateConfigDialog):
+        _translate = QtCore.QCoreApplication.translate
+        MigrateConfigDialog.setWindowTitle(_translate("MigrateConfigDialog", "flask-migrate Configuration"))
+        self.groupBox.setTitle(_translate("MigrateConfigDialog", "Migrations Directory"))
+        self.migrationsDirectoryPicker.setToolTip(_translate("MigrateConfigDialog", "Enter the name of the directory containing the migrations"))
+        self.label.setText(_translate("MigrateConfigDialog", "<b>Note:</b> Leave this entry empty to use the default of \"migrations\"."))
+from eric7.EricWidgets.EricPathPicker import EricPathPicker
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    MigrateConfigDialog = QtWidgets.QDialog()
+    ui = Ui_MigrateConfigDialog()
+    ui.setupUi(MigrateConfigDialog)
+    MigrateConfigDialog.show()
+    sys.exit(app.exec())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/FlaskMigrateExtension/Ui_MigrateSummaryDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -0,0 +1,62 @@
+# Form implementation generated from reading ui file '/home/detlev/Development/Python/Eric/eric7_plugins/Plugin_Project_Flask/ProjectFlask/FlaskMigrateExtension/MigrateSummaryDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_MigrateSummaryDialog(object):
+    def setupUi(self, MigrateSummaryDialog):
+        MigrateSummaryDialog.setObjectName("MigrateSummaryDialog")
+        MigrateSummaryDialog.resize(800, 500)
+        MigrateSummaryDialog.setSizeGripEnabled(True)
+        self.verticalLayout = QtWidgets.QVBoxLayout(MigrateSummaryDialog)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.summaryWidget = QtWidgets.QTreeWidget(MigrateSummaryDialog)
+        self.summaryWidget.setAlternatingRowColors(True)
+        self.summaryWidget.setRootIsDecorated(False)
+        self.summaryWidget.setItemsExpandable(False)
+        self.summaryWidget.setObjectName("summaryWidget")
+        self.verticalLayout.addWidget(self.summaryWidget)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.upDownButton = QtWidgets.QPushButton(MigrateSummaryDialog)
+        self.upDownButton.setObjectName("upDownButton")
+        self.horizontalLayout.addWidget(self.upDownButton)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.buttonBox = QtWidgets.QDialogButtonBox(MigrateSummaryDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Close)
+        self.buttonBox.setObjectName("buttonBox")
+        self.horizontalLayout.addWidget(self.buttonBox)
+        self.verticalLayout.addLayout(self.horizontalLayout)
+
+        self.retranslateUi(MigrateSummaryDialog)
+        self.buttonBox.accepted.connect(MigrateSummaryDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(MigrateSummaryDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(MigrateSummaryDialog)
+
+    def retranslateUi(self, MigrateSummaryDialog):
+        _translate = QtCore.QCoreApplication.translate
+        MigrateSummaryDialog.setWindowTitle(_translate("MigrateSummaryDialog", "Migrations Summary"))
+        self.summaryWidget.headerItem().setText(0, _translate("MigrateSummaryDialog", "Old Revision"))
+        self.summaryWidget.headerItem().setText(1, _translate("MigrateSummaryDialog", "New Revision"))
+        self.summaryWidget.headerItem().setText(2, _translate("MigrateSummaryDialog", "Message"))
+        self.summaryWidget.headerItem().setText(3, _translate("MigrateSummaryDialog", "Labels"))
+        self.upDownButton.setToolTip(_translate("MigrateSummaryDialog", "Press to upgrade or downgrade the database to the selected migration"))
+        self.upDownButton.setText(_translate("MigrateSummaryDialog", "Upgrade"))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    MigrateSummaryDialog = QtWidgets.QDialog()
+    ui = Ui_MigrateSummaryDialog()
+    ui.setupUi(MigrateSummaryDialog)
+    MigrateSummaryDialog.show()
+    sys.exit(app.exec())
--- a/ProjectFlask/Project.py	Sat Dec 23 17:08:59 2023 +0100
+++ b/ProjectFlask/Project.py	Mon Oct 28 17:11:28 2024 +0100
@@ -94,8 +94,8 @@
 
         self.__capabilities = {}
 
-        self.__pybabelProject = PyBabelProject(self.__plugin, self, self)
-        self.__migrateProject = MigrateProject(self.__plugin, self, self)
+        self.__pybabelProject = PyBabelProject(self.__plugin, self, self.__ui)
+        self.__migrateProject = MigrateProject(self.__plugin, self, self.__ui)
 
     def initActions(self):
         """
@@ -382,7 +382,7 @@
         """
         from .FormSelectionDialog import FormSelectionDialog
 
-        dlg = FormSelectionDialog()
+        dlg = FormSelectionDialog(parent=self.__ui)
         if dlg.exec() == QDialog.DialogCode.Accepted:
             template = dlg.getTemplateText()
 
@@ -603,6 +603,7 @@
             ).format(versions["flask"], versions["werkzeug"], versions["python"], url),
             modal=True,
             buttons=EricMessageBox.Ok,
+            parent=self.__ui,
         )
         msgBox.setIconPixmap(
             EricPixmapCache.getPixmap(
@@ -787,7 +788,7 @@
         from .FlaskConfigDialog import FlaskConfigDialog
 
         config = self.getData("flask", "")
-        dlg = FlaskConfigDialog(config, self)
+        dlg = FlaskConfigDialog(config, self, parent=self.__ui)
         if dlg.exec() == QDialog.DialogCode.Accepted:
             config = dlg.getConfiguration()
             self.setData("flask", "", config)
--- a/ProjectFlask/RunServerDialog.py	Sat Dec 23 17:08:59 2023 +0100
+++ b/ProjectFlask/RunServerDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -114,7 +114,7 @@
         self.__serverOptions["development"] = development
 
         if askForOptions:
-            dlg = ServerStartOptionsDialog(self.__serverOptions)
+            dlg = ServerStartOptionsDialog(self.__serverOptions, parent=self)
             if dlg.exec() != QDialog.DialogCode.Accepted:
                 return False
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/Ui_FlaskCommandDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -0,0 +1,57 @@
+# Form implementation generated from reading ui file '/home/detlev/Development/Python/Eric/eric7_plugins/Plugin_Project_Flask/ProjectFlask/FlaskCommandDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_FlaskCommandDialog(object):
+    def setupUi(self, FlaskCommandDialog):
+        FlaskCommandDialog.setObjectName("FlaskCommandDialog")
+        FlaskCommandDialog.resize(600, 500)
+        FlaskCommandDialog.setSizeGripEnabled(True)
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout(FlaskCommandDialog)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.groupBox = QtWidgets.QGroupBox(FlaskCommandDialog)
+        self.groupBox.setObjectName("groupBox")
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.outputEdit = QtWidgets.QPlainTextEdit(self.groupBox)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.outputEdit.sizePolicy().hasHeightForWidth())
+        self.outputEdit.setSizePolicy(sizePolicy)
+        self.outputEdit.setLineWrapMode(QtWidgets.QPlainTextEdit.LineWrapMode.NoWrap)
+        self.outputEdit.setReadOnly(True)
+        self.outputEdit.setObjectName("outputEdit")
+        self.verticalLayout.addWidget(self.outputEdit)
+        self.verticalLayout_2.addWidget(self.groupBox)
+        self.buttonBox = QtWidgets.QDialogButtonBox(FlaskCommandDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Close)
+        self.buttonBox.setObjectName("buttonBox")
+        self.verticalLayout_2.addWidget(self.buttonBox)
+
+        self.retranslateUi(FlaskCommandDialog)
+        self.buttonBox.rejected.connect(FlaskCommandDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(FlaskCommandDialog)
+
+    def retranslateUi(self, FlaskCommandDialog):
+        _translate = QtCore.QCoreApplication.translate
+        FlaskCommandDialog.setWindowTitle(_translate("FlaskCommandDialog", "Flask Command"))
+        self.groupBox.setTitle(_translate("FlaskCommandDialog", "Output"))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    FlaskCommandDialog = QtWidgets.QDialog()
+    ui = Ui_FlaskCommandDialog()
+    ui.setupUi(FlaskCommandDialog)
+    FlaskCommandDialog.show()
+    sys.exit(app.exec())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/Ui_FlaskConfigDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -0,0 +1,95 @@
+# Form implementation generated from reading ui file '/home/detlev/Development/Python/Eric/eric7_plugins/Plugin_Project_Flask/ProjectFlask/FlaskConfigDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_FlaskConfigDialog(object):
+    def setupUi(self, FlaskConfigDialog):
+        FlaskConfigDialog.setObjectName("FlaskConfigDialog")
+        FlaskConfigDialog.resize(500, 253)
+        FlaskConfigDialog.setSizeGripEnabled(True)
+        self.verticalLayout_4 = QtWidgets.QVBoxLayout(FlaskConfigDialog)
+        self.verticalLayout_4.setObjectName("verticalLayout_4")
+        self.groupBox_2 = QtWidgets.QGroupBox(FlaskConfigDialog)
+        self.groupBox_2.setObjectName("groupBox_2")
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox_2)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.virtualEnvironmentComboBox = QtWidgets.QComboBox(self.groupBox_2)
+        self.virtualEnvironmentComboBox.setObjectName("virtualEnvironmentComboBox")
+        self.horizontalLayout.addWidget(self.virtualEnvironmentComboBox)
+        self.newEnvironmentButton = QtWidgets.QToolButton(self.groupBox_2)
+        self.newEnvironmentButton.setObjectName("newEnvironmentButton")
+        self.horizontalLayout.addWidget(self.newEnvironmentButton)
+        self.verticalLayout.addLayout(self.horizontalLayout)
+        self.label = QtWidgets.QLabel(self.groupBox_2)
+        self.label.setWordWrap(True)
+        self.label.setObjectName("label")
+        self.verticalLayout.addWidget(self.label)
+        self.verticalLayout_4.addWidget(self.groupBox_2)
+        self.flaskBabelBox = QtWidgets.QGroupBox(FlaskConfigDialog)
+        self.flaskBabelBox.setCheckable(True)
+        self.flaskBabelBox.setObjectName("flaskBabelBox")
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.flaskBabelBox)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.flaskBabelCheckBox = QtWidgets.QCheckBox(self.flaskBabelBox)
+        self.flaskBabelCheckBox.setObjectName("flaskBabelCheckBox")
+        self.verticalLayout_2.addWidget(self.flaskBabelCheckBox)
+        self.verticalLayout_4.addWidget(self.flaskBabelBox)
+        self.flaskMigrateBox = QtWidgets.QGroupBox(FlaskConfigDialog)
+        self.flaskMigrateBox.setCheckable(True)
+        self.flaskMigrateBox.setObjectName("flaskMigrateBox")
+        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.flaskMigrateBox)
+        self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.flaskMigrateCheckBox = QtWidgets.QCheckBox(self.flaskMigrateBox)
+        self.flaskMigrateCheckBox.setObjectName("flaskMigrateCheckBox")
+        self.verticalLayout_3.addWidget(self.flaskMigrateCheckBox)
+        self.verticalLayout_4.addWidget(self.flaskMigrateBox)
+        self.buttonBox = QtWidgets.QDialogButtonBox(FlaskConfigDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.verticalLayout_4.addWidget(self.buttonBox)
+
+        self.retranslateUi(FlaskConfigDialog)
+        self.buttonBox.accepted.connect(FlaskConfigDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(FlaskConfigDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(FlaskConfigDialog)
+        FlaskConfigDialog.setTabOrder(self.virtualEnvironmentComboBox, self.newEnvironmentButton)
+        FlaskConfigDialog.setTabOrder(self.newEnvironmentButton, self.flaskBabelBox)
+        FlaskConfigDialog.setTabOrder(self.flaskBabelBox, self.flaskBabelCheckBox)
+        FlaskConfigDialog.setTabOrder(self.flaskBabelCheckBox, self.flaskMigrateBox)
+        FlaskConfigDialog.setTabOrder(self.flaskMigrateBox, self.flaskMigrateCheckBox)
+
+    def retranslateUi(self, FlaskConfigDialog):
+        _translate = QtCore.QCoreApplication.translate
+        FlaskConfigDialog.setWindowTitle(_translate("FlaskConfigDialog", "flask Configuration"))
+        self.groupBox_2.setTitle(_translate("FlaskConfigDialog", "Virtual Environment"))
+        self.virtualEnvironmentComboBox.setToolTip(_translate("FlaskConfigDialog", "Select a project specific virtual environment"))
+        self.newEnvironmentButton.setToolTip(_translate("FlaskConfigDialog", "Press to open a dialog to create a new virtual environment"))
+        self.label.setText(_translate("FlaskConfigDialog", "<b>Note:</b> Leave this entry empty to use the virtual environment configured globally for all flask projects."))
+        self.flaskBabelBox.setToolTip(_translate("FlaskConfigDialog", "Select this to override the auto-detection feature"))
+        self.flaskBabelBox.setTitle(_translate("FlaskConfigDialog", "Override \'flask-babel\' Availability"))
+        self.flaskBabelCheckBox.setToolTip(_translate("FlaskConfigDialog", "Select to manually indicate the \'flask-babel\' availability"))
+        self.flaskBabelCheckBox.setText(_translate("FlaskConfigDialog", "\'flask-babel\' available"))
+        self.flaskMigrateBox.setToolTip(_translate("FlaskConfigDialog", "Select this to override the auto-detection feature"))
+        self.flaskMigrateBox.setTitle(_translate("FlaskConfigDialog", "Override \'flask-migrate\' Availability"))
+        self.flaskMigrateCheckBox.setToolTip(_translate("FlaskConfigDialog", "Select to manually indicate the \'flask-migrate\' availability"))
+        self.flaskMigrateCheckBox.setText(_translate("FlaskConfigDialog", "\'flask-migrate\' available"))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    FlaskConfigDialog = QtWidgets.QDialog()
+    ui = Ui_FlaskConfigDialog()
+    ui.setupUi(FlaskConfigDialog)
+    FlaskConfigDialog.show()
+    sys.exit(app.exec())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/Ui_FlaskVirtualenvConfigurationDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -0,0 +1,84 @@
+# Form implementation generated from reading ui file '/home/detlev/Development/Python/Eric/eric7_plugins/Plugin_Project_Flask/ProjectFlask/FlaskVirtualenvConfigurationDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_FlaskVirtualenvConfigurationDialog(object):
+    def setupUi(self, FlaskVirtualenvConfigurationDialog):
+        FlaskVirtualenvConfigurationDialog.setObjectName("FlaskVirtualenvConfigurationDialog")
+        FlaskVirtualenvConfigurationDialog.resize(700, 126)
+        FlaskVirtualenvConfigurationDialog.setSizeGripEnabled(True)
+        self.verticalLayout = QtWidgets.QVBoxLayout(FlaskVirtualenvConfigurationDialog)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.formLayout = QtWidgets.QFormLayout()
+        self.formLayout.setObjectName("formLayout")
+        self.label_2 = QtWidgets.QLabel(FlaskVirtualenvConfigurationDialog)
+        self.label_2.setObjectName("label_2")
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_2)
+        self.nameEdit = QtWidgets.QLineEdit(FlaskVirtualenvConfigurationDialog)
+        self.nameEdit.setClearButtonEnabled(True)
+        self.nameEdit.setObjectName("nameEdit")
+        self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.nameEdit)
+        self.label = QtWidgets.QLabel(FlaskVirtualenvConfigurationDialog)
+        self.label.setObjectName("label")
+        self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label)
+        self.targetDirectoryPicker = EricPathPicker(FlaskVirtualenvConfigurationDialog)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.targetDirectoryPicker.sizePolicy().hasHeightForWidth())
+        self.targetDirectoryPicker.setSizePolicy(sizePolicy)
+        self.targetDirectoryPicker.setFocusPolicy(QtCore.Qt.FocusPolicy.WheelFocus)
+        self.targetDirectoryPicker.setObjectName("targetDirectoryPicker")
+        self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.targetDirectoryPicker)
+        self.label_5 = QtWidgets.QLabel(FlaskVirtualenvConfigurationDialog)
+        self.label_5.setObjectName("label_5")
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_5)
+        self.pythonExecPicker = EricPathPicker(FlaskVirtualenvConfigurationDialog)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.pythonExecPicker.sizePolicy().hasHeightForWidth())
+        self.pythonExecPicker.setSizePolicy(sizePolicy)
+        self.pythonExecPicker.setFocusPolicy(QtCore.Qt.FocusPolicy.WheelFocus)
+        self.pythonExecPicker.setObjectName("pythonExecPicker")
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.ItemRole.FieldRole, self.pythonExecPicker)
+        self.verticalLayout.addLayout(self.formLayout)
+        self.buttonBox = QtWidgets.QDialogButtonBox(FlaskVirtualenvConfigurationDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.verticalLayout.addWidget(self.buttonBox)
+
+        self.retranslateUi(FlaskVirtualenvConfigurationDialog)
+        self.buttonBox.accepted.connect(FlaskVirtualenvConfigurationDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(FlaskVirtualenvConfigurationDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(FlaskVirtualenvConfigurationDialog)
+
+    def retranslateUi(self, FlaskVirtualenvConfigurationDialog):
+        _translate = QtCore.QCoreApplication.translate
+        FlaskVirtualenvConfigurationDialog.setWindowTitle(_translate("FlaskVirtualenvConfigurationDialog", "Virtual Environment Configuration"))
+        self.label_2.setText(_translate("FlaskVirtualenvConfigurationDialog", "Logical Name:"))
+        self.nameEdit.setToolTip(_translate("FlaskVirtualenvConfigurationDialog", "Enter a unique name for the virtual environment"))
+        self.nameEdit.setPlaceholderText(_translate("FlaskVirtualenvConfigurationDialog", "Name for the virtual environment"))
+        self.label.setText(_translate("FlaskVirtualenvConfigurationDialog", "Target Directory:"))
+        self.targetDirectoryPicker.setToolTip(_translate("FlaskVirtualenvConfigurationDialog", "Enter the target directory for the virtual environment"))
+        self.label_5.setText(_translate("FlaskVirtualenvConfigurationDialog", "Python Executable:"))
+        self.pythonExecPicker.setToolTip(_translate("FlaskVirtualenvConfigurationDialog", "Enter the Python interpreter for the virtual environment"))
+from eric7.EricWidgets.EricPathPicker import EricPathPicker
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    FlaskVirtualenvConfigurationDialog = QtWidgets.QDialog()
+    ui = Ui_FlaskVirtualenvConfigurationDialog()
+    ui.setupUi(FlaskVirtualenvConfigurationDialog)
+    FlaskVirtualenvConfigurationDialog.show()
+    sys.exit(app.exec())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/Ui_FormSelectionDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -0,0 +1,71 @@
+# Form implementation generated from reading ui file '/home/detlev/Development/Python/Eric/eric7_plugins/Plugin_Project_Flask/ProjectFlask/FormSelectionDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_FormSelectionDialog(object):
+    def setupUi(self, FormSelectionDialog):
+        FormSelectionDialog.setObjectName("FormSelectionDialog")
+        FormSelectionDialog.resize(600, 450)
+        FormSelectionDialog.setSizeGripEnabled(True)
+        self.gridLayout = QtWidgets.QGridLayout(FormSelectionDialog)
+        self.gridLayout.setObjectName("gridLayout")
+        self.label = QtWidgets.QLabel(FormSelectionDialog)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
+        self.typeCombo = QtWidgets.QComboBox(FormSelectionDialog)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.typeCombo.sizePolicy().hasHeightForWidth())
+        self.typeCombo.setSizePolicy(sizePolicy)
+        self.typeCombo.setObjectName("typeCombo")
+        self.gridLayout.addWidget(self.typeCombo, 0, 1, 1, 1)
+        self.label_2 = QtWidgets.QLabel(FormSelectionDialog)
+        self.label_2.setObjectName("label_2")
+        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
+        self.buttonBox = QtWidgets.QDialogButtonBox(FormSelectionDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.gridLayout.addWidget(self.buttonBox, 3, 0, 1, 2)
+        self.preview = QtWidgets.QPlainTextEdit(FormSelectionDialog)
+        font = QtGui.QFont()
+        font.setFamily("Noto Sans Mono")
+        self.preview.setFont(font)
+        self.preview.setTabChangesFocus(True)
+        self.preview.setLineWrapMode(QtWidgets.QPlainTextEdit.LineWrapMode.NoWrap)
+        self.preview.setObjectName("preview")
+        self.gridLayout.addWidget(self.preview, 2, 0, 1, 2)
+        self.label.setBuddy(self.typeCombo)
+
+        self.retranslateUi(FormSelectionDialog)
+        self.buttonBox.accepted.connect(FormSelectionDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(FormSelectionDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(FormSelectionDialog)
+        FormSelectionDialog.setTabOrder(self.typeCombo, self.preview)
+        FormSelectionDialog.setTabOrder(self.preview, self.buttonBox)
+
+    def retranslateUi(self, FormSelectionDialog):
+        _translate = QtCore.QCoreApplication.translate
+        FormSelectionDialog.setWindowTitle(_translate("FormSelectionDialog", "Template Type Selection"))
+        self.label.setText(_translate("FormSelectionDialog", "Template &Type:"))
+        self.typeCombo.setToolTip(_translate("FormSelectionDialog", "Select the template type"))
+        self.label_2.setText(_translate("FormSelectionDialog", "Preview:"))
+        self.preview.setToolTip(_translate("FormSelectionDialog", "Shows the text of the selected template"))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    FormSelectionDialog = QtWidgets.QDialog()
+    ui = Ui_FormSelectionDialog()
+    ui.setupUi(FormSelectionDialog)
+    FormSelectionDialog.show()
+    sys.exit(app.exec())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/Ui_RoutesDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -0,0 +1,89 @@
+# Form implementation generated from reading ui file '/home/detlev/Development/Python/Eric/eric7_plugins/Plugin_Project_Flask/ProjectFlask/RoutesDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_RoutesDialog(object):
+    def setupUi(self, RoutesDialog):
+        RoutesDialog.setObjectName("RoutesDialog")
+        RoutesDialog.resize(800, 600)
+        RoutesDialog.setSizeGripEnabled(True)
+        self.verticalLayout = QtWidgets.QVBoxLayout(RoutesDialog)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.groupBox = QtWidgets.QGroupBox(RoutesDialog)
+        self.groupBox.setObjectName("groupBox")
+        self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox)
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.matchButton = QtWidgets.QRadioButton(self.groupBox)
+        self.matchButton.setChecked(True)
+        self.matchButton.setObjectName("matchButton")
+        self.horizontalLayout.addWidget(self.matchButton)
+        self.endpointButton = QtWidgets.QRadioButton(self.groupBox)
+        self.endpointButton.setObjectName("endpointButton")
+        self.horizontalLayout.addWidget(self.endpointButton)
+        self.methodsButton = QtWidgets.QRadioButton(self.groupBox)
+        self.methodsButton.setObjectName("methodsButton")
+        self.horizontalLayout.addWidget(self.methodsButton)
+        self.ruleButton = QtWidgets.QRadioButton(self.groupBox)
+        self.ruleButton.setObjectName("ruleButton")
+        self.horizontalLayout.addWidget(self.ruleButton)
+        self.verticalLayout.addWidget(self.groupBox)
+        self.allMethodsCheckBox = QtWidgets.QCheckBox(RoutesDialog)
+        self.allMethodsCheckBox.setObjectName("allMethodsCheckBox")
+        self.verticalLayout.addWidget(self.allMethodsCheckBox)
+        self.routesList = QtWidgets.QTreeWidget(RoutesDialog)
+        self.routesList.setAlternatingRowColors(True)
+        self.routesList.setSelectionMode(QtWidgets.QAbstractItemView.SelectionMode.NoSelection)
+        self.routesList.setRootIsDecorated(False)
+        self.routesList.setItemsExpandable(False)
+        self.routesList.setObjectName("routesList")
+        self.verticalLayout.addWidget(self.routesList)
+        self.buttonBox = QtWidgets.QDialogButtonBox(RoutesDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Close)
+        self.buttonBox.setObjectName("buttonBox")
+        self.verticalLayout.addWidget(self.buttonBox)
+
+        self.retranslateUi(RoutesDialog)
+        self.buttonBox.accepted.connect(RoutesDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(RoutesDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(RoutesDialog)
+        RoutesDialog.setTabOrder(self.matchButton, self.endpointButton)
+        RoutesDialog.setTabOrder(self.endpointButton, self.methodsButton)
+        RoutesDialog.setTabOrder(self.methodsButton, self.ruleButton)
+        RoutesDialog.setTabOrder(self.ruleButton, self.allMethodsCheckBox)
+        RoutesDialog.setTabOrder(self.allMethodsCheckBox, self.routesList)
+
+    def retranslateUi(self, RoutesDialog):
+        _translate = QtCore.QCoreApplication.translate
+        RoutesDialog.setWindowTitle(_translate("RoutesDialog", "Flask Routes"))
+        self.groupBox.setTitle(_translate("RoutesDialog", "Sort Method"))
+        self.matchButton.setToolTip(_translate("RoutesDialog", "Select to sort by match order"))
+        self.matchButton.setText(_translate("RoutesDialog", "match"))
+        self.endpointButton.setToolTip(_translate("RoutesDialog", "Select to sort by endpoint name"))
+        self.endpointButton.setText(_translate("RoutesDialog", "Endpoint"))
+        self.methodsButton.setToolTip(_translate("RoutesDialog", "Select to sort by method name"))
+        self.methodsButton.setText(_translate("RoutesDialog", "Methods"))
+        self.ruleButton.setToolTip(_translate("RoutesDialog", "Select to sort by rule"))
+        self.ruleButton.setText(_translate("RoutesDialog", "Rule"))
+        self.allMethodsCheckBox.setToolTip(_translate("RoutesDialog", "Select to also show HEAD and OPTIONS methods"))
+        self.allMethodsCheckBox.setText(_translate("RoutesDialog", "Show all methods"))
+        self.routesList.headerItem().setText(0, _translate("RoutesDialog", "Endpoint"))
+        self.routesList.headerItem().setText(1, _translate("RoutesDialog", "Methods"))
+        self.routesList.headerItem().setText(2, _translate("RoutesDialog", "Rule"))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    RoutesDialog = QtWidgets.QDialog()
+    ui = Ui_RoutesDialog()
+    ui.setupUi(RoutesDialog)
+    RoutesDialog.show()
+    sys.exit(app.exec())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/Ui_RunServerDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -0,0 +1,81 @@
+# Form implementation generated from reading ui file '/home/detlev/Development/Python/Eric/eric7_plugins/Plugin_Project_Flask/ProjectFlask/RunServerDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_RunServerDialog(object):
+    def setupUi(self, RunServerDialog):
+        RunServerDialog.setObjectName("RunServerDialog")
+        RunServerDialog.resize(600, 500)
+        RunServerDialog.setSizeGripEnabled(True)
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout(RunServerDialog)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.groupBox = QtWidgets.QGroupBox(RunServerDialog)
+        self.groupBox.setObjectName("groupBox")
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.outputEdit = QtWidgets.QPlainTextEdit(self.groupBox)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.outputEdit.sizePolicy().hasHeightForWidth())
+        self.outputEdit.setSizePolicy(sizePolicy)
+        self.outputEdit.setLineWrapMode(QtWidgets.QPlainTextEdit.LineWrapMode.NoWrap)
+        self.outputEdit.setReadOnly(True)
+        self.outputEdit.setObjectName("outputEdit")
+        self.verticalLayout.addWidget(self.outputEdit)
+        self.verticalLayout_2.addWidget(self.groupBox)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.menuButton = QtWidgets.QToolButton(RunServerDialog)
+        self.menuButton.setPopupMode(QtWidgets.QToolButton.ToolButtonPopupMode.InstantPopup)
+        self.menuButton.setObjectName("menuButton")
+        self.horizontalLayout.addWidget(self.menuButton)
+        self.startBrowserButton = QtWidgets.QPushButton(RunServerDialog)
+        self.startBrowserButton.setEnabled(False)
+        self.startBrowserButton.setObjectName("startBrowserButton")
+        self.horizontalLayout.addWidget(self.startBrowserButton)
+        self.stopServerButton = QtWidgets.QPushButton(RunServerDialog)
+        self.stopServerButton.setEnabled(False)
+        self.stopServerButton.setObjectName("stopServerButton")
+        self.horizontalLayout.addWidget(self.stopServerButton)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.buttonBox = QtWidgets.QDialogButtonBox(RunServerDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Close)
+        self.buttonBox.setObjectName("buttonBox")
+        self.horizontalLayout.addWidget(self.buttonBox)
+        self.verticalLayout_2.addLayout(self.horizontalLayout)
+
+        self.retranslateUi(RunServerDialog)
+        self.buttonBox.rejected.connect(RunServerDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(RunServerDialog)
+        RunServerDialog.setTabOrder(self.outputEdit, self.menuButton)
+        RunServerDialog.setTabOrder(self.menuButton, self.startBrowserButton)
+        RunServerDialog.setTabOrder(self.startBrowserButton, self.stopServerButton)
+
+    def retranslateUi(self, RunServerDialog):
+        _translate = QtCore.QCoreApplication.translate
+        RunServerDialog.setWindowTitle(_translate("RunServerDialog", "Flask Server"))
+        self.groupBox.setTitle(_translate("RunServerDialog", "Output"))
+        self.startBrowserButton.setToolTip(_translate("RunServerDialog", "Press to start a web browser with the server URL."))
+        self.startBrowserButton.setText(_translate("RunServerDialog", "Start Browser"))
+        self.stopServerButton.setToolTip(_translate("RunServerDialog", "Press to stop the running server"))
+        self.stopServerButton.setText(_translate("RunServerDialog", "Stop Server"))
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    RunServerDialog = QtWidgets.QDialog()
+    ui = Ui_RunServerDialog()
+    ui.setupUi(RunServerDialog)
+    RunServerDialog.show()
+    sys.exit(app.exec())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ProjectFlask/Ui_ServerStartOptionsDialog.py	Mon Oct 28 17:11:28 2024 +0100
@@ -0,0 +1,100 @@
+# Form implementation generated from reading ui file '/home/detlev/Development/Python/Eric/eric7_plugins/Plugin_Project_Flask/ProjectFlask/ServerStartOptionsDialog.ui'
+#
+# Created by: PyQt6 UI code generator 6.4.0
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic6 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt6 import QtCore, QtGui, QtWidgets
+
+
+class Ui_ServerStartOptionsDialog(object):
+    def setupUi(self, ServerStartOptionsDialog):
+        ServerStartOptionsDialog.setObjectName("ServerStartOptionsDialog")
+        ServerStartOptionsDialog.resize(500, 187)
+        ServerStartOptionsDialog.setSizeGripEnabled(True)
+        self.gridLayout = QtWidgets.QGridLayout(ServerStartOptionsDialog)
+        self.gridLayout.setObjectName("gridLayout")
+        self.developmentCheckBox = QtWidgets.QCheckBox(ServerStartOptionsDialog)
+        self.developmentCheckBox.setObjectName("developmentCheckBox")
+        self.gridLayout.addWidget(self.developmentCheckBox, 0, 0, 1, 3)
+        self.label = QtWidgets.QLabel(ServerStartOptionsDialog)
+        self.label.setObjectName("label")
+        self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
+        self.hostEdit = QtWidgets.QLineEdit(ServerStartOptionsDialog)
+        self.hostEdit.setClearButtonEnabled(True)
+        self.hostEdit.setObjectName("hostEdit")
+        self.gridLayout.addWidget(self.hostEdit, 1, 1, 1, 2)
+        self.label_2 = QtWidgets.QLabel(ServerStartOptionsDialog)
+        self.label_2.setObjectName("label_2")
+        self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
+        self.portSpinBox = QtWidgets.QSpinBox(ServerStartOptionsDialog)
+        self.portSpinBox.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
+        self.portSpinBox.setMinimum(1025)
+        self.portSpinBox.setMaximum(65565)
+        self.portSpinBox.setObjectName("portSpinBox")
+        self.gridLayout.addWidget(self.portSpinBox, 2, 1, 1, 1)
+        spacerItem = QtWidgets.QSpacerItem(349, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+        self.gridLayout.addItem(spacerItem, 2, 2, 1, 1)
+        self.label_3 = QtWidgets.QLabel(ServerStartOptionsDialog)
+        self.label_3.setObjectName("label_3")
+        self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1)
+        self.certFilePicker = EricPathPicker(ServerStartOptionsDialog)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.certFilePicker.sizePolicy().hasHeightForWidth())
+        self.certFilePicker.setSizePolicy(sizePolicy)
+        self.certFilePicker.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
+        self.certFilePicker.setObjectName("certFilePicker")
+        self.gridLayout.addWidget(self.certFilePicker, 3, 1, 1, 2)
+        self.label_4 = QtWidgets.QLabel(ServerStartOptionsDialog)
+        self.label_4.setObjectName("label_4")
+        self.gridLayout.addWidget(self.label_4, 4, 0, 1, 1)
+        self.keyFilePicker = EricPathPicker(ServerStartOptionsDialog)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.keyFilePicker.sizePolicy().hasHeightForWidth())
+        self.keyFilePicker.setSizePolicy(sizePolicy)
+        self.keyFilePicker.setFocusPolicy(QtCore.Qt.FocusPolicy.StrongFocus)
+        self.keyFilePicker.setObjectName("keyFilePicker")
+        self.gridLayout.addWidget(self.keyFilePicker, 4, 1, 1, 2)
+        self.buttonBox = QtWidgets.QDialogButtonBox(ServerStartOptionsDialog)
+        self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
+        self.buttonBox.setObjectName("buttonBox")
+        self.gridLayout.addWidget(self.buttonBox, 5, 0, 1, 3)
+
+        self.retranslateUi(ServerStartOptionsDialog)
+        self.buttonBox.accepted.connect(ServerStartOptionsDialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(ServerStartOptionsDialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(ServerStartOptionsDialog)
+        ServerStartOptionsDialog.setTabOrder(self.developmentCheckBox, self.hostEdit)
+        ServerStartOptionsDialog.setTabOrder(self.hostEdit, self.portSpinBox)
+
+    def retranslateUi(self, ServerStartOptionsDialog):
+        _translate = QtCore.QCoreApplication.translate
+        ServerStartOptionsDialog.setWindowTitle(_translate("ServerStartOptionsDialog", "Server Parameters"))
+        self.developmentCheckBox.setToolTip(_translate("ServerStartOptionsDialog", "Select to start the server in development mode"))
+        self.developmentCheckBox.setText(_translate("ServerStartOptionsDialog", "Development Mode"))
+        self.label.setText(_translate("ServerStartOptionsDialog", "Host:"))
+        self.hostEdit.setToolTip(_translate("ServerStartOptionsDialog", "Enter the interface to bind to"))
+        self.label_2.setText(_translate("ServerStartOptionsDialog", "Port:"))
+        self.portSpinBox.setToolTip(_translate("ServerStartOptionsDialog", "Enter the port to bind to"))
+        self.label_3.setText(_translate("ServerStartOptionsDialog", "Cert File:"))
+        self.certFilePicker.setToolTip(_translate("ServerStartOptionsDialog", "Enter the name of the certificate file"))
+        self.label_4.setText(_translate("ServerStartOptionsDialog", "Key File:"))
+        self.keyFilePicker.setToolTip(_translate("ServerStartOptionsDialog", "Enter the name of the key file"))
+from eric7.EricWidgets.EricPathPicker import EricPathPicker
+
+
+if __name__ == "__main__":
+    import sys
+    app = QtWidgets.QApplication(sys.argv)
+    ServerStartOptionsDialog = QtWidgets.QDialog()
+    ui = Ui_ServerStartOptionsDialog()
+    ui.setupUi(ServerStartOptionsDialog)
+    ServerStartOptionsDialog.show()
+    sys.exit(app.exec())

eric ide

mercurial