Ported the plug-in to PyQt6 for eric7. eric7

Sat, 29 May 2021 18:33:03 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 29 May 2021 18:33:03 +0200
branch
eric7
changeset 172
ea7980ded4f3
parent 171
af99f0984f20
child 173
302006cee9af

Ported the plug-in to PyQt6 for eric7.

.hgignore file | annotate | diff | comparison | revisions
ChangeLog file | annotate | diff | comparison | revisions
PluginDjango.e4p file | annotate | diff | comparison | revisions
PluginDjango.epj file | annotate | diff | comparison | revisions
PluginProjectDjango.py file | annotate | diff | comparison | revisions
PluginProjectDjango.zip file | annotate | diff | comparison | revisions
ProjectDjango/ConfigurationPage/DjangoPage.py file | annotate | diff | comparison | revisions
ProjectDjango/ConfigurationPage/DjangoPage.ui file | annotate | diff | comparison | revisions
ProjectDjango/DjangoCheckOptionsDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoCheckOptionsDialog.ui file | annotate | diff | comparison | revisions
ProjectDjango/DjangoDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoDialog.ui file | annotate | diff | comparison | revisions
ProjectDjango/DjangoDiffsettingsDataDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoDiffsettingsDataDialog.ui file | annotate | diff | comparison | revisions
ProjectDjango/DjangoDumpdataDataDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoLoaddataDataDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoLoaddataDataDialog.ui file | annotate | diff | comparison | revisions
ProjectDjango/DjangoMakeMigrationsDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoMakeMigrationsDialog.ui file | annotate | diff | comparison | revisions
ProjectDjango/DjangoMigrationSelectionDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoMigrationsListDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoRunTestServerDataDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoRunTestServerDataDialog.ui file | annotate | diff | comparison | revisions
ProjectDjango/DjangoSendTestEmailDataDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoSquashMigrationSelectionDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoSquashMigrationSelectionDialog.ui file | annotate | diff | comparison | revisions
ProjectDjango/DjangoTestDataDialog.py file | annotate | diff | comparison | revisions
ProjectDjango/DjangoTestDataDialog.ui file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/help/howto-debug.html file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/source/Plugin_Project_Django.PluginProjectDjango.html file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.ConfigurationPage.DjangoPage.html file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoDialog.html file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoDiffsettingsDataDialog.html file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoDumpdataDataDialog.html file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoLoaddataDataDialog.html file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoMigrationsListDialog.html file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoRunTestServerDataDialog.html file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.Project.html file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/source/index-Plugin_Project_Django.ProjectDjango.html file | annotate | diff | comparison | revisions
ProjectDjango/Documentation/source/index-Plugin_Project_Django.html file | annotate | diff | comparison | revisions
ProjectDjango/Project.py file | annotate | diff | comparison | revisions
ProjectDjango/__init__.py file | annotate | diff | comparison | revisions
--- a/.hgignore	Sat May 29 15:03:26 2021 +0200
+++ b/.hgignore	Sat May 29 18:33:03 2021 +0200
@@ -1,11 +1,6 @@
+glob:.eric7project
 glob:.eric6project
-glob:_eric6project
-glob:.eric5project
-glob:_eric5project
-glob:.eric4project
-glob:_eric4project
 glob:.ropeproject
-glob:_ropeproject
 glob:.directory
 glob:**.pyc
 glob:**.pyo
--- a/ChangeLog	Sat May 29 15:03:26 2021 +0200
+++ b/ChangeLog	Sat May 29 18:33:03 2021 +0200
@@ -1,5 +1,10 @@
 ChangeLog
 ---------
+Version 1.0.0:
+- first release of the eric7 variant
+
+************************************************************
+
 Version 6.2.0:
 - implemented some code simplifications
 - dropped support for Django < 2.0.0
--- a/PluginDjango.e4p	Sat May 29 15:03:26 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,542 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
-<!-- eric project file for project PluginDjango -->
-<!-- Copyright (C) 2020 Detlev Offenbach, detlev@die-offenbachs.de -->
-<Project version="5.1">
-  <Language>en</Language>
-  <Hash>74ebac2e9316db59fdca32e146fa5ae695c66907</Hash>
-  <ProgLanguage mixed="0">Python3</ProgLanguage>
-  <ProjectType>E6Plugin</ProjectType>
-  <Description>Plugin implementing support for Django projects.</Description>
-  <Version>5.x</Version>
-  <Author>Detlev Offenbach</Author>
-  <Email>detlev@die-offenbachs.de</Email>
-  <TranslationPattern>ProjectDjango/i18n/django_%language%.ts</TranslationPattern>
-  <Eol index="1"/>
-  <Sources>
-    <Source>PluginProjectDjango.py</Source>
-    <Source>ProjectDjango/ConfigurationPage/DjangoPage.py</Source>
-    <Source>ProjectDjango/ConfigurationPage/__init__.py</Source>
-    <Source>ProjectDjango/DjangoCheckOptionsDialog.py</Source>
-    <Source>ProjectDjango/DjangoDialog.py</Source>
-    <Source>ProjectDjango/DjangoDiffsettingsDataDialog.py</Source>
-    <Source>ProjectDjango/DjangoDumpdataDataDialog.py</Source>
-    <Source>ProjectDjango/DjangoLoaddataDataDialog.py</Source>
-    <Source>ProjectDjango/DjangoMakeMigrationsDialog.py</Source>
-    <Source>ProjectDjango/DjangoMigrationSelectionDialog.py</Source>
-    <Source>ProjectDjango/DjangoMigrationsListDialog.py</Source>
-    <Source>ProjectDjango/DjangoRunTestServerDataDialog.py</Source>
-    <Source>ProjectDjango/DjangoSendTestEmailDataDialog.py</Source>
-    <Source>ProjectDjango/DjangoSquashMigrationSelectionDialog.py</Source>
-    <Source>ProjectDjango/DjangoTestDataDialog.py</Source>
-    <Source>ProjectDjango/Project.py</Source>
-    <Source>ProjectDjango/__init__.py</Source>
-    <Source>__init__.py</Source>
-  </Sources>
-  <Forms>
-    <Form>ProjectDjango/ConfigurationPage/DjangoPage.ui</Form>
-    <Form>ProjectDjango/DjangoCheckOptionsDialog.ui</Form>
-    <Form>ProjectDjango/DjangoDialog.ui</Form>
-    <Form>ProjectDjango/DjangoDiffsettingsDataDialog.ui</Form>
-    <Form>ProjectDjango/DjangoDumpdataDataDialog.ui</Form>
-    <Form>ProjectDjango/DjangoLoaddataDataDialog.ui</Form>
-    <Form>ProjectDjango/DjangoMakeMigrationsDialog.ui</Form>
-    <Form>ProjectDjango/DjangoMigrationSelectionDialog.ui</Form>
-    <Form>ProjectDjango/DjangoMigrationsListDialog.ui</Form>
-    <Form>ProjectDjango/DjangoRunTestServerDataDialog.ui</Form>
-    <Form>ProjectDjango/DjangoSendTestEmailDataDialog.ui</Form>
-    <Form>ProjectDjango/DjangoSquashMigrationSelectionDialog.ui</Form>
-    <Form>ProjectDjango/DjangoTestDataDialog.ui</Form>
-  </Forms>
-  <Translations>
-    <Translation>ProjectDjango/i18n/django_de.qm</Translation>
-    <Translation>ProjectDjango/i18n/django_de.ts</Translation>
-    <Translation>ProjectDjango/i18n/django_empty.ts</Translation>
-    <Translation>ProjectDjango/i18n/django_en.qm</Translation>
-    <Translation>ProjectDjango/i18n/django_en.ts</Translation>
-    <Translation>ProjectDjango/i18n/django_es.qm</Translation>
-    <Translation>ProjectDjango/i18n/django_es.ts</Translation>
-    <Translation>ProjectDjango/i18n/django_ru.qm</Translation>
-    <Translation>ProjectDjango/i18n/django_ru.ts</Translation>
-    <Translation>ProjectDjango/i18n/django_tr.ts</Translation>
-  </Translations>
-  <Others>
-    <Other>.hgignore</Other>
-    <Other>ChangeLog</Other>
-    <Other>PKGLIST</Other>
-    <Other>PluginDjango.e4p</Other>
-    <Other>PluginProjectDjango.zip</Other>
-    <Other>ProjectDjango/APIs</Other>
-    <Other>ProjectDjango/Documentation/LICENSE.GPL3</Other>
-    <Other>ProjectDjango/Documentation/help</Other>
-    <Other>ProjectDjango/Documentation/source</Other>
-    <Other>ProjectDjango/icons/applied-dark.svg</Other>
-    <Other>ProjectDjango/icons/applied-light.svg</Other>
-    <Other>ProjectDjango/icons/django-dark.svg</Other>
-    <Other>ProjectDjango/icons/django-light.svg</Other>
-    <Other>ProjectDjango/icons/django64-dark.svg</Other>
-    <Other>ProjectDjango/icons/django64-light.svg</Other>
-  </Others>
-  <MainScript>PluginProjectDjango.py</MainScript>
-  <Vcs>
-    <VcsType>Mercurial</VcsType>
-    <VcsOptions>
-      <dict>
-        <key>
-          <string>add</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>checkout</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>commit</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>diff</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>export</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>global</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>history</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>log</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>remove</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>status</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>tag</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-        <key>
-          <string>update</string>
-        </key>
-        <value>
-          <list>
-            <string></string>
-          </list>
-        </value>
-      </dict>
-    </VcsOptions>
-  </Vcs>
-  <FiletypeAssociations>
-    <FiletypeAssociation pattern="*.idl" type="INTERFACES"/>
-    <FiletypeAssociation pattern="*.py" type="SOURCES"/>
-    <FiletypeAssociation pattern="*.py3" type="SOURCES"/>
-    <FiletypeAssociation pattern="*.pyw" type="SOURCES"/>
-    <FiletypeAssociation pattern="*.pyw3" type="SOURCES"/>
-    <FiletypeAssociation pattern="*.qm" type="TRANSLATIONS"/>
-    <FiletypeAssociation pattern="*.qrc" type="RESOURCES"/>
-    <FiletypeAssociation pattern="*.ts" type="TRANSLATIONS"/>
-    <FiletypeAssociation pattern="*.ui" type="FORMS"/>
-    <FiletypeAssociation pattern="*.ui.h" type="FORMS"/>
-    <FiletypeAssociation pattern="Ui_*.py" type="__IGNORE__"/>
-  </FiletypeAssociations>
-  <Documentation>
-    <DocumentationParams>
-      <dict>
-        <key>
-          <string>ERIC4DOC</string>
-        </key>
-        <value>
-          <dict>
-            <key>
-              <string>cssFile</string>
-            </key>
-            <value>
-              <string>%PYTHON%/eric6/CSSs/default.css</string>
-            </value>
-            <key>
-              <string>ignoreDirectories</string>
-            </key>
-            <value>
-              <list>
-                <string>.eric5project</string>
-                <string>.ropeproject</string>
-                <string>.eric6project</string>
-              </list>
-            </value>
-            <key>
-              <string>ignoreFilePatterns</string>
-            </key>
-            <value>
-              <list>
-                <string>Ui_*</string>
-              </list>
-            </value>
-            <key>
-              <string>outputDirectory</string>
-            </key>
-            <value>
-              <string>ProjectDjango/Documentation/source</string>
-            </value>
-            <key>
-              <string>qtHelpEnabled</string>
-            </key>
-            <value>
-              <bool>False</bool>
-            </value>
-            <key>
-              <string>useRecursion</string>
-            </key>
-            <value>
-              <bool>True</bool>
-            </value>
-          </dict>
-        </value>
-      </dict>
-    </DocumentationParams>
-  </Documentation>
-  <Checkers>
-    <CheckersParams>
-      <dict>
-        <key>
-          <string>Pep8Checker</string>
-        </key>
-        <value>
-          <dict>
-            <key>
-              <string>AnnotationsChecker</string>
-            </key>
-            <value>
-              <dict>
-                <key>
-                  <string>MaximumComplexity</string>
-                </key>
-                <value>
-                  <int>3</int>
-                </value>
-                <key>
-                  <string>MinimumCoverage</string>
-                </key>
-                <value>
-                  <int>75</int>
-                </value>
-              </dict>
-            </value>
-            <key>
-              <string>BlankLines</string>
-            </key>
-            <value>
-              <tuple>
-                <int>2</int>
-                <int>1</int>
-              </tuple>
-            </value>
-            <key>
-              <string>BuiltinsChecker</string>
-            </key>
-            <value>
-              <dict>
-                <key>
-                  <string>bytes</string>
-                </key>
-                <value>
-                  <list>
-                    <string>unicode</string>
-                  </list>
-                </value>
-                <key>
-                  <string>chr</string>
-                </key>
-                <value>
-                  <list>
-                    <string>unichr</string>
-                  </list>
-                </value>
-                <key>
-                  <string>str</string>
-                </key>
-                <value>
-                  <list>
-                    <string>unicode</string>
-                  </list>
-                </value>
-              </dict>
-            </value>
-            <key>
-              <string>CommentedCodeChecker</string>
-            </key>
-            <value>
-              <dict>
-                <key>
-                  <string>Aggressive</string>
-                </key>
-                <value>
-                  <bool>False</bool>
-                </value>
-              </dict>
-            </value>
-            <key>
-              <string>CopyrightAuthor</string>
-            </key>
-            <value>
-              <string></string>
-            </value>
-            <key>
-              <string>CopyrightMinFileSize</string>
-            </key>
-            <value>
-              <int>0</int>
-            </value>
-            <key>
-              <string>DocstringType</string>
-            </key>
-            <value>
-              <string>eric</string>
-            </value>
-            <key>
-              <string>EnabledCheckerCategories</string>
-            </key>
-            <value>
-              <string>C, D, E, M, N, S, W</string>
-            </value>
-            <key>
-              <string>ExcludeFiles</string>
-            </key>
-            <value>
-              <string>*/Ui_*.py, */*_rc.py</string>
-            </value>
-            <key>
-              <string>ExcludeMessages</string>
-            </key>
-            <value>
-              <string>C101,E265,E266,E305,E402,M201,M301,M302,M303,M304,M305,M306,M307,M308,M311,M312,M313,M314,M315,M321,M701,M702,M811,M834,N802,N803,N807,N808,N821,W293,W504</string>
-            </value>
-            <key>
-              <string>FixCodes</string>
-            </key>
-            <value>
-              <string></string>
-            </value>
-            <key>
-              <string>FixIssues</string>
-            </key>
-            <value>
-              <bool>False</bool>
-            </value>
-            <key>
-              <string>FutureChecker</string>
-            </key>
-            <value>
-              <string></string>
-            </value>
-            <key>
-              <string>HangClosing</string>
-            </key>
-            <value>
-              <bool>False</bool>
-            </value>
-            <key>
-              <string>IncludeMessages</string>
-            </key>
-            <value>
-              <string></string>
-            </value>
-            <key>
-              <string>LineComplexity</string>
-            </key>
-            <value>
-              <int>20</int>
-            </value>
-            <key>
-              <string>LineComplexityScore</string>
-            </key>
-            <value>
-              <int>10</int>
-            </value>
-            <key>
-              <string>MaxCodeComplexity</string>
-            </key>
-            <value>
-              <int>10</int>
-            </value>
-            <key>
-              <string>MaxDocLineLength</string>
-            </key>
-            <value>
-              <int>79</int>
-            </value>
-            <key>
-              <string>MaxLineLength</string>
-            </key>
-            <value>
-              <int>79</int>
-            </value>
-            <key>
-              <string>NoFixCodes</string>
-            </key>
-            <value>
-              <string>E501</string>
-            </value>
-            <key>
-              <string>RepeatMessages</string>
-            </key>
-            <value>
-              <bool>True</bool>
-            </value>
-            <key>
-              <string>SecurityChecker</string>
-            </key>
-            <value>
-              <dict>
-                <key>
-                  <string>CheckTypedException</string>
-                </key>
-                <value>
-                  <bool>False</bool>
-                </value>
-                <key>
-                  <string>HardcodedTmpDirectories</string>
-                </key>
-                <value>
-                  <list>
-                    <string>/tmp</string>
-                    <string>/var/tmp</string>
-                    <string>/dev/shm</string>
-                    <string>~/tmp</string>
-                  </list>
-                </value>
-                <key>
-                  <string>InsecureHashes</string>
-                </key>
-                <value>
-                  <list>
-                    <string>md4</string>
-                    <string>md5</string>
-                    <string>sha</string>
-                    <string>sha1</string>
-                  </list>
-                </value>
-                <key>
-                  <string>InsecureSslProtocolVersions</string>
-                </key>
-                <value>
-                  <list>
-                    <string>PROTOCOL_SSLv2</string>
-                    <string>SSLv2_METHOD</string>
-                    <string>SSLv23_METHOD</string>
-                    <string>PROTOCOL_SSLv3</string>
-                    <string>PROTOCOL_TLSv1</string>
-                    <string>SSLv3_METHOD</string>
-                    <string>TLSv1_METHOD</string>
-                  </list>
-                </value>
-                <key>
-                  <string>WeakKeySizeDsaHigh</string>
-                </key>
-                <value>
-                  <string>1024</string>
-                </value>
-                <key>
-                  <string>WeakKeySizeDsaMedium</string>
-                </key>
-                <value>
-                  <string>2048</string>
-                </value>
-                <key>
-                  <string>WeakKeySizeEcHigh</string>
-                </key>
-                <value>
-                  <string>160</string>
-                </value>
-                <key>
-                  <string>WeakKeySizeEcMedium</string>
-                </key>
-                <value>
-                  <string>224</string>
-                </value>
-                <key>
-                  <string>WeakKeySizeRsaHigh</string>
-                </key>
-                <value>
-                  <string>1024</string>
-                </value>
-                <key>
-                  <string>WeakKeySizeRsaMedium</string>
-                </key>
-                <value>
-                  <string>2048</string>
-                </value>
-              </dict>
-            </value>
-            <key>
-              <string>ShowIgnored</string>
-            </key>
-            <value>
-              <bool>False</bool>
-            </value>
-            <key>
-              <string>ValidEncodings</string>
-            </key>
-            <value>
-              <string>latin-1, utf-8</string>
-            </value>
-          </dict>
-        </value>
-      </dict>
-    </CheckersParams>
-  </Checkers>
-</Project>
--- a/PluginDjango.epj	Sat May 29 15:03:26 2021 +0200
+++ b/PluginDjango.epj	Sat May 29 18:33:03 2021 +0200
@@ -113,11 +113,11 @@
     "DOCSTRING": "",
     "DOCUMENTATIONPARMS": {
       "ERIC4DOC": {
-        "cssFile": "%PYTHON%/eric6/CSSs/default.css",
+        "cssFile": "%PYTHON%/eric7/CSSs/default.css",
         "ignoreDirectories": [
-          ".eric5project",
           ".ropeproject",
-          ".eric6project"
+          ".eric6project",
+          ".eric7project"
         ],
         "ignoreFilePatterns": [
           "Ui_*"
@@ -130,17 +130,25 @@
     "EMAIL": "detlev@die-offenbachs.de",
     "EOL": 1,
     "FILETYPES": {
+      "*.epj": "OTHERS",
       "*.idl": "INTERFACES",
+      "*.md": "OTHERS",
+      "*.proto": "PROTOCOLS",
       "*.py": "SOURCES",
       "*.py3": "SOURCES",
       "*.pyw": "SOURCES",
       "*.pyw3": "SOURCES",
       "*.qm": "TRANSLATIONS",
-      "*.qrc": "RESOURCES",
+      "*.rst": "OTHERS",
       "*.ts": "TRANSLATIONS",
+      "*.txt": "OTHERS",
       "*.ui": "FORMS",
-      "*.ui.h": "FORMS",
-      "Ui_*.py": "__IGNORE__"
+      "GNUmakefile": "OTHERS",
+      "Makefile": "OTHERS",
+      "README": "OTHERS",
+      "README.*": "OTHERS",
+      "Ui_*.py": "__IGNORE__",
+      "makefile": "OTHERS"
     },
     "FORMS": [
       "ProjectDjango/ConfigurationPage/DjangoPage.ui",
@@ -174,12 +182,11 @@
       "MakeTarget": "",
       "MakeTestOnly": true
     },
-    "MIXEDLANGUAGE": 0,
+    "MIXEDLANGUAGE": false,
     "OTHERS": [
       ".hgignore",
       "ChangeLog",
       "PKGLIST",
-      "PluginDjango.e4p",
       "PluginProjectDjango.zip",
       "ProjectDjango/APIs",
       "ProjectDjango/Documentation/LICENSE.GPL3",
@@ -196,7 +203,7 @@
     "OTHERTOOLSPARMS": {},
     "PACKAGERSPARMS": {},
     "PROGLANGUAGE": "Python3",
-    "PROJECTTYPE": "E6Plugin",
+    "PROJECTTYPE": "E7Plugin",
     "PROJECTTYPESPECIFICDATA": {},
     "PROTOCOLS": [],
     "RCCPARAMS": {
@@ -289,6 +296,6 @@
       ]
     },
     "VCSOTHERDATA": {},
-    "VERSION": "5.x"
+    "VERSION": ""
   }
 }
\ No newline at end of file
--- a/PluginProjectDjango.py	Sat May 29 15:03:26 2021 +0200
+++ b/PluginProjectDjango.py	Sat May 29 18:33:03 2021 +0200
@@ -11,9 +11,9 @@
 import glob
 import fnmatch
 
-from PyQt5.QtCore import QCoreApplication, QObject, QTranslator
+from PyQt6.QtCore import QCoreApplication, QObject, QTranslator
 
-from E5Gui.E5Application import e5App
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
@@ -26,7 +26,7 @@
 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
 autoactivate = True
 deactivateable = True
-version = "6.2.0"
+version = "1.0.0"
 className = "ProjectDjangoPlugin"
 packageName = "ProjectDjango"
 shortDescription = "Project support for Django projects."
@@ -46,8 +46,10 @@
     """
     Module function to return the API files made available by this plugin.
     
-    @param language language to get APIs for (string)
-    @return list of API filenames (list of string)
+    @param language language to get APIs for
+    @type str
+    @return list of API filenames
+    @rtype list of str
     """
     if language in ["Python3"]:
         apisDir = os.path.join(os.path.dirname(__file__),
@@ -63,7 +65,9 @@
     Module function to create the Django configuration page.
     
     @param configDlg reference to the configuration dialog
+    @type ConfigurationWidget
     @return reference to the configuration page
+    @rtype DjangoPage
     """
     global djangoPluginObject
     from ProjectDjango.ConfigurationPage.DjangoPage import DjangoPage
@@ -76,14 +80,9 @@
     Module function returning data as required by the configuration dialog.
     
     @return dictionary containing the relevant data
+    @rtype dict
     """
-    try:
-        usesDarkPalette = e5App().usesDarkPalette()
-    except AttributeError:
-        from PyQt5.QtGui import QPalette
-        palette = e5App().palette()
-        lightness = palette.color(QPalette.Window).lightness()
-        usesDarkPalette = lightness <= 128
+    usesDarkPalette = ericApp().usesDarkPalette()
     iconSuffix = "dark" if usesDarkPalette else "light"
     
     return {
@@ -119,7 +118,8 @@
         """
         Constructor
         
-        @param ui reference to the user interface object (UI.UserInterface)
+        @param ui reference to the user interface object
+        @type UserInterface
         """
         QObject.__init__(self, ui)
         self.__ui = ui
@@ -128,9 +128,6 @@
         self.__defaults = {
             "VirtualEnvironmentNamePy3": "",
             
-            # these are obsolete and kept for use with eric <18.07
-            "VirtualEnvironmentPy3": "",
-            
             "Python3ConsoleType": "ipython",
             
             "ServerAddress": "",
@@ -174,7 +171,7 @@
         self.__mainAct = None
         self.__separatorAct = None
         
-        self.__e5project = e5App().getObject("Project")
+        self.__ericProject = ericApp().getObject("Project")
         
         self.__supportedVariants = []
     
@@ -182,30 +179,25 @@
         """
         Public method to activate this plugin.
         
-        @return tuple of None and activation status (boolean)
+        @return tuple of None and activation status
+        @rtype bool
         """
         global djangoPluginObject
         djangoPluginObject = self
         
-        try:
-            usesDarkPalette = e5App().usesDarkPalette()
-        except AttributeError:
-            from PyQt5.QtGui import QPalette
-            palette = e5App().palette()
-            lightness = palette.color(QPalette.Window).lightness()
-            usesDarkPalette = lightness <= 128
+        usesDarkPalette = ericApp().usesDarkPalette()
         iconSuffix = "dark" if usesDarkPalette else "light"
         
         self.__object = Project(self, iconSuffix, self.__ui)
         self.__object.initActions()
-        e5App().registerPluginObject("ProjectDjango", self.__object)
+        ericApp().registerPluginObject("ProjectDjango", self.__object)
         
         self.__mainMenu = self.__object.initMenu()
         
         self.__supportedVariants = self.__object.supportedPythonVariants()
         
         if self.__supportedVariants:
-            self.__e5project.registerProjectType(
+            self.__ericProject.registerProjectType(
                 "Django", self.tr("Django"),
                 self.fileTypesCallback,
                 lexerAssociationCallback=self.lexerAssociationCallback,
@@ -222,27 +214,27 @@
             TranslationsBrowserFlag | OthersBrowserFlag,
         )
         
-        if self.__e5project.isOpen():
+        if self.__ericProject.isOpen():
             self.__projectOpened()
             self.__object.projectOpenedHooks()
         
-        e5App().getObject("Project").projectOpened.connect(
+        ericApp().getObject("Project").projectOpened.connect(
             self.__projectOpened)
-        e5App().getObject("Project").projectClosed.connect(
+        ericApp().getObject("Project").projectClosed.connect(
             self.__projectClosed)
-        e5App().getObject("Project").newProject.connect(
+        ericApp().getObject("Project").newProject.connect(
             self.__projectOpened)
         
-        e5App().getObject("Project").projectOpenedHooks.connect(
+        ericApp().getObject("Project").projectOpenedHooks.connect(
             self.__object.projectOpenedHooks)
-        e5App().getObject("Project").projectClosedHooks.connect(
+        ericApp().getObject("Project").projectClosedHooks.connect(
             self.__object.projectClosedHooks)
-        e5App().getObject("Project").newProjectHooks.connect(
+        ericApp().getObject("Project").newProjectHooks.connect(
             self.__object.projectOpenedHooks)
         
-        e5App().getObject("Project").projectAboutToBeCreated.connect(
+        ericApp().getObject("Project").projectAboutToBeCreated.connect(
             self.__object.startProjectOrApplication)
-        e5App().getObject("Project").newProject.connect(
+        ericApp().getObject("Project").newProject.connect(
             self.__object.newProjectCreated)
         
         return None, True
@@ -251,28 +243,28 @@
         """
         Public method to deactivate this plugin.
         """
-        e5App().unregisterPluginObject("ProjectDjango")
+        ericApp().unregisterPluginObject("ProjectDjango")
         
-        e5App().getObject("Project").projectOpened.disconnect(
+        ericApp().getObject("Project").projectOpened.disconnect(
             self.__projectOpened)
-        e5App().getObject("Project").projectClosed.disconnect(
+        ericApp().getObject("Project").projectClosed.disconnect(
             self.__projectClosed)
-        e5App().getObject("Project").newProject.disconnect(
+        ericApp().getObject("Project").newProject.disconnect(
             self.__projectOpened)
         
-        e5App().getObject("Project").projectOpenedHooks.disconnect(
+        ericApp().getObject("Project").projectOpenedHooks.disconnect(
             self.__object.projectOpenedHooks)
-        e5App().getObject("Project").projectClosedHooks.disconnect(
+        ericApp().getObject("Project").projectClosedHooks.disconnect(
             self.__object.projectClosedHooks)
-        e5App().getObject("Project").newProjectHooks.disconnect(
+        ericApp().getObject("Project").newProjectHooks.disconnect(
             self.__object.projectOpenedHooks)
         
-        e5App().getObject("Project").projectAboutToBeCreated.disconnect(
+        ericApp().getObject("Project").projectAboutToBeCreated.disconnect(
             self.__object.startProjectOrApplication)
-        e5App().getObject("Project").newProject.disconnect(
+        ericApp().getObject("Project").newProject.disconnect(
             self.__object.newProjectCreated)
         
-        self.__e5project.unregisterProjectType("Django")
+        self.__ericProject.unregisterProjectType("Django")
         
         self.__object.projectClosedHooks()
         self.__projectClosed()
@@ -293,7 +285,7 @@
                 loaded = translator.load(translation, locale_dir)
                 if loaded:
                     self.__translator = translator
-                    e5App().installTranslator(self.__translator)
+                    ericApp().installTranslator(self.__translator)
                 else:
                     print("Warning: translation file '{0}' could not be"
                           " loaded.".format(translation))
@@ -303,20 +295,13 @@
         """
         Private slot to handle the projectOpened signal.
         """
-        if self.__e5project.getProjectType() == "Django":
+        if self.__ericProject.getProjectType() == "Django":
             projectToolsMenu = self.__ui.getMenu("project_tools")
-            if projectToolsMenu is not None:
-                insertBeforeAct = projectToolsMenu.actions()[0]
-                self.__mainAct = projectToolsMenu.insertMenu(
-                    insertBeforeAct, self.__mainMenu)
-                self.__separatorAct = projectToolsMenu.insertSeparator(
-                    insertBeforeAct)
-            else:
-                projectAct = self.__ui.getMenuBarAction("project")
-                actions = self.__ui.menuBar().actions()
-                insertBeforeAct = actions[actions.index(projectAct) + 1]
-                self.__mainAct = self.__ui.menuBar().insertMenu(
-                    insertBeforeAct, self.__mainMenu)
+            insertBeforeAct = projectToolsMenu.actions()[0]
+            self.__mainAct = projectToolsMenu.insertMenu(
+                insertBeforeAct, self.__mainMenu)
+            self.__separatorAct = projectToolsMenu.insertSeparator(
+                insertBeforeAct)
     
     def __projectClosed(self):
         """
@@ -324,14 +309,10 @@
         """
         if self.__mainAct is not None:
             projectToolsMenu = self.__ui.getMenu("project_tools")
-            if projectToolsMenu is not None:
-                projectToolsMenu.removeAction(self.__separatorAct)
-                projectToolsMenu.removeAction(self.__mainAct)
-                self.__mainAct = None
-                self.__separatorAct = None
-            else:
-                self.__ui.menuBar().removeAction(self.__mainAct)
-                self.__mainAct = None
+            projectToolsMenu.removeAction(self.__separatorAct)
+            projectToolsMenu.removeAction(self.__mainAct)
+            self.__mainAct = None
+            self.__separatorAct = None
             self.__object.projectClosed()
     
     def fileTypesCallback(self):
@@ -339,6 +320,7 @@
         Public method get the filetype associations of the Django project type.
         
         @return dictionary with file type associations
+        @rtype dict
         """
         fileTypes = (
             {
@@ -350,7 +332,7 @@
                 "*.mo": "TRANSLATIONS",
                 "*.py": "SOURCES",
             }
-            if self.__e5project.getProjectType() == "Django" else
+            if self.__ericProject.getProjectType() == "Django" else
             {}
         )
         return fileTypes
@@ -360,9 +342,11 @@
         Public method to get the lexer association of the Django project type
         for a file.
         
-        @param filename name of the file (string)
-        @return name of the lexer (string) (Pygments lexers are prefixed with
+        @param filename name of the file
+        @type str
+        @return name of the lexer (Pygments lexers are prefixed with
             'Pygments|')
+        @rtype str
         """
         for pattern, language in self.lexerAssociations.items():
             if fnmatch.fnmatch(filename, pattern):
@@ -375,8 +359,10 @@
         Public method to determine the filename of a compiled translation file
         given the translation source file.
         
-        @param filename name of the translation source file (string)
-        @return name of the binary translation file (string)
+        @param filename name of the translation source file
+        @type str
+        @return name of the binary translation file
+        @rtype str
         """
         if filename.endswith(".po"):
             filename = filename.replace(".po", ".mo")
@@ -387,7 +373,9 @@
         Public method to retrieve the various settings.
         
         @param key the key of the value to get
-        @return the requested setting
+        @type str
+        @return value of the requested setting
+        @rtype Any
         """
         if key in ["RecentNumberApps", "RecentNumberTestData"]:
             return int(Preferences.Prefs.settings.value(
@@ -405,13 +393,15 @@
         """
         Public method to store the various settings.
         
-        @param key the key of the setting to be set (string)
-        @param value the value to be set
+        @param key the key of the setting to be set
+        @type str
+        @param value value to be set
+        @type Any
         """
         Preferences.Prefs.settings.setValue(
             self.PreferencesKey + "/" + key, value)
         
-        if key in ["VirtualEnvironmentPy3", "VirtualEnvironmentNamePy3"]:
+        if key in ["VirtualEnvironmentNamePy3"]:
             self.__reregisterProjectType()
         elif key == "TranslationsEditor" and self.__object:
             self.__object.registerOpenHook()
@@ -423,12 +413,12 @@
         supportedVariants = self.__object.supportedPythonVariants()
         if supportedVariants != self.__supportedVariants:
             # step 1: unregister
-            self.__e5project.unregisterProjectType("Django")
+            self.__ericProject.unregisterProjectType("Django")
             
             # step 2: register again with new language settings
             self.__supportedVariants = supportedVariants
             if self.__supportedVariants:
-                self.__e5project.registerProjectType(
+                self.__ericProject.registerProjectType(
                     "Django", self.tr("Django"),
                     self.fileTypesCallback,
                     lexerAssociationCallback=self.lexerAssociationCallback,
Binary file PluginProjectDjango.zip has changed
--- a/ProjectDjango/ConfigurationPage/DjangoPage.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/ConfigurationPage/DjangoPage.py	Sat May 29 18:33:03 2021 +0200
@@ -7,11 +7,8 @@
 Module implementing the Django configuration page.
 """
 
-from PyQt5.QtCore import pyqtSlot
-
-from E5Gui import E5FileDialog
-from E5Gui.E5Completers import E5DirCompleter, E5FileCompleter
-from E5Gui.E5Application import e5App
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from Preferences.ConfigurationPages.ConfigurationPageBase import (
     ConfigurationPageBase
@@ -20,9 +17,6 @@
 
 from Globals import isWindowsPlatform, isMacPlatform
 
-import Utilities
-import UI.PixmapCache
-
 
 class DjangoPage(ConfigurationPageBase, Ui_DjangoPage):
     """
@@ -38,11 +32,8 @@
         self.setupUi(self)
         self.setObjectName("DjangoPage")
         
-        self.virtualEnvPy3Button.setIcon(UI.PixmapCache.getIcon("open"))
-        self.translationsButton.setIcon(UI.PixmapCache.getIcon("open"))
-        
-        self.__virtualEnvPy3Completer = E5DirCompleter(self.virtualEnvPy3Edit)
-        self.__translationsCompleter = E5FileCompleter(self.translationsEdit)
+        self.translationsPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
+        self.translationsPicker.setFilters(self.tr("All Files (*)"))
         
         self.__plugin = plugin
         
@@ -54,7 +45,7 @@
             consoleList.append("/opt/X11/bin/xterm -e")
         else:
             consoleList.append("@konsole --workdir . -e")
-            # KDE4/5 konsole spawns
+            # KDE 5 konsole spawns
             consoleList.append("gnome-terminal -e")
             consoleList.append("mate-terminal -e")
             consoleList.append("xfce4-terminal -e")
@@ -68,7 +59,7 @@
             consoleNoCloseList.append("/opt/X11/bin/xterm -hold -e")
         else:
             consoleNoCloseList.append("@konsole --noclose --workdir . -e")
-            # KDE4/5 konsole spawns
+            # KDE 5 konsole spawns
             consoleNoCloseList.append("gnome-terminal --profile=<noclose> -e")
             consoleNoCloseList.append("mate-terminal --profile=<noclose> -e")
             consoleNoCloseList.append("xfce4-terminal --hold -e")
@@ -81,21 +72,10 @@
         self.py3ShellCombo.addItem(self.tr("IPython"), "ipython")
         self.py3ShellCombo.addItem(self.tr("bpython"), "bpython")
         
-        try:
-            venvManager = e5App().getObject("VirtualEnvManager")
-            
-            self.py3VenvNameComboBox.addItems(
-                [""] + sorted(venvManager.getVirtualenvNames()))
-            
-            self.djangoVirtualEnvPy3Group.hide()
-            
-            self.__hasVirtualEnvironmentManager = True
-        except KeyError:
-            venvManager = None
-            
-            self.djangoVirtualEnvironmentPy3Group.hide()
-            
-            self.__hasVirtualEnvironmentManager = False
+        venvManager = ericApp().getObject("VirtualEnvManager")
+        
+        self.py3VenvNameComboBox.addItems(
+            [""] + sorted(venvManager.getVirtualenvNames()))
         
         # set initial values
         self.consoleCommandCombo.setEditText(
@@ -116,21 +96,18 @@
         self.appsRecentSpinBox.setValue(
             self.__plugin.getPreferences("RecentNumberApps"))
         
-        if venvManager:
-            venvName = self.__plugin.getPreferences(
-                "VirtualEnvironmentNamePy3")
-            if venvName:
-                index = self.py3VenvNameComboBox.findText(venvName)
-                if index < 0:
-                    index = 0
-                self.py3VenvNameComboBox.setCurrentIndex(index)
-        else:
-            self.virtualEnvPy3Edit.setText(
-                self.__plugin.getPreferences("VirtualEnvironmentPy3"))
+        venvName = self.__plugin.getPreferences(
+            "VirtualEnvironmentNamePy3")
+        if venvName:
+            index = self.py3VenvNameComboBox.findText(venvName)
+            if index < 0:
+                index = 0
+            self.py3VenvNameComboBox.setCurrentIndex(index)
+        
         self.py3ShellCombo.setCurrentIndex(self.py3ShellCombo.findData(
             self.__plugin.getPreferences("Python3ConsoleType")))
         
-        self.translationsEdit.setText(
+        self.translationsPicker.setText(
             self.__plugin.getPreferences("TranslationsEditor"))
         self.fuzzyTranslationsCheckBox.setChecked(
             self.__plugin.getPreferences("FuzzyTranslations"))
@@ -159,51 +136,14 @@
         self.__plugin.setPreferences(
             "RecentNumberApps", self.appsRecentSpinBox.value())
         
-        if self.__hasVirtualEnvironmentManager:
-            self.__plugin.setPreferences(
-                "VirtualEnvironmentNamePy3",
-                self.py3VenvNameComboBox.currentText())
-        else:
-            self.__plugin.setPreferences(
-                "VirtualEnvironmentPy3", self.virtualEnvPy3Edit.text())
+        self.__plugin.setPreferences(
+            "VirtualEnvironmentNamePy3",
+            self.py3VenvNameComboBox.currentText())
         self.__plugin.setPreferences(
             "Python3ConsoleType",
             self.py3ShellCombo.itemData(self.py3ShellCombo.currentIndex()))
         
         self.__plugin.setPreferences(
-            "TranslationsEditor", self.translationsEdit.text())
+            "TranslationsEditor", self.translationsPicker.text())
         self.__plugin.setPreferences(
             "FuzzyTranslations", self.fuzzyTranslationsCheckBox.isChecked())
-    
-    @pyqtSlot()
-    def on_virtualEnvPy3Button_clicked(self):
-        """
-        Private slot to select the virtual environment for Python 3 via a
-        directory selection dialog.
-        """
-        vDir = self.virtualEnvPy3Edit.text()
-        if not vDir:
-            vDir = Utilities.getHomeDir()
-        virtualEnv = E5FileDialog.getExistingDirectory(
-            self,
-            self.tr("Select Virtual Environment for Python 3"),
-            vDir,
-            E5FileDialog.Options(E5FileDialog.Option(0)))
-        
-        if virtualEnv:
-            self.virtualEnvPy3Edit.setText(
-                Utilities.toNativeSeparators(virtualEnv))
-    
-    @pyqtSlot()
-    def on_translationsButton_clicked(self):
-        """
-        Private slot to select the translations editor via a file selection
-        dialog.
-        """
-        editor = E5FileDialog.getOpenFileName(
-            self,
-            self.tr("Translations Editor"),
-            self.translationsEdit.text(),
-            self.tr("All Files (*)"))
-        if editor:
-            self.translationsEdit.setText(Utilities.toNativeSeparators(editor))
--- a/ProjectDjango/ConfigurationPage/DjangoPage.ui	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/ConfigurationPage/DjangoPage.ui	Sat May 29 18:33:03 2021 +0200
@@ -7,10 +7,10 @@
     <x>0</x>
     <y>0</y>
     <width>536</width>
-    <height>1201</height>
+    <height>1038</height>
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout_7">
+  <layout class="QVBoxLayout" name="verticalLayout_6">
    <item>
     <widget class="QLabel" name="headerLabel">
      <property name="text">
@@ -229,41 +229,6 @@
      </property>
      <layout class="QVBoxLayout" name="verticalLayout_3">
       <item>
-       <widget class="QGroupBox" name="djangoVirtualEnvPy3Group">
-        <property name="title">
-         <string>Django Virtual Environment</string>
-        </property>
-        <layout class="QGridLayout" name="gridLayout_4">
-         <item row="0" column="0" colspan="2">
-          <widget class="QLabel" name="label_6">
-           <property name="minimumSize">
-            <size>
-             <width>0</width>
-             <height>40</height>
-            </size>
-           </property>
-           <property name="text">
-            <string>Enter the path of the Django virtual environment. Leave empty to not use a virtual environment setup.</string>
-           </property>
-           <property name="wordWrap">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="0">
-          <widget class="QLineEdit" name="virtualEnvPy3Edit"/>
-         </item>
-         <item row="1" column="1">
-          <widget class="QToolButton" name="virtualEnvPy3Button">
-           <property name="toolTip">
-            <string>Select the virtual environment directory via a selection dialog</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </widget>
-      </item>
-      <item>
        <widget class="QGroupBox" name="djangoVirtualEnvironmentPy3Group">
         <property name="title">
          <string>Django Virtual Environment</string>
@@ -317,14 +282,14 @@
      <property name="title">
       <string>Translations</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout">
+     <layout class="QVBoxLayout" name="verticalLayout_4">
       <item>
        <widget class="QGroupBox" name="TranslationsGroup">
         <property name="title">
          <string>Translations Editor</string>
         </property>
-        <layout class="QGridLayout" name="gridLayout_3">
-         <item row="0" column="0" colspan="2">
+        <layout class="QVBoxLayout" name="verticalLayout">
+         <item>
           <widget class="QLabel" name="label_8">
            <property name="minimumSize">
             <size>
@@ -340,13 +305,10 @@
            </property>
           </widget>
          </item>
-         <item row="1" column="0">
-          <widget class="QLineEdit" name="translationsEdit"/>
-         </item>
-         <item row="1" column="1">
-          <widget class="QToolButton" name="translationsButton">
-           <property name="toolTip">
-            <string>Select the translations editor via a file selection dialog</string>
+         <item>
+          <widget class="EricPathPicker" name="translationsPicker" native="true">
+           <property name="focusPolicy">
+            <enum>Qt::WheelFocus</enum>
            </property>
           </widget>
          </item>
@@ -381,6 +343,14 @@
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>EricPathPicker</class>
+   <extends>QWidget</extends>
+   <header>EricWidgets/EricPathPicker.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
  <tabstops>
   <tabstop>consoleCommandCombo</tabstop>
   <tabstop>consoleCommandNoCloseCombo</tabstop>
@@ -389,12 +359,9 @@
   <tabstop>threadingCheckBox</tabstop>
   <tabstop>externalBrowserCheckBox</tabstop>
   <tabstop>appsRecentSpinBox</tabstop>
-  <tabstop>virtualEnvPy3Edit</tabstop>
-  <tabstop>virtualEnvPy3Button</tabstop>
   <tabstop>py3VenvNameComboBox</tabstop>
   <tabstop>py3ShellCombo</tabstop>
-  <tabstop>translationsEdit</tabstop>
-  <tabstop>translationsButton</tabstop>
+  <tabstop>translationsPicker</tabstop>
   <tabstop>fuzzyTranslationsCheckBox</tabstop>
  </tabstops>
  <resources/>
--- a/ProjectDjango/DjangoCheckOptionsDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoCheckOptionsDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -9,10 +9,10 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSlot, Qt, QProcess
-from PyQt5.QtWidgets import QDialog
+from PyQt6.QtCore import pyqtSlot, Qt, QProcess
+from PyQt6.QtWidgets import QDialog
 
-from E5Gui import E5FileDialog
+from EricWidgets import EricFileDialog
 
 from .Ui_DjangoCheckOptionsDialog import Ui_DjangoCheckOptionsDialog
 
@@ -72,7 +72,7 @@
         path = self.__moduleToPath(self.settingsFileEdit.text())
         if not path:
             path = self.__path
-        settingsFile = E5FileDialog.getOpenFileName(
+        settingsFile = EricFileDialog.getOpenFileName(
             self,
             self.tr("Select settings file"),
             path,
@@ -154,7 +154,8 @@
         
         # step 4: re-select tags
         for tag in selectedTags:
-            items = self.tagsList.findItems(tag, Qt.MatchCaseSensitive)
+            items = self.tagsList.findItems(
+                tag, Qt.MatchFlag.MatchCaseSensitive)
             if items:
                 items[0].setSelected(True)
     
--- a/ProjectDjango/DjangoCheckOptionsDialog.ui	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoCheckOptionsDialog.ui	Sat May 29 18:33:03 2021 +0200
@@ -61,7 +61,7 @@
     </widget>
    </item>
    <item>
-    <widget class="E5ClearableComboBox" name="appsComboBox">
+    <widget class="QComboBox" name="appsComboBox">
      <property name="editable">
       <bool>true</bool>
      </property>
@@ -73,11 +73,17 @@
       <string>Settings module for deployment mode</string>
      </property>
      <layout class="QHBoxLayout" name="horizontalLayout">
+      <property name="spacing">
+       <number>0</number>
+      </property>
       <item>
-       <widget class="E5ClearableLineEdit" name="settingsFileEdit">
+       <widget class="QLineEdit" name="settingsFileEdit">
         <property name="toolTip">
          <string>Enter the module name of the deployment settings</string>
         </property>
+        <property name="clearButtonEnabled">
+         <bool>true</bool>
+        </property>
        </widget>
       </item>
       <item>
@@ -102,18 +108,6 @@
    </item>
   </layout>
  </widget>
- <customwidgets>
-  <customwidget>
-   <class>E5ClearableLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>E5Gui/E5LineEdit.h</header>
-  </customwidget>
-  <customwidget>
-   <class>E5ClearableComboBox</class>
-   <extends>QComboBox</extends>
-   <header>E5Gui/E5ComboBox.h</header>
-  </customwidget>
- </customwidgets>
  <resources/>
  <connections>
   <connection>
--- a/ProjectDjango/DjangoDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -9,12 +9,12 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSlot, QProcess, QTimer, QFileInfo
-from PyQt5.QtWidgets import (
+from PyQt6.QtCore import pyqtSlot, QProcess, QTimer, QFileInfo
+from PyQt6.QtWidgets import (
     QDialog, QDialogButtonBox, QAbstractButton, QTextEdit, QLineEdit
 )
 
-from E5Gui import E5MessageBox, E5FileDialog
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from .Ui_DjangoDialog import Ui_DjangoDialog
 
@@ -38,25 +38,35 @@
         """
         Constructor
         
-        @param text text to be shown by the label (string)
-        @keyparam fixed flag indicating a fixed font should be used (boolean)
-        @keyparam linewrap flag indicating to wrap long lines (boolean)
-        @keyparam msgSuccess optional string to show upon successful execution
-            (string)
-        @keyparam msgError optional string to show upon unsuccessful execution
-            (string)
-        @keyparam saveFilters filename filter string (string)
-        @keyparam showInput flag indicating to show the input widgets (bool)
-        @keyparam parent parent widget (QWidget)
+        @param text text to be shown by the label
+        @type str
+        @param fixed flag indicating a fixed font should be used
+        @type bool
+        @param linewrap flag indicating to wrap long lines
+        @type bool
+        @param msgSuccess optional string to show upon successful execution
+        @type str
+        @param msgError optional string to show upon unsuccessful execution
+        @type str
+        @param saveFilters filename filter string
+        @type str
+        @param showInput flag indicating to show the input widgets
+        @type bool
+        @param parent parent widget
+        @type QWidget
         """
         super().__init__(parent)
         self.setupUi(self)
         
-        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
-        self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
-        self.buttonBox.button(QDialogButtonBox.Save).setEnabled(False)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Close).setEnabled(False)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Cancel).setDefault(True)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Save).setEnabled(False)
         if saveFilters is None:
-            self.buttonBox.button(QDialogButtonBox.Save).setHidden(True)
+            self.buttonBox.button(
+                QDialogButtonBox.StandardButton.Save).setHidden(True)
         
         self.ioEncoding = Preferences.getSystem("IOEncoding")
         
@@ -79,20 +89,27 @@
                 self.resultbox.setFontFamily("Monospace")
         
         if not linewrap:
-            self.resultbox.setLineWrapMode(QTextEdit.NoWrap)
+            self.resultbox.setLineWrapMode(QTextEdit.LineWrapMode.NoWrap)
     
     @pyqtSlot(QAbstractButton)
     def on_buttonBox_clicked(self, button):
         """
         Private slot called by a button of the button box clicked.
         
-        @param button button that was clicked (QAbstractButton)
+        @param button button that was clicked
+        @type QAbstractButton
         """
-        if button == self.buttonBox.button(QDialogButtonBox.Close):
+        if button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Close
+        ):
             self.close()
-        elif button == self.buttonBox.button(QDialogButtonBox.Cancel):
+        elif button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Cancel
+        ):
             self.__finish()
-        elif button == self.buttonBox.button(QDialogButtonBox.Save):
+        elif button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Save
+        ):
             self.__saveData()
     
     def __finish(self):
@@ -102,16 +119,20 @@
         """
         if (
             self.proc is not None and
-            self.proc.state() != QProcess.NotRunning
+            self.proc.state() != QProcess.ProcessState.NotRunning
         ):
             self.proc.terminate()
             QTimer.singleShot(2000, self.proc.kill)
             self.proc.waitForFinished(3000)
         
-        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
-        self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)
-        self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)
-        self.buttonBox.button(QDialogButtonBox.Save).setEnabled(True)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Close).setEnabled(True)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Cancel).setEnabled(False)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Close).setDefault(True)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Save).setEnabled(True)
         
         self.inputGroup.setEnabled(False)
         self.inputGroup.hide()
@@ -128,10 +149,15 @@
         """
         Private slot connected to the finished signal.
         
-        @param exitCode exit code of the process (integer)
-        @param exitStatus exit status of the process (QProcess.ExitStatus)
+        @param exitCode exit code of the process
+        @type int
+        @param exitStatus exit status of the process
+        @type QProcess.ExitStatus
         """
-        self.normal = (exitStatus == QProcess.NormalExit) and (exitCode == 0)
+        self.normal = (
+            exitStatus == QProcess.ExitStatus.NormalExit and
+            exitCode == 0
+        )
         self.__finish()
         
         if self.normal and self.msgSuccess:
@@ -146,13 +172,16 @@
         """
         Public slot used to start the process.
         
-        @param args list of arguments for the process (list of strings)
-        @param workingDir working directory for the process (string)
+        @param args list of arguments for the process
+        @type list of str
+        @param workingDir working directory for the process
+        @type str
         @param showCommand flag indicating to show the command executed
-            (boolean)
+        @type bool
         @param mergedOutput flag indicating to merge the output of the process
-            (boolean)
-        @return flag indicating a successful start of the process (boolean)
+        @type bool
+        @return flag indicating a successful start of the process
+        @rtype bool
         """
         self.errorGroup.hide()
         
@@ -160,7 +189,8 @@
         
         self.proc = QProcess()
         if mergedOutput:
-            self.proc.setProcessChannelMode(QProcess.MergedChannels)
+            self.proc.setProcessChannelMode(
+                QProcess.ProcessChannelMode.MergedChannels)
         
         if showCommand:
             self.resultbox.append(' '.join(args))
@@ -183,7 +213,7 @@
         if not procStarted:
             self.buttonBox.setFocus()
             self.inputGroup.setEnabled(False)
-            E5MessageBox.critical(
+            EricMessageBox.critical(
                 self,
                 self.tr('Process Generation Error'),
                 self.tr(
@@ -206,12 +236,13 @@
         Public slot used to start a batch of processes.
         
         @param argsLists list of lists of arguments for the processes
-            (list of lists of strings)
-        @param workingDir working directory for the process (string)
+        @type list of list of str
+        @param workingDir working directory for the process
+        @type str
         @param mergedOutput flag indicating to merge the output of the process
-            (boolean)
+        @type bool
         @return flag indicating a successful start of the first process
-            (boolean)
+        @rtype bool
         """
         self.argsLists = argsLists[:]
         self.workingDir = workingDir
@@ -231,7 +262,8 @@
         """
         Public method to check for a normal process termination.
         
-        @return flag indicating normal process termination (boolean)
+        @return flag indicating normal process termination
+        @rtype bool
         """
         return self.normal
     
@@ -240,7 +272,8 @@
         Public method to check for a normal process termination without
         error messages.
         
-        @return flag indicating normal process termination (boolean)
+        @return flag indicating normal process termination
+        @rtype bool
         """
         return self.normal and self.errors.toPlainText() == ""
     
@@ -275,7 +308,7 @@
         """
         Private slot to save the output to a file.
         """
-        fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
+        fname, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
             self,
             self.tr("Select data file"),
             self.workingDir,
@@ -295,7 +328,7 @@
                 with open(fname, "w", encoding="utf-8") as f:
                     f.write(txt)
             except OSError as err:
-                E5MessageBox.critical(
+                EricMessageBox.critical(
                     self,
                     self.tr("Error saving data"),
                     self.tr("""<p>The data could not be written"""
@@ -306,12 +339,13 @@
         """
         Private slot to handle the password checkbox toggled.
         
-        @param isOn flag indicating the status of the check box (boolean)
+        @param isOn flag indicating the status of the check box
+        @type bool
         """
         if isOn:
-            self.input.setEchoMode(QLineEdit.Password)
+            self.input.setEchoMode(QLineEdit.EchoMode.Password)
         else:
-            self.input.setEchoMode(QLineEdit.Normal)
+            self.input.setEchoMode(QLineEdit.EchoMode.Normal)
     
     @pyqtSlot()
     def on_sendButton_clicked(self):
@@ -344,7 +378,8 @@
         """
         Protected slot to handle a key press event.
         
-        @param evt the key press event (QKeyEvent)
+        @param evt the key press event
+        @type QKeyEvent
         """
         if self.intercept:
             self.intercept = False
--- a/ProjectDjango/DjangoDialog.ui	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoDialog.ui	Sat May 29 18:33:03 2021 +0200
@@ -137,6 +137,9 @@
         <property name="toolTip">
          <string>Enter data to be sent to the manage.py process</string>
         </property>
+        <property name="clearButtonEnabled">
+         <bool>true</bool>
+        </property>
        </widget>
       </item>
       <item row="1" column="0">
--- a/ProjectDjango/DjangoDiffsettingsDataDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoDiffsettingsDataDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing a dialog to enter the data for the 'diffsettings' command.
 """
 
-from PyQt5.QtWidgets import QDialog
+from PyQt6.QtWidgets import QDialog
 
 from .Ui_DjangoDiffsettingsDataDialog import Ui_DjangoDiffsettingsDataDialog
 
@@ -41,7 +41,7 @@
         
         @return tuple containing a flag indicating to show all settings,
             the name of a module containing the default settings and the
-            output format (Django 2.0.0+)
+            output format
         @rtype tuple of (bool, str, str)
         """
         outputFormat = self.formatComboBox.itemData(
--- a/ProjectDjango/DjangoDiffsettingsDataDialog.ui	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoDiffsettingsDataDialog.ui	Sat May 29 18:33:03 2021 +0200
@@ -39,6 +39,9 @@
      <property name="toolTip">
       <string>Enter the name of the module containing the default settings (1.11.0+ only)</string>
      </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
     </widget>
    </item>
    <item row="2" column="0">
--- a/ProjectDjango/DjangoDumpdataDataDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoDumpdataDataDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -9,7 +9,7 @@
 
 import contextlib
 
-from PyQt5.QtWidgets import QDialog
+from PyQt6.QtWidgets import QDialog
 
 from .Ui_DjangoDumpdataDataDialog import Ui_DjangoDumpdataDataDialog
 
@@ -23,7 +23,9 @@
         Constructor
         
         @param project reference to the Django project object
-        @param parent reference to the parent widget (QWidget)
+        @type Project
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super().__init__(parent)
         self.setupUi(self)
@@ -48,9 +50,9 @@
         """
         Public method to get the data entered into the dialog.
         
-        @return tuple of two lists of strings, a string and an integer giving
-            the list of applications to work on, the list of applications to
-            exclude, the dump format and the indentation level
+        @return tuple giving the list of applications to work on, the list of
+            applications to exclude, the dump format and the indentation level
+        @rtype tuple of (list of str, list of str, str, int)
         """
         applStr = self.applicationsCombo.currentText()
         if applStr:
--- a/ProjectDjango/DjangoLoaddataDataDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoLoaddataDataDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -9,10 +9,10 @@
 
 import contextlib
 
-from PyQt5.QtCore import pyqtSlot
-from PyQt5.QtWidgets import QDialog, QDialogButtonBox
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui import E5FileDialog
+from EricWidgets import EricFileDialog
 
 from .Ui_DjangoLoaddataDataDialog import Ui_DjangoLoaddataDataDialog
 
@@ -29,7 +29,9 @@
         Constructor
         
         @param project reference to the Django project object
-        @param parent reference to the parent widget (QWidget)
+        @type Project
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super().__init__(parent)
         self.setupUi(self)
@@ -38,7 +40,8 @@
         
         self.__project = project
         
-        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Ok).setEnabled(False)
         
         msh = self.minimumSizeHint()
         self.resize(max(self.width(), msh.width()), msh.height())
@@ -50,7 +53,8 @@
         
         @param txt text of the line edit (string)
         """
-        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(bool(txt))
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Ok).setEnabled(bool(txt))
     
     @pyqtSlot()
     def on_fixtureFileButton_clicked(self):
@@ -63,7 +67,7 @@
             fileFilters += self.tr("YAML Files (*.yaml);;")
         fileFilters += self.tr("All Files (*)")
         
-        fixtureFiles = E5FileDialog.getOpenFileNames(
+        fixtureFiles = EricFileDialog.getOpenFileNames(
             self,
             self.tr("Select fixture file"),
             self.__project.getProjectPath(),
--- a/ProjectDjango/DjangoLoaddataDataDialog.ui	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoLoaddataDataDialog.ui	Sat May 29 18:33:03 2021 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>600</width>
-    <height>310</height>
+    <height>346</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -47,6 +47,9 @@
        <property name="toolTip">
         <string>Enter the label of an application to search for fixtures</string>
        </property>
+       <property name="clearButtonEnabled">
+        <bool>true</bool>
+       </property>
       </widget>
      </item>
     </layout>
@@ -57,6 +60,9 @@
       <string>Fixtures</string>
      </property>
      <layout class="QGridLayout" name="gridLayout">
+      <property name="horizontalSpacing">
+       <number>0</number>
+      </property>
       <item row="0" column="0" colspan="2">
        <widget class="QLabel" name="label">
         <property name="text">
@@ -68,7 +74,11 @@
        </widget>
       </item>
       <item row="1" column="0">
-       <widget class="QLineEdit" name="fixturesEdit"/>
+       <widget class="QLineEdit" name="fixturesEdit">
+        <property name="clearButtonEnabled">
+         <bool>true</bool>
+        </property>
+       </widget>
       </item>
       <item row="1" column="1">
        <widget class="QToolButton" name="fixtureFileButton">
@@ -97,7 +107,11 @@
        </widget>
       </item>
       <item>
-       <widget class="QLineEdit" name="excludeEdit"/>
+       <widget class="QLineEdit" name="excludeEdit">
+        <property name="clearButtonEnabled">
+         <bool>true</bool>
+        </property>
+       </widget>
       </item>
      </layout>
     </widget>
--- a/ProjectDjango/DjangoMakeMigrationsDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoMakeMigrationsDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing a dialog to enter the data needed to make migrations.
 """
 
-from PyQt5.QtWidgets import QDialog
+from PyQt6.QtWidgets import QDialog
 
 from .Ui_DjangoMakeMigrationsDialog import Ui_DjangoMakeMigrationsDialog
 
--- a/ProjectDjango/DjangoMakeMigrationsDialog.ui	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoMakeMigrationsDialog.ui	Sat May 29 18:33:03 2021 +0200
@@ -48,10 +48,13 @@
     </widget>
    </item>
    <item row="1" column="1">
-    <widget class="E5ClearableLineEdit" name="nameEdit">
+    <widget class="QLineEdit" name="nameEdit">
      <property name="toolTip">
       <string>Enter a name for the migration</string>
      </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
     </widget>
    </item>
    <item row="2" column="0" colspan="2">
@@ -102,13 +105,6 @@
    </item>
   </layout>
  </widget>
- <customwidgets>
-  <customwidget>
-   <class>E5ClearableLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>E5Gui/E5LineEdit.h</header>
-  </customwidget>
- </customwidgets>
  <tabstops>
   <tabstop>applicationsComboBox</tabstop>
   <tabstop>nameEdit</tabstop>
--- a/ProjectDjango/DjangoMigrationSelectionDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoMigrationSelectionDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -9,9 +9,9 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSlot
-from PyQt5.QtGui import QIcon
-from PyQt5.QtWidgets import QDialog
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtGui import QIcon
+from PyQt6.QtWidgets import QDialog
 
 from .Ui_DjangoMigrationSelectionDialog import (
     Ui_DjangoMigrationSelectionDialog
--- a/ProjectDjango/DjangoMigrationsListDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoMigrationsListDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -7,14 +7,14 @@
 Module implementing a dialog show a list of all available migrations.
 """
 
-from PyQt5.QtCore import pyqtSlot, Qt, QProcess, QTimer, QPoint
-from PyQt5.QtWidgets import (
+from PyQt6.QtCore import pyqtSlot, Qt, QProcess, QTimer, QPoint
+from PyQt6.QtWidgets import (
     QDialog, QDialogButtonBox, QAbstractButton,
     QHeaderView, QTreeWidgetItem, QMenu, QAbstractItemView, QInputDialog,
     QLineEdit
 )
 
-from E5Gui import E5MessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_DjangoMigrationsListDialog import Ui_DjangoMigrationsListDialog
 
@@ -42,8 +42,10 @@
         super().__init__(parent)
         self.setupUi(self)
         
-        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
-        self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Close).setEnabled(False)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Cancel).setDefault(True)
         
         self.ioEncoding = Preferences.getSystem("IOEncoding")
         
@@ -64,7 +66,7 @@
                 self.tr("Name"),
             ])
             self.migrationsList.setSelectionMode(
-                QAbstractItemView.ExtendedSelection)
+                QAbstractItemView.SelectionMode.ExtendedSelection)
         else:
             self.setWindowTitle(self.tr("Migrations Plan"))
             self.migrationsList.setHeaderLabels([
@@ -72,10 +74,10 @@
                 self.tr("Dependencies"),
             ])
             self.migrationsList.setSelectionMode(
-                QAbstractItemView.SingleSelection)
+                QAbstractItemView.SelectionMode.SingleSelection)
         
         self.refreshButton = self.buttonBox.addButton(
-            self.tr("&Refresh"), QDialogButtonBox.ActionRole)
+            self.tr("&Refresh"), QDialogButtonBox.ButtonRole.ActionRole)
         self.refreshButton.setToolTip(
             self.tr("Press to refresh the list"))
         self.refreshButton.setEnabled(False)
@@ -88,9 +90,13 @@
         @param button button that was clicked
         @type QAbstractButton
         """
-        if button == self.buttonBox.button(QDialogButtonBox.Close):
+        if button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Close
+        ):
             self.close()
-        elif button == self.buttonBox.button(QDialogButtonBox.Cancel):
+        elif button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Cancel
+        ):
             self.__finish()
         elif button == self.refreshButton:
             self.on_refreshButton_clicked()
@@ -102,15 +108,18 @@
         """
         if (
             self.proc is not None and
-            self.proc.state() != QProcess.NotRunning
+            self.proc.state() != QProcess.ProcessState.NotRunning
         ):
             self.proc.terminate()
             QTimer.singleShot(2000, self.proc.kill)
             self.proc.waitForFinished(3000)
         
-        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
-        self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)
-        self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Close).setEnabled(True)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Cancel).setEnabled(False)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Close).setDefault(True)
         
         self.refreshButton.setEnabled(True)
         
@@ -120,8 +129,10 @@
         """
         Private slot connected to the finished signal.
         
-        @param exitCode exit code of the process (integer)
-        @param exitStatus exit status of the process (QProcess.ExitStatus)
+        @param exitCode exit code of the process
+        @type int
+        @param exitStatus exit status of the process
+        @type QProcess.ExitStatus
         """
         self.__finish()
     
@@ -130,7 +141,7 @@
         Private method to resize the list columns.
         """
         self.migrationsList.header().resizeSections(
-            QHeaderView.ResizeToContents)
+            QHeaderView.ResizeMode.ResizeToContents)
         if self.__mode == DjangoMigrationsListDialog.MigrationsListMode:
             self.migrationsList.header().setStretchLastSection(True)
     
@@ -174,7 +185,7 @@
         procStarted = self.proc.waitForStarted()
         if not procStarted:
             self.buttonBox.setFocus()
-            E5MessageBox.critical(
+            EricMessageBox.critical(
                 self,
                 self.tr('Process Generation Error'),
                 self.tr(
@@ -220,9 +231,9 @@
                 else:
                     itm = QTreeWidgetItem(self.migrationsList, [name])
                 if applied[1] == " ":
-                    itm.setCheckState(0, Qt.Unchecked)
+                    itm.setCheckState(0, Qt.CheckState.Unchecked)
                 else:
-                    itm.setCheckState(0, Qt.Checked)
+                    itm.setCheckState(0, Qt.CheckState.Checked)
     
     def __createPlanItem(self, line):
         """
@@ -248,7 +259,7 @@
                 "",
             ])
         if applied[1] != " ":
-            itm.setCheckState(0, Qt.Checked)
+            itm.setCheckState(0, Qt.CheckState.Checked)
     
     def __readStderr(self):
         """
@@ -269,9 +280,12 @@
         """
         Private slot to refresh the log.
         """
-        self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
-        self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(True)
-        self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Close).setEnabled(False)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Cancel).setEnabled(True)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Cancel).setDefault(True)
         
         self.refreshButton.setEnabled(False)
         
@@ -381,7 +395,7 @@
                 self.tr("Make Migrations"),
                 self.tr("Enter a name for the migrations (leave empty to"
                         " use system supplied name):"),
-                QLineEdit.Normal)
+                QLineEdit.EchoMode.Normal)
             
             if ok:
                 self.__django.makeMigrations(apps, migration, dryRun, empty,
--- a/ProjectDjango/DjangoRunTestServerDataDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoRunTestServerDataDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -9,14 +9,13 @@
 
 import contextlib
 
-from PyQt5.QtCore import pyqtSlot
-from PyQt5.QtWidgets import QDialog, QDialogButtonBox
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui import E5FileDialog
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_DjangoRunTestServerDataDialog import Ui_DjangoRunTestServerDataDialog
 
-import Utilities
 import UI.PixmapCache
 
 
@@ -29,57 +28,51 @@
         Constructor
         
         @param project reference to the Django project object
-        @param parent reference to the parent widget (QWidget)
+        @type Project
+        @param parent reference to the parent widget
+        @type QWidget
         """
         super().__init__(parent)
         self.setupUi(self)
         
-        self.fixtureFileButton.setIcon(UI.PixmapCache.getIcon("open"))
-        
-        self.__project = project
-        
-        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
-        
-        msh = self.minimumSizeHint()
-        self.resize(max(self.width(), msh.width()), msh.height())
-    
-    @pyqtSlot(str)
-    def on_fixturesEdit_textChanged(self, txt):
-        """
-        Private slot to handle a change of the fixtures text.
-        
-        @param txt text of the line edit (string)
-        """
-        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(bool(txt))
-    
-    @pyqtSlot()
-    def on_fixtureFileButton_clicked(self):
-        """
-        Private slot to select a fixture file via a file selection dialog.
-        """
         fileFilters = self.tr("JSON Files (*.json);;XML Files (*.xml);;")
         with contextlib.suppress(ImportError):
             import yaml     # __IGNORE_WARNING__
             fileFilters += self.tr("YAML Files (*.yaml);;")
         fileFilters += self.tr("All Files (*)")
         
-        fixtureFiles = E5FileDialog.getOpenFileNames(
-            self,
-            self.tr("Select fixture file"),
-            self.__project.getProjectPath(),
-            fileFilters)
+        self.fixturePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
+        self.fixturePicker.setFilters(fileFilters)
+        
+        self.fixtureFileButton.setIcon(UI.PixmapCache.getIcon("open"))
+        
+        self.__project = project
+        
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Ok).setEnabled(False)
         
-        if fixtureFiles:
-            self.fixturesEdit.setText(" ".join(
-                [Utilities.toNativeSeparators(f) for f in fixtureFiles]))
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+    
+    @pyqtSlot(str)
+    def on_fixturesPicker_textChanged(self, txt):
+        """
+        Private slot to handle a change of the fixtures text.
+        
+        @param txt text of the line edit
+        @type str
+        """
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Ok).setEnabled(bool(txt))
     
     def getData(self):
         """
         Public method to get the data entered into the dialog.
         
-        @return list of fixtures (list of strings)
+        @return list of fixtures
+        @rtype list of str
         """
-        fixturesStr = self.fixturesEdit.text()
+        fixturesStr = self.fixturePicker.text()
         fixtures = fixturesStr.split()
         
         return fixtures
--- a/ProjectDjango/DjangoRunTestServerDataDialog.ui	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoRunTestServerDataDialog.ui	Sat May 29 18:33:03 2021 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>600</width>
-    <height>102</height>
+    <height>92</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -22,25 +22,22 @@
   <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QGridLayout" name="gridLayout">
-   <item row="0" column="0" colspan="2">
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
     <widget class="QLabel" name="label">
      <property name="text">
       <string>Enter the list of fixture patterns or the path of a fixture file.</string>
      </property>
     </widget>
    </item>
-   <item row="1" column="0">
-    <widget class="QLineEdit" name="fixturesEdit"/>
-   </item>
-   <item row="1" column="1">
-    <widget class="QToolButton" name="fixtureFileButton">
-     <property name="toolTip">
-      <string>Select a fixture file via a file selection dialog</string>
+   <item>
+    <widget class="EricPathPicker" name="fixturePicker" native="true">
+     <property name="focusPolicy">
+      <enum>Qt::WheelFocus</enum>
      </property>
     </widget>
    </item>
-   <item row="2" column="0" colspan="2">
+   <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
@@ -52,9 +49,15 @@
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>EricPathPicker</class>
+   <extends>QWidget</extends>
+   <header>EricWidgets/EricPathPicker.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
  <tabstops>
-  <tabstop>fixturesEdit</tabstop>
-  <tabstop>fixtureFileButton</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
  <resources/>
--- a/ProjectDjango/DjangoSendTestEmailDataDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoSendTestEmailDataDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing a dialog to enter the data for the 'sendtestemail' command.
 """
 
-from PyQt5.QtWidgets import QDialog
+from PyQt6.QtWidgets import QDialog
 
 from .Ui_DjangoSendTestEmailDataDialog import Ui_DjangoSendTestEmailDataDialog
 
--- a/ProjectDjango/DjangoSquashMigrationSelectionDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoSquashMigrationSelectionDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -9,9 +9,9 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSlot
-from PyQt5.QtGui import QIcon
-from PyQt5.QtWidgets import QDialog, QDialogButtonBox
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtGui import QIcon
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
 from .Ui_DjangoSquashMigrationSelectionDialog import (
     Ui_DjangoSquashMigrationSelectionDialog
@@ -58,7 +58,8 @@
         enabled = (
             bool(self.applicationComboBox.currentText()) and
             bool(self.endMigrationComboBox.currentText()))
-        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(enabled)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Ok).setEnabled(enabled)
     
     @pyqtSlot(str)
     def on_applicationComboBox_activated(self, app):
--- a/ProjectDjango/DjangoSquashMigrationSelectionDialog.ui	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoSquashMigrationSelectionDialog.ui	Sat May 29 18:33:03 2021 +0200
@@ -89,6 +89,9 @@
      <property name="toolTip">
       <string>Enter an optional name for the migration (2.0.0+ only)</string>
      </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
     </widget>
    </item>
    <item row="4" column="0" colspan="2">
--- a/ProjectDjango/DjangoTestDataDialog.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoTestDataDialog.py	Sat May 29 18:33:03 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing a dialog to enter some data for running tests.
 """
 
-from PyQt5.QtWidgets import QDialog
+from PyQt6.QtWidgets import QDialog
 
 from .Ui_DjangoTestDataDialog import Ui_DjangoTestDataDialog
 
--- a/ProjectDjango/DjangoTestDataDialog.ui	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/DjangoTestDataDialog.ui	Sat May 29 18:33:03 2021 +0200
@@ -25,7 +25,7 @@
     </widget>
    </item>
    <item row="0" column="1">
-    <widget class="E5ClearableComboBox" name="labelsComboBox">
+    <widget class="QComboBox" name="labelsComboBox">
      <property name="toolTip">
       <string>Enter the tests to be performed separated by space</string>
      </property>
@@ -42,10 +42,13 @@
     </widget>
    </item>
    <item row="1" column="1">
-    <widget class="E5ClearableLineEdit" name="testFilePatternsEdit">
+    <widget class="QLineEdit" name="testFilePatternsEdit">
      <property name="toolTip">
       <string>Enter the test file pattern</string>
      </property>
+     <property name="clearButtonEnabled">
+      <bool>true</bool>
+     </property>
     </widget>
    </item>
    <item row="2" column="0">
@@ -56,7 +59,7 @@
     </widget>
    </item>
    <item row="2" column="1">
-    <widget class="E5ClearableComboBox" name="tagsComboBox">
+    <widget class="QComboBox" name="tagsComboBox">
      <property name="toolTip">
       <string>Enter the test tags to be run separated by space</string>
      </property>
@@ -73,7 +76,7 @@
     </widget>
    </item>
    <item row="3" column="1">
-    <widget class="E5ClearableComboBox" name="excludeTagsComboBox">
+    <widget class="QComboBox" name="excludeTagsComboBox">
      <property name="toolTip">
       <string>Enter the test tags to be skipped separated by space</string>
      </property>
@@ -114,18 +117,6 @@
    </item>
   </layout>
  </widget>
- <customwidgets>
-  <customwidget>
-   <class>E5ClearableComboBox</class>
-   <extends>QComboBox</extends>
-   <header>E5Gui/E5ComboBox.h</header>
-  </customwidget>
-  <customwidget>
-   <class>E5ClearableLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>E5Gui/E5LineEdit.h</header>
-  </customwidget>
- </customwidgets>
  <resources/>
  <connections>
   <connection>
--- a/ProjectDjango/Documentation/help/howto-debug.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/help/howto-debug.html	Sat May 29 18:33:03 2021 +0200
@@ -6,9 +6,9 @@
 <body>
     <h2>How to debug Django projects</h2>
     <p>This little howto gives step-by-step instructions for debugging a Django
-    project with the eric4 debugger.</p>
+    project with the eric7 debugger.</p>
     <ol>
-        <li>Make the manage.py script of the Django project the eric4 project's
+        <li>Make the manage.py script of the Django project the eric7 project's
             main script (see the Project Properties dialog).</li>
         <li>Set a breakpoint at the position you want to start debugging.</li>
         <li>Start the debugger using "runserver --noreload"</li>
--- a/ProjectDjango/Documentation/source/Plugin_Project_Django.PluginProjectDjango.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/source/Plugin_Project_Django.PluginProjectDjango.html	Sat May 29 18:33:03 2021 +0200
@@ -160,9 +160,9 @@
 </p>
 <dl>
 
-<dt><i>ui</i></dt>
+<dt><i>ui</i> (UserInterface)</dt>
 <dd>
-reference to the user interface object (UI.UserInterface)
+reference to the user interface object
 </dd>
 </dl>
 <a NAME="ProjectDjangoPlugin.__initialize" ID="ProjectDjangoPlugin.__initialize"></a>
@@ -210,7 +210,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-tuple of None and activation status (boolean)
+tuple of None and activation status
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <a NAME="ProjectDjangoPlugin.binaryTranslationsCallback" ID="ProjectDjangoPlugin.binaryTranslationsCallback"></a>
@@ -223,15 +229,21 @@
 </p>
 <dl>
 
-<dt><i>filename</i></dt>
+<dt><i>filename</i> (str)</dt>
 <dd>
-name of the translation source file (string)
+name of the translation source file
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-name of the binary translation file (string)
+name of the binary translation file
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="ProjectDjangoPlugin.deactivate" ID="ProjectDjangoPlugin.deactivate"></a>
@@ -254,6 +266,12 @@
 dictionary with file type associations
 </dd>
 </dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
 <a NAME="ProjectDjangoPlugin.getMenu" ID="ProjectDjangoPlugin.getMenu"></a>
 <h4>ProjectDjangoPlugin.getMenu</h4>
 <b>getMenu</b>(<i>name</i>)
@@ -297,7 +315,7 @@
 </p>
 <dl>
 
-<dt><i>key</i></dt>
+<dt><i>key</i> (str)</dt>
 <dd>
 the key of the value to get
 </dd>
@@ -305,7 +323,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-the requested setting
+value of the requested setting
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+Any
 </dd>
 </dl>
 <a NAME="ProjectDjangoPlugin.lexerAssociationCallback" ID="ProjectDjangoPlugin.lexerAssociationCallback"></a>
@@ -318,18 +342,24 @@
 </p>
 <dl>
 
-<dt><i>filename</i></dt>
+<dt><i>filename</i> (str)</dt>
 <dd>
-name of the file (string)
+name of the file
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-name of the lexer (string) (Pygments lexers are prefixed with
+name of the lexer (Pygments lexers are prefixed with
             'Pygments|')
 </dd>
 </dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="ProjectDjangoPlugin.setPreferences" ID="ProjectDjangoPlugin.setPreferences"></a>
 <h4>ProjectDjangoPlugin.setPreferences</h4>
 <b>setPreferences</b>(<i>key, value</i>)
@@ -339,13 +369,13 @@
 </p>
 <dl>
 
-<dt><i>key</i></dt>
+<dt><i>key</i> (str)</dt>
 <dd>
-the key of the setting to be set (string)
+the key of the setting to be set
 </dd>
-<dt><i>value</i></dt>
+<dt><i>value</i> (Any)</dt>
 <dd>
-the value to be set
+value to be set
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
@@ -360,15 +390,21 @@
 </p>
 <dl>
 
-<dt><i>language</i></dt>
+<dt><i>language</i> (str)</dt>
 <dd>
-language to get APIs for (string)
+language to get APIs for
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-list of API filenames (list of string)
+list of API filenames
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
@@ -383,7 +419,7 @@
 </p>
 <dl>
 
-<dt><i>configDlg</i></dt>
+<dt><i>configDlg</i> (ConfigurationWidget)</dt>
 <dd>
 reference to the configuration dialog
 </dd>
@@ -394,6 +430,12 @@
 reference to the configuration page
 </dd>
 </dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+DjangoPage
+</dd>
+</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
@@ -410,6 +452,12 @@
 dictionary containing the relevant data
 </dd>
 </dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
--- a/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.ConfigurationPage.DjangoPage.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.ConfigurationPage.DjangoPage.html	Sat May 29 18:33:03 2021 +0200
@@ -73,14 +73,6 @@
 <td>Constructor</td>
 </tr>
 <tr>
-<td><a href="#DjangoPage.on_translationsButton_clicked">on_translationsButton_clicked</a></td>
-<td>Private slot to select the translations editor via a file selection dialog.</td>
-</tr>
-<tr>
-<td><a href="#DjangoPage.on_virtualEnvPy3Button_clicked">on_virtualEnvPy3Button_clicked</a></td>
-<td>Private slot to select the virtual environment for Python 3 via a directory selection dialog.</td>
-</tr>
-<tr>
 <td><a href="#DjangoPage.save">save</a></td>
 <td>Public slot to save the Django configuration.</td>
 </tr>
@@ -105,22 +97,6 @@
 reference to the plugin object
 </dd>
 </dl>
-<a NAME="DjangoPage.on_translationsButton_clicked" ID="DjangoPage.on_translationsButton_clicked"></a>
-<h4>DjangoPage.on_translationsButton_clicked</h4>
-<b>on_translationsButton_clicked</b>(<i></i>)
-
-<p>
-        Private slot to select the translations editor via a file selection
-        dialog.
-</p>
-<a NAME="DjangoPage.on_virtualEnvPy3Button_clicked" ID="DjangoPage.on_virtualEnvPy3Button_clicked"></a>
-<h4>DjangoPage.on_virtualEnvPy3Button_clicked</h4>
-<b>on_virtualEnvPy3Button_clicked</b>(<i></i>)
-
-<p>
-        Private slot to select the virtual environment for Python 3 via a
-        directory selection dialog.
-</p>
 <a NAME="DjangoPage.save" ID="DjangoPage.save"></a>
 <h4>DjangoPage.save</h4>
 <b>save</b>(<i></i>)
--- a/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoDialog.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoDialog.html	Sat May 29 18:33:03 2021 +0200
@@ -149,39 +149,37 @@
 </p>
 <dl>
 
-<dt><i>text</i></dt>
+<dt><i>text</i> (str)</dt>
 <dd>
-text to be shown by the label (string)
+text to be shown by the label
 </dd>
-<dt><i>fixed=</i></dt>
+<dt><i>fixed</i> (bool)</dt>
 <dd>
-flag indicating a fixed font should be used (boolean)
+flag indicating a fixed font should be used
 </dd>
-<dt><i>linewrap=</i></dt>
+<dt><i>linewrap</i> (bool)</dt>
 <dd>
-flag indicating to wrap long lines (boolean)
+flag indicating to wrap long lines
 </dd>
-<dt><i>msgSuccess=</i></dt>
+<dt><i>msgSuccess</i> (str)</dt>
 <dd>
 optional string to show upon successful execution
-            (string)
 </dd>
-<dt><i>msgError=</i></dt>
+<dt><i>msgError</i> (str)</dt>
 <dd>
 optional string to show upon unsuccessful execution
-            (string)
 </dd>
-<dt><i>saveFilters=</i></dt>
+<dt><i>saveFilters</i> (str)</dt>
 <dd>
-filename filter string (string)
+filename filter string
 </dd>
-<dt><i>showInput=</i></dt>
+<dt><i>showInput</i> (bool)</dt>
 <dd>
-flag indicating to show the input widgets (bool)
+flag indicating to show the input widgets
 </dd>
-<dt><i>parent=</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-parent widget (QWidget)
+parent widget
 </dd>
 </dl>
 <a NAME="DjangoDialog.__finish" ID="DjangoDialog.__finish"></a>
@@ -201,13 +199,13 @@
 </p>
 <dl>
 
-<dt><i>exitCode</i></dt>
+<dt><i>exitCode</i> (int)</dt>
 <dd>
-exit code of the process (integer)
+exit code of the process
 </dd>
-<dt><i>exitStatus</i></dt>
+<dt><i>exitStatus</i> (QProcess.ExitStatus)</dt>
 <dd>
-exit status of the process (QProcess.ExitStatus)
+exit status of the process
 </dd>
 </dl>
 <a NAME="DjangoDialog.__readStderr" ID="DjangoDialog.__readStderr"></a>
@@ -248,9 +246,9 @@
 </p>
 <dl>
 
-<dt><i>evt</i></dt>
+<dt><i>evt</i> (QKeyEvent)</dt>
 <dd>
-the key press event (QKeyEvent)
+the key press event
 </dd>
 </dl>
 <a NAME="DjangoDialog.normalExit" ID="DjangoDialog.normalExit"></a>
@@ -263,7 +261,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-flag indicating normal process termination (boolean)
+flag indicating normal process termination
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <a NAME="DjangoDialog.normalExitWithoutErrors" ID="DjangoDialog.normalExitWithoutErrors"></a>
@@ -277,7 +281,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-flag indicating normal process termination (boolean)
+flag indicating normal process termination
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <a NAME="DjangoDialog.on_buttonBox_clicked" ID="DjangoDialog.on_buttonBox_clicked"></a>
@@ -289,9 +299,9 @@
 </p>
 <dl>
 
-<dt><i>button</i></dt>
+<dt><i>button</i> (QAbstractButton)</dt>
 <dd>
-button that was clicked (QAbstractButton)
+button that was clicked
 </dd>
 </dl>
 <a NAME="DjangoDialog.on_input_returnPressed" ID="DjangoDialog.on_input_returnPressed"></a>
@@ -310,9 +320,9 @@
 </p>
 <dl>
 
-<dt><i>isOn</i></dt>
+<dt><i>isOn</i> (bool)</dt>
 <dd>
-flag indicating the status of the check box (boolean)
+flag indicating the status of the check box
 </dd>
 </dl>
 <a NAME="DjangoDialog.on_sendButton_clicked" ID="DjangoDialog.on_sendButton_clicked"></a>
@@ -331,26 +341,29 @@
 </p>
 <dl>
 
-<dt><i>argsLists</i></dt>
+<dt><i>argsLists</i> (list of list of str)</dt>
 <dd>
 list of lists of arguments for the processes
-            (list of lists of strings)
 </dd>
-<dt><i>workingDir</i></dt>
+<dt><i>workingDir</i> (str)</dt>
 <dd>
-working directory for the process (string)
+working directory for the process
 </dd>
-<dt><i>mergedOutput</i></dt>
+<dt><i>mergedOutput</i> (bool)</dt>
 <dd>
 flag indicating to merge the output of the process
-            (boolean)
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
 flag indicating a successful start of the first process
-            (boolean)
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <a NAME="DjangoDialog.startProcess" ID="DjangoDialog.startProcess"></a>
@@ -362,29 +375,33 @@
 </p>
 <dl>
 
-<dt><i>args</i></dt>
+<dt><i>args</i> (list of str)</dt>
 <dd>
-list of arguments for the process (list of strings)
+list of arguments for the process
 </dd>
-<dt><i>workingDir</i></dt>
+<dt><i>workingDir</i> (str)</dt>
 <dd>
-working directory for the process (string)
+working directory for the process
 </dd>
-<dt><i>showCommand</i></dt>
+<dt><i>showCommand</i> (bool)</dt>
 <dd>
 flag indicating to show the command executed
-            (boolean)
 </dd>
-<dt><i>mergedOutput</i></dt>
+<dt><i>mergedOutput</i> (bool)</dt>
 <dd>
 flag indicating to merge the output of the process
-            (boolean)
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-flag indicating a successful start of the process (boolean)
+flag indicating a successful start of the process
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoDiffsettingsDataDialog.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoDiffsettingsDataDialog.html	Sat May 29 18:33:03 2021 +0200
@@ -114,7 +114,7 @@
 <dd>
 tuple containing a flag indicating to show all settings,
             the name of a module containing the default settings and the
-            output format (Django 2.0.0+)
+            output format
 </dd>
 </dl>
 <dl>
--- a/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoDumpdataDataDialog.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoDumpdataDataDialog.html	Sat May 29 18:33:03 2021 +0200
@@ -92,13 +92,13 @@
 </p>
 <dl>
 
-<dt><i>project</i></dt>
+<dt><i>project</i> (Project)</dt>
 <dd>
 reference to the Django project object
 </dd>
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-reference to the parent widget (QWidget)
+reference to the parent widget
 </dd>
 </dl>
 <a NAME="DjangoDumpdataDataDialog.getData" ID="DjangoDumpdataDataDialog.getData"></a>
@@ -111,9 +111,14 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-tuple of two lists of strings, a string and an integer giving
-            the list of applications to work on, the list of applications to
-            exclude, the dump format and the indentation level
+tuple giving the list of applications to work on, the list of
+            applications to exclude, the dump format and the indentation level
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (list of str, list of str, str, int)
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoLoaddataDataDialog.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoLoaddataDataDialog.html	Sat May 29 18:33:03 2021 +0200
@@ -100,13 +100,13 @@
 </p>
 <dl>
 
-<dt><i>project</i></dt>
+<dt><i>project</i> (Project)</dt>
 <dd>
 reference to the Django project object
 </dd>
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-reference to the parent widget (QWidget)
+reference to the parent widget
 </dd>
 </dl>
 <a NAME="DjangoLoaddataDataDialog.getData" ID="DjangoLoaddataDataDialog.getData"></a>
--- a/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoMigrationsListDialog.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoMigrationsListDialog.html	Sat May 29 18:33:03 2021 +0200
@@ -238,13 +238,13 @@
 </p>
 <dl>
 
-<dt><i>exitCode</i></dt>
+<dt><i>exitCode</i> (int)</dt>
 <dd>
-exit code of the process (integer)
+exit code of the process
 </dd>
-<dt><i>exitStatus</i></dt>
+<dt><i>exitStatus</i> (QProcess.ExitStatus)</dt>
 <dd>
-exit status of the process (QProcess.ExitStatus)
+exit status of the process
 </dd>
 </dl>
 <a NAME="DjangoMigrationsListDialog.__readStderr" ID="DjangoMigrationsListDialog.__readStderr"></a>
--- a/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoRunTestServerDataDialog.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.DjangoRunTestServerDataDialog.html	Sat May 29 18:33:03 2021 +0200
@@ -77,11 +77,7 @@
 <td>Public method to get the data entered into the dialog.</td>
 </tr>
 <tr>
-<td><a href="#DjangoRunTestServerDataDialog.on_fixtureFileButton_clicked">on_fixtureFileButton_clicked</a></td>
-<td>Private slot to select a fixture file via a file selection dialog.</td>
-</tr>
-<tr>
-<td><a href="#DjangoRunTestServerDataDialog.on_fixturesEdit_textChanged">on_fixturesEdit_textChanged</a></td>
+<td><a href="#DjangoRunTestServerDataDialog.on_fixturesPicker_textChanged">on_fixturesPicker_textChanged</a></td>
 <td>Private slot to handle a change of the fixtures text.</td>
 </tr>
 </table>
@@ -100,13 +96,13 @@
 </p>
 <dl>
 
-<dt><i>project</i></dt>
+<dt><i>project</i> (Project)</dt>
 <dd>
 reference to the Django project object
 </dd>
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-reference to the parent widget (QWidget)
+reference to the parent widget
 </dd>
 </dl>
 <a NAME="DjangoRunTestServerDataDialog.getData" ID="DjangoRunTestServerDataDialog.getData"></a>
@@ -119,28 +115,27 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-list of fixtures (list of strings)
+list of fixtures
 </dd>
 </dl>
-<a NAME="DjangoRunTestServerDataDialog.on_fixtureFileButton_clicked" ID="DjangoRunTestServerDataDialog.on_fixtureFileButton_clicked"></a>
-<h4>DjangoRunTestServerDataDialog.on_fixtureFileButton_clicked</h4>
-<b>on_fixtureFileButton_clicked</b>(<i></i>)
-
-<p>
-        Private slot to select a fixture file via a file selection dialog.
-</p>
-<a NAME="DjangoRunTestServerDataDialog.on_fixturesEdit_textChanged" ID="DjangoRunTestServerDataDialog.on_fixturesEdit_textChanged"></a>
-<h4>DjangoRunTestServerDataDialog.on_fixturesEdit_textChanged</h4>
-<b>on_fixturesEdit_textChanged</b>(<i>txt</i>)
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<a NAME="DjangoRunTestServerDataDialog.on_fixturesPicker_textChanged" ID="DjangoRunTestServerDataDialog.on_fixturesPicker_textChanged"></a>
+<h4>DjangoRunTestServerDataDialog.on_fixturesPicker_textChanged</h4>
+<b>on_fixturesPicker_textChanged</b>(<i>txt</i>)
 
 <p>
         Private slot to handle a change of the fixtures text.
 </p>
 <dl>
 
-<dt><i>txt</i></dt>
+<dt><i>txt</i> (str)</dt>
 <dd>
-text of the line edit (string)
+text of the line edit
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.Project.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/source/Plugin_Project_Django.ProjectDjango.Project.html	Sat May 29 18:33:03 2021 +0200
@@ -422,7 +422,7 @@
 </tr>
 <tr>
 <td><a href="#Project.__unapplyMigrations">__unapplyMigrations</a></td>
-<td>Private slot to un-apply all migrations of an application.</td>
+<td>Private slot to revert all migrations of an application.</td>
 </tr>
 <tr>
 <td><a href="#Project.applyMigrations">applyMigrations</a></td>
@@ -458,7 +458,7 @@
 </tr>
 <tr>
 <td><a href="#Project.getProjectPath">getProjectPath</a></td>
-<td>Public method to get the path of the eric6 project.</td>
+<td>Public method to get the path of the eric7 project.</td>
 </tr>
 <tr>
 <td><a href="#Project.getRecentApplications">getRecentApplications</a></td>
@@ -632,25 +632,29 @@
 </p>
 <dl>
 
-<dt><i>applName</i></dt>
+<dt><i>applName</i> (str)</dt>
 <dd>
-name of the new application (string)
+name of the new application
 </dd>
-<dt><i>path</i></dt>
+<dt><i>path</i> (str)</dt>
 <dd>
 the directory where the application should be created
-            (string)
 </dd>
-<dt><i>isGlobal</i></dt>
+<dt><i>isGlobal</i> (bool)</dt>
 <dd>
 flag indicating a standalone Django application
-            (boolean)
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-flag indicating a successful creation (boolean)
+flag indicating a successful creation
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <a NAME="Project.__createCacheTables" ID="Project.__createCacheTables"></a>
@@ -669,20 +673,25 @@
 </p>
 <dl>
 
-<dt><i>projectName</i></dt>
+<dt><i>projectName</i> (str)</dt>
 <dd>
-name of the new project (string)
+name of the new project
 </dd>
-<dt><i>path</i></dt>
+<dt><i>path</i> (str)</dt>
 <dd>
 the directory where the project should be created
-            (string)
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-flag indicating a successful creation (boolean)
+flag indicating a successful creation
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
 </dd>
 </dl>
 <a NAME="Project.__createSuperUser" ID="Project.__createSuperUser"></a>
@@ -728,7 +737,7 @@
 
 <dt><i>backwards</i> (bool)</dt>
 <dd>
-flag indicating to generate the SQL code to unapply
+flag indicating to generate the SQL code to revert
             a migration
 </dd>
 </dl>
@@ -771,7 +780,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-list of sites (list of strings)
+list of sites
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
 </dd>
 </dl>
 <a NAME="Project.__getApplications" ID="Project.__getApplications"></a>
@@ -784,7 +799,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-list of application names (list of strings)
+list of application names
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
 </dd>
 </dl>
 <a NAME="Project.__getDebugEnvironment" ID="Project.__getDebugEnvironment"></a>
@@ -796,16 +817,22 @@
 </p>
 <dl>
 
-<dt><i>language</i></dt>
+<dt><i>language</i> (str)</dt>
 <dd>
 Python variant to get the debugger environment
-            for (string, one of '' or 'Python3')
+            for (one of '' or 'Python3')
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-path of the debugger environment (string)
+path of the debugger environment
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="Project.__getDjangoAdminCommand" ID="Project.__getDjangoAdminCommand"></a>
@@ -817,16 +844,22 @@
 </p>
 <dl>
 
-<dt><i>language</i></dt>
+<dt><i>language</i> (str)</dt>
 <dd>
 Python variant to get the django-admin.py
-            command for (string, one of '' or 'Python3')
+            command for (one of '' or 'Python3')
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-full django-admin.py command (string)
+full django-admin.py command
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="Project.__getExecutablePaths" ID="Project.__getExecutablePaths"></a>
@@ -839,9 +872,9 @@
 </p>
 <dl>
 
-<dt><i>file</i></dt>
+<dt><i>file</i> (str)</dt>
 <dd>
-filename of the executable (string)
+filename of the executable
 </dd>
 </dl>
 <dl>
@@ -852,6 +885,12 @@
             variable, or an empty list otherwise.
 </dd>
 </dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
 <a NAME="Project.__getLocale" ID="Project.__getLocale"></a>
 <h4>Project.__getLocale</h4>
 <b>__getLocale</b>(<i>filename</i>)
@@ -861,15 +900,21 @@
 </p>
 <dl>
 
-<dt><i>filename</i></dt>
+<dt><i>filename</i> (str)</dt>
 <dd>
-name of the file used for extraction (string)
+name of the file used for extraction
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-extracted locale (string) or None
+extracted locale or None
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="Project.__getMigrations" ID="Project.__getMigrations"></a>
@@ -902,7 +947,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-python command (string)
+python command
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="Project.__getVirtualEnvironment" ID="Project.__getVirtualEnvironment"></a>
@@ -914,16 +965,22 @@
 </p>
 <dl>
 
-<dt><i>language</i></dt>
+<dt><i>language</i> (str)</dt>
 <dd>
 Python variant to get the virtual environment
-            for (string, one of '' or 'Python3')
+            for (one of '' or 'Python3')
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-path of the virtual environment (string)
+path of the virtual environment
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="Project.__initAuthorizationActions" ID="Project.__initAuthorizationActions"></a>
@@ -1117,17 +1174,22 @@
 </p>
 <dl>
 
-<dt><i>consoleCmd</i></dt>
+<dt><i>consoleCmd</i> (str)</dt>
 <dd>
-console command (string)
+console command
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
 tuple of two entries giving an indication, if the console
-            is spawning (boolean) and the (possibly) cleaned console command
-            (string)
+            is spawning and the (possibly) cleaned console command
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (bool, str)
 </dd>
 </dl>
 <a NAME="Project.__isSuitableForVariant" ID="Project.__isSuitableForVariant"></a>
@@ -1205,15 +1267,21 @@
 </p>
 <dl>
 
-<dt><i>filenames</i></dt>
+<dt><i>filenames</i> (list of str)</dt>
 <dd>
-list of file names to normalize (list of strings)
+list of file names to normalize
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-normalized file names (list of strings)
+normalized file names
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
 </dd>
 </dl>
 <a NAME="Project.__performCheck" ID="Project.__performCheck"></a>
@@ -1232,9 +1300,9 @@
 </p>
 <dl>
 
-<dt><i>code</i></dt>
+<dt><i>code</i> (str)</dt>
 <dd>
-language code of the new language (string)
+language code of the new language
 </dd>
 </dl>
 <a NAME="Project.__runBrowser" ID="Project.__runBrowser"></a>
@@ -1359,9 +1427,9 @@
 </p>
 <dl>
 
-<dt><i>site</i></dt>
+<dt><i>site</i> (str)</dt>
 <dd>
-name of the site (string)
+name of the site
 </dd>
 </dl>
 <a NAME="Project.__showHelpIndex" ID="Project.__showHelpIndex"></a>
@@ -1395,7 +1463,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-name of the site (string)
+name of the site
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <dl>
@@ -1414,15 +1488,21 @@
 </p>
 <dl>
 
-<dt><i>filenames</i></dt>
+<dt><i>filenames</i> (list of str)</dt>
 <dd>
-list of file names to be filtered (list of strings)
+list of file names to be filtered
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-file names belonging to the current site (list of strings)
+file names belonging to the current site
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
 </dd>
 </dl>
 <a NAME="Project.__sitePath" ID="Project.__sitePath"></a>
@@ -1435,7 +1515,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-path of the site (string)
+path of the site
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <dl>
@@ -1454,18 +1540,18 @@
 </p>
 <dl>
 
-<dt><i>title</i></dt>
+<dt><i>title</i> (str)</dt>
 <dd>
-dialog title (string)
+dialog title
 </dd>
-<dt><i>command</i></dt>
+<dt><i>command</i> (str)</dt>
 <dd>
-Django sql... command (string)
+Django sql... command
 </dd>
-<dt><i>requestApps</i></dt>
+<dt><i>requestApps</i> (bool)</dt>
 <dd>
 flag indicating to request a list of applications
-            to work on (boolean)
+            to work on
 </dd>
 </dl>
 <a NAME="Project.__squashMigrations" ID="Project.__squashMigrations"></a>
@@ -1508,7 +1594,7 @@
 <b>__unapplyMigrations</b>(<i></i>)
 
 <p>
-        Private slot to un-apply all migrations of an application.
+        Private slot to revert all migrations of an application.
 </p>
 <a NAME="Project.applyMigrations" ID="Project.applyMigrations"></a>
 <h4>Project.applyMigrations</h4>
@@ -1537,7 +1623,7 @@
 </p>
 <dl>
 
-<dt><i>filenames</i></dt>
+<dt><i>filenames</i> (list of str)</dt>
 <dd>
 list of filenames (not used)
 </dd>
@@ -1551,7 +1637,7 @@
 </p>
 <dl>
 
-<dt><i>filenames</i></dt>
+<dt><i>filenames</i> (list of str)</dt>
 <dd>
 list of filenames
 </dd>
@@ -1604,7 +1690,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-Django version (string)
+Django version
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="Project.getMenu" ID="Project.getMenu"></a>
@@ -1616,16 +1708,22 @@
 </p>
 <dl>
 
-<dt><i>name</i></dt>
+<dt><i>name</i> (str)</dt>
 <dd>
-name of the menu (string)
+name of the menu
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-reference to the menu (QMenu) or None, if no
-            menu with the given name exists
+reference to the menu or None, if no menu with the given
+            name exists
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QMenu
 </dd>
 </dl>
 <a NAME="Project.getMenuNames" ID="Project.getMenuNames"></a>
@@ -1638,7 +1736,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-menu names (list of string)
+menu names
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
 </dd>
 </dl>
 <a NAME="Project.getProjectPath" ID="Project.getProjectPath"></a>
@@ -1646,12 +1750,18 @@
 <b>getProjectPath</b>(<i></i>)
 
 <p>
-        Public method to get the path of the eric6 project.
+        Public method to get the path of the eric7 project.
 </p>
 <dl>
 <dt>Return:</dt>
 <dd>
-path of the eric6 project (string)
+path of the eric7 project
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="Project.getRecentApplications" ID="Project.getRecentApplications"></a>
@@ -1777,9 +1887,9 @@
 </p>
 <dl>
 
-<dt><i>path</i></dt>
+<dt><i>path</i> (str)</dt>
 <dd>
-full directory path for the new form file (string)
+full directory path for the new form file
 </dd>
 </dl>
 <a NAME="Project.newProjectCreated" ID="Project.newProjectCreated"></a>
@@ -1798,9 +1908,9 @@
 </p>
 <dl>
 
-<dt><i>poFile</i></dt>
+<dt><i>poFile</i> (str)</dt>
 <dd>
-name of the .po file (string)
+name of the .po file
 </dd>
 </dl>
 <a NAME="Project.projectClosed" ID="Project.projectClosed"></a>
@@ -1841,9 +1951,9 @@
 </p>
 <dl>
 
-<dt><i>applStr</i></dt>
+<dt><i>applStr</i> (str)</dt>
 <dd>
-applications entry (string)
+applications entry
 </dd>
 </dl>
 <a NAME="Project.setMostRecentDatabaseNames" ID="Project.setMostRecentDatabaseNames"></a>
@@ -1895,7 +2005,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-list of supported Python variants (list of strings)
+list of supported Python variants
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
 </dd>
 </dl>
 <a NAME="Project.updateCatalogs" ID="Project.updateCatalogs"></a>
@@ -1907,7 +2023,7 @@
 </p>
 <dl>
 
-<dt><i>filenames</i></dt>
+<dt><i>filenames</i> (list of str)</dt>
 <dd>
 list of filenames (not used)
 </dd>
@@ -1921,7 +2037,7 @@
 </p>
 <dl>
 
-<dt><i>filenames</i></dt>
+<dt><i>filenames</i> (list of str)</dt>
 <dd>
 list of filenames (not used)
 </dd>
@@ -1935,9 +2051,9 @@
 </p>
 <dl>
 
-<dt><i>filenames</i></dt>
+<dt><i>filenames</i> (list of str)</dt>
 <dd>
-list of file names (list of strings)
+list of file names
 </dd>
 </dl>
 <a NAME="Project.updateSelectedCatalogsWithObsolete" ID="Project.updateSelectedCatalogsWithObsolete"></a>
@@ -1949,7 +2065,7 @@
 </p>
 <dl>
 
-<dt><i>filenames</i></dt>
+<dt><i>filenames</i> (list of str)</dt>
 <dd>
 list of filenames
 </dd>
@@ -1996,7 +2112,7 @@
 
 <a NAME="QProcess.start" ID="QProcess.start"></a>
 <h4>QProcess.start</h4>
-<b>start</b>(<i>cmd, args=None, mode=QProcessPyQt.ReadWrite</i>)
+<b>start</b>(<i>cmd, args=None, mode=QIODeviceBase.OpenModeFlag.ReadWrite</i>)
 
 <p>
         Public method to start the given program (cmd) in a new process, if
@@ -2004,17 +2120,17 @@
 </p>
 <dl>
 
-<dt><i>cmd</i></dt>
+<dt><i>cmd</i> (str)</dt>
 <dd>
-start the given program cmd (string)
+start the given program cmd
 </dd>
-<dt><i>args=</i></dt>
+<dt><i>args</i> (list of str)</dt>
 <dd>
-list of parameters (list of strings)
+list of parameters
 </dd>
-<dt><i>mode=</i></dt>
+<dt><i>mode</i> (QIODeviceBase.OpenMode)</dt>
 <dd>
-access mode (QIODevice.OpenMode)
+access mode
 </dd>
 </dl>
 <a NAME="QProcess.startDetached" ID="QProcess.startDetached"></a>
@@ -2027,23 +2143,29 @@
 </p>
 <dl>
 
-<dt><i>cmd</i></dt>
+<dt><i>cmd</i> (str)</dt>
 <dd>
-start the given program cmd (string)
+start the given program cmd
 </dd>
-<dt><i>args=</i></dt>
+<dt><i>args</i> (list of str)</dt>
 <dd>
-list of parameters (list of strings)
+list of parameters
 </dd>
-<dt><i>path=</i></dt>
+<dt><i>path</i> (str)</dt>
 <dd>
-new working directory (string)
+new working directory
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-tuple of successful start and process id (boolean, integer)
+tuple of successful start and process id
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (bool, int)
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- a/ProjectDjango/Documentation/source/index-Plugin_Project_Django.ProjectDjango.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/source/index-Plugin_Project_Django.ProjectDjango.html	Sat May 29 18:33:03 2021 +0200
@@ -22,7 +22,7 @@
 <h1>Plugin_Project_Django.ProjectDjango</h1>
 
 <p>
-Package implementing project support for eric6 Django projects.
+Package implementing project support for eric7 Django projects.
 </p>
 
 <h3>Packages</h3>
--- a/ProjectDjango/Documentation/source/index-Plugin_Project_Django.html	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Documentation/source/index-Plugin_Project_Django.html	Sat May 29 18:33:03 2021 +0200
@@ -30,7 +30,7 @@
 
 <tr>
 <td><a href="index-Plugin_Project_Django.ProjectDjango.html">ProjectDjango</a></td>
-<td>Package implementing project support for eric6 Django projects.</td>
+<td>Package implementing project support for eric7 Django projects.</td>
 </tr>
 </table>
 
--- a/ProjectDjango/Project.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/Project.py	Sat May 29 18:33:03 2021 +0200
@@ -12,14 +12,14 @@
 import shutil
 import contextlib
 
-from PyQt5.QtCore import QObject, QTimer, QUrl, QFileInfo
-from PyQt5.QtGui import QDesktopServices
-from PyQt5.QtWidgets import QMenu, QInputDialog, QLineEdit, QDialog
-from PyQt5.QtCore import QProcess as QProcessPyQt
+from PyQt6.QtCore import QObject, QTimer, QUrl, QFileInfo, QIODeviceBase
+from PyQt6.QtGui import QDesktopServices
+from PyQt6.QtWidgets import QMenu, QInputDialog, QLineEdit, QDialog
+from PyQt6.QtCore import QProcess as QProcessPyQt
 
-from E5Gui.E5Application import e5App
-from E5Gui import E5MessageBox, E5FileDialog
-from E5Gui.E5Action import E5Action
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricGui.EricAction import EricAction
 
 from Globals import isWindowsPlatform
 
@@ -41,14 +41,17 @@
     """
     Class transforming the call arguments in case of gnome-terminal.
     """
-    def start(self, cmd, args=None, mode=QProcessPyQt.ReadWrite):
+    def start(self, cmd, args=None, mode=QIODeviceBase.OpenModeFlag.ReadWrite):
         """
         Public method to start the given program (cmd) in a new process, if
         none is already running, passing the command line arguments in args.
         
-        @param cmd start the given program cmd (string)
-        @keyparam args list of parameters (list of strings)
-        @keyparam mode access mode (QIODevice.OpenMode)
+        @param cmd start the given program cmd
+        @type str
+        @param args list of parameters
+        @type list of str
+        @param mode access mode
+        @type QIODeviceBase.OpenMode
         """
         if args is None:
             args = []
@@ -70,10 +73,14 @@
         Public static method to start the given program (cmd) in a new process,
         if none is already running, passing the command line arguments in args.
         
-        @param cmd start the given program cmd (string)
-        @keyparam args list of parameters (list of strings)
-        @keyparam path new working directory (string)
-        @return tuple of successful start and process id (boolean, integer)
+        @param cmd start the given program cmd
+        @type str
+        @param args list of parameters
+        @type list of str
+        @param path new working directory
+        @type str
+        @return tuple of successful start and process id
+        @rtype tuple of (bool, int)
         """
         if args is None:
             args = []
@@ -114,8 +121,8 @@
         self.__iconSuffix = iconSuffix
         self.__ui = parent
         
-        self.__e5project = e5App().getObject("Project")
-        self.__virtualEnvManager = e5App().getObject("VirtualEnvManager")
+        self.__ericProject = ericApp().getObject("Project")
+        self.__virtualEnvManager = ericApp().getObject("VirtualEnvManager")
         self.__hooksInstalled = False
         
         self.__menus = {}   # dictionary with references to menus
@@ -142,7 +149,7 @@
         """
         self.actions = []
     
-        self.selectSiteAct = E5Action(
+        self.selectSiteAct = EricAction(
             self.tr('Current Project'),
             "",
             0, 0,
@@ -162,7 +169,7 @@
         ## start actions below      ##
         ##############################
         
-        self.startProjectAct = E5Action(
+        self.startProjectAct = EricAction(
             self.tr('Start Project'),
             self.tr('Start &Project'),
             0, 0,
@@ -177,7 +184,7 @@
         self.startProjectAct.triggered.connect(self.__startProject)
         self.actions.append(self.startProjectAct)
         
-        self.startGlobalApplicationAct = E5Action(
+        self.startGlobalApplicationAct = EricAction(
             self.tr('Start Application (global)'),
             self.tr('Start Application (&global)'),
             0, 0,
@@ -193,7 +200,7 @@
             self.__startGlobalApplication)
         self.actions.append(self.startGlobalApplicationAct)
         
-        self.startLocalApplicationAct = E5Action(
+        self.startLocalApplicationAct = EricAction(
             self.tr('Start Application (local)'),
             self.tr('Start Application (&local)'),
             0, 0,
@@ -213,7 +220,7 @@
         ## run actions below        ##
         ##############################
         
-        self.runServerAct = E5Action(
+        self.runServerAct = EricAction(
             self.tr('Run Server'),
             self.tr('Run &Server'),
             0, 0,
@@ -228,7 +235,7 @@
         self.runServerAct.triggered.connect(self.__runServer)
         self.actions.append(self.runServerAct)
         
-        self.runBrowserAct = E5Action(
+        self.runBrowserAct = EricAction(
             self.tr('Run Web-Browser'),
             self.tr('Run &Web-Browser'),
             0, 0,
@@ -248,7 +255,7 @@
         ## caching actions below    ##
         ##############################
         
-        self.createCacheTableAct = E5Action(
+        self.createCacheTableAct = EricAction(
             self.tr('Create Cache Tables'),
             self.tr('C&reate Cache Tables'),
             0, 0,
@@ -268,7 +275,7 @@
         ## help action below        ##
         ##############################
         
-        self.helpAct = E5Action(
+        self.helpAct = EricAction(
             self.tr('Help'),
             self.tr('&Help'),
             0, 0,
@@ -286,7 +293,7 @@
         ## about action below       ##
         ##############################
         
-        self.aboutDjangoAct = E5Action(
+        self.aboutDjangoAct = EricAction(
             self.tr('About Django'),
             self.tr('About D&jango'),
             0, 0,
@@ -304,7 +311,7 @@
         ## check action below       ##
         ##############################
         
-        self.checkAct = E5Action(
+        self.checkAct = EricAction(
             self.tr('Check Project'),
             self.tr('Check Project'),
             0, 0,
@@ -330,7 +337,7 @@
         """
         Private method to define the database related actions.
         """
-        self.selectDatabaseNameAct = E5Action(
+        self.selectDatabaseNameAct = EricAction(
             self.tr('Current Database'),
             "",
             0, 0,
@@ -347,7 +354,7 @@
         self.actions.append(self.selectDatabaseNameAct)
         self.__setCurrentDatabase(None)
         
-        self.inspectDatabaseAct = E5Action(
+        self.inspectDatabaseAct = EricAction(
             self.tr('Introspect'),
             self.tr('&Introspect'),
             0, 0,
@@ -363,7 +370,7 @@
         self.inspectDatabaseAct.triggered.connect(self.__databaseInspect)
         self.actions.append(self.inspectDatabaseAct)
         
-        self.flushDatabaseAct = E5Action(
+        self.flushDatabaseAct = EricAction(
             self.tr('Flush'),
             self.tr('&Flush'),
             0, 0,
@@ -379,7 +386,7 @@
         self.flushDatabaseAct.triggered.connect(self.__databaseFlush)
         self.actions.append(self.flushDatabaseAct)
         
-        self.databaseClientAct = E5Action(
+        self.databaseClientAct = EricAction(
             self.tr('Start Client Console'),
             self.tr('Start &Client Console'),
             0, 0,
@@ -397,7 +404,7 @@
         """
         Private method to define the database SQL related actions.
         """
-        self.databaseSqlFlushAct = E5Action(
+        self.databaseSqlFlushAct = EricAction(
             self.tr('Flush Database'),
             self.tr('&Flush Database'),
             0, 0,
@@ -414,7 +421,7 @@
             self.__databaseSqlFlushDatabase)
         self.actions.append(self.databaseSqlFlushAct)
         
-        self.databaseSqlResetSeqAct = E5Action(
+        self.databaseSqlResetSeqAct = EricAction(
             self.tr('Reset Sequences'),
             self.tr('Reset &Sequences'),
             0, 0,
@@ -431,7 +438,7 @@
             self.__databaseSqlResetSequences)
         self.actions.append(self.databaseSqlResetSeqAct)
         
-        self.databaseSqlMigrateAct = E5Action(
+        self.databaseSqlMigrateAct = EricAction(
             self.tr('Apply Migration'),
             self.tr('&Apply Migration'),
             0, 0,
@@ -448,7 +455,7 @@
             self.__databaseSqlMigrate)
         self.actions.append(self.databaseSqlMigrateAct)
         
-        self.databaseSqlMigrateBackwardsAct = E5Action(
+        self.databaseSqlMigrateBackwardsAct = EricAction(
             self.tr('Unapply Migration'),
             self.tr('&Unapply Migration'),
             0, 0,
@@ -469,7 +476,7 @@
         """
         Private method to define the tool actions.
         """
-        self.diffSettingsAct = E5Action(
+        self.diffSettingsAct = EricAction(
             self.tr('Diff Settings'),
             self.tr('&Diff Settings'),
             0, 0,
@@ -483,7 +490,7 @@
         self.diffSettingsAct.triggered.connect(self.__diffSettings)
         self.actions.append(self.diffSettingsAct)
     
-        self.runPythonShellAct = E5Action(
+        self.runPythonShellAct = EricAction(
             self.tr('Start Python Console'),
             self.tr('Start &Python Console'),
             0, 0,
@@ -497,7 +504,7 @@
         self.runPythonShellAct.triggered.connect(self.__runPythonShell)
         self.actions.append(self.runPythonShellAct)
     
-        self.testEmailAct = E5Action(
+        self.testEmailAct = EricAction(
             self.tr('Send Test Email'),
             self.tr('Send Test &Email'),
             0, 0,
@@ -516,7 +523,7 @@
         """
         Private method to define the testing actions.
         """
-        self.dumpDataAct = E5Action(
+        self.dumpDataAct = EricAction(
             self.tr('Dump Data'),
             self.tr('&Dump Data'),
             0, 0,
@@ -530,7 +537,7 @@
         self.dumpDataAct.triggered.connect(self.__dumpData)
         self.actions.append(self.dumpDataAct)
         
-        self.loadDataAct = E5Action(
+        self.loadDataAct = EricAction(
             self.tr('Load Data'),
             self.tr('&Load Data'),
             0, 0,
@@ -544,7 +551,7 @@
         self.loadDataAct.triggered.connect(self.__loadData)
         self.actions.append(self.loadDataAct)
         
-        self.runTestAct = E5Action(
+        self.runTestAct = EricAction(
             self.tr('Run Testsuite'),
             self.tr('Run &Testsuite'),
             0, 0,
@@ -558,7 +565,7 @@
         self.runTestAct.triggered.connect(self.__runTestSuite)
         self.actions.append(self.runTestAct)
         
-        self.runDeprecationTestAct = E5Action(
+        self.runDeprecationTestAct = EricAction(
             self.tr('Run Testsuite (-Wall)'),
             self.tr('Run Testsuite (-Wall)'),
             0, 0,
@@ -575,7 +582,7 @@
             lambda: self.__runTestSuite(deprecation=True))
         self.actions.append(self.runDeprecationTestAct)
         
-        self.runTestServerAct = E5Action(
+        self.runTestServerAct = EricAction(
             self.tr('Run Testserver'),
             self.tr('Run Test&server'),
             0, 0,
@@ -594,7 +601,7 @@
         """
         Private method to define the authorization actions.
         """
-        self.changePasswordAct = E5Action(
+        self.changePasswordAct = EricAction(
             self.tr('Change Password'),
             self.tr('Change &Password'),
             0, 0,
@@ -608,7 +615,7 @@
         self.changePasswordAct.triggered.connect(self.__changePassword)
         self.actions.append(self.changePasswordAct)
         
-        self.createSuperUserAct = E5Action(
+        self.createSuperUserAct = EricAction(
             self.tr('Create Superuser'),
             self.tr('Create &Superuser'),
             0, 0,
@@ -626,7 +633,7 @@
         """
         Private method to define the session actions.
         """
-        self.clearSessionsAct = E5Action(
+        self.clearSessionsAct = EricAction(
             self.tr('Clear Sessions'),
             self.tr('Clear &Sessions'),
             0, 0,
@@ -644,7 +651,7 @@
         """
         Private method to define the migration actions.
         """
-        self.showMigrationsAct = E5Action(
+        self.showMigrationsAct = EricAction(
             self.tr('Show Migrations'),
             self.tr('&Show Migrations'),
             0, 0,
@@ -659,7 +666,7 @@
         self.showMigrationsAct.triggered.connect(self.__showMigrationsList)
         self.actions.append(self.showMigrationsAct)
         
-        self.showMigrationsPlanAct = E5Action(
+        self.showMigrationsPlanAct = EricAction(
             self.tr('Show Migrations Plan'),
             self.tr('Show Migrations &Plan'),
             0, 0,
@@ -674,7 +681,7 @@
         self.showMigrationsPlanAct.triggered.connect(self.__showMigrationsPlan)
         self.actions.append(self.showMigrationsPlanAct)
         
-        self.migrateAllAct = E5Action(
+        self.migrateAllAct = EricAction(
             self.tr('Apply All Migrations'),
             self.tr('&Apply All Migrations'),
             0, 0,
@@ -688,7 +695,7 @@
         self.migrateAllAct.triggered.connect(self.__applyAllMigrations)
         self.actions.append(self.migrateAllAct)
         
-        self.migrateSelectedAct = E5Action(
+        self.migrateSelectedAct = EricAction(
             self.tr('Apply Selected Migrations'),
             self.tr('Apply Selected Migrations'),
             0, 0,
@@ -704,7 +711,7 @@
             self.__applySelectedMigrations)
         self.actions.append(self.migrateSelectedAct)
         
-        self.unmigrateAct = E5Action(
+        self.unmigrateAct = EricAction(
             self.tr('Unapply Migrations'),
             self.tr('&Unapply Migrations'),
             0, 0,
@@ -719,7 +726,7 @@
         self.unmigrateAct.triggered.connect(self.__unapplyMigrations)
         self.actions.append(self.unmigrateAct)
         
-        self.makeMigrationsAct = E5Action(
+        self.makeMigrationsAct = EricAction(
             self.tr('Make Migrations'),
             self.tr('&Make Migrations'),
             0, 0,
@@ -733,7 +740,7 @@
         self.makeMigrationsAct.triggered.connect(self.__makeMigrations)
         self.actions.append(self.makeMigrationsAct)
         
-        self.squashMigrationsAct = E5Action(
+        self.squashMigrationsAct = EricAction(
             self.tr('Squash Migrations'),
             self.tr('S&quash Migrations'),
             0, 0,
@@ -939,9 +946,11 @@
         """
         Public method to get a reference to the requested menu.
         
-        @param name name of the menu (string)
-        @return reference to the menu (QMenu) or None, if no
-            menu with the given name exists
+        @param name name of the menu
+        @type str
+        @return reference to the menu or None, if no menu with the given
+            name exists
+        @rtype QMenu
         """
         if name in self.__menus:
             return self.__menus[name]
@@ -952,7 +961,8 @@
         """
         Public method to get the names of all menus.
         
-        @return menu names (list of string)
+        @return menu names
+        @rtype list of str
         """
         return list(self.__menus.keys())
 
@@ -980,18 +990,19 @@
         """
         Public method to add our hook methods.
         """
-        if self.__e5project.getProjectType() == "Django":
+        if self.__ericProject.getProjectType() == "Django":
             self.__formsBrowser = (
-                e5App().getObject("ProjectBrowser").getProjectBrowser("forms")
+                ericApp().getObject("ProjectBrowser")
+                .getProjectBrowser("forms")
             )
             self.__formsBrowser.addHookMethodAndMenuEntry(
                 "newForm",
                 self.newForm, self.tr("New template..."))
             
-            self.__e5project.projectLanguageAddedByCode.connect(
+            self.__ericProject.projectLanguageAddedByCode.connect(
                 self.__projectLanguageAdded)
             self.__translationsBrowser = (
-                e5App().getObject("ProjectBrowser")
+                ericApp().getObject("ProjectBrowser")
                 .getProjectBrowser("translations"))
             self.__translationsBrowser.addHookMethodAndMenuEntry(
                 "generateAll",
@@ -1027,7 +1038,7 @@
             self.__formsBrowser.removeHookMethod("newForm")
             self.__formsBrowser = None
             
-            self.__e5project.projectLanguageAddedByCode.disconnect(
+            self.__ericProject.projectLanguageAddedByCode.disconnect(
                 self.__projectLanguageAdded)
             self.__translationsBrowser.removeHookMethod(
                 "generateAll")
@@ -1050,15 +1061,16 @@
         """
         Public method to create a new form.
         
-        @param path full directory path for the new form file (string)
+        @param path full directory path for the new form file
+        @type str
         """
-        fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
+        fname, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
             self.__ui,
             self.tr("New Form"),
             path,
             filter,
             None,
-            E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
+            EricFileDialog.DontConfirmOverwrite)
         
         if not fname:
             # user aborted or didn't enter a filename
@@ -1071,11 +1083,11 @@
                 fname += ex
         
         if os.path.exists(fname):
-            res = E5MessageBox.yesNo(
+            res = EricMessageBox.yesNo(
                 self.__ui,
                 self.tr("New Form"),
                 self.tr("The file already exists! Overwrite it?"),
-                icon=E5MessageBox.Warning)
+                icon=EricMessageBox.Warning)
             
             if not res:
                 # user selected to not overwrite
@@ -1103,7 +1115,7 @@
                 f.close()
                 f.write('</html>\n')
         except OSError as e:
-            E5MessageBox.critical(
+            EricMessageBox.critical(
                 self.__ui,
                 self.tr("New Form"),
                 self.tr("<p>The new form file <b>{0}</b> could not be"
@@ -1111,7 +1123,7 @@
                 .format(fname, str(e)))
             return
         
-        self.__e5project.appendFile(fname)
+        self.__ericProject.appendFile(fname)
         self.__formsBrowser.sourceFile.emit(fname)
 
     ##################################################################
@@ -1131,10 +1143,12 @@
         Private method to build all full paths of an executable file from
         the environment.
         
-        @param file filename of the executable (string)
+        @param file filename of the executable
+        @type str
         @return list of full executable names, if the executable file is
             accessible via the searchpath defined by the PATH environment
             variable, or an empty list otherwise.
+        @rtype list of str
         """
         paths = []
         
@@ -1164,7 +1178,8 @@
         """
         Public method to get the supported Python variants.
         
-        @return list of supported Python variants (list of strings)
+        @return list of supported Python variants
+        @rtype list of str
         """
         variants = []
         for variant in ['Python3']:
@@ -1219,11 +1234,13 @@
         Private method to get the path of the virtual environment.
         
         @param language Python variant to get the virtual environment
-            for (string, one of '' or 'Python3')
-        @return path of the virtual environment (string)
+            for (one of '' or 'Python3')
+        @type str
+        @return path of the virtual environment
+        @rtype str
         """
         if not language:
-            language = self.__e5project.getProjectLanguage()
+            language = self.__ericProject.getProjectLanguage()
         venvName = (
             self.__plugin.getPreferences("VirtualEnvironmentNamePy3")
             if language == "Python3" else
@@ -1249,11 +1266,13 @@
         Private method to get the path of the debugger environment.
         
         @param language Python variant to get the debugger environment
-            for (string, one of '' or 'Python3')
-        @return path of the debugger environment (string)
+            for (one of '' or 'Python3')
+        @type str
+        @return path of the debugger environment
+        @rtype str
         """
         if not language:
-            language = self.__e5project.getProjectLanguage()
+            language = self.__ericProject.getProjectLanguage()
         debugEnv = self.__getVirtualEnvironment(language)
         if not debugEnv:
             if language == "Python3":
@@ -1273,11 +1292,13 @@
         Private method to build a django-admin.py command.
         
         @param language Python variant to get the django-admin.py
-            command for (string, one of '' or 'Python3')
-        @return full django-admin.py command (string)
+            command for (one of '' or 'Python3')
+        @type str
+        @return full django-admin.py command
+        @rtype str
         """
         if not language:
-            language = self.__e5project.getProjectLanguage()
+            language = self.__ericProject.getProjectLanguage()
         
         virtualEnv = self.__getVirtualEnvironment(language)
         if virtualEnv:
@@ -1321,9 +1342,9 @@
             else:
                 if language == "Python3":
                     cmds = ["django-admin3.py", "django-admin3",
+                            "django-admin.py-3.10",
+                            "django-admin.py-3.9", "django-admin.py-3.8",
                             "django-admin.py-3.7", "django-admin.py-3.6",
-                            "django-admin.py-3.5", "django-admin.py-3.4",
-                            "django-admin.py-3.3", "django-admin.py-3.2",
                             ]
                 else:
                     cmds = []
@@ -1340,9 +1361,10 @@
         """
         Private method to build the Python command.
         
-        @return python command (string)
+        @return python command
+        @rtype str
         """
-        language = self.__e5project.getProjectLanguage()
+        language = self.__ericProject.getProjectLanguage()
         if language == "Python3":
             venvName = self.__plugin.getPreferences(
                 "VirtualEnvironmentNamePy3")
@@ -1366,8 +1388,8 @@
         version = self.getDjangoVersionString()
         url = "https://www.djangoproject.com"
         
-        msgBox = E5MessageBox.E5MessageBox(
-            E5MessageBox.Question,
+        msgBox = EricMessageBox.EricMessageBox(
+            EricMessageBox.Question,
             self.tr("About Django"),
             self.tr(
                 "<p>Django is a high-level Python Web framework that"
@@ -1380,7 +1402,7 @@
                 "</table></p>"
             ).format(version, url),
             modal=True,
-            buttons=E5MessageBox.Ok)
+            buttons=EricMessageBox.Ok)
         msgBox.setIconPixmap(UI.PixmapCache.getPixmap(
             os.path.join("ProjectDjango", "icons",
                          "django64-{0}".format(self.__iconSuffix))))
@@ -1390,7 +1412,8 @@
         """
         Public method to get the Django version as a string.
         
-        @return Django version (string)
+        @return Django version
+        @rtype str
         """
         djangoVersion = ""
         
@@ -1436,7 +1459,8 @@
         """
         Private method to ask the user for a list of application names.
         
-        @return list of application names (list of strings)
+        @return list of application names
+        @rtype list of str
         """
         applStr, ok = QInputDialog.getItem(
             self.__ui,
@@ -1482,7 +1506,8 @@
         """
         Public method to set the most recently used applications entry.
         
-        @param applStr applications entry (string)
+        @param applStr applications entry
+        @type str
         """
         if applStr in self.__recentApplications:
             self.__recentApplications.remove(applStr)
@@ -1554,11 +1579,12 @@
     
     def getProjectPath(self):
         """
-        Public method to get the path of the eric6 project.
+        Public method to get the path of the eric7 project.
         
-        @return path of the eric6 project (string)
+        @return path of the eric7 project
+        @rtype str
         """
-        return self.__e5project.getProjectPath()
+        return self.__ericProject.getProjectPath()
     
     def __showHelpIndex(self):
         """
@@ -1572,10 +1598,11 @@
         """
         Private method to check, if the given console is a spawning console.
         
-        @param consoleCmd console command (string)
+        @param consoleCmd console command
+        @type str
         @return tuple of two entries giving an indication, if the console
-            is spawning (boolean) and the (possibly) cleaned console command
-            (string)
+            is spawning and the (possibly) cleaned console command
+        @rtype tuple of (bool, str)
         """
         if consoleCmd and consoleCmd[0] == '@':
             return (True, consoleCmd[1:])
@@ -1608,20 +1635,20 @@
         """
         Public slot to finish up the newly generated project.
         """
-        if self.__e5project.getProjectType() == "Django":
-            ppath = self.__e5project.getProjectPath()
+        if self.__ericProject.getProjectType() == "Django":
+            ppath = self.__ericProject.getProjectPath()
             
             # get rid of an __init__.py file because it would be in our way
             initModule = os.path.join(ppath, "__init__.py")
             if os.path.exists(initModule):
-                self.__e5project.deleteFile("__init__.py")
-                self.__e5project.saveProject()
+                self.__ericProject.deleteFile("__init__.py")
+                self.__ericProject.saveProject()
     
     def startProjectOrApplication(self):
         """
         Public slot to start a new Django project or application.
         """
-        if self.__e5project.getProjectType() == "Django":
+        if self.__ericProject.getProjectType() == "Django":
             projectStr = self.tr("Project")
             applStr = self.tr("Application")
             selections = ["", projectStr, applStr]
@@ -1636,35 +1663,37 @@
             if ok and bool(selection):
                 if selection == projectStr:
                     path, projectName = os.path.split(
-                        self.__e5project.getProjectPath())
+                        self.__ericProject.getProjectPath())
                     self.__createProject(projectName, path)
                 elif selection == applStr:
                     path, applName = os.path.split(
-                        self.__e5project.getProjectPath())
+                        self.__ericProject.getProjectPath())
                     self.__createApplication(applName, path)
     
     def __createProject(self, projectName, path):
         """
         Private slot to create a new Django project.
         
-        @param projectName name of the new project (string)
+        @param projectName name of the new project
+        @type str
         @param path the directory where the project should be created
-            (string)
-        @return flag indicating a successful creation (boolean)
+        @type str
+        @return flag indicating a successful creation
+        @rtype bool
         """
         title = self.tr("Start Django Project")
         
         # remove the project directory if it exists already
         ppath = os.path.join(path, projectName)
         if os.path.exists(ppath):
-            okToRemove = E5MessageBox.yesNo(
+            okToRemove = EricMessageBox.yesNo(
                 self.__ui,
                 title,
                 self.tr("""<p>The Django project path <b>{0}</b> exists"""
                         """ already. Shall it be removed and recreated?"""
                         """</p>""").format(ppath))
             if not okToRemove:
-                E5MessageBox.information(
+                EricMessageBox.information(
                     self.__ui,
                     title,
                     self.tr("""<p>Please add the files to the eric project"""
@@ -1680,7 +1709,7 @@
                 args.append(self.__getPythonExecutable())
             args.append(cmd)
         else:
-            E5MessageBox.critical(
+            EricMessageBox.critical(
                 self.__ui,
                 title,
                 self.tr("""<p>The <b>django-admin.py</b> script is"""
@@ -1704,7 +1733,7 @@
             
             if (
                 os.path.join(path, projectName) ==
-                self.__e5project.getProjectPath()
+                self.__ericProject.getProjectPath()
             ):
                 self.__setCurrentSite("")
             else:
@@ -1720,29 +1749,31 @@
             self.__ui,
             self.tr("Start Django Project"),
             self.tr("Enter the name of the new Django project."),
-            QLineEdit.Normal)
+            QLineEdit.EchoMode.Normal)
         if ok and projectName != "":
             res = self.__createProject(projectName,
-                                       self.__e5project.getProjectPath())
+                                       self.__ericProject.getProjectPath())
             if res:
                 # search for new files and add them to the project
-                sitePath = os.path.join(self.__e5project.getProjectPath(),
+                sitePath = os.path.join(self.__ericProject.getProjectPath(),
                                         projectName)
                 for entry in os.walk(sitePath):
                     for fileName in entry[2]:
                         fullName = os.path.join(entry[0], fileName)
-                        self.__e5project.appendFile(fullName)
+                        self.__ericProject.appendFile(fullName)
     
     def __createApplication(self, applName, path, isGlobal=True):
         """
         Private slot to create a new Django application.
         
-        @param applName name of the new application (string)
+        @param applName name of the new application
+        @type str
         @param path the directory where the application should be created
-            (string)
+        @type str
         @param isGlobal flag indicating a standalone Django application
-            (boolean)
-        @return flag indicating a successful creation (boolean)
+        @type bool
+        @return flag indicating a successful creation
+        @rtype bool
         """
         title = self.tr("Start Django Application")
         
@@ -1759,7 +1790,7 @@
                     args.append(self.__getPythonExecutable())
                 args.append(cmd)
             else:
-                E5MessageBox.critical(
+                EricMessageBox.critical(
                     self.__ui,
                     title,
                     self.tr("""<p>The <b>django-admin.py</b> script"""
@@ -1793,18 +1824,18 @@
             self.tr("Start Global Django Application"),
             self.tr("Enter the name of the new global Django"
                     " application."),
-            QLineEdit.Normal)
+            QLineEdit.EchoMode.Normal)
         if ok and applName != "":
             res = self.__createApplication(applName,
-                                           self.__e5project.getProjectPath())
+                                           self.__ericProject.getProjectPath())
             if res:
                 # search for new files and add them to the project
-                appPath = os.path.join(self.__e5project.getProjectPath(),
+                appPath = os.path.join(self.__ericProject.getProjectPath(),
                                        applName)
                 for entry in os.walk(appPath):
                     for fileName in entry[2]:
                         fullName = os.path.join(entry[0], fileName)
-                        self.__e5project.appendFile(fullName)
+                        self.__ericProject.appendFile(fullName)
     
     def __startLocalApplication(self):
         """
@@ -1814,7 +1845,7 @@
             self.__ui,
             self.tr("Start Local Django Application"),
             self.tr("Enter the name of the new local Django application."),
-            QLineEdit.Normal)
+            QLineEdit.EchoMode.Normal)
         if ok and applName != "":
             res = self.__createApplication(applName, "", False)
             if res:
@@ -1824,7 +1855,7 @@
                     for entry in os.walk(appPath):
                         for fileName in entry[2]:
                             fullName = os.path.join(entry[0], fileName)
-                            self.__e5project.appendFile(fullName)
+                            self.__ericProject.appendFile(fullName)
                 except DjangoNoSiteSelectedException:
                     return
     
@@ -1836,10 +1867,11 @@
         """
         Private method to determine the relative path to all manage.py scripts.
         
-        @return list of sites (list of strings)
+        @return list of sites
+        @rtype list of str
         """
         sites = []
-        for file in sorted(self.__e5project.getSources()):
+        for file in sorted(self.__ericProject.getSources()):
             if os.path.basename(file) == "manage.py":
                 sites.append(os.path.dirname(file))
         return sites
@@ -1873,8 +1905,9 @@
         """
         Private method to calculate the full path of the Django site.
         
+        @return path of the site
+        @rtype str
         @exception DjangoNoSiteSelectedException raised, if no site is selected
-        @return path of the site (string)
         """
         if self.__currentSite is None:
             self.__selectSite()
@@ -1882,7 +1915,7 @@
         if self.__currentSite is None:
             raise DjangoNoSiteSelectedException
         else:
-            path = os.path.join(self.__e5project.getProjectPath(),
+            path = os.path.join(self.__ericProject.getProjectPath(),
                                 self.__currentSite)
             return path
     
@@ -1890,7 +1923,8 @@
         """
         Private slot to set the current site.
         
-        @param site name of the site (string)
+        @param site name of the site
+        @type str
         """
         self.__currentSite = site
         if self.__currentSite is None:
@@ -1903,9 +1937,9 @@
             self.tr('&Current Django project ({0})').format(curSite))
         
         if self.__currentSite is None:
-            self.__e5project.setTranslationPattern("")
+            self.__ericProject.setTranslationPattern("")
         else:
-            self.__e5project.setTranslationPattern(
+            self.__ericProject.setTranslationPattern(
                 os.path.join(site, "locale", "%language%", "LC_MESSAGES",
                              "django.po")
             )
@@ -1914,8 +1948,9 @@
         """
         Private method to get the name of the current site.
         
+        @return name of the site
+        @rtype str
         @exception DjangoNoSiteSelectedException raised, if no site is selected
-        @return name of the site (string)
         """
         if self.__currentSite is None:
             self.__selectSite()
@@ -1964,7 +1999,7 @@
                     self.__serverProc.start(args[0], args[1:])
                     serverProcStarted = self.__serverProc.waitForStarted()
                 if not serverProcStarted:
-                    E5MessageBox.critical(
+                    EricMessageBox.critical(
                         None,
                         self.tr('Process Generation Error'),
                         self.tr('The Django server could not be started.'))
@@ -1975,7 +2010,7 @@
         """
         if (
             self.__serverProc is not None and
-            self.__serverProc.state() != QProcess.NotRunning
+            self.__serverProc.state() != QProcess.ProcessState.NotRunning
         ):
             self.__serverProc.terminate()
             QTimer.singleShot(2000, self.__serverProc.kill)
@@ -2010,7 +2045,7 @@
         if self.__plugin.getPreferences("UseExternalBrowser"):
             res = QDesktopServices.openUrl(QUrl(url))
             if not res:
-                E5MessageBox.critical(
+                EricMessageBox.critical(
                     None,
                     self.tr('Run Web-Browser'),
                     self.tr('Could not start the web-browser for the'
@@ -2154,7 +2189,7 @@
         
         title = self.tr("Flush Database")
         
-        res = E5MessageBox.yesNo(
+        res = EricMessageBox.yesNo(
             self.__ui,
             title,
             self.tr("""Flushing the database will destroy all data."""
@@ -2195,7 +2230,7 @@
                 self.__adjustWorkingDirectory(args, wd)
                 started, pid = QProcess.startDetached(args[0], args[1:], wd)
                 if not started:
-                    E5MessageBox.critical(
+                    EricMessageBox.critical(
                         None,
                         self.tr('Process Generation Error'),
                         self.tr('The Django process could not be started.'))
@@ -2208,10 +2243,13 @@
         """
         Private method to perform an SQL creation function.
         
-        @param title dialog title (string)
-        @param command Django sql... command (string)
+        @param title dialog title
+        @type str
+        @param command Django sql... command
+        @type str
         @param requestApps flag indicating to request a list of applications
-            to work on (boolean)
+            to work on
+        @type bool
         """
         try:
             path = self.__sitePath()
@@ -2260,7 +2298,7 @@
         Private slot to print the SQL statements for a migration of an
         application.
         
-        @param backwards flag indicating to generate the SQL code to unapply
+        @param backwards flag indicating to generate the SQL code to revert
             a migration
         @type bool
         """
@@ -2271,7 +2309,7 @@
         
         migrations = self.__getMigrations()
         if not migrations:
-            E5MessageBox.information(
+            EricMessageBox.information(
                 None,
                 self.tr("SQL Migrate"),
                 self.tr("""No migrations available."""))
@@ -2285,7 +2323,7 @@
         dlg = DjangoMigrationSelectionDialog(migrations,
                                              migrationRequired=True,
                                              suffix=self.__iconSuffix)
-        if dlg.exec() == QDialog.Accepted:
+        if dlg.exec() == QDialog.DialogCode.Accepted:
             app, migration = dlg.getData()
             
             args = []
@@ -2355,7 +2393,7 @@
         """
         migrations = self.__getMigrations()
         if not migrations:
-            E5MessageBox.information(
+            EricMessageBox.information(
                 None,
                 self.tr("Apply Selected Migrations"),
                 self.tr("""No migrations available."""))
@@ -2366,7 +2404,7 @@
         )
         dlg = DjangoMigrationSelectionDialog(migrations,
                                              suffix=self.__iconSuffix)
-        if dlg.exec() == QDialog.Accepted:
+        if dlg.exec() == QDialog.DialogCode.Accepted:
             app, migration = dlg.getData()
             self.applyMigrations(app=app, migration=migration)
     
@@ -2407,11 +2445,11 @@
     
     def __unapplyMigrations(self):
         """
-        Private slot to un-apply all migrations of an application.
+        Private slot to revert all migrations of an application.
         """
         apps = list(sorted(self.__getMigrations().keys()))
         if not apps:
-            E5MessageBox.information(
+            EricMessageBox.information(
                 None,
                 self.tr("Unapply Migrations"),
                 self.tr("""No migrations available."""))
@@ -2476,7 +2514,7 @@
         """
         from .DjangoMakeMigrationsDialog import DjangoMakeMigrationsDialog
         dlg = DjangoMakeMigrationsDialog(self.getRecentApplications())
-        if dlg.exec() == QDialog.Accepted:
+        if dlg.exec() == QDialog.DialogCode.Accepted:
             apps, migration, dryRun, empty, merge = dlg.getData()
             if apps:
                 self.setMostRecentApplication(apps)
@@ -2533,7 +2571,7 @@
         """
         migrations = self.__getMigrations()
         if not migrations:
-            E5MessageBox.information(
+            EricMessageBox.information(
                 None,
                 self.tr("Squash Migrations"),
                 self.tr("""No migrations available."""))
@@ -2544,7 +2582,7 @@
         )
         dlg = DjangoSquashMigrationSelectionDialog(
             migrations, self, self.__iconSuffix)
-        if dlg.exec() == QDialog.Accepted:
+        if dlg.exec() == QDialog.DialogCode.Accepted:
             app, start, end, noOptimize, name = dlg.getData()
             
             title = self.tr("Squash Migrations")
@@ -2585,7 +2623,7 @@
         
         from .DjangoDiffsettingsDataDialog import DjangoDiffsettingsDataDialog
         dlg = DjangoDiffsettingsDataDialog(self, self.__ui)
-        if dlg.exec() == QDialog.Accepted:
+        if dlg.exec() == QDialog.DialogCode.Accepted:
             showAll, defaultModule, outputFormat = dlg.getData()
             
             args = []
@@ -2628,7 +2666,7 @@
                 self.__adjustWorkingDirectory(args, wd)
                 started, pid = QProcess.startDetached(args[0], args[1:], wd)
                 if not started:
-                    E5MessageBox.critical(
+                    EricMessageBox.critical(
                         None,
                         self.tr('Process Generation Error'),
                         self.tr('The Django process could not be started.'))
@@ -2643,7 +2681,7 @@
             DjangoSendTestEmailDataDialog
         )
         dlg = DjangoSendTestEmailDataDialog(self.__ui)
-        if dlg.exec() == QDialog.Accepted:
+        if dlg.exec() == QDialog.DialogCode.Accepted:
             managers, admins, recipients = dlg.getData()
             
             args = []
@@ -2717,7 +2755,7 @@
         
         from .DjangoDumpdataDataDialog import DjangoDumpdataDataDialog
         dlg = DjangoDumpdataDataDialog(self, self.__ui)
-        if dlg.exec() == QDialog.Accepted:
+        if dlg.exec() == QDialog.DialogCode.Accepted:
             appls, excls, dumpFormat, indent = dlg.getData()
             
             args = []
@@ -2758,7 +2796,7 @@
         
         from .DjangoLoaddataDataDialog import DjangoLoaddataDataDialog
         dlg = DjangoLoaddataDataDialog(self, self.__ui)
-        if dlg.exec() == QDialog.Accepted:
+        if dlg.exec() == QDialog.DialogCode.Accepted:
             fixtures, excludes, appLabel, ignore = dlg.getData()
             
             args = []
@@ -2799,7 +2837,7 @@
             dlg = DjangoTestDataDialog(
                 self, self.__plugin.getPreferences("KeepTestDatabase"),
                 self.__ui)
-            if dlg.exec() == QDialog.Accepted:
+            if dlg.exec() == QDialog.DialogCode.Accepted:
                 labels, pattern, tags, excludeTags, keep, reverse = (
                     dlg.getData())
                 
@@ -2827,7 +2865,7 @@
                 self.__adjustWorkingDirectory(args, wd)
                 started, pid = QProcess.startDetached(args[0], args[1:], wd)
                 if not started:
-                    E5MessageBox.critical(
+                    EricMessageBox.critical(
                         None,
                         self.tr('Process Generation Error'),
                         self.tr('The Django process could not be started.'))
@@ -2844,7 +2882,7 @@
                 DjangoRunTestServerDataDialog
             )
             dlg = DjangoRunTestServerDataDialog(self, self.__ui)
-            if dlg.exec() == QDialog.Accepted:
+            if dlg.exec() == QDialog.DialogCode.Accepted:
                 fixtures = dlg.getData()
                 
                 args = Utilities.parseOptionString(consoleCmd)
@@ -2876,7 +2914,7 @@
                         serverProcStarted = (
                             self.__testServerProc.waitForStarted())
                     if not serverProcStarted:
-                        E5MessageBox.critical(
+                        EricMessageBox.critical(
                             None,
                             self.tr('Process Generation Error'),
                             self.tr('The Django test server could not be'
@@ -2888,7 +2926,7 @@
         """
         if (
             self.__testServerProc is not None and
-            self.__testServerProc.state() != QProcess.NotRunning
+            self.__testServerProc.state() != QProcess.ProcessState.NotRunning
         ):
             self.__testServerProc.terminate()
             QTimer.singleShot(2000, self.__testServerProc.kill)
@@ -2910,7 +2948,7 @@
                 self.__ui,
                 self.tr("Change Password"),
                 self.tr("Enter the name of the user:"),
-                QLineEdit.Normal)
+                QLineEdit.EchoMode.Normal)
             if ok and userName != "":
                 args = Utilities.parseOptionString(consoleCmd)
                 args[0] = Utilities.getExecutablePath(args[0])
@@ -2924,7 +2962,7 @@
                     started, pid = QProcess.startDetached(
                         args[0], args[1:], wd)
                     if not started:
-                        E5MessageBox.critical(
+                        EricMessageBox.critical(
                             None,
                             self.tr('Process Generation Error'),
                             self.tr('The Django process could not be'
@@ -2947,7 +2985,7 @@
                 self.__adjustWorkingDirectory(args, wd)
                 started, pid = QProcess.startDetached(args[0], args[1:], wd)
                 if not started:
-                    E5MessageBox.critical(
+                    EricMessageBox.critical(
                         None,
                         self.tr('Process Generation Error'),
                         self.tr('The Django process could not be started.'))
@@ -2987,12 +3025,14 @@
         """
         Private method to extract the locale out of a file name.
         
-        @param filename name of the file used for extraction (string)
-        @return extracted locale (string) or None
+        @param filename name of the file used for extraction
+        @type str
+        @return extracted locale or None
+        @rtype str
         """
-        if self.__e5project.getTranslationPattern():
+        if self.__ericProject.getTranslationPattern():
             pattern = (
-                self.__e5project.getTranslationPattern()
+                self.__ericProject.getTranslationPattern()
                 .replace("%language%", "(.*?)")
             )
             match = re.search(pattern, filename)
@@ -3010,8 +3050,10 @@
         """
         Private method to normalize a list of file names.
         
-        @param filenames list of file names to normalize (list of strings)
-        @return normalized file names (list of strings)
+        @param filenames list of file names to normalize
+        @type list of str
+        @return normalized file names
+        @rtype list of str
         """
         nfilenames = []
         for filename in filenames:
@@ -3026,8 +3068,10 @@
         """
         Private method to filter a list of file names by site.
         
-        @param filenames list of file names to be filtered (list of strings)
-        @return file names belonging to the current site (list of strings)
+        @param filenames list of file names to be filtered
+        @type list of str
+        @return file names belonging to the current site
+        @rtype list of str
         """
         site = self.__site()
         nfilenames = []
@@ -3041,7 +3085,8 @@
         """
         Private slot handling the addition of a new language.
         
-        @param code language code of the new language (string)
+        @param code language code of the new language
+        @type str
         """
         title = (
             self.tr("Initializing message catalog for '{0}'")
@@ -3057,7 +3102,7 @@
         try:
             wd = self.__sitePath()
         except DjangoNoSiteSelectedException:
-            E5MessageBox.warning(
+            EricMessageBox.warning(
                 None,
                 title,
                 self.tr('No current site selected or no site created yet.'
@@ -3073,23 +3118,24 @@
             dia.exec()
             
             langFile = (
-                self.__e5project.getTranslationPattern()
+                self.__ericProject.getTranslationPattern()
                 .replace("%language%", code)
             )
-            self.__e5project.appendFile(langFile)
+            self.__ericProject.appendFile(langFile)
     
     def updateSelectedCatalogs(self, filenames):
         """
         Public method to update the message catalogs.
         
-        @param filenames list of file names (list of strings)
+        @param filenames list of file names
+        @type list of str
         """
         title = self.tr("Updating message catalogs")
         
         try:
             wd = self.__sitePath()
         except DjangoNoSiteSelectedException:
-            E5MessageBox.warning(
+            EricMessageBox.warning(
                 None,
                 title,
                 self.tr('No current site selected or no site created yet.'
@@ -3111,7 +3157,7 @@
                 argsLists.append(args)
         
         if len(argsLists) == 0:
-            E5MessageBox.warning(
+            EricMessageBox.warning(
                 None,
                 title,
                 self.tr('No locales detected. Aborting...'))
@@ -3129,6 +3175,7 @@
         Public method to update the message catalogs keeping obsolete messages.
         
         @param filenames list of filenames
+        @type list of str
         """
         title = self.tr("Updating message catalogs (keeping obsolete"
                         " messages)")
@@ -3136,7 +3183,7 @@
         try:
             wd = self.__sitePath()
         except DjangoNoSiteSelectedException:
-            E5MessageBox.warning(
+            EricMessageBox.warning(
                 None,
                 title,
                 self.tr('No current site selected or no site created yet.'
@@ -3157,7 +3204,7 @@
                 argsLists.append(args)
         
         if len(argsLists) == 0:
-            E5MessageBox.warning(
+            EricMessageBox.warning(
                 None,
                 title,
                 self.tr('No locales detected. Aborting...'))
@@ -3175,6 +3222,7 @@
         Public method to update the message catalogs.
         
         @param filenames list of filenames (not used)
+        @type list of str
         """
         title = self.tr("Updating message catalogs")
         
@@ -3188,7 +3236,7 @@
         try:
             wd = self.__sitePath()
         except DjangoNoSiteSelectedException:
-            E5MessageBox.warning(
+            EricMessageBox.warning(
                 None,
                 title,
                 self.tr('No current site selected or no site created yet.'
@@ -3207,6 +3255,7 @@
         Public method to update the message catalogs keeping obsolete messages.
         
         @param filenames list of filenames (not used)
+        @type list of str
         """
         title = self.tr("Updating message catalogs (keeping obsolete"
                         " messages)")
@@ -3220,7 +3269,7 @@
         try:
             wd = self.__sitePath()
         except DjangoNoSiteSelectedException:
-            E5MessageBox.warning(
+            EricMessageBox.warning(
                 None,
                 title,
                 self.tr('No current site selected or no site created yet.'
@@ -3239,13 +3288,14 @@
         Public method to update the message catalogs.
         
         @param filenames list of filenames
+        @type list of str
         """
         title = self.tr("Compiling message catalogs")
         
         try:
             wd = self.__sitePath()
         except DjangoNoSiteSelectedException:
-            E5MessageBox.warning(
+            EricMessageBox.warning(
                 None,
                 title,
                 self.tr('No current site selected or no site created yet.'
@@ -3268,7 +3318,7 @@
                 argsLists.append(args)
         
         if len(argsLists) == 0:
-            E5MessageBox.warning(
+            EricMessageBox.warning(
                 None,
                 title,
                 self.tr('No locales detected. Aborting...'))
@@ -3286,13 +3336,14 @@
                 for fileName in entry[2]:
                     fullName = os.path.join(entry[0], fileName)
                     if fullName.endswith('.mo'):
-                        self.__e5project.appendFile(fullName)
+                        self.__ericProject.appendFile(fullName)
     
     def compileCatalogs(self, filenames):
         """
         Public method to compile the message catalogs.
         
         @param filenames list of filenames (not used)
+        @type list of str
         """
         title = self.tr("Compiling message catalogs")
         
@@ -3306,7 +3357,7 @@
         try:
             wd = self.__sitePath()
         except DjangoNoSiteSelectedException:
-            E5MessageBox.warning(
+            EricMessageBox.warning(
                 None,
                 title,
                 self.tr('No current site selected or no site created yet.'
@@ -3325,13 +3376,14 @@
                 for fileName in entry[2]:
                     fullName = os.path.join(entry[0], fileName)
                     if fullName.endswith('.mo'):
-                        self.__e5project.appendFile(fullName)
+                        self.__ericProject.appendFile(fullName)
     
     def openPOEditor(self, poFile):
         """
         Public method to edit the given file in an external .po editor.
         
-        @param poFile name of the .po file (string)
+        @param poFile name of the .po file
+        @type str
         """
         editor = self.__plugin.getPreferences("TranslationsEditor")
         if poFile.endswith(".po") and editor:
@@ -3341,7 +3393,7 @@
                 wd = ""
             started, pid = QProcess.startDetached(editor, [poFile], wd)
             if not started:
-                E5MessageBox.critical(
+                EricMessageBox.critical(
                     None,
                     self.tr('Process Generation Error'),
                     self.tr('The translations editor process ({0}) could'
@@ -3366,7 +3418,7 @@
             self.__getPythonExecutable(), path, self.getRecentApplications(),
             self.__plugin.getPreferences("CheckDeployMode"),
         )
-        if dlg.exec() == QDialog.Accepted:
+        if dlg.exec() == QDialog.DialogCode.Accepted:
             deploy, tags, appsStr, settingsFile = dlg.getData()
             self.__plugin.setPreferences("CheckDeployMode", deploy)
             if appsStr != "":
--- a/ProjectDjango/__init__.py	Sat May 29 15:03:26 2021 +0200
+++ b/ProjectDjango/__init__.py	Sat May 29 18:33:03 2021 +0200
@@ -4,5 +4,5 @@
 #
 
 """
-Package implementing project support for eric6 Django projects.
+Package implementing project support for eric7 Django projects.
 """

eric ide

mercurial