Sorted the eric specific extensions into packages named like the corresponding PyQt packages (i.e. EricCore,EricGui and EricWidgets). eric7

Sat, 22 May 2021 19:58:24 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 22 May 2021 19:58:24 +0200
branch
eric7
changeset 8358
144a6b854f70
parent 8357
a081458cc57b
child 8359
0e29e54e9269

Sorted the eric specific extensions into packages named like the corresponding PyQt packages (i.e. EricCore,EricGui and EricWidgets).

eric7.epj file | annotate | diff | comparison | revisions
eric7/CondaInterface/Conda.py file | annotate | diff | comparison | revisions
eric7/CondaInterface/CondaExecDialog.py file | annotate | diff | comparison | revisions
eric7/CondaInterface/CondaExportDialog.py file | annotate | diff | comparison | revisions
eric7/CondaInterface/CondaExportDialog.ui file | annotate | diff | comparison | revisions
eric7/CondaInterface/CondaNewEnvironmentDataDialog.py file | annotate | diff | comparison | revisions
eric7/CondaInterface/CondaNewEnvironmentDataDialog.ui file | annotate | diff | comparison | revisions
eric7/CondaInterface/CondaPackagesWidget.py file | annotate | diff | comparison | revisions
eric7/CondaInterface/CondaPackagesWidget.ui file | annotate | diff | comparison | revisions
eric7/Cooperation/ChatWidget.py file | annotate | diff | comparison | revisions
eric7/Cooperation/ChatWidget.ui file | annotate | diff | comparison | revisions
eric7/Cooperation/Connection.py file | annotate | diff | comparison | revisions
eric7/DataViews/PyCoverageDialog.py file | annotate | diff | comparison | revisions
eric7/DataViews/PyProfileDialog.py file | annotate | diff | comparison | revisions
eric7/Debugger/BreakPointViewer.py file | annotate | diff | comparison | revisions
eric7/Debugger/CallStackViewer.py file | annotate | diff | comparison | revisions
eric7/Debugger/CallTraceViewer.py file | annotate | diff | comparison | revisions
eric7/Debugger/DebugServer.py file | annotate | diff | comparison | revisions
eric7/Debugger/DebugUI.py file | annotate | diff | comparison | revisions
eric7/Debugger/DebugViewer.py file | annotate | diff | comparison | revisions
eric7/Debugger/DebuggerInterfacePython.py file | annotate | diff | comparison | revisions
eric7/Debugger/EditBreakpointDialog.py file | annotate | diff | comparison | revisions
eric7/Debugger/EditBreakpointDialog.ui file | annotate | diff | comparison | revisions
eric7/Debugger/ExceptionLogger.py file | annotate | diff | comparison | revisions
eric7/Debugger/StartCoverageDialog.ui file | annotate | diff | comparison | revisions
eric7/Debugger/StartDebugDialog.ui file | annotate | diff | comparison | revisions
eric7/Debugger/StartDialog.py file | annotate | diff | comparison | revisions
eric7/Debugger/StartHistoryEditDialog.py file | annotate | diff | comparison | revisions
eric7/Debugger/StartProfileDialog.ui file | annotate | diff | comparison | revisions
eric7/Debugger/StartRunDialog.ui file | annotate | diff | comparison | revisions
eric7/Debugger/VariablesViewer.py file | annotate | diff | comparison | revisions
eric7/Debugger/WatchPointViewer.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricAction.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricAnimatedLabel.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricAnimatedWidget.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricApplication.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricClickableLabel.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricComboSelectionDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricComboSelectionDialog.ui file | annotate | diff | comparison | revisions
eric7/E5Gui/EricCompleters.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricErrorMessage.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricErrorMessageFilterDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricErrorMessageFilterDialog.ui file | annotate | diff | comparison | revisions
eric7/E5Gui/EricFileDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricFileSaveConfirmDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricGenericDiffHighlighter.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricLed.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricLineEdit.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricLineEditButton.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricListSelectionDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricListSelectionDialog.ui file | annotate | diff | comparison | revisions
eric7/E5Gui/EricListView.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricMainWindow.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricMapWidget.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricMessageBox.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricModelMenu.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricModelToolBar.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricOverrideCursor.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricPassivePopup.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricPasswordMeter.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricPathPicker.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricPathPickerDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricPlainTextDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricPlainTextDialog.ui file | annotate | diff | comparison | revisions
eric7/E5Gui/EricProcessDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricProcessDialog.ui file | annotate | diff | comparison | revisions
eric7/E5Gui/EricProgressDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricSideBar.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricSimpleHelpDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricSimpleHelpDialog.ui file | annotate | diff | comparison | revisions
eric7/E5Gui/EricSingleApplication.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricSqueezeLabels.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricStringListEditWidget.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricStringListEditWidget.ui file | annotate | diff | comparison | revisions
eric7/E5Gui/EricTabWidget.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricTableView.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricTextEditSearchWidget.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricTextInputDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricTextSpinBox.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricToolBarDialog.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricToolBarDialog.ui file | annotate | diff | comparison | revisions
eric7/E5Gui/EricToolBarManager.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricToolBox.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricToolButton.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricTreeSortFilterProxyModel.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricTreeView.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricTreeWidget.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricZoomWidget.py file | annotate | diff | comparison | revisions
eric7/E5Gui/EricZoomWidget.ui file | annotate | diff | comparison | revisions
eric7/E5Gui/__init__.py file | annotate | diff | comparison | revisions
eric7/EricCore/EricTreeSortFilterProxyModel.py file | annotate | diff | comparison | revisions
eric7/EricCore/__init__.py file | annotate | diff | comparison | revisions
eric7/EricGraphics/EricGraphicsView.py file | annotate | diff | comparison | revisions
eric7/EricGui/EricAction.py file | annotate | diff | comparison | revisions
eric7/EricGui/EricGenericDiffHighlighter.py file | annotate | diff | comparison | revisions
eric7/EricGui/EricOverrideCursor.py file | annotate | diff | comparison | revisions
eric7/EricGui/__init__.py file | annotate | diff | comparison | revisions
eric7/EricNetwork/EricGoogleMail.py file | annotate | diff | comparison | revisions
eric7/EricNetwork/EricJsonServer.py file | annotate | diff | comparison | revisions
eric7/EricNetwork/EricNetworkProxyFactory.py file | annotate | diff | comparison | revisions
eric7/EricNetwork/EricSslCertificatesDialog.py file | annotate | diff | comparison | revisions
eric7/EricNetwork/EricSslErrorHandler.py file | annotate | diff | comparison | revisions
eric7/EricNetwork/EricTldExtractor.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricAnimatedLabel.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricAnimatedWidget.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricApplication.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricClickableLabel.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricComboSelectionDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricComboSelectionDialog.ui file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricCompleters.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricErrorMessage.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricErrorMessageFilterDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricErrorMessageFilterDialog.ui file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricFileDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricFileSaveConfirmDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricLed.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricLineEdit.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricLineEditButton.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricListSelectionDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricListSelectionDialog.ui file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricListView.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricMainWindow.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricMapWidget.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricMessageBox.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricModelMenu.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricModelToolBar.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricPassivePopup.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricPasswordMeter.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricPathPicker.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricPathPickerDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricPlainTextDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricPlainTextDialog.ui file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricProcessDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricProcessDialog.ui file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricProgressDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricSideBar.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricSimpleHelpDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricSimpleHelpDialog.ui file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricSingleApplication.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricSqueezeLabels.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricStringListEditWidget.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricStringListEditWidget.ui file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricTabWidget.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricTableView.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricTextEditSearchWidget.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricTextInputDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricTextSpinBox.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricToolBarDialog.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricToolBarDialog.ui file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricToolBarManager.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricToolBox.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricToolButton.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricTreeView.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricTreeWidget.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricZoomWidget.py file | annotate | diff | comparison | revisions
eric7/EricWidgets/EricZoomWidget.ui file | annotate | diff | comparison | revisions
eric7/EricWidgets/__init__.py file | annotate | diff | comparison | revisions
eric7/EricXML/SessionReader.py file | annotate | diff | comparison | revisions
eric7/EricXML/TasksReader.py file | annotate | diff | comparison | revisions
eric7/EricXML/XMLStreamReaderBase.py file | annotate | diff | comparison | revisions
eric7/Graphics/ApplicationDiagramBuilder.py file | annotate | diff | comparison | revisions
eric7/Graphics/ImportsDiagramBuilder.py file | annotate | diff | comparison | revisions
eric7/Graphics/PackageDiagramBuilder.py file | annotate | diff | comparison | revisions
eric7/Graphics/PixmapDiagram.py file | annotate | diff | comparison | revisions
eric7/Graphics/SvgDiagram.py file | annotate | diff | comparison | revisions
eric7/Graphics/UMLDialog.py file | annotate | diff | comparison | revisions
eric7/Graphics/UMLGraphicsView.py file | annotate | diff | comparison | revisions
eric7/HexEdit/HexEditMainWindow.py file | annotate | diff | comparison | revisions
eric7/HexEdit/HexEditSearchReplaceWidget.py file | annotate | diff | comparison | revisions
eric7/IconEditor/IconEditorGrid.py file | annotate | diff | comparison | revisions
eric7/IconEditor/IconEditorWindow.py file | annotate | diff | comparison | revisions
eric7/MicroPython/CircuitPythonDevices.py file | annotate | diff | comparison | revisions
eric7/MicroPython/EspBackupRestoreFirmwareDialog.py file | annotate | diff | comparison | revisions
eric7/MicroPython/EspBackupRestoreFirmwareDialog.ui file | annotate | diff | comparison | revisions
eric7/MicroPython/EspDevices.py file | annotate | diff | comparison | revisions
eric7/MicroPython/EspFirmwareSelectionDialog.py file | annotate | diff | comparison | revisions
eric7/MicroPython/EspFirmwareSelectionDialog.ui file | annotate | diff | comparison | revisions
eric7/MicroPython/GenericMicroPythonDevices.py file | annotate | diff | comparison | revisions
eric7/MicroPython/IgnoredDevicesDialog.ui file | annotate | diff | comparison | revisions
eric7/MicroPython/MicroPythonDevices.py file | annotate | diff | comparison | revisions
eric7/MicroPython/MicroPythonFileManagerWidget.py file | annotate | diff | comparison | revisions
eric7/MicroPython/MicroPythonFileManagerWidget.ui file | annotate | diff | comparison | revisions
eric7/MicroPython/MicroPythonGraphWidget.py file | annotate | diff | comparison | revisions
eric7/MicroPython/MicroPythonWidget.py file | annotate | diff | comparison | revisions
eric7/MicroPython/MicroPythonWidget.ui file | annotate | diff | comparison | revisions
eric7/MicroPython/MicrobitDevices.py file | annotate | diff | comparison | revisions
eric7/MicroPython/PyBoardDevices.py file | annotate | diff | comparison | revisions
eric7/MicroPython/UF2FlashDialog.py file | annotate | diff | comparison | revisions
eric7/MicroPython/UF2FlashDialog.ui file | annotate | diff | comparison | revisions
eric7/MicroPython/UnknownDevicesDialog.py file | annotate | diff | comparison | revisions
eric7/MultiProject/AddProjectDialog.py file | annotate | diff | comparison | revisions
eric7/MultiProject/AddProjectDialog.ui file | annotate | diff | comparison | revisions
eric7/MultiProject/MultiProject.py file | annotate | diff | comparison | revisions
eric7/MultiProject/MultiProjectBrowser.py file | annotate | diff | comparison | revisions
eric7/MultiProject/MultiProjectFile.py file | annotate | diff | comparison | revisions
eric7/Network/IRC/IrcChannelWidget.py file | annotate | diff | comparison | revisions
eric7/Network/IRC/IrcIdentitiesEditDialog.py file | annotate | diff | comparison | revisions
eric7/Network/IRC/IrcNetworkEditDialog.py file | annotate | diff | comparison | revisions
eric7/Network/IRC/IrcNetworkListDialog.py file | annotate | diff | comparison | revisions
eric7/Network/IRC/IrcNetworkWidget.py file | annotate | diff | comparison | revisions
eric7/Network/IRC/IrcWidget.py file | annotate | diff | comparison | revisions
eric7/PipInterface/Pip.py file | annotate | diff | comparison | revisions
eric7/PipInterface/PipDialog.py file | annotate | diff | comparison | revisions
eric7/PipInterface/PipFileSelectionDialog.py file | annotate | diff | comparison | revisions
eric7/PipInterface/PipFileSelectionDialog.ui file | annotate | diff | comparison | revisions
eric7/PipInterface/PipFreezeDialog.py file | annotate | diff | comparison | revisions
eric7/PipInterface/PipFreezeDialog.ui file | annotate | diff | comparison | revisions
eric7/PipInterface/PipPackagesWidget.py file | annotate | diff | comparison | revisions
eric7/PipInterface/PipPackagesWidget.ui file | annotate | diff | comparison | revisions
eric7/PluginManager/PluginInstallDialog.py file | annotate | diff | comparison | revisions
eric7/PluginManager/PluginManager.py file | annotate | diff | comparison | revisions
eric7/PluginManager/PluginRepositoryDialog.py file | annotate | diff | comparison | revisions
eric7/PluginManager/PluginUninstallDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py file | annotate | diff | comparison | revisions
eric7/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginAbout.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginCodeStyleChecker.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginEricapi.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginEricdoc.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginSyntaxChecker.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginTranslator.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginVcsGit.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginVcsMercurial.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginVcsPySvn.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginVcsSubversion.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginWizardDotDesktop.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginWizardE5MessageBox.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginWizardEricPlugin.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginWizardPyRegExp.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginWizardQColorDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginWizardQFileDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginWizardQFontDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginWizardQInputDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginWizardQMessageBox.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginWizardQRegularExpression.py file | annotate | diff | comparison | revisions
eric7/Plugins/PluginWizardSetup.py file | annotate | diff | comparison | revisions
eric7/Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py file | annotate | diff | comparison | revisions
eric7/Plugins/UiExtensionPlugins/Translator/Translator.py file | annotate | diff | comparison | revisions
eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/IbmWatsonEngine.py file | annotate | diff | comparison | revisions
eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py file | annotate | diff | comparison | revisions
eric7/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitArchiveDataDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitBisectLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitBlameDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitCopyDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitDescribeDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitDiffDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitDiffGenerator.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitDiffHighlighter.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitNewProjectOptionsDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitPatchFilesDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitPatchStatisticsDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitReflogBrowserDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitRemoteRepositoriesDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitStashBrowserDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitStatusDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitSubmoduleAddDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/GitTagBranchListDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsGit/git.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/GpgExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgAddSubrepositoryDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgAddSubrepositoryDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgConflictsListDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffHighlighter.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgExportDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgExportDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgImportDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgImportDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgServeDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditCommitEditor.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditPlanEditor.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/LfConvertDataDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/LfConvertDataDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/largefiles.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/PurgeExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesDefineGuardsDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveBrowserDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/shelve.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/StripExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/hg.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnDialogMixin.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnDiffHighlighter.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/subversion.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnDiffHighlighter.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.ui file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/subversion.py file | annotate | diff | comparison | revisions
eric7/Plugins/ViewManagerPlugins/Tabview/Tabview.py file | annotate | diff | comparison | revisions
eric7/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/WizardPlugins/DotDesktopWizard/DotDesktopWizardDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/WizardPlugins/EricPluginWizard/PluginWizardDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py file | annotate | diff | comparison | revisions
eric7/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationDialog.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/CondaPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/CondaPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/CorbaPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/CorbaPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/DebuggerGeneralPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/DebuggerPython3Page.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/DebuggerPython3Page.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/EditorAPIsPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/EditorAPIsPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/EditorDocViewerPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/EditorFilePage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/EditorGeneralPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/EditorKeywordsPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/EditorSpellCheckingPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/EditorSpellCheckingPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/EmailPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/HelpDocumentationPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/HelpDocumentationPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/HelpViewersPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/HelpViewersPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/IconsPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/IconsPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/InterfacePage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/InterfacePage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/LogViewerPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/MasterPasswordEntryDialog.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/MicroPythonPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/MicroPythonPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/MimeTypesPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/MimeTypesPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/MultiProjectPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/MultiProjectPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/NetworkPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/NetworkPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/PluginManagerPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/PluginManagerPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/ProjectBrowserPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/ProtobufPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/ProtobufPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/QtPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/QtPage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/ViewmanagerPage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/WebBrowserAppearancePage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/WebBrowserAppearancePage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/WebBrowserInterfacePage.py file | annotate | diff | comparison | revisions
eric7/Preferences/ConfigurationPages/WebBrowserInterfacePage.ui file | annotate | diff | comparison | revisions
eric7/Preferences/HighlightingStylesFile.py file | annotate | diff | comparison | revisions
eric7/Preferences/ProgramsDialog.py file | annotate | diff | comparison | revisions
eric7/Preferences/Shortcuts.py file | annotate | diff | comparison | revisions
eric7/Preferences/ShortcutsDialog.py file | annotate | diff | comparison | revisions
eric7/Preferences/ShortcutsFile.py file | annotate | diff | comparison | revisions
eric7/Preferences/SubstyleDefinitionDialog.py file | annotate | diff | comparison | revisions
eric7/Preferences/ToolConfigurationDialog.py file | annotate | diff | comparison | revisions
eric7/Preferences/ToolConfigurationDialog.ui file | annotate | diff | comparison | revisions
eric7/Preferences/ToolGroupConfigurationDialog.py file | annotate | diff | comparison | revisions
eric7/Preferences/__init__.py file | annotate | diff | comparison | revisions
eric7/Project/AddDirectoryDialog.py file | annotate | diff | comparison | revisions
eric7/Project/AddDirectoryDialog.ui file | annotate | diff | comparison | revisions
eric7/Project/AddFileDialog.py file | annotate | diff | comparison | revisions
eric7/Project/AddFileDialog.ui file | annotate | diff | comparison | revisions
eric7/Project/CreateDialogCodeDialog.py file | annotate | diff | comparison | revisions
eric7/Project/DebuggerPropertiesDialog.py file | annotate | diff | comparison | revisions
eric7/Project/DebuggerPropertiesDialog.ui file | annotate | diff | comparison | revisions
eric7/Project/DebuggerPropertiesFile.py file | annotate | diff | comparison | revisions
eric7/Project/IdlCompilerOptionsDialog.py file | annotate | diff | comparison | revisions
eric7/Project/MakePropertiesDialog.py file | annotate | diff | comparison | revisions
eric7/Project/MakePropertiesDialog.ui file | annotate | diff | comparison | revisions
eric7/Project/NewDialogClassDialog.py file | annotate | diff | comparison | revisions
eric7/Project/NewDialogClassDialog.ui file | annotate | diff | comparison | revisions
eric7/Project/Project.py file | annotate | diff | comparison | revisions
eric7/Project/ProjectBaseBrowser.py file | annotate | diff | comparison | revisions
eric7/Project/ProjectBrowser.py file | annotate | diff | comparison | revisions
eric7/Project/ProjectFile.py file | annotate | diff | comparison | revisions
eric7/Project/ProjectFormsBrowser.py file | annotate | diff | comparison | revisions
eric7/Project/ProjectInterfacesBrowser.py file | annotate | diff | comparison | revisions
eric7/Project/ProjectOthersBrowser.py file | annotate | diff | comparison | revisions
eric7/Project/ProjectProtocolsBrowser.py file | annotate | diff | comparison | revisions
eric7/Project/ProjectResourcesBrowser.py file | annotate | diff | comparison | revisions
eric7/Project/ProjectSourcesBrowser.py file | annotate | diff | comparison | revisions
eric7/Project/ProjectTranslationsBrowser.py file | annotate | diff | comparison | revisions
eric7/Project/PropertiesDialog.py file | annotate | diff | comparison | revisions
eric7/Project/PropertiesDialog.ui file | annotate | diff | comparison | revisions
eric7/Project/SpellingPropertiesDialog.py file | annotate | diff | comparison | revisions
eric7/Project/SpellingPropertiesDialog.ui file | annotate | diff | comparison | revisions
eric7/Project/TranslationPropertiesDialog.py file | annotate | diff | comparison | revisions
eric7/Project/TranslationPropertiesDialog.ui file | annotate | diff | comparison | revisions
eric7/Project/UserProjectFile.py file | annotate | diff | comparison | revisions
eric7/Project/UserPropertiesDialog.py file | annotate | diff | comparison | revisions
eric7/PyUnit/UnittestDialog.py file | annotate | diff | comparison | revisions
eric7/PyUnit/UnittestDialog.ui file | annotate | diff | comparison | revisions
eric7/QScintilla/DocstringGenerator/BaseDocstringGenerator.py file | annotate | diff | comparison | revisions
eric7/QScintilla/Editor.py file | annotate | diff | comparison | revisions
eric7/QScintilla/EditorAssembly.py file | annotate | diff | comparison | revisions
eric7/QScintilla/EditorMarkerMap.py file | annotate | diff | comparison | revisions
eric7/QScintilla/Exporters/ExporterBase.py file | annotate | diff | comparison | revisions
eric7/QScintilla/Exporters/ExporterHTML.py file | annotate | diff | comparison | revisions
eric7/QScintilla/Exporters/ExporterODT.py file | annotate | diff | comparison | revisions
eric7/QScintilla/Exporters/ExporterPDF.py file | annotate | diff | comparison | revisions
eric7/QScintilla/Exporters/ExporterRTF.py file | annotate | diff | comparison | revisions
eric7/QScintilla/Exporters/ExporterTEX.py file | annotate | diff | comparison | revisions
eric7/QScintilla/MarkupProviders/ImageMarkupDialog.py file | annotate | diff | comparison | revisions
eric7/QScintilla/MarkupProviders/ImageMarkupDialog.ui file | annotate | diff | comparison | revisions
eric7/QScintilla/MiniEditor.py file | annotate | diff | comparison | revisions
eric7/QScintilla/SearchReplaceWidget.py file | annotate | diff | comparison | revisions
eric7/QScintilla/Shell.py file | annotate | diff | comparison | revisions
eric7/QScintilla/ShellWindow.py file | annotate | diff | comparison | revisions
eric7/QScintilla/SpellingDictionaryEditDialog.ui file | annotate | diff | comparison | revisions
eric7/Sessions/SessionFile.py file | annotate | diff | comparison | revisions
eric7/Snapshot/SnapWidget.py file | annotate | diff | comparison | revisions
eric7/Snapshot/SnapshotWaylandGrabber.py file | annotate | diff | comparison | revisions
eric7/SqlBrowser/SqlBrowser.py file | annotate | diff | comparison | revisions
eric7/SqlBrowser/SqlBrowserWidget.py file | annotate | diff | comparison | revisions
eric7/SqlBrowser/SqlConnectionDialog.py file | annotate | diff | comparison | revisions
eric7/SqlBrowser/SqlConnectionDialog.ui file | annotate | diff | comparison | revisions
eric7/Tasks/TaskPropertiesDialog.py file | annotate | diff | comparison | revisions
eric7/Tasks/TaskViewer.py file | annotate | diff | comparison | revisions
eric7/Tasks/TasksFile.py file | annotate | diff | comparison | revisions
eric7/Templates/TemplatePropertiesDialog.py file | annotate | diff | comparison | revisions
eric7/Templates/TemplateViewer.py file | annotate | diff | comparison | revisions
eric7/Templates/TemplatesFile.py file | annotate | diff | comparison | revisions
eric7/Toolbox/SingleApplication.py file | annotate | diff | comparison | revisions
eric7/Toolbox/Startup.py file | annotate | diff | comparison | revisions
eric7/Tools/TRPreviewer.py file | annotate | diff | comparison | revisions
eric7/Tools/TrayStarter.py file | annotate | diff | comparison | revisions
eric7/Tools/UIPreviewer.py file | annotate | diff | comparison | revisions
eric7/UI/Browser.py file | annotate | diff | comparison | revisions
eric7/UI/CodeDocumentationViewer.py file | annotate | diff | comparison | revisions
eric7/UI/CodeDocumentationViewerTemplate.py file | annotate | diff | comparison | revisions
eric7/UI/CompareDialog.py file | annotate | diff | comparison | revisions
eric7/UI/CompareDialog.ui file | annotate | diff | comparison | revisions
eric7/UI/DiffDialog.py file | annotate | diff | comparison | revisions
eric7/UI/DiffDialog.ui file | annotate | diff | comparison | revisions
eric7/UI/DiffHighlighter.py file | annotate | diff | comparison | revisions
eric7/UI/EmailDialog.py file | annotate | diff | comparison | revisions
eric7/UI/FindFileDialog.py file | annotate | diff | comparison | revisions
eric7/UI/FindFileDialog.ui file | annotate | diff | comparison | revisions
eric7/UI/FindFileNameDialog.py file | annotate | diff | comparison | revisions
eric7/UI/FindFileNameDialog.ui file | annotate | diff | comparison | revisions
eric7/UI/InstallInfoDialog.py file | annotate | diff | comparison | revisions
eric7/UI/LogView.py file | annotate | diff | comparison | revisions
eric7/UI/NumbersWidget.py file | annotate | diff | comparison | revisions
eric7/UI/NumbersWidget.ui file | annotate | diff | comparison | revisions
eric7/UI/Previewers/PreviewerHTML.py file | annotate | diff | comparison | revisions
eric7/UI/PythonAstViewer.py file | annotate | diff | comparison | revisions
eric7/UI/PythonDisViewer.py file | annotate | diff | comparison | revisions
eric7/UI/UserInterface.py file | annotate | diff | comparison | revisions
eric7/Utilities/BackgroundService.py file | annotate | diff | comparison | revisions
eric7/Utilities/__init__.py file | annotate | diff | comparison | revisions
eric7/Utilities/crypto/__init__.py file | annotate | diff | comparison | revisions
eric7/VCS/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
eric7/VCS/ProjectHelper.py file | annotate | diff | comparison | revisions
eric7/VCS/StatusMonitorLed.py file | annotate | diff | comparison | revisions
eric7/VCS/VersionControl.py file | annotate | diff | comparison | revisions
eric7/VCS/__init__.py file | annotate | diff | comparison | revisions
eric7/ViewManager/BookmarkedFilesDialog.py file | annotate | diff | comparison | revisions
eric7/ViewManager/BookmarkedFilesDialog.ui file | annotate | diff | comparison | revisions
eric7/ViewManager/ViewManager.py file | annotate | diff | comparison | revisions
eric7/VirtualEnv/VirtualenvAddEditDialog.py file | annotate | diff | comparison | revisions
eric7/VirtualEnv/VirtualenvAddEditDialog.ui file | annotate | diff | comparison | revisions
eric7/VirtualEnv/VirtualenvConfigurationDialog.py file | annotate | diff | comparison | revisions
eric7/VirtualEnv/VirtualenvConfigurationDialog.ui file | annotate | diff | comparison | revisions
eric7/VirtualEnv/VirtualenvInterpreterSelectionDialog.py file | annotate | diff | comparison | revisions
eric7/VirtualEnv/VirtualenvInterpreterSelectionDialog.ui file | annotate | diff | comparison | revisions
eric7/VirtualEnv/VirtualenvManager.py file | annotate | diff | comparison | revisions
eric7/VirtualEnv/VirtualenvManagerDialog.py file | annotate | diff | comparison | revisions
eric7/VirtualEnv/VirtualenvManagerDialog.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/AdBlock/AdBlockDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/AdBlock/AdBlockIcon.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/AdBlock/AdBlockManager.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/AdBlock/AdBlockSubscription.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/AdBlock/AdBlockTreeWidget.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Bookmarks/BookmarksDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Bookmarks/BookmarksDialog.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/Bookmarks/BookmarksImportDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Bookmarks/BookmarksImportDialog.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/Bookmarks/BookmarksManager.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Bookmarks/BookmarksMenu.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Bookmarks/BookmarksToolBar.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/CookieJar/CookiesDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/CookieJar/CookiesDialog.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/CookieJar/CookiesExceptionsDialog.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/Download/DownloadItem.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Download/DownloadManager.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Download/DownloadManager.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/Download/DownloadManagerButton.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/FeaturePermissions/FeaturePermissionBar.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Feeds/FeedsManager.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/GreaseMonkey/GreaseMonkeyManager.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/History/HistoryDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/History/HistoryDialog.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/History/HistoryManager.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/History/HistoryMenu.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Navigation/NavigationBar.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Navigation/ReloadStopButton.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Network/EricSchemeHandler.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Network/NetworkManager.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Network/SendRefererWhitelistDialog.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/OpenSearch/OpenSearchDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/OpenSearch/OpenSearchDialog.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/OpenSearch/OpenSearchManager.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/PageScreenDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Passwords/PasswordManager.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Passwords/PasswordsDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Passwords/PasswordsDialog.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/QtHelp/QtHelpDocumentationDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/QtHelp/QtHelpDocumentationSelectionDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/SafeBrowsing/SafeBrowsingDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Session/SessionManager.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/SiteInfo/SiteInfoDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/SpeedDial/SpeedDial.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/SpellCheck/ManageDictionariesDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/StatusBar/StatusBarIcon.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Sync/SyncCheckPage.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/Sync/SyncDirectorySettingsPage.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Sync/SyncDirectorySettingsPage.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/Sync/SyncEncryptionPage.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/TabManager/TabManagerWidget.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Tools/PrintToPdfDialog.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/Tools/PrintToPdfDialog.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/UrlBar/SslLabel.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/UrlBar/UrlBar.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/UserAgent/UserAgentManager.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/UserAgent/UserAgentMenu.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/UserAgent/UserAgentsDialog.ui file | annotate | diff | comparison | revisions
eric7/WebBrowser/VirusTotal/VirusTotalApi.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/WebBrowserPage.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/WebBrowserTabBar.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/WebBrowserTabWidget.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/WebBrowserView.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/WebBrowserWebSearchWidget.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/WebBrowserWindow.py file | annotate | diff | comparison | revisions
eric7/WebBrowser/ZoomManager/ZoomValuesDialog.ui file | annotate | diff | comparison | revisions
eric7/eric7.py file | annotate | diff | comparison | revisions
eric7/eric7_browser.py file | annotate | diff | comparison | revisions
eric7/eric7_trpreviewer.py file | annotate | diff | comparison | revisions
--- a/eric7.epj	Sat May 22 19:52:34 2021 +0200
+++ b/eric7.epj	Sat May 22 19:58:24 2021 +0200
@@ -2,7 +2,7 @@
   "header": {
     "comment": "eric project file for project eric7",
     "copyright": "Copyright (C) 2021 Detlev Offenbach, detlev@die-offenbachs.de",
-    "saved": "2021-05-22, 18:49:32"
+    "saved": "2021-05-22, 19:54:46"
   },
   "project": {
     "AUTHOR": "Detlev Offenbach",
@@ -701,15 +701,15 @@
       "eric7/EricNetwork/EricSslCertificatesDialog.ui",
       "eric7/EricNetwork/EricSslCertificatesInfoDialog.ui",
       "eric7/EricNetwork/EricSslCertificatesInfoWidget.ui",
-      "eric7/E5Gui/EricComboSelectionDialog.ui",
-      "eric7/E5Gui/EricErrorMessageFilterDialog.ui",
-      "eric7/E5Gui/EricListSelectionDialog.ui",
-      "eric7/E5Gui/EricPlainTextDialog.ui",
-      "eric7/E5Gui/EricProcessDialog.ui",
-      "eric7/E5Gui/EricSimpleHelpDialog.ui",
-      "eric7/E5Gui/EricStringListEditWidget.ui",
-      "eric7/E5Gui/EricToolBarDialog.ui",
-      "eric7/E5Gui/EricZoomWidget.ui"
+      "eric7/EricWidgets/EricComboSelectionDialog.ui",
+      "eric7/EricWidgets/EricErrorMessageFilterDialog.ui",
+      "eric7/EricWidgets/EricListSelectionDialog.ui",
+      "eric7/EricWidgets/EricPlainTextDialog.ui",
+      "eric7/EricWidgets/EricProcessDialog.ui",
+      "eric7/EricWidgets/EricSimpleHelpDialog.ui",
+      "eric7/EricWidgets/EricStringListEditWidget.ui",
+      "eric7/EricWidgets/EricToolBarDialog.ui",
+      "eric7/EricWidgets/EricZoomWidget.ui"
     ],
     "HASH": "df7daa8781250f7664e6ecaeaf1361fa2efd39ee",
     "IDLPARAMS": {
@@ -1072,7 +1072,6 @@
       "eric7/DocumentationTools/TemplatesListsStyle.py",
       "eric7/DocumentationTools/TemplatesListsStyleCSS.py",
       "eric7/DocumentationTools/__init__.py",
-      "eric7/E5Gui/__init__.py",
       "eric7/Globals/AppInfo.py",
       "eric7/Globals/__init__.py",
       "eric7/Graphics/ApplicationDiagramBuilder.py",
@@ -2217,54 +2216,57 @@
       "eric7/EricNetwork/EricSslUtilities.py",
       "eric7/EricNetwork/EricTldExtractor.py",
       "eric7/EricNetwork/EricUrlInfo.py",
-      "eric7/E5Gui/EricAction.py",
-      "eric7/E5Gui/EricAnimatedLabel.py",
-      "eric7/E5Gui/EricAnimatedWidget.py",
-      "eric7/E5Gui/EricApplication.py",
-      "eric7/E5Gui/EricClickableLabel.py",
-      "eric7/E5Gui/EricComboSelectionDialog.py",
-      "eric7/E5Gui/EricCompleters.py",
-      "eric7/E5Gui/EricErrorMessage.py",
-      "eric7/E5Gui/EricErrorMessageFilterDialog.py",
-      "eric7/E5Gui/EricFileDialog.py",
-      "eric7/E5Gui/EricFileSaveConfirmDialog.py",
-      "eric7/E5Gui/EricGenericDiffHighlighter.py",
-      "eric7/E5Gui/EricLed.py",
-      "eric7/E5Gui/EricLineEdit.py",
-      "eric7/E5Gui/EricLineEditButton.py",
-      "eric7/E5Gui/EricListSelectionDialog.py",
-      "eric7/E5Gui/EricListView.py",
-      "eric7/E5Gui/EricMainWindow.py",
-      "eric7/E5Gui/EricMapWidget.py",
-      "eric7/E5Gui/EricMessageBox.py",
-      "eric7/E5Gui/EricModelMenu.py",
-      "eric7/E5Gui/EricModelToolBar.py",
-      "eric7/E5Gui/EricOverrideCursor.py",
-      "eric7/E5Gui/EricPassivePopup.py",
-      "eric7/E5Gui/EricPasswordMeter.py",
-      "eric7/E5Gui/EricPathPicker.py",
-      "eric7/E5Gui/EricPathPickerDialog.py",
-      "eric7/E5Gui/EricPlainTextDialog.py",
-      "eric7/E5Gui/EricProcessDialog.py",
-      "eric7/E5Gui/EricProgressDialog.py",
-      "eric7/E5Gui/EricSideBar.py",
-      "eric7/E5Gui/EricSimpleHelpDialog.py",
-      "eric7/E5Gui/EricSingleApplication.py",
-      "eric7/E5Gui/EricSqueezeLabels.py",
-      "eric7/E5Gui/EricStringListEditWidget.py",
-      "eric7/E5Gui/EricTabWidget.py",
-      "eric7/E5Gui/EricTableView.py",
-      "eric7/E5Gui/EricTextEditSearchWidget.py",
-      "eric7/E5Gui/EricTextInputDialog.py",
-      "eric7/E5Gui/EricTextSpinBox.py",
-      "eric7/E5Gui/EricToolBarDialog.py",
-      "eric7/E5Gui/EricToolBarManager.py",
-      "eric7/E5Gui/EricToolBox.py",
-      "eric7/E5Gui/EricToolButton.py",
-      "eric7/E5Gui/EricTreeSortFilterProxyModel.py",
-      "eric7/E5Gui/EricTreeView.py",
-      "eric7/E5Gui/EricTreeWidget.py",
-      "eric7/E5Gui/EricZoomWidget.py"
+      "eric7/EricCore/__init__.py",
+      "eric7/EricCore/EricTreeSortFilterProxyModel.py",
+      "eric7/EricGui/__init__.py",
+      "eric7/EricGui/EricAction.py",
+      "eric7/EricGui/EricGenericDiffHighlighter.py",
+      "eric7/EricGui/EricOverrideCursor.py",
+      "eric7/EricWidgets/__init__.py",
+      "eric7/EricWidgets/EricAnimatedLabel.py",
+      "eric7/EricWidgets/EricAnimatedWidget.py",
+      "eric7/EricWidgets/EricApplication.py",
+      "eric7/EricWidgets/EricClickableLabel.py",
+      "eric7/EricWidgets/EricComboSelectionDialog.py",
+      "eric7/EricWidgets/EricCompleters.py",
+      "eric7/EricWidgets/EricErrorMessage.py",
+      "eric7/EricWidgets/EricErrorMessageFilterDialog.py",
+      "eric7/EricWidgets/EricFileDialog.py",
+      "eric7/EricWidgets/EricFileSaveConfirmDialog.py",
+      "eric7/EricWidgets/EricLed.py",
+      "eric7/EricWidgets/EricLineEdit.py",
+      "eric7/EricWidgets/EricLineEditButton.py",
+      "eric7/EricWidgets/EricListSelectionDialog.py",
+      "eric7/EricWidgets/EricListView.py",
+      "eric7/EricWidgets/EricMainWindow.py",
+      "eric7/EricWidgets/EricMapWidget.py",
+      "eric7/EricWidgets/EricMessageBox.py",
+      "eric7/EricWidgets/EricModelMenu.py",
+      "eric7/EricWidgets/EricModelToolBar.py",
+      "eric7/EricWidgets/EricPassivePopup.py",
+      "eric7/EricWidgets/EricPasswordMeter.py",
+      "eric7/EricWidgets/EricPathPicker.py",
+      "eric7/EricWidgets/EricPathPickerDialog.py",
+      "eric7/EricWidgets/EricPlainTextDialog.py",
+      "eric7/EricWidgets/EricProcessDialog.py",
+      "eric7/EricWidgets/EricProgressDialog.py",
+      "eric7/EricWidgets/EricSideBar.py",
+      "eric7/EricWidgets/EricSimpleHelpDialog.py",
+      "eric7/EricWidgets/EricSingleApplication.py",
+      "eric7/EricWidgets/EricSqueezeLabels.py",
+      "eric7/EricWidgets/EricStringListEditWidget.py",
+      "eric7/EricWidgets/EricTabWidget.py",
+      "eric7/EricWidgets/EricTableView.py",
+      "eric7/EricWidgets/EricTextEditSearchWidget.py",
+      "eric7/EricWidgets/EricTextInputDialog.py",
+      "eric7/EricWidgets/EricTextSpinBox.py",
+      "eric7/EricWidgets/EricToolBarDialog.py",
+      "eric7/EricWidgets/EricToolBarManager.py",
+      "eric7/EricWidgets/EricToolBox.py",
+      "eric7/EricWidgets/EricToolButton.py",
+      "eric7/EricWidgets/EricTreeView.py",
+      "eric7/EricWidgets/EricTreeWidget.py",
+      "eric7/EricWidgets/EricZoomWidget.py"
     ],
     "SPELLEXCLUDES": "Dictionaries/excludes.dic",
     "SPELLLANGUAGE": "en_US",
--- a/eric7/CondaInterface/Conda.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/CondaInterface/Conda.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtCore import pyqtSignal, QObject, QProcess, QCoreApplication
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 import Globals
 import Preferences
--- a/eric7/CondaInterface/CondaExecDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/CondaInterface/CondaExecDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot, QProcess, QTimer
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QAbstractButton
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_CondaExecDialog import Ui_CondaExecDialog
 
--- a/eric7/CondaInterface/CondaExportDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/CondaInterface/CondaExportDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,10 +14,10 @@
     QDialog, QDialogButtonBox, QAbstractButton, QApplication
 )
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricPathPicker import EricPathPickerModes
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .Ui_CondaExportDialog import Ui_CondaExportDialog
 
--- a/eric7/CondaInterface/CondaExportDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/CondaInterface/CondaExportDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -158,7 +158,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/CondaInterface/CondaNewEnvironmentDataDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/CondaInterface/CondaNewEnvironmentDataDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_CondaNewEnvironmentDataDialog import Ui_CondaNewEnvironmentDataDialog
 
--- a/eric7/CondaInterface/CondaNewEnvironmentDataDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/CondaInterface/CondaNewEnvironmentDataDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -93,7 +93,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/CondaInterface/CondaPackagesWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/CondaInterface/CondaPackagesWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -15,9 +15,9 @@
     QDialog
 )
 
-from E5Gui import EricFileDialog, EricMessageBox, EricTextInputDialog
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricFileDialog, EricMessageBox, EricTextInputDialog
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .Ui_CondaPackagesWidget import Ui_CondaPackagesWidget
 
--- a/eric7/CondaInterface/CondaPackagesWidget.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/CondaInterface/CondaPackagesWidget.ui	Sat May 22 19:58:24 2021 +0200
@@ -433,7 +433,7 @@
   <customwidget>
    <class>EricToolButton</class>
    <extends>QToolButton</extends>
-   <header>E5Gui/EricToolButton.h</header>
+   <header>EricWidgets/EricToolButton.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/Cooperation/ChatWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Cooperation/ChatWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -11,8 +11,8 @@
 from PyQt6.QtGui import QColor
 from PyQt6.QtWidgets import QWidget, QListWidgetItem, QMenu, QApplication
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from Globals import recentNameHosts
 
--- a/eric7/Cooperation/ChatWidget.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Cooperation/ChatWidget.ui	Sat May 22 19:58:24 2021 +0200
@@ -332,7 +332,7 @@
   <customwidget>
    <class>EricLed</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricLed.h</header>
+   <header>EricWidgets/EricLed.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Cooperation/Connection.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Cooperation/Connection.py	Sat May 22 19:58:24 2021 +0200
@@ -10,8 +10,8 @@
 from PyQt6.QtCore import pyqtSignal, QTimer, QTime, QByteArray
 from PyQt6.QtNetwork import QTcpSocket, QHostInfo
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- a/eric7/DataViews/PyCoverageDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/DataViews/PyCoverageDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,9 +16,9 @@
     QApplication
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricProgressDialog import EricProgressDialog
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricProgressDialog import EricProgressDialog
 
 from .Ui_PyCoverageDialog import Ui_PyCoverageDialog
 
--- a/eric7/DataViews/PyProfileDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/DataViews/PyProfileDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,7 +16,7 @@
     QApplication
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_PyProfileDialog import Ui_PyProfileDialog
 import Utilities
--- a/eric7/Debugger/BreakPointViewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/BreakPointViewer.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
     QTreeView, QAbstractItemView, QHeaderView, QMenu, QDialog
 )
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from Globals import recentNameBreakpointFiles, recentNameBreakpointConditions
 
--- a/eric7/Debugger/CallStackViewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/CallStackViewer.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
     QTreeWidget, QTreeWidgetItem, QMenu, QWidget, QVBoxLayout, QLabel
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricFileDialog, EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricFileDialog, EricMessageBox
 
 import Utilities
 
--- a/eric7/Debugger/CallTraceViewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/CallTraceViewer.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import pyqtSlot, pyqtSignal, Qt, QFileInfo
 from PyQt6.QtWidgets import QWidget, QTreeWidgetItem
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricFileDialog, EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricFileDialog, EricMessageBox
 
 from .Ui_CallTraceViewer import Ui_CallTraceViewer
 
--- a/eric7/Debugger/DebugServer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/DebugServer.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
     QTcpServer, QHostAddress, QHostInfo, QNetworkInterface
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from .BreakPointModel import BreakPointModel
 from .WatchPointModel import WatchPointModel
--- a/eric7/Debugger/DebugUI.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/DebugUI.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
 from PyQt6.QtGui import QKeySequence
 from PyQt6.QtWidgets import QMenu, QToolBar, QApplication, QDialog
 
-from E5Gui.EricAction import EricAction, createActionGroup
-from E5Gui import EricMessageBox
+from EricGui.EricAction import EricAction, createActionGroup
+from EricWidgets import EricMessageBox
 
 from UI.Info import Program
 from UI.NotificationWidget import NotificationTypes
--- a/eric7/Debugger/DebugViewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/DebugViewer.py	Sat May 22 19:58:24 2021 +0200
@@ -32,7 +32,7 @@
 import UI.PixmapCache
 import Preferences
 
-from E5Gui.EricTabWidget import EricTabWidget
+from EricWidgets.EricTabWidget import EricTabWidget
 
 
 class DebugViewer(QWidget):
--- a/eric7/Debugger/DebuggerInterfacePython.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/DebuggerInterfacePython.py	Sat May 22 19:58:24 2021 +0200
@@ -17,8 +17,8 @@
     QObject, QProcess, QProcessEnvironment, QTimer
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from . import DebugClientCapabilities
 
--- a/eric7/Debugger/EditBreakpointDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/EditBreakpointDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QComboBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_EditBreakpointDialog import Ui_EditBreakpointDialog
 
--- a/eric7/Debugger/EditBreakpointDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/EditBreakpointDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -175,7 +175,7 @@
   <customwidget>
    <class>EricComboPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Debugger/ExceptionLogger.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/ExceptionLogger.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSignal, Qt
 from PyQt6.QtWidgets import QTreeWidget, QTreeWidgetItem, QMenu
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 
 class ExceptionLogger(QTreeWidget):
--- a/eric7/Debugger/StartCoverageDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/StartCoverageDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -273,7 +273,7 @@
   <customwidget>
    <class>EricComboPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Debugger/StartDebugDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/StartDebugDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -338,7 +338,7 @@
   <customwidget>
    <class>EricComboPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Debugger/StartDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/StartDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,8 +11,8 @@
 
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QComboBox, QInputDialog
 
-from E5Gui.EricPathPicker import EricPathPickerModes
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- a/eric7/Debugger/StartHistoryEditDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/StartHistoryEditDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot, Qt
 from PyQt6.QtWidgets import QDialog, QInputDialog, QLineEdit
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_StartHistoryEditDialog import Ui_StartHistoryEditDialog
 
--- a/eric7/Debugger/StartProfileDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/StartProfileDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -270,7 +270,7 @@
   <customwidget>
    <class>EricComboPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Debugger/StartRunDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/StartRunDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -253,7 +253,7 @@
   <customwidget>
    <class>EricComboPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Debugger/VariablesViewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/VariablesViewer.py	Sat May 22 19:58:24 2021 +0200
@@ -18,7 +18,7 @@
 from PyQt6.QtGui import QBrush, QFontMetrics
 from PyQt6.QtWidgets import QTreeView, QAbstractItemView, QToolTip, QMenu
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from .Config import ConfigVarTypeDispStrings
 from DebugClients.Python.DebugConfig import ConfigQtNames, ConfigKnownQtTypes
--- a/eric7/Debugger/WatchPointViewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Debugger/WatchPointViewer.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
     QTreeView, QAbstractItemView, QMenu, QHeaderView, QDialog
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 import Utilities
 
--- a/eric7/E5Gui/EricAction.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,223 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2006 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing an Action class extending QAction.
-
-This extension is necessary in order to support alternate keyboard
-shortcuts.
-"""
-
-from PyQt6.QtGui import QIcon, QKeySequence, QAction, QActionGroup
-
-from E5Gui.EricApplication import ericApp
-
-
-class ArgumentsError(RuntimeError):
-    """
-    Class implementing an exception, which is raised, if the wrong number of
-    arguments are given.
-    """
-    def __init__(self, error):
-        """
-        Constructor
-        
-        @param error error message of the exception (string)
-        """
-        self.errorMessage = str(error)
-        
-    def __repr__(self):
-        """
-        Special method returning a representation of the exception.
-        
-        @return string representing the error message
-        """
-        return str(self.errorMessage)
-        
-    def __str__(self):
-        """
-        Special method returning a string representation of the exception.
-        
-        @return string representing the error message
-        """
-        return str(self.errorMessage)
-
-
-class EricAction(QAction):
-    """
-    Class implementing an Action class extending QAction.
-    """
-    def __init__(self, *args):
-        """
-        Constructor
-        
-        @param args argument list of the constructor. This list is one of
-            <ul>
-            <li>text (string), icon (QIcon), menu text (string),
-                accelarator (QKeySequence), alternative accelerator
-                (QKeySequence), parent (QObject), name (string), toggle
-                (boolean)</li>
-            <li>text (string), icon (QIcon), menu text (string),
-                accelarator (QKeySequence), alternative accelerator
-                (QKeySequence), parent (QObject), name (string)</li>
-            <li>text (string), menu text (string),
-                accelarator (QKeySequence), alternative accelerator
-                (QKeySequence), parent (QObject), name (string), toggle
-                (boolean)</li>
-            <li>text (string), menu text (string),
-                accelarator (QKeySequence), alternative accelerator
-                (QKeySequence), parent (QObject), name (string)</li>
-            </ul>
-        @exception ArgumentsError raised to indicate invalid arguments
-        """
-        if isinstance(args[1], QIcon):
-            icon = args[1]
-            incr = 1
-        else:
-            icon = None
-            incr = 0
-        if len(args) < 6 + incr:
-            raise ArgumentsError(
-                "Not enough arguments, {0:d} expected, got {1:d}".format(
-                    6 + incr, len(args)))
-        elif len(args) > 7 + incr:
-            raise ArgumentsError(
-                "Too many arguments, max. {0:d} expected, got {1:d}".format(
-                    7 + incr, len(args)))
-            
-        parent = args[4 + incr]
-        super().__init__(parent)
-        name = args[5 + incr]
-        if name:
-            self.setObjectName(name)
-        
-        if args[1 + incr]:
-            self.setText(args[1 + incr])
-        
-        if args[0]:
-            self.setIconText(args[0])
-        if args[2 + incr]:
-            self.setShortcut(QKeySequence(args[2 + incr]))
-        
-        if args[3 + incr]:
-            self.setAlternateShortcut(QKeySequence(args[3 + incr]))
-        
-        if icon:
-            self.setIcon(icon)
-        
-        if len(args) == 7 + incr:
-            self.setCheckable(args[6 + incr])
-        
-        self.__ammendToolTip()
-        
-    def setAlternateShortcut(self, shortcut, removeEmpty=False):
-        """
-        Public slot to set the alternative keyboard shortcut.
-        
-        @param shortcut the alternative accelerator (QKeySequence)
-        @param removeEmpty flag indicating to remove the alternate shortcut,
-            if it is empty (boolean)
-        """
-        if not shortcut.isEmpty():
-            shortcuts = self.shortcuts()
-            if len(shortcuts) > 0:
-                if len(shortcuts) == 1:
-                    shortcuts.append(shortcut)
-                else:
-                    shortcuts[1] = shortcut
-                self.setShortcuts(shortcuts)
-        elif removeEmpty:
-            shortcuts = self.shortcuts()
-            if len(shortcuts) == 2:
-                del shortcuts[1]
-                self.setShortcuts(shortcuts)
-        
-    def alternateShortcut(self):
-        """
-        Public method to retrieve the alternative keyboard shortcut.
-        
-        @return the alternative accelerator (QKeySequence)
-        """
-        shortcuts = self.shortcuts()
-        if len(shortcuts) < 2:
-            return QKeySequence()
-        else:
-            return shortcuts[1]
-        
-    def setShortcut(self, shortcut):
-        """
-        Public slot to set the keyboard shortcut.
-        
-        @param shortcut the accelerator (QKeySequence)
-        """
-        super().setShortcut(shortcut)
-        self.__ammendToolTip()
-        
-    def setShortcuts(self, shortcuts):
-        """
-        Public slot to set the list of keyboard shortcuts.
-        
-        @param shortcuts list of keyboard accelerators (list of QKeySequence)
-            or key for a platform dependent list of accelerators
-            (QKeySequence.StandardKey)
-        """
-        super().setShortcuts(shortcuts)
-        self.__ammendToolTip()
-        
-    def setIconText(self, text):
-        """
-        Public slot to set the icon text of the action.
-        
-        @param text new icon text (string)
-        """
-        super().setIconText(text)
-        self.__ammendToolTip()
-        
-    def __ammendToolTip(self):
-        """
-        Private slot to add the primary keyboard accelerator to the tooltip.
-        """
-        shortcut = self.shortcut().toString(
-            QKeySequence.SequenceFormat.NativeText)
-        if shortcut:
-            if ericApp().isLeftToRight():
-                fmt = "{0} ({1})"
-            else:
-                fmt = "({1}) {0}"
-            self.setToolTip(fmt.format(self.iconText(), shortcut))
-
-
-def addActions(target, actions):
-    """
-    Module function to add a list of actions to a widget.
-    
-    @param target reference to the target widget (QWidget)
-    @param actions list of actions to be added to the target. A
-        None indicates a separator (list of QActions)
-    """
-    if target is None:
-        return
-    
-    for action in actions:
-        if action is None:
-            target.addSeparator()
-        else:
-            target.addAction(action)
-
-
-def createActionGroup(parent, name=None, exclusive=False):
-    """
-    Module function to create an action group.
-    
-    @param parent parent object of the action group (QObject)
-    @param name name of the action group object (string)
-    @param exclusive flag indicating an exclusive action group (boolean)
-    @return reference to the created action group (QActionGroup)
-    """
-    actGrp = QActionGroup(parent)
-    if name:
-        actGrp.setObjectName(name)
-    actGrp.setExclusive(exclusive)
-    return actGrp
--- a/eric7/E5Gui/EricAnimatedLabel.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a label widget showing an animated pixmap.
-"""
-
-from PyQt6.QtCore import pyqtSlot, QTimer
-from PyQt6.QtGui import QPixmap
-from PyQt6.QtWidgets import QLabel
-
-import UI.PixmapCache
-
-
-class EricAnimatedLabel(QLabel):
-    """
-    Class implementing a label widget showing an animated pixmap.
-    """
-    def __init__(self, parent=None, *, animationFile="", interval=100):
-        """
-        Constructor
-        
-        @param parent reference to the parent window
-        @type QWidget
-        @keyparam animationFile path to the file containing the animation data
-        @type str
-        @keyparam interval interval in milliseconds between animation frames
-        @type int
-        """
-        super().__init__(parent)
-        
-        self.__timer = QTimer(self)
-        self.__timer.setInterval(interval)
-        self.__timer.timeout.connect(self.__animate)
-        
-        self.__currentFrame = 0
-        self.__frames = 0
-        self.__pixmap = None
-        self.__pixmapHeight = 0
-        self.__animationFile = ""
-        self.__animationFileLoaded = False
-        
-        self.__loadAnimationFile(animationFile)
-    
-    def __loadAnimationFile(self, animationFile):
-        """
-        Private method to load an animation file.
-        
-        @param animationFile path to the file containing the animation data
-        @type str
-        """
-        self.__animationFile = animationFile
-        
-        pixmap = UI.PixmapCache.getPixmap(animationFile)
-        if not pixmap.isNull():
-            self.__pixmap = pixmap
-            self.__pixmapHeight = pixmap.height()
-            self.__frames = pixmap.width() // pixmap.height()
-            # assume quadratic animation frames
-            self.__animationFileLoaded = True
-        else:
-            self.__pixmap = QPixmap()
-            self.__pixmapHeight = 0
-            self.__frames = 0
-            self.__animationFileLoaded = False
-        
-        self.reset()
-    
-    @pyqtSlot()
-    def __animate(self):
-        """
-        Private slot to animate the pixmap.
-        """
-        if self.__animationFileLoaded:
-            self.__currentFrame = (self.__currentFrame + 1) % self.__frames
-            super().setPixmap(self.__pixmap.copy(
-                self.__currentFrame * self.__pixmapHeight,
-                0,
-                self.__pixmapHeight,
-                self.__pixmapHeight
-            ))
-        else:
-            self.clear()
-    
-    @pyqtSlot()
-    def reset(self):
-        """
-        Public slot to reset the animation.
-        """
-        self.__currentFrame = -1
-        self.__animate()
-    
-    @pyqtSlot()
-    def start(self):
-        """
-        Public slot to start the animation.
-        """
-        if self.__animationFileLoaded:
-            self.__timer.start()
-    
-    @pyqtSlot()
-    def stop(self):
-        """
-        Public slot to stop the animation.
-        """
-        self.__timer.stop()
-    
-    def isActive(self):
-        """
-        Public method to check, if the animation is active.
-        
-        @return flag indicating an active animation
-        @rtype bool
-        """
-        return self.__timer.isActive() and self.__animationFileLoaded
-    
-    def setAnimationFile(self, animationFile):
-        """
-        Public method to set the name of the animation file.
-        
-        @param animationFile path to the file containing the animation data
-        @type str
-        """
-        active = self.__timer.isActive()
-        self.__timer.stop()
-        self.__loadAnimationFile(animationFile)
-        if active and self.__animationFileLoaded:
-            self.__timer.start()
-    
-    def getAnimationFile(self):
-        """
-        Public method to get the name of the animation file.
-        
-        @return path to the file containing the animation data
-        @rtype str
-        """
-        return self.__animationFile
-    
-    def isAnimationFileLoaded(self):
-        """
-        Public method to check, if the animation file was loaded.
-        
-        @return flag indicating a successfully loaded animation file
-        @rtype bool
-        """
-        return self.__animationFileLoaded
-    
-    def setInterval(self, interval):
-        """
-        Public method to set the interval between the animated frames.
-        
-        @param interval interval in milliseconds between animation frames
-        @type int
-        """
-        self.__timer.setInterval(interval)
-    
-    def getInterval(self):
-        """
-        Public method to get the interval between the animated frames.
-        
-        @return interval in milliseconds between animation frames
-        @rtype int
-        """
-        return self.__timer.interval()
-    
-    def setPixmap(self, pixmap):
-        """
-        Public slot to set the pixmap of the label.
-        
-        Setting a standard pixmap will stop the animation and set the given
-        pixmap without animating it. Thereafter the animation has to be
-        restarted with the start() method.
-        
-        @param pixmap pixmap to be set
-        @type QPixmap
-        """
-        self.stop()
-        super().setPixmap(pixmap)
--- a/eric7/E5Gui/EricAnimatedWidget.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing an animated widget.
-"""
-
-#
-# Code was inspired by qupzilla web browser
-#
-
-from PyQt6.QtCore import pyqtSlot, QTimeLine, QPoint
-from PyQt6.QtWidgets import QWidget
-
-
-class EricAnimatedWidget(QWidget):
-    """
-    Class implementing an animated widget.
-    """
-    DirectionDown = 0
-    DirectionUp = 1
-    
-    def __init__(self, direction=DirectionDown, duration=300, parent=None):
-        """
-        Constructor
-        
-        @param direction direction of the animation
-        @type int (one of DirectionDown or DirectionUp)
-        @param duration duration of the animation
-        @type int
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-        
-        self.__direction = direction
-        self.__stepHeight = 0.0
-        self.__stepY = 0.0
-        self.__startY = 0
-        self.__widget = QWidget(self)
-        
-        self.__timeline = QTimeLine(duration)
-        self.__timeline.setFrameRange(0, 100)
-        self.__timeline.frameChanged.connect(self.__animateFrame)
-        
-        self.setMaximumHeight(0)
-    
-    def widget(self):
-        """
-        Public method to get a reference to the animated widget.
-        
-        @return reference to the animated widget
-        @rtype QWidget
-        """
-        return self.__widget
-    
-    @pyqtSlot()
-    def startAnimation(self):
-        """
-        Public slot to start the animation.
-        """
-        if self.__timeline.state() == QTimeLine.State.Running:
-            return
-        
-        shown = 0
-        hidden = 0
-        
-        if self.__direction == self.DirectionDown:
-            shown = 0
-            hidden = -self.__widget.height()
-        
-        self.__widget.move(QPoint(self.__widget.pos().x(), hidden))
-        
-        self.__stepY = (hidden - shown) / 100.0
-        self.__startY = hidden
-        self.__stepHeight = self.__widget.height() / 100.0
-        
-        self.__timeline.setDirection(QTimeLine.Direction.Forward)
-        self.__timeline.start()
-    
-    @pyqtSlot(int)
-    def __animateFrame(self, frame):
-        """
-        Private slot to animate the next frame.
-        
-        @param frame frame number
-        @type int
-        """
-        self.setFixedHeight(frame * self.__stepHeight)
-        self.__widget.move(self.pos().x(),
-                           self.__startY - frame * self.__stepY)
-    
-    @pyqtSlot()
-    def hide(self):
-        """
-        Public slot to hide the animated widget.
-        """
-        if self.__timeline.state() == QTimeLine.State.Running:
-            return
-        
-        self.__timeline.setDirection(QTimeLine.Direction.Backward)
-        self.__timeline.finished.connect(self.close)
-        self.__timeline.start()
-        
-        p = self.parentWidget()
-        if p is not None:
-            p.setFocus()
-    
-    def resizeEvent(self, evt):
-        """
-        Protected method to handle a resize event.
-        
-        @param evt reference to the event object
-        @type QResizeEvent
-        """
-        if evt.size().width() != self.__widget.width():
-            self.__widget.resize(evt.size().width(), self.__widget.height())
-        
-        super().resizeEvent(evt)
--- a/eric7/E5Gui/EricApplication.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Class implementing a specialized application class.
-"""
-
-from PyQt6.QtCore import Qt, QCoreApplication
-from PyQt6.QtGui import QPalette
-from PyQt6.QtWidgets import QApplication
-
-QCoreApplication.setAttribute(
-    Qt.ApplicationAttribute.AA_ShareOpenGLContexts, True)
-
-
-class EricApplication(QApplication):
-    """
-    Eric application class with an object registry.
-    """
-    def __init__(self, argv):
-        """
-        Constructor
-        
-        @param argv command line arguments
-        @type list
-        """
-        super().__init__(argv)
-        
-        QCoreApplication.setAttribute(
-            Qt.ApplicationAttribute.AA_DontCreateNativeWidgetSiblings, True)
-        
-        self.__objectRegistry = {}
-        self.__pluginObjectRegistry = {}
-    
-    def registerObject(self, name, objectRef):
-        """
-        Public method to register an object in the object registry.
-        
-        @param name name of the object
-        @type str
-        @param objectRef reference to the object
-        @type any
-        @exception KeyError raised when the given name is already in use
-        """
-        if name in self.__objectRegistry:
-            raise KeyError('Object "{0}" already registered.'.format(name))
-        else:
-            self.__objectRegistry[name] = objectRef
-    
-    def getObject(self, name):
-        """
-        Public method to get a reference to a registered object.
-        
-        @param name name of the object
-        @type str
-        @return reference to the registered object
-        @rtype any
-        @exception KeyError raised when the given name is not known
-        """
-        if name not in self.__objectRegistry:
-            raise KeyError('Object "{0}" is not registered.'.format(name))
-        
-        return self.__objectRegistry[name]
-    
-    def registerPluginObject(self, name, objectRef, pluginType=None):
-        """
-        Public method to register a plugin object in the object registry.
-        
-        @param name name of the plugin object
-        @type str
-        @param objectRef reference to the plugin object
-        @type any
-        @param pluginType type of the plugin object
-        @type str
-        @exception KeyError raised when the given name is already in use
-        """
-        if name in self.__pluginObjectRegistry:
-            raise KeyError(
-                'Pluginobject "{0}" already registered.'.format(name))
-        else:
-            self.__pluginObjectRegistry[name] = (objectRef, pluginType)
-    
-    def unregisterPluginObject(self, name):
-        """
-        Public method to unregister a plugin object in the object registry.
-        
-        @param name name of the plugin object
-        @type str
-        """
-        if name in self.__pluginObjectRegistry:
-            del self.__pluginObjectRegistry[name]
-    
-    def getPluginObject(self, name):
-        """
-        Public method to get a reference to a registered plugin object.
-        
-        @param name name of the plugin object
-        @type str
-        @return reference to the registered plugin object
-        @rtype any
-        @exception KeyError raised when the given name is not known
-        """
-        if name not in self.__pluginObjectRegistry:
-            raise KeyError(
-                'Pluginobject "{0}" is not registered.'.format(name))
-        
-        return self.__pluginObjectRegistry[name][0]
-    
-    def getPluginObjects(self):
-        """
-        Public method to get a list of (name, reference) pairs of all
-        registered plugin objects.
-        
-        @return list of (name, reference) pairs
-        @rtype list of (str, any)
-        """
-        objects = []
-        for name in self.__pluginObjectRegistry:
-            objects.append((name, self.__pluginObjectRegistry[name][0]))
-        return objects
-    
-    def getPluginObjectType(self, name):
-        """
-        Public method to get the type of a registered plugin object.
-        
-        @param name name of the plugin object
-        @type str
-        @return type of the plugin object
-        @rtype str
-        @exception KeyError raised when the given name is not known
-        """
-        if name not in self.__pluginObjectRegistry:
-            raise KeyError(
-                'Pluginobject "{0}" is not registered.'.format(name))
-        
-        return self.__pluginObjectRegistry[name][1]
-    
-    def usesDarkPalette(self):
-        """
-        Public method to check, if the application uses a palette with a dark
-        background.
-        
-        @return flag indicating the use of a palette with a dark background
-        @rtype bool
-        """
-        palette = self.palette()
-        lightness = palette.color(QPalette.ColorRole.Window).lightness()
-        return lightness <= 128
-
-ericApp = QCoreApplication.instance
--- a/eric7/E5Gui/EricClickableLabel.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a clickable label.
-"""
-
-from PyQt6.QtCore import pyqtSignal, Qt, QPoint
-from PyQt6.QtWidgets import QLabel
-
-
-class EricClickableLabel(QLabel):
-    """
-    Class implementing a clickable label.
-    
-    @signal clicked(QPoint) emitted upon a click on the label
-        with the left button
-    @signal middleClicked(QPoint) emitted upon a click on the label
-        with the middle button or CTRL and left button
-    """
-    clicked = pyqtSignal(QPoint)
-    middleClicked = pyqtSignal(QPoint)
-    
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        
-        self.setCursor(Qt.CursorShape.PointingHandCursor)
-    
-    def mouseReleaseEvent(self, evt):
-        """
-        Protected method handling mouse release events.
-        
-        @param evt mouse event (QMouseEvent)
-        """
-        if (
-            evt.button() == Qt.MouseButton.LeftButton and
-            self.rect().contains(evt.position().toPoint())
-        ):
-            if evt.modifiers() == Qt.KeyboardModifier.ControlModifier:
-                self.middleClicked.emit(evt.globalPosition().toPoint())
-            else:
-                self.clicked.emit(evt.globalPosition().toPoint())
-        elif (
-            evt.button() == Qt.MouseButton.MiddleButton and
-            self.rect().contains(evt.position().toPoint())
-        ):
-            self.middleClicked.emit(evt.globalPosition().toPoint())
-        else:
-            super().mouseReleaseEvent(evt)
--- a/eric7/E5Gui/EricComboSelectionDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to select one entry from a list of strings.
-"""
-
-from PyQt6.QtCore import pyqtSlot
-from PyQt6.QtWidgets import QDialog, QDialogButtonBox
-
-from .Ui_E5ComboSelectionDialog import Ui_E5ComboSelectionDialog
-
-
-class EricComboSelectionDialog(QDialog, Ui_E5ComboSelectionDialog):
-    """
-    Class implementing a dialog to select one entry from a list of strings.
-    """
-    def __init__(self, entries, title="", message="", parent=None):
-        """
-        Constructor
-        
-        @param entries list of entries to select from
-        @type list of str or list of tuples of (str, any)
-        @param title title of the dialog (defaults to "")
-        @type str (optional)
-        @param message message to be show in the dialog (defaults to "")
-        @type str (optional)
-        @param parent reference to the parent widget (defaults to None)
-        @type QWidget (optional)
-        """
-        super().__init__(parent)
-        self.setupUi(self)
-        
-        for entry in entries:
-            if isinstance(entry, tuple):
-                self.selectionComboBox.addItem(*entry)
-            else:
-                self.selectionComboBox.addItem(entry)
-        
-        self.on_selectionComboBox_currentTextChanged(
-            self.selectionComboBox.itemText(0))
-        
-        msh = self.minimumSizeHint()
-        self.resize(max(self.width(), msh.width()), msh.height())
-    
-    @pyqtSlot(str)
-    def on_selectionComboBox_currentTextChanged(self, txt):
-        """
-        Private slot to react upon changes of the selected entry.
-        
-        @param txt text of the selected entry
-        @type str
-        """
-        self.buttonBox.button(
-            QDialogButtonBox.StandardButton.Ok).setEnabled(bool(txt))
-    
-    def getSelection(self):
-        """
-        Public method to retrieve the selected item and its data.
-        
-        @return tuple containing the selected entry and its associated data
-        @rtype tuple of (str, any)
-        """
-        return (
-            self.selectionComboBox.currentText(),
-            self.selectionComboBox.currentData()
-        )
--- a/eric7/E5Gui/EricComboSelectionDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EricComboSelectionDialog</class>
- <widget class="QDialog" name="EricComboSelectionDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>400</width>
-    <height>100</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Select from List</string>
-  </property>
-  <property name="sizeGripEnabled">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QLabel" name="messageLabel">
-     <property name="text">
-      <string>Select from the list below:</string>
-     </property>
-     <property name="wordWrap">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QComboBox" name="selectionComboBox"/>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>EricComboSelectionDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>EricComboSelectionDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
--- a/eric7/E5Gui/EricCompleters.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2007 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing various kinds of completers.
-"""
-
-import os
-
-from PyQt6.QtCore import QDir, Qt, QStringListModel
-from PyQt6.QtGui import QFileSystemModel
-from PyQt6.QtWidgets import QCompleter
-
-from Globals import isWindowsPlatform
-
-
-class EricFileCompleter(QCompleter):
-    """
-    Class implementing a completer for file names.
-    """
-    def __init__(self, parent=None,
-                 completionMode=QCompleter.CompletionMode.PopupCompletion,
-                 showHidden=False):
-        """
-        Constructor
-        
-        @param parent parent widget of the completer (QWidget)
-        @param completionMode completion mode of the
-            completer (QCompleter.CompletionMode)
-        @param showHidden flag indicating to show hidden entries as well
-            (boolean)
-        """
-        super().__init__(parent)
-        self.__model = QFileSystemModel(self)
-        if showHidden:
-            self.__model.setFilter(
-                QDir.Filter.Dirs |
-                QDir.Filter.Files |
-                QDir.Filter.Drives |
-                QDir.Filter.AllDirs |
-                QDir.Filter.Hidden)
-        else:
-            self.__model.setFilter(
-                QDir.Filter.Dirs |
-                QDir.Filter.Files |
-                QDir.Filter.Drives |
-                QDir.Filter.AllDirs)
-        self.__model.setRootPath("")
-        self.setModel(self.__model)
-        self.setCompletionMode(completionMode)
-        if isWindowsPlatform():
-            self.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
-        if parent:
-            parent.setCompleter(self)
-    
-    def setRootPath(self, path):
-        """
-        Public method to set the root path of the model.
-        
-        @param path root path for the model
-        @type str
-        """
-        if not os.path.isdir(path):
-            path = os.path.dirname(path)
-        self.__model.setRootPath(path)
-    
-    def rootPath(self):
-        """
-        Public method to get the root path of the model.
-        
-        @return root path of the model
-        @rtype str
-        """
-        return self.__model.rootPath()
-
-
-class EricDirCompleter(QCompleter):
-    """
-    Class implementing a completer for directory names.
-    """
-    def __init__(self, parent=None,
-                 completionMode=QCompleter.CompletionMode.PopupCompletion,
-                 showHidden=False):
-        """
-        Constructor
-        
-        @param parent parent widget of the completer (QWidget)
-        @param completionMode completion mode of the
-            completer (QCompleter.CompletionMode)
-        @param showHidden flag indicating to show hidden entries as well
-            (boolean)
-        """
-        super().__init__(parent)
-        self.__model = QFileSystemModel(self)
-        if showHidden:
-            self.__model.setFilter(
-                QDir.Filter.Drives |
-                QDir.Filter.AllDirs |
-                QDir.Filter.Hidden)
-        else:
-            self.__model.setFilter(
-                QDir.Filter.Drives | QDir.Filter.AllDirs)
-        self.__model.setRootPath("")
-        self.setModel(self.__model)
-        self.setCompletionMode(completionMode)
-        if isWindowsPlatform():
-            self.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
-        if parent:
-            parent.setCompleter(self)
-    
-    def setRootPath(self, path):
-        """
-        Public method to set the root path of the model.
-        
-        @param path root path for the model
-        @type str
-        """
-        if not os.path.isdir(path):
-            path = os.path.dirname(path)
-        self.__model.setRootPath(path)
-    
-    def rootPath(self):
-        """
-        Public method to get the root path of the model.
-        
-        @return root path of the model
-        @rtype str
-        """
-        return self.__model.rootPath()
-
-
-class EricStringListCompleter(QCompleter):
-    """
-    Class implementing a completer for string lists.
-    """
-    def __init__(self, parent=None, strings=None,
-                 completionMode=QCompleter.CompletionMode.PopupCompletion):
-        """
-        Constructor
-        
-        @param parent parent widget of the completer (QWidget)
-        @param strings list of string to load into the completer
-            (list of strings)
-        @param completionMode completion mode of the
-            completer (QCompleter.CompletionMode)
-        """
-        super().__init__(parent)
-        self.__model = QStringListModel(
-            [] if strings is None else strings[:],
-            parent)
-        self.setModel(self.__model)
-        self.setCompletionMode(completionMode)
-        if parent:
-            parent.setCompleter(self)
--- a/eric7/E5Gui/EricErrorMessage.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,220 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2013 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a specialized error message dialog.
-"""
-
-import contextlib
-
-from PyQt6.QtCore import (
-    qInstallMessageHandler, Qt, Q_ARG, QSettings, QtMsgType, QThread,
-    QMetaObject
-)
-from PyQt6.QtWidgets import QErrorMessage, QDialog
-
-from E5Gui.EricApplication import ericApp
-
-import Globals
-import Utilities
-import Preferences
-
-
-_msgHandlerDialog = None
-_origMsgHandler = None
-
-_filterSettings = QSettings(
-    QSettings.Format.IniFormat,
-    QSettings.Scope.UserScope,
-    Globals.settingsNameOrganization,
-    "eric7messagefilters")
-_defaultFilters = [
-    "QFont::",
-    "QCocoaMenu::removeMenuItem",
-    "QCocoaMenu::insertNative",
-    ",type id:",
-    "Remote debugging server started successfully",
-    "Uncaught SecurityError:",
-    "Content Security Policy",
-    "QXcbClipboard:",
-    "QXcbConnection: XCB error",
-    "libpng warning: iCCP:",
-    "Uncaught ReferenceError: $ is not defined",
-]
-
-
-def filterMessage(message):
-    """
-    Module function to filter messages.
-    
-    @param message message to be checked
-    @type str
-    @return flag indicating that the message should be filtered out
-    @rtype bool
-    """
-    return any(
-        filterStr in message
-        for filterStr in Globals.toList(_filterSettings.value(
-            "MessageFilters", [])) + _defaultFilters
-    )
-
-
-class EricErrorMessage(QErrorMessage):
-    """
-    Class implementing a specialized error message dialog.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-    
-    def showMessage(self, message, msgType=""):
-        """
-        Public method to show a message.
-        
-        @param message error message to be shown
-        @type str
-        @param msgType type of the error message
-        @type str
-        """
-        if not filterMessage(message):
-            if msgType:
-                super().showMessage(message, msgType)
-            else:
-                super().showMessage(message)
-    
-    def editMessageFilters(self):
-        """
-        Public method to edit the list of message filters.
-        """
-        from .EricErrorMessageFilterDialog import EricErrorMessageFilterDialog
-        dlg = EricErrorMessageFilterDialog(
-            Globals.toList(_filterSettings.value(
-                "MessageFilters", [])))
-        if dlg.exec() == QDialog.DialogCode.Accepted:
-            filters = dlg.getFilters()
-            _filterSettings.setValue("MessageFilters", filters)
-
-
-def messageHandler(msgType, context, message):
-    """
-    Module function handling messages.
-    
-    @param msgType type of the message
-    @type  int, QtMsgType
-    @param context context information
-    @type QMessageLogContext
-    @param message message to be shown
-    @type bytes
-    """
-    if _msgHandlerDialog:
-        if msgType.value < Preferences.getUI("MinimumMessageTypeSeverity"):
-            # severity is lower than configured
-            # just ignore the message
-            return
-        
-        with contextlib.suppress(RuntimeError):
-            if msgType == QtMsgType.QtDebugMsg:
-                messageType = "Debug Message:"
-            elif msgType == QtMsgType.QtInfoMsg:
-                messageType = "Info Message:"
-            elif msgType == QtMsgType.QtWarningMsg:
-                messageType = "Warning:"
-            elif msgType == QtMsgType.QtCriticalMsg:
-                messageType = "Critical:"
-            elif msgType == QtMsgType.QtFatalMsg:
-                messageType = "Fatal Error:"
-            if isinstance(message, bytes):
-                message = Utilities.decodeBytes(message)
-            if filterMessage(message):
-                return
-            message = (
-                message.replace("\r\n", "<br/>")
-                .replace("\n", "<br/>")
-                .replace("\r", "<br/>")
-            )
-            msg = (
-                (
-                    "<p><b>{0}</b></p><p>{1}</p><p>File: {2}</p>"
-                    "<p>Line: {3}</p><p>Function: {4}</p>"
-                ).format(messageType, Utilities.html_uencode(message),
-                         context.file, context.line, context.function)
-                if context.file is not None else
-                "<p><b>{0}</b></p><p>{1}</p>".format(
-                    messageType, Utilities.html_uencode(message))
-            )
-            if QThread.currentThread() == ericApp().thread():
-                _msgHandlerDialog.showMessage(msg)
-            else:
-                QMetaObject.invokeMethod(
-                    _msgHandlerDialog,
-                    "showMessage",
-                    Qt.ConnectionType.QueuedConnection,
-                    Q_ARG(str, msg))
-            return
-    elif _origMsgHandler:
-        _origMsgHandler(msgType, message)
-        return
-    
-    if msgType == QtMsgType.QtDebugMsg:
-        messageType = "Debug Message"
-    elif msgType == QtMsgType.QtInfoMsg:
-        messageType = "Info Message:"
-    elif msgType == QtMsgType.QtWarningMsg:
-        messageType = "Warning"
-    elif msgType == QtMsgType.QtCriticalMsg:
-        messageType = "Critical"
-    elif msgType == QtMsgType.QtFatalMsg:
-        messageType = "Fatal Error"
-    if isinstance(message, bytes):
-        message = message.decode()
-    print("{0}: {1} in {2} at line {3} ({4})".format(
-        messageType, message, context.file, context.line,
-        context.function))
-
-
-def qtHandler():
-    """
-    Module function to install an EricErrorMessage dialog as the global
-    message handler.
-    
-    @return reference to the message handler dialog
-    @rtype EricErrorMessage
-    """
-    global _msgHandlerDialog, _origMsgHandler
-    
-    if _msgHandlerDialog is None:
-        # Install an EricErrorMessage dialog as the global message handler.
-        _msgHandlerDialog = EricErrorMessage()
-        _origMsgHandler = qInstallMessageHandler(messageHandler)
-    
-    return _msgHandlerDialog
-
-
-def editMessageFilters():
-    """
-    Module function to edit the list of message filters.
-    """
-    if _msgHandlerDialog:
-        _msgHandlerDialog.editMessageFilters()
-    else:
-        print("No message handler installed.")
-
-
-def messageHandlerInstalled():
-    """
-    Module function to check, if a message handler was installed.
-    
-    @return flag indicating an installed message handler
-    @rtype bool
-    """
-    return _msgHandlerDialog is not None
-
-#
-# eflag: noqa = M801
--- a/eric7/E5Gui/EricErrorMessageFilterDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2013 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to manage the list of messages to be ignored.
-"""
-
-from PyQt6.QtWidgets import QDialog
-
-from .Ui_EricErrorMessageFilterDialog import Ui_EricErrorMessageFilterDialog
-
-
-class EricErrorMessageFilterDialog(QDialog, Ui_EricErrorMessageFilterDialog):
-    """
-    Class implementing a dialog to manage the list of messages to be ignored.
-    """
-    def __init__(self, messageFilters, parent=None):
-        """
-        Constructor
-        
-        @param messageFilters list of message filters to be edited
-        @type list of str
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-        self.setupUi(self)
-        
-        self.filtersEditWidget.setList(messageFilters)
-        self.filtersEditWidget.setListWhatsThis(self.tr(
-            "<b>Error Message Filters</b>"
-            "<p>This list shows the configured message filters used to"
-            " suppress error messages from within Qt.</p>"
-            "<p>A default list of message filters is added to this"
-            " user list.</p>"
-        ))
-    
-    def getFilters(self):
-        """
-        Public method to get the list of message filters.
-        
-        @return error message filters (list of strings)
-        """
-        return self.filtersEditWidget.getList()
--- a/eric7/E5Gui/EricErrorMessageFilterDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EricErrorMessageFilterDialog</class>
- <widget class="QDialog" name="EricErrorMessageFilterDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>500</width>
-    <height>350</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Error Messages Filter</string>
-  </property>
-  <property name="sizeGripEnabled">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="EricStringListEditWidget" name="filtersEditWidget" native="true"/>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>EricStringListEditWidget</class>
-   <extends>QWidget</extends>
-   <header>E5Gui/EricStringListEditWidget.h</header>
-   <container>1</container>
-  </customwidget>
- </customwidgets>
- <tabstops>
-  <tabstop>buttonBox</tabstop>
- </tabstops>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>EricErrorMessageFilterDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>227</x>
-     <y>329</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>EricErrorMessageFilterDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>295</x>
-     <y>335</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
--- a/eric7/E5Gui/EricFileDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,197 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing alternative functions for the QFileDialog static methods
-to cope with distributor's usage of KDE wrapper dialogs for Qt file dialogs.
-"""
-
-from PyQt6.QtWidgets import QFileDialog
-
-import Globals
-
-##Options = QFileDialog.Options
-Option = QFileDialog.Option
-
-ShowDirsOnly = QFileDialog.Option.ShowDirsOnly
-DontResolveSymlinks = QFileDialog.Option.DontResolveSymlinks
-DontConfirmOverwrite = QFileDialog.Option.DontConfirmOverwrite
-DontUseNativeDialog = QFileDialog.Option.DontUseNativeDialog
-ReadOnly = QFileDialog.Option.ReadOnly
-HideNameFilterDetails = QFileDialog.Option.HideNameFilterDetails
-##DontUseSheet = QFileDialog.Option.DontUseSheet
-DontUseCustomDirectoryIcons = QFileDialog.Option.DontUseCustomDirectoryIcons
-
-
-def __reorderFilter(filterStr, initialFilter=""):
-    """
-    Private function to reorder the file filter to cope with a KDE issue
-    introduced by distributor's usage of KDE file dialogs.
-    
-    @param filterStr Qt file filter (string)
-    @param initialFilter initial filter (string)
-    @return the rearranged Qt file filter (string)
-    """
-    if initialFilter and not Globals.isMacPlatform():
-        fileFilters = filterStr.split(';;')
-        if len(fileFilters) < 10 and initialFilter in fileFilters:
-            fileFilters.remove(initialFilter)
-        fileFilters.insert(0, initialFilter)
-        return ";;".join(fileFilters)
-    else:
-        return filterStr
-
-
-def getOpenFileName(parent=None, caption="", directory="",
-                    filterStr="", options=None):
-    """
-    Module function to get the name of a file for opening it.
-    
-    @param parent parent widget of the dialog (QWidget)
-    @param caption window title of the dialog (string)
-    @param directory working directory of the dialog (string)
-    @param filterStr filter string for the dialog (string)
-    @param options various options for the dialog (QFileDialog.Options)
-    @return name of file to be opened (string)
-    """
-    if options is None:
-        options = QFileDialog.Option(0)
-    if Globals.isLinuxPlatform():
-        options |= QFileDialog.Option.DontUseNativeDialog
-    return QFileDialog.getOpenFileName(
-        parent, caption, directory, filterStr, "", options)[0]
-
-
-def getOpenFileNameAndFilter(parent=None, caption="", directory="",
-                             filterStr="", initialFilter="",
-                             options=None):
-    """
-    Module function to get the name of a file for opening it and the selected
-    file name filter.
-    
-    @param parent parent widget of the dialog (QWidget)
-    @param caption window title of the dialog (string)
-    @param directory working directory of the dialog (string)
-    @param filterStr filter string for the dialog (string)
-    @param initialFilter initial filter for the dialog (string)
-    @param options various options for the dialog (QFileDialog.Options)
-    @return name of file to be opened and selected filter (string, string)
-    """
-    if options is None:
-        options = QFileDialog.Option(0)
-    if Globals.isLinuxPlatform():
-        options |= QFileDialog.Option.DontUseNativeDialog
-    newfilter = __reorderFilter(filterStr, initialFilter)
-    return QFileDialog.getOpenFileName(
-        parent, caption, directory, newfilter, initialFilter, options)
-
-
-def getOpenFileNames(parent=None, caption="", directory="",
-                     filterStr="", options=None):
-    """
-    Module function to get a list of names of files for opening.
-    
-    @param parent parent widget of the dialog (QWidget)
-    @param caption window title of the dialog (string)
-    @param directory working directory of the dialog (string)
-    @param filterStr filter string for the dialog (string)
-    @param options various options for the dialog (QFileDialog.Options)
-    @return list of file names to be opened (list of string)
-    """
-    if options is None:
-        options = QFileDialog.Option(0)
-    if Globals.isLinuxPlatform():
-        options |= QFileDialog.Option.DontUseNativeDialog
-    return QFileDialog.getOpenFileNames(
-        parent, caption, directory, filterStr, "", options)[0]
-
-
-def getOpenFileNamesAndFilter(parent=None, caption="", directory="",
-                              filterStr="", initialFilter="",
-                              options=None):
-    """
-    Module function to get a list of names of files for opening and the
-    selected file name filter.
-    
-    @param parent parent widget of the dialog (QWidget)
-    @param caption window title of the dialog (string)
-    @param directory working directory of the dialog (string)
-    @param filterStr filter string for the dialog (string)
-    @param initialFilter initial filter for the dialog (string)
-    @param options various options for the dialog (QFileDialog.Options)
-    @return list of file names to be opened and selected filter
-        (list of string, string)
-    """
-    if options is None:
-        options = QFileDialog.Option(0)
-    if Globals.isLinuxPlatform():
-        options |= QFileDialog.Option.DontUseNativeDialog
-    newfilter = __reorderFilter(filterStr, initialFilter)
-    return QFileDialog.getOpenFileNames(
-        parent, caption, directory, newfilter, initialFilter, options)
-
-
-def getSaveFileName(parent=None, caption="", directory="",
-                    filterStr="", options=None):
-    """
-    Module function to get the name of a file for saving it.
-    
-    @param parent parent widget of the dialog (QWidget)
-    @param caption window title of the dialog (string)
-    @param directory working directory of the dialog (string)
-    @param filterStr filter string for the dialog (string)
-    @param options various options for the dialog (QFileDialog.Options)
-    @return name of file to be saved (string)
-    """
-    if options is None:
-        options = QFileDialog.Option(0)
-    if Globals.isLinuxPlatform():
-        options |= QFileDialog.Option.DontUseNativeDialog
-    return QFileDialog.getSaveFileName(
-        parent, caption, directory, filterStr, "", options)[0]
-
-
-def getSaveFileNameAndFilter(parent=None, caption="", directory="",
-                             filterStr="", initialFilter="",
-                             options=None):
-    """
-    Module function to get the name of a file for saving it and the selected
-    file name filter.
-    
-    @param parent parent widget of the dialog (QWidget)
-    @param caption window title of the dialog (string)
-    @param directory working directory of the dialog (string)
-    @param filterStr filter string for the dialog (string)
-    @param initialFilter initial filter for the dialog (string)
-    @param options various options for the dialog (QFileDialog.Options)
-    @return name of file to be saved and selected filter (string, string)
-    """
-    if options is None:
-        options = QFileDialog.Option(0)
-    if Globals.isLinuxPlatform():
-        options |= QFileDialog.Option.DontUseNativeDialog
-    newfilter = __reorderFilter(filterStr, initialFilter)
-    return QFileDialog.getSaveFileName(
-        parent, caption, directory, newfilter, initialFilter, options)
-
-
-def getExistingDirectory(parent=None, caption="",
-                         directory="",
-                         options=QFileDialog.Option.ShowDirsOnly):
-    """
-    Module function to get the name of a directory.
-    
-    @param parent parent widget of the dialog (QWidget)
-    @param caption window title of the dialog (string)
-    @param directory working directory of the dialog (string)
-    @param options various options for the dialog (QFileDialog.Options)
-    @return name of selected directory (string)
-    """
-    if options is None:
-        options = QFileDialog.Option(0)
-    if Globals.isLinuxPlatform():
-        options |= QFileDialog.Option.DontUseNativeDialog
-    return QFileDialog.getExistingDirectory(parent, caption, directory,
-                                            options)
--- a/eric7/E5Gui/EricFileSaveConfirmDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2018 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to enter a file system path using a file picker.
-"""
-
-import os
-
-from PyQt6.QtWidgets import (
-    QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QLineEdit
-)
-
-from .EricPathPicker import EricPathPicker, EricPathPickerModes
-
-
-class EricFileSaveConfirmDialog(QDialog):
-    """
-    Class implementing a dialog to enter a file system path using a file
-    picker.
-    """
-    def __init__(self, filename, title, message="", picker=True, parent=None):
-        """
-        Constructor
-        
-        @param filename file name to be shown
-        @type str
-        @param title title for the dialog
-        @type str
-        @param message message to be shown
-        @type str
-        @param picker flag indicating to use a path picker
-        @type bool
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-        
-        self.setMinimumWidth(400)
-        
-        self.__selectedAction = "cancel"
-        self.__filename = filename
-        
-        self.__layout = QVBoxLayout(self)
-        
-        self.__label = QLabel(self)
-        self.__label.setWordWrap(True)
-        if message:
-            self.__label.setText(message)
-        else:
-            self.__label.setText(self.tr("The given file exists already."))
-        
-        if picker:
-            self.__pathPicker = EricPathPicker(self)
-            self.__pathPicker.setMode(EricPathPickerModes.SAVE_FILE_MODE)
-        else:
-            self.__pathPicker = QLineEdit(self)
-            self.__pathPicker.setClearButtonEnabled(True)
-        
-        self.__buttonBox = QDialogButtonBox(self)
-        self.__cancelButton = self.__buttonBox.addButton(
-            QDialogButtonBox.StandardButton.Cancel)
-        self.__overwriteButton = self.__buttonBox.addButton(
-            self.tr("Overwrite"), QDialogButtonBox.ButtonRole.AcceptRole)
-        self.__renameButton = self.__buttonBox.addButton(
-            self.tr("Rename"), QDialogButtonBox.ButtonRole.AcceptRole)
-        
-        self.__layout.addWidget(self.__label)
-        self.__layout.addWidget(self.__pathPicker)
-        self.__layout.addWidget(self.__buttonBox)
-        
-        # set values and states
-        self.__pathPicker.setText(filename)
-        if picker:
-            self.__pathPicker.setDefaultDirectory(os.path.dirname(filename))
-        self.__renameButton.setEnabled(False)
-        self.__cancelButton.setDefault(True)
-        
-        self.__buttonBox.clicked.connect(self.__buttonBoxClicked)
-        self.__pathPicker.textChanged.connect(self.__filenameChanged)
-    
-    def __buttonBoxClicked(self, button):
-        """
-        Private slot to handle the user clicking a button.
-        
-        @param button reference to the clicked button
-        @type QAbstractButton
-        """
-        if button == self.__cancelButton:
-            self.__selectedAction = "cancel"
-            self.reject()
-        elif button == self.__renameButton:
-            self.__selectedAction = "rename"
-            self.accept()
-        elif button == self.__overwriteButton:
-            self.__selectedAction = "overwrite"
-            self.accept()
-    
-    def __filenameChanged(self, text):
-        """
-        Private slot to handle a change of the file name.
-        
-        @param text new file name
-        @type str
-        """
-        self.__renameButton.setEnabled(text != self.__filename)
-    
-    def selectedAction(self):
-        """
-        Public method to get the selected action and associated data.
-        
-        @return tuple containing the selected action (cancel, rename,
-            overwrite) and the filename (in case of 'rename' or 'overwrite')
-        @rtype tuple of (str, str)
-        """
-        if self.__selectedAction == "rename":
-            filename = self.__pathPicker.text()
-        elif self.__selectedAction == "overwrite":
-            filename = self.__filename
-        else:
-            filename = ""
-        return self.__selectedAction, filename
-
-
-def confirmOverwrite(filename, title, message="", picker=True, parent=None):
-    """
-    Function to confirm that a file shall be overwritten.
-    
-    @param filename file name to be shown
-    @type str
-    @param title title for the dialog
-    @type str
-    @param message message to be shown
-    @type str
-    @param picker flag indicating to use a path picker
-    @type bool
-    @param parent reference to the parent widget
-    @type QWidget
-    @return tuple containing the selected action (cancel, rename,
-        overwrite) and the filename (in case of 'rename' or 'overwrite')
-    @rtype tuple of (str, str)
-    """
-    dlg = EricFileSaveConfirmDialog(filename, title, message=message,
-                                  picker=picker, parent=parent)
-    dlg.exec()
-    return dlg.selectedAction()
--- a/eric7/E5Gui/EricGenericDiffHighlighter.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,172 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a syntax highlighter for diff outputs.
-"""
-
-import re
-
-from PyQt6.QtGui import QSyntaxHighlighter, QTextCharFormat, QFont
-
-import Preferences
-
-
-def TERMINAL(pattern):
-    """
-    Function to mark a pattern as the final one to search for.
-    
-    @param pattern pattern to be marked (string)
-    @return marked pattern (string)
-    """
-    return "__TERMINAL__:{0}".format(pattern)
-
-# Cache the results of re.compile for performance reasons
-_REGEX_CACHE = {}
-
-
-class EricGenericDiffHighlighter(QSyntaxHighlighter):
-    """
-    Class implementing a generic diff highlighter.
-    """
-    def __init__(self, doc):
-        """
-        Constructor
-        
-        @param doc reference to the text document (QTextDocument)
-        """
-        super().__init__(doc)
-        
-        self.regenerateRules()
-    
-    def __initColours(self):
-        """
-        Private method to initialize the highlighter colours.
-        """
-        self.textColor = Preferences.getDiffColour("TextColor")
-        self.addedColor = Preferences.getDiffColour("AddedColor")
-        self.removedColor = Preferences.getDiffColour("RemovedColor")
-        self.replacedColor = Preferences.getDiffColour("ReplacedColor")
-        self.contextColor = Preferences.getDiffColour("ContextColor")
-        self.headerColor = Preferences.getDiffColour("HeaderColor")
-        self.whitespaceColor = Preferences.getDiffColour("BadWhitespaceColor")
-    
-    def createRules(self, *rules):
-        """
-        Public method to create the highlighting rules.
-        
-        @param rules set of highlighting rules (list of tuples of rule
-            pattern (string) and highlighting format (QTextCharFormat))
-        """
-        for _idx, ruleFormat in enumerate(rules):
-            rule, formats = ruleFormat
-            terminal = rule.startswith(TERMINAL(''))
-            if terminal:
-                rule = rule[len(TERMINAL('')):]
-            try:
-                regex = _REGEX_CACHE[rule]
-            except KeyError:
-                regex = _REGEX_CACHE[rule] = re.compile(rule)
-            self._rules.append((regex, formats, terminal))
-    
-    def formats(self, line):
-        """
-        Public method to determine the highlighting formats for a line of
-        text.
-        
-        @param line text line to be highlighted (string)
-        @return list of matched highlighting rules (list of tuples of match
-            object and format (QTextCharFormat))
-        """
-        matched = []
-        for rx, formats, terminal in self._rules:
-            match = rx.match(line)
-            if not match:
-                continue
-            matched.append([match, formats])
-            if terminal:
-                return matched
-        
-        return matched
-    
-    def makeFormat(self, fg=None, bg=None, bold=False):
-        """
-        Public method to generate a format definition.
-        
-        @param fg foreground color (QColor)
-        @param bg background color (QColor)
-        @param bold flag indicating bold text (boolean)
-        @return format definiton (QTextCharFormat)
-        """
-        font = Preferences.getEditorOtherFonts("MonospacedFont")
-        charFormat = QTextCharFormat()
-        charFormat.setFontFamilies([font.family()])
-        charFormat.setFontPointSize(font.pointSize())
-        
-        if fg:
-            charFormat.setForeground(fg)
-        
-        if bg:
-            charFormat.setBackground(bg)
-        
-        if bold:
-            charFormat.setFontWeight(QFont.Weight.Bold)
-        
-        return charFormat
-    
-    def highlightBlock(self, text):
-        """
-        Public method to highlight a block of text.
-        
-        @param text text to be highlighted (string)
-        """
-        formats = self.formats(text)
-        if not formats:
-            # nothing matched
-            self.setFormat(0, len(text), self.normalFormat)
-            return
-        
-        for match, formatStr in formats:
-            start = match.start()
-            groups = match.groups()
-
-            # No groups in the regex, assume this is a single rule
-            # that spans the entire line
-            if not groups:
-                self.setFormat(0, len(text), formatStr)
-                continue
-
-            # Groups exist, rule is a tuple corresponding to group
-            for groupIndex, group in enumerate(groups):
-                if not group:
-                    # empty match
-                    continue
-                
-                # allow None as a no-op format
-                length = len(group)
-                if formatStr[groupIndex]:
-                    self.setFormat(start, start + length,
-                                   formatStr[groupIndex])
-                start += length
-    
-    def regenerateRules(self):
-        """
-        Public method to initialize or regenerate the syntax highlighter rules.
-        """
-        self.normalFormat = self.makeFormat()
-        
-        self.__initColours()
-        
-        self._rules = []
-        self.generateRules()
-    
-    def generateRules(self):
-        """
-        Public method to generate the rule set.
-        
-        Note: This method must me implemented by derived syntax
-        highlighters.
-        """
-        pass
--- a/eric7/E5Gui/EricLed.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,336 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2006 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a LED widget.
-
-It was inspired by KLed.
-"""
-
-import enum
-
-from PyQt6.QtCore import pyqtSignal, Qt, QSize, QPoint
-from PyQt6.QtGui import QColor, QRadialGradient, QPalette, QPainter, QBrush
-from PyQt6.QtWidgets import QWidget
-
-
-class EricLedType(enum.Enum):
-    """
-    Class defining the LED types.
-    """
-    RECTANGULAR = 0
-    CIRCULAR = 1
-
-
-class EricLed(QWidget):
-    """
-    Class implementing a LED widget.
-    """
-    def __init__(self, parent=None, color=None, shape=EricLedType.CIRCULAR,
-                 rectRatio=1):
-        """
-        Constructor
-        
-        @param parent reference to parent widget
-        @type QWidget
-        @param color color of the LED
-        @type QColor
-        @param shape shape of the LED
-        @type EricLedType
-        @param rectRatio ratio width to height, if shape is rectangular
-        @type float
-        """
-        super().__init__(parent)
-        
-        if color is None:
-            color = QColor("green")
-        
-        self.__led_on = True
-        self.__dark_factor = 300
-        self.__offcolor = color.darker(self.__dark_factor)
-        self.__led_color = color
-        self.__framedLed = True
-        self.__shape = shape
-        self.__rectRatio = rectRatio
-        
-        self.setColor(color)
-        
-    def paintEvent(self, evt):
-        """
-        Protected slot handling the paint event.
-        
-        @param evt paint event object
-        @type QPaintEvent
-        """
-        if self.__shape == EricLedType.CIRCULAR:
-            self.__paintRound()
-        elif self.__shape == EricLedType.RECTANGULAR:
-            self.__paintRectangular()
-    
-    def __getBestRoundSize(self):
-        """
-        Private method to calculate the width of the LED.
-        
-        @return new width of the LED (integer)
-        """
-        width = min(self.width(), self.height())
-        width -= 2  # leave one pixel border
-        return width > -1 and width or 0
-        
-    def __paintRound(self):
-        """
-        Private method to paint a round raised LED.
-        """
-        # Initialize coordinates, width and height of the LED
-        width = self.__getBestRoundSize()
-        
-        # Calculate the gradient for the LED
-        wh = width / 2
-        color = self.__led_on and self.__led_color or self.__offcolor
-        gradient = QRadialGradient(wh, wh, wh, 0.8 * wh, 0.8 * wh)
-        gradient.setColorAt(0.0, color.lighter(200))
-        gradient.setColorAt(0.6, color)
-        if self.__framedLed:
-            gradient.setColorAt(0.9, color.darker())
-            gradient.setColorAt(
-                1.0, self.palette().color(QPalette.ColorRole.Dark))
-        else:
-            gradient.setColorAt(1.0, color.darker())
-        
-        # now do the drawing
-        paint = QPainter(self)
-        paint.setRenderHint(QPainter.RenderHint.Antialiasing, True)
-        paint.setBrush(QBrush(gradient))
-        paint.setPen(Qt.PenStyle.NoPen)
-        paint.drawEllipse(1, 1, width, width)
-        paint.end()
-        
-    def __paintRectangular(self):
-        """
-        Private method to paint a rectangular raised LED.
-        """
-        # Initialize coordinates, width and height of the LED
-        width = self.height() * self.__rectRatio
-        left = max(0, int((self.width() - width) / 2) - 1)
-        right = min(int((self.width() + width) / 2), self.width())
-        height = self.height()
-        
-        # now do the drawing
-        painter = QPainter(self)
-        painter.setRenderHint(QPainter.RenderHint.Antialiasing, True)
-        color = self.__led_on and self.__led_color or self.__offcolor
-
-        painter.setPen(color.lighter(200))
-        painter.drawLine(left, 0, left, height - 1)
-        painter.drawLine(left + 1, 0, right - 1, 0)
-        if self.__framedLed:
-            painter.setPen(self.palette().color(QPalette.ColorRole.Dark))
-        else:
-            painter.setPen(color.darker())
-        painter.drawLine(left + 1, height - 1, right - 1, height - 1)
-        painter.drawLine(right - 1, 1, right - 1, height - 1)
-        painter.fillRect(left + 1, 1, right - 2, height - 2, QBrush(color))
-        painter.end()
-        
-    def isOn(self):
-        """
-        Public method to return the LED state.
-        
-        @return flag indicating the light state (boolean)
-        """
-        return self.__led_on
-        
-    def shape(self):
-        """
-        Public method to return the LED shape.
-        
-        @return LED shape
-        @rtype EricLedType
-        """
-        return self.__shape
-        
-    def ratio(self):
-        """
-        Public method to return the LED rectangular ratio [= width / height].
-        
-        @return LED rectangular ratio (float)
-        """
-        return self.__rectRatio
-        
-    def color(self):
-        """
-        Public method to return the LED color.
-        
-        @return color of the LED (QColor)
-        """
-        return self.__led_color
-        
-    def setOn(self, state):
-        """
-        Public method to set the LED to on.
-        
-        @param state new state of the LED (boolean)
-        """
-        if self.__led_on != state:
-            self.__led_on = state
-            self.update()
-        
-    def setShape(self, shape):
-        """
-        Public method to set the LED shape.
-        
-        @param shape new LED shape
-        @type EricLedType
-        """
-        if self.__shape != shape:
-            self.__shape = shape
-            self.update()
-        
-    def setRatio(self, ratio):
-        """
-        Public method to set the LED rectangular ratio (width / height).
-        
-        @param ratio new LED rectangular ratio (float)
-        """
-        if self.__rectRatio != ratio:
-            self.__rectRatio = ratio
-            self.update()
-        
-    def setColor(self, color):
-        """
-        Public method to set the LED color.
-        
-        @param color color for the LED (QColor)
-        """
-        if self.__led_color != color:
-            self.__led_color = color
-            self.__offcolor = color.darker(self.__dark_factor)
-            self.update()
-        
-    def setDarkFactor(self, darkfactor):
-        """
-        Public method to set the dark factor.
-        
-        @param darkfactor value to set for the dark factor (integer)
-        """
-        if self.__dark_factor != darkfactor:
-            self.__dark_factor = darkfactor
-            self.__offcolor = self.__led_color.darker(darkfactor)
-            self.update()
-        
-    def darkFactor(self):
-        """
-        Public method to return the dark factor.
-        
-        @return the current dark factor (integer)
-        """
-        return self.__dark_factor
-        
-    def toggle(self):
-        """
-        Public slot to toggle the LED state.
-        """
-        self.setOn(not self.__led_on)
-        
-    def on(self):
-        """
-        Public slot to set the LED to on.
-        """
-        self.setOn(True)
-        
-    def off(self):
-        """
-        Public slot to set the LED to off.
-        """
-        self.setOn(False)
-        
-    def setFramed(self, framed):
-        """
-        Public slot to set the __framedLed attribute.
-        
-        @param framed flag indicating the framed state (boolean)
-        """
-        if self.__framedLed != framed:
-            self.__framedLed = framed
-            self.__off_map = None
-            self.__on_map = None
-            self.update()
-        
-    def isFramed(self):
-        """
-        Public method to return the framed state.
-        
-        @return flag indicating the current framed state (boolean)
-        """
-        return self.__framedLed
-        
-    def sizeHint(self):
-        """
-        Public method to give a hint about our desired size.
-        
-        @return size hint (QSize)
-        """
-        return QSize(18, 18)
-        
-    def minimumSizeHint(self):
-        """
-        Public method to give a hint about our minimum size.
-        
-        @return size hint (QSize)
-        """
-        return QSize(18, 18)
-
-
-class EricClickableLed(EricLed):
-    """
-    Class implementing a clickable LED widget.
-    
-    @signal clicked(QPoint) emitted upon a click on the LED with the
-        left button
-    @signal middleClicked(QPoint) emitted upon a click on the LED with
-        the middle button or CTRL and left button
-    """
-    clicked = pyqtSignal(QPoint)
-    middleClicked = pyqtSignal(QPoint)
-    
-    def __init__(self, parent=None, color=None, shape=EricLedType.CIRCULAR,
-                 rectRatio=1):
-        """
-        Constructor
-        
-        @param parent reference to parent widget
-        @type QWidget
-        @param color color of the LED
-        @type QColor
-        @param shape shape of the LED
-        @type EricLedType
-        @param rectRatio ratio width to height, if shape is rectangular
-        @type float
-        """
-        super().__init__(parent, color, shape, rectRatio)
-        
-        self.setCursor(Qt.CursorShape.PointingHandCursor)
-    
-    def mouseReleaseEvent(self, evt):
-        """
-        Protected method handling mouse release events.
-        
-        @param evt mouse event (QMouseEvent)
-        """
-        if (
-            evt.button() == Qt.MouseButton.LeftButton and
-            self.rect().contains(evt.position().toPoint())
-        ):
-            if evt.modifiers() == Qt.KeyboardModifier.ControlModifier:
-                self.middleClicked.emit(evt.globalPosition().toPoint())
-            else:
-                self.clicked.emit(evt.globalPosition().toPoint())
-        elif (
-            evt.button() == Qt.MouseButton.MiddleButton and
-            self.rect().contains(evt.position().toPoint())
-        ):
-            self.middleClicked.emit(evt.globalPosition().toPoint())
-        else:
-            super().mouseReleaseEvent(evt)
--- a/eric7/E5Gui/EricLineEdit.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,264 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing specialized line edits.
-"""
-
-import enum
-
-from PyQt6.QtCore import pyqtSignal, Qt, QEvent
-from PyQt6.QtWidgets import (
-    QLineEdit, QWidget, QHBoxLayout, QBoxLayout, QLayout, QApplication,
-    QSpacerItem, QSizePolicy
-)
-
-
-class EricLineEditSideWidget(QWidget):
-    """
-    Class implementing the side widgets for the line edit class.
-    
-    @signal sizeHintChanged() emitted to indicate a change of the size hint
-    """
-    sizeHintChanged = pyqtSignal()
-    
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-    
-    def event(self, evt):
-        """
-        Public method to handle events.
-        
-        @param evt reference to the event (QEvent)
-        @return flag indicating, whether the event was recognized (boolean)
-        """
-        if evt.type() == QEvent.Type.LayoutRequest:
-            self.sizeHintChanged.emit()
-        return QWidget.event(self, evt)
-
-
-class EricLineEditSide(enum.Enum):
-    """
-    Class defining the line edit sides.
-    """
-    LEFT = 0
-    RIGHT = 1
-
-
-class EricLineEdit(QLineEdit):
-    """
-    Class implementing a line edit widget showing some inactive text.
-    """
-    def __init__(self, parent=None, placeholderText=""):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget
-        @type QWidget
-        @param placeholderText text to be shown on inactivity
-        @type str
-        """
-        super().__init__(parent)
-        
-        self.setMinimumHeight(22)
-        
-        self.setPlaceholderText(placeholderText)
-        
-        self.__mainLayout = QHBoxLayout(self)
-        self.__mainLayout.setContentsMargins(0, 0, 0, 0)
-        self.__mainLayout.setSpacing(0)
-        
-        self.__leftMargin = 0
-        self.__leftWidget = EricLineEditSideWidget(self)
-        self.__leftWidget.resize(0, 0)
-        self.__leftLayout = QHBoxLayout(self.__leftWidget)
-        self.__leftLayout.setContentsMargins(0, 0, 2, 0)
-        if QApplication.isRightToLeft():
-            self.__leftLayout.setDirection(QBoxLayout.Direction.RightToLeft)
-        else:
-            self.__leftLayout.setDirection(QBoxLayout.Direction.LeftToRight)
-        self.__leftLayout.setSizeConstraint(
-            QLayout.SizeConstraint.SetFixedSize)
-        
-        self.__rightWidget = EricLineEditSideWidget(self)
-        self.__rightWidget.resize(0, 0)
-        self.__rightLayout = QHBoxLayout(self.__rightWidget)
-        self.__rightLayout.setContentsMargins(0, 0, 2, 0)
-        if self.isRightToLeft():
-            self.__rightLayout.setDirection(QBoxLayout.Direction.RightToLeft)
-        else:
-            self.__rightLayout.setDirection(QBoxLayout.Direction.LeftToRight)
-        
-        horizontalSpacer = QSpacerItem(
-            0, 0, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
-        self.__mainLayout.addWidget(
-            self.__leftWidget, 0,
-            Qt.AlignmentFlag.AlignVCenter | Qt.AlignmentFlag.AlignLeft)
-        self.__mainLayout.addItem(horizontalSpacer)
-        self.__mainLayout.addWidget(
-            self.__rightWidget, 0,
-            Qt.AlignmentFlag.AlignVCenter | Qt.AlignmentFlag.AlignRight)
-        if self.isRightToLeft():
-            self.__mainLayout.setDirection(QBoxLayout.Direction.RightToLeft)
-        else:
-            self.__mainLayout.setDirection(QBoxLayout.Direction.LeftToRight)
-        
-        self.setWidgetSpacing(3)
-        self.__leftWidget.sizeHintChanged.connect(self._updateTextMargins)
-        self.__rightWidget.sizeHintChanged.connect(self._updateTextMargins)
-    
-    def setLeftMargin(self, margin):
-        """
-        Public method to set the left margin.
-        
-        @param margin left margin in pixel (integer)
-        """
-        self.__leftMargin = margin
-    
-    def leftMargin(self):
-        """
-        Public method to get the size of the left margin.
-        
-        @return left margin in pixel (integer)
-        """
-        return self.__leftMargin
-    
-    def event(self, evt):
-        """
-        Public method to handle events.
-        
-        @param evt reference to the event (QEvent)
-        @return flag indicating, whether the event was recognized (boolean)
-        """
-        if evt.type() == QEvent.Type.LayoutDirectionChange:
-            if self.isRightToLeft():
-                self.__mainLayout.setDirection(
-                    QBoxLayout.Direction.RightToLeft)
-                self.__leftLayout.setDirection(
-                    QBoxLayout.Direction.RightToLeft)
-                self.__rightLayout.setDirection(
-                    QBoxLayout.Direction.RightToLeft)
-            else:
-                self.__mainLayout.setDirection(
-                    QBoxLayout.Direction.LeftToRight)
-                self.__leftLayout.setDirection(
-                    QBoxLayout.Direction.LeftToRight)
-                self.__rightLayout.setDirection(
-                    QBoxLayout.Direction.LeftToRight)
-        return QLineEdit.event(self, evt)
-    
-    def _updateTextMargins(self):
-        """
-        Protected slot to update the text margins.
-        """
-        left = (
-            self.__leftWidget.sizeHint().width()
-            if self.__leftMargin == 0 else
-            self.__leftMargin
-        )
-        right = self.__rightWidget.sizeHint().width()
-        top = 0
-        bottom = 0
-        self.setTextMargins(left, top, right, bottom)
-    
-    def addWidget(self, widget, position):
-        """
-        Public method to add a widget to a side.
-        
-        @param widget reference to the widget to add
-        @type QWidget
-        @param position position to add to
-        @type EricLineEditSide
-        """
-        if widget is None:
-            return
-        
-        if self.isRightToLeft():
-            if position == EricLineEditSide.LEFT:
-                position = EricLineEditSide.RIGHT
-            else:
-                position = EricLineEditSide.LEFT
-        if position == EricLineEditSide.LEFT:
-            self.__leftLayout.addWidget(widget)
-        else:
-            self.__rightLayout.insertWidget(1, widget)
-    
-    def removeWidget(self, widget):
-        """
-        Public method to remove a widget from a side.
-        
-        @param widget reference to the widget to remove
-        @type QWidget
-        """
-        if widget is None:
-            return
-        
-        self.__leftLayout.removeWidget(widget)
-        self.__rightLayout.removeWidget(widget)
-        widget.hide()
-    
-    def widgetSpacing(self):
-        """
-        Public method to get the side widget spacing.
-        
-        @return side widget spacing (integer)
-        """
-        return self.__leftLayout.spacing()
-    
-    def setWidgetSpacing(self, spacing):
-        """
-        Public method to set the side widget spacing.
-        
-        @param spacing side widget spacing (integer)
-        """
-        self.__leftLayout.setSpacing(spacing)
-        self.__rightLayout.setSpacing(spacing)
-        self._updateTextMargins()
-    
-    def textMargin(self, position):
-        """
-        Public method to get the text margin for a side.
-        
-        @param position side to get margin for
-        @type EricLineEditSide
-        @return text margin
-        @rtype int
-        """
-        spacing = self.__rightLayout.spacing()
-        w = 0
-        w = (
-            self.__leftWidget.sizeHint().width()
-            if position == EricLineEditSide.LEFT else
-            self.__rightWidget.sizeHint().width()
-        )
-        if w == 0:
-            return 0
-        return w + spacing * 2
-
-class EricClearableLineEdit(EricLineEdit):
-    """
-    Class implementing a line edit widget showing some inactive text and a
-    clear button, if it has some contents.
-    """
-    def __init__(self, parent=None, placeholderText="",
-                 side=EricLineEditSide.RIGHT):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget
-        @type QWidget
-        @param placeholderText text to be shown on inactivity
-        @type str
-        @param side side the clear button should be shown at
-        @type EricLineEditSide
-        """
-        super().__init__(parent, placeholderText)
-        
-        self.setClearButtonEnabled(True)
--- a/eric7/E5Gui/EricLineEditButton.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a button class to be used with EricLineEdit.
-"""
-
-from PyQt6.QtCore import Qt, QPoint, QPointF
-from PyQt6.QtGui import QPainter, QPainterPath
-from PyQt6.QtWidgets import QAbstractButton
-
-
-# TODO: Get rid of this
-class EricLineEditButton(QAbstractButton):
-    """
-    Class implementing a button to be used with EricLineEdit.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        
-        self.__menu = None
-        self.__image = None
-        
-        self.setFocusPolicy(Qt.FocusPolicy.NoFocus)
-        self.setCursor(Qt.CursorShape.ArrowCursor)
-        self.setMinimumSize(16, 16)
-        
-        self.clicked.connect(self.__clicked)
-    
-    def setMenu(self, menu):
-        """
-        Public method to set the button menu.
-        
-        @param menu reference to the menu (QMenu)
-        """
-        self.__menu = menu
-        self.update()
-    
-    def menu(self):
-        """
-        Public method to get a reference to the menu.
-        
-        @return reference to the associated menu (QMenu)
-        """
-        return self.__menu
-    
-    def setIcon(self, icon):
-        """
-        Public method to set the button icon.
-        
-        @param icon icon to be set (QIcon)
-        """
-        if icon.isNull():
-            self.__image = None
-        else:
-            self.__image = icon.pixmap(16, 16).toImage()
-        super().setIcon(icon)
-    
-    def __clicked(self):
-        """
-        Private slot to handle a button click.
-        """
-        if self.__menu:
-            pos = self.mapToGlobal(QPoint(0, self.height()))
-            self.__menu.exec(pos)
-    
-    def paintEvent(self, evt):
-        """
-        Protected method handling a paint event.
-        
-        @param evt reference to the paint event (QPaintEvent)
-        """
-        painter = QPainter(self)
-        
-        if self.__image is not None and not self.__image.isNull():
-            x = (self.width() - self.__image.width()) // 2 - 1
-            y = (self.height() - self.__image.height()) // 2 - 1
-            painter.drawImage(x, y, self.__image)
-        
-        if self.__menu is not None:
-            triagPath = QPainterPath()
-            startPos = QPointF(self.width() - 5, self.height() - 3)
-            triagPath.moveTo(startPos)
-            triagPath.lineTo(startPos.x() + 4, startPos.y())
-            triagPath.lineTo(startPos.x() + 2, startPos.y() + 2)
-            triagPath.closeSubpath()
-            painter.setPen(Qt.GlobalColor.black)
-            painter.setBrush(Qt.GlobalColor.black)
-            painter.setRenderHint(QPainter.RenderHint.Antialiasing, False)
-            painter.drawPath(triagPath)
--- a/eric7/E5Gui/EricListSelectionDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2016 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to select from a list of strings.
-"""
-
-from PyQt6.QtCore import pyqtSlot, Qt
-from PyQt6.QtWidgets import (
-    QDialog, QDialogButtonBox, QAbstractItemView, QListWidgetItem
-)
-
-from .Ui_EricListSelectionDialog import Ui_EricListSelectionDialog
-
-
-class EricListSelectionDialog(QDialog, Ui_EricListSelectionDialog):
-    """
-    Class implementing a dialog to select from a list of strings.
-    """
-    def __init__(self, entries,
-                 selectionMode=QAbstractItemView.SelectionMode
-                 .ExtendedSelection,
-                 title="", message="", checkBoxSelection=False, parent=None):
-        """
-        Constructor
-        
-        @param entries list of entries to select from
-        @type list of str
-        @param selectionMode selection mode for the list
-        @type QAbstractItemView.SelectionMode
-        @param title title of the dialog
-        @type str
-        @param message message to be show in the dialog
-        @type str
-        @param checkBoxSelection flag indicating to select items via their
-            checkbox
-        @type bool
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-        self.setupUi(self)
-        
-        if title:
-            self.setWindowTitle(title)
-        if message:
-            self.messageLabel.setText(message)
-        
-        self.__checkCount = 0
-        self.__isCheckBoxSelection = checkBoxSelection
-        if self.__isCheckBoxSelection:
-            self.selectionList.setSelectionMode(
-                QAbstractItemView.SelectionMode.NoSelection)
-            for entry in entries:
-                itm = QListWidgetItem(entry)
-                itm.setFlags(Qt.ItemFlag.ItemIsUserCheckable |
-                             Qt.ItemFlag.ItemIsEnabled)
-                itm.setCheckState(Qt.CheckState.Unchecked)
-                self.selectionList.addItem(itm)
-        else:
-            self.selectionList.setSelectionMode(selectionMode)
-            self.selectionList.addItems(entries)
-        
-        self.buttonBox.button(
-            QDialogButtonBox.StandardButton.Ok).setEnabled(False)
-    
-    @pyqtSlot()
-    def on_selectionList_itemSelectionChanged(self):
-        """
-        Private slot handling a change of the selection.
-        """
-        if not self.__isCheckBoxSelection:
-            self.buttonBox.button(
-                QDialogButtonBox.StandardButton.Ok).setEnabled(
-                    len(self.selectionList.selectedItems()) > 0)
-    
-    def on_selectionList_itemChanged(self, itm):
-        """
-        Private slot handling a change of an item.
-        
-        @param itm reference to the changed item
-        @type QListWidgetItem
-        """
-        if self.__isCheckBoxSelection:
-            if itm.checkState() == Qt.CheckState.Checked:
-                self.__checkCount += 1
-            else:
-                self.__checkCount -= 1
-            self.buttonBox.button(
-                QDialogButtonBox.StandardButton.Ok).setEnabled(
-                self.__checkCount > 0)
-    
-    def getSelection(self):
-        """
-        Public method to retrieve the selected items.
-        
-        @return selected entries
-        @rtype list of str
-        """
-        entries = []
-        if self.__isCheckBoxSelection:
-            for row in range(self.selectionList.count()):
-                item = self.selectionList.item(row)
-                if item.checkState() == Qt.CheckState.Checked:
-                    entries.append(item.text())
-        else:
-            for item in self.selectionList.selectedItems():
-                entries.append(item.text())
-        return entries
--- a/eric7/E5Gui/EricListSelectionDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EricListSelectionDialog</class>
- <widget class="QDialog" name="EricListSelectionDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>400</width>
-    <height>500</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Select from List</string>
-  </property>
-  <property name="sizeGripEnabled">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QLabel" name="messageLabel">
-     <property name="text">
-      <string>Select from the list below:</string>
-     </property>
-     <property name="wordWrap">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QListWidget" name="selectionList">
-     <property name="alternatingRowColors">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>EricListSelectionDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>EricListSelectionDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
--- a/eric7/E5Gui/EricListView.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing specialized list views.
-"""
-
-from PyQt6.QtCore import Qt, QItemSelectionModel
-from PyQt6.QtWidgets import QListView
-
-
-class EricListView(QListView):
-    """
-    Class implementing a list view supporting removal of entries.
-    """
-    def keyPressEvent(self, evt):
-        """
-        Protected method implementing special key handling.
-        
-        @param evt reference to the event (QKeyEvent)
-        """
-        if (
-            evt.key() in [Qt.Key.Key_Delete, Qt.Key.Key_Backspace] and
-            self.model() is not None
-        ):
-            self.removeSelected()
-            evt.setAccepted(True)
-        else:
-            super().keyPressEvent(evt)
-    
-    def removeSelected(self):
-        """
-        Public method to remove the selected entries.
-        """
-        if self.model() is None or self.selectionModel() is None:
-            # no models available
-            return
-        
-        row = 0
-        selectedRows = self.selectionModel().selectedRows()
-        for selectedRow in reversed(selectedRows):
-            row = selectedRow.row()
-            self.model().removeRow(row, self.rootIndex())
-        
-        idx = self.model().index(row, 0, self.rootIndex())
-        if not idx.isValid():
-            idx = self.model().index(row - 1, 0, self.rootIndex())
-        self.selectionModel().select(
-            idx,
-            QItemSelectionModel.SelectionFlag.SelectCurrent |
-            QItemSelectionModel.SelectionFlag.Rows)
-        self.setCurrentIndex(idx)
-    
-    def removeAll(self):
-        """
-        Public method to clear the view.
-        """
-        if self.model() is not None:
-            self.model().removeRows(0, self.model().rowCount(self.rootIndex()),
-                                    self.rootIndex())
--- a/eric7/E5Gui/EricMainWindow.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a main window class with styling support.
-"""
-
-from PyQt6.QtCore import QCoreApplication
-from PyQt6.QtWidgets import QMainWindow, QStyleFactory, QApplication
-
-from .EricApplication import ericApp
-from . import EricMessageBox
-
-
-class EricMainWindow(QMainWindow):
-    """
-    Class implementing a main window with styling support.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        
-        self.defaultStyleName = QApplication.style().objectName()
-    
-    def setStyle(self, styleName, styleSheetFile):
-        """
-        Public method to set the style of the interface.
-        
-        @param styleName name of the style to set (string)
-        @param styleSheetFile name of a style sheet file to read to overwrite
-            defaults of the given style (string)
-        """
-        # step 1: set the style
-        style = None
-        if styleName != "System" and styleName in QStyleFactory.keys():
-            # __IGNORE_WARNING_Y118__
-            style = QStyleFactory.create(styleName)
-        if style is None:
-            style = QStyleFactory.create(self.defaultStyleName)
-        if style is not None:
-            QApplication.setStyle(style)
-        
-        # step 2: set a style sheet
-        if styleSheetFile:
-            try:
-                with open(styleSheetFile, "r", encoding="utf-8") as f:
-                    styleSheet = f.read()
-            except OSError as msg:
-                EricMessageBox.warning(
-                    self,
-                    QCoreApplication.translate(
-                        "EricMainWindow", "Loading Style Sheet"),
-                    QCoreApplication.translate(
-                        "EricMainWindow",
-                        """<p>The Qt Style Sheet file <b>{0}</b> could"""
-                        """ not be read.<br>Reason: {1}</p>""")
-                    .format(styleSheetFile, str(msg)))
-                return
-        else:
-            styleSheet = ""
-        
-        ericApp().setStyleSheet(styleSheet)
--- a/eric7/E5Gui/EricMapWidget.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,352 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2014 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a base class for showing a document map.
-"""
-
-from PyQt6.QtCore import Qt, QSize, QRect, QCoreApplication
-from PyQt6.QtGui import QColor, QBrush, QPainter
-from PyQt6.QtWidgets import QWidget, QAbstractScrollArea
-
-
-class EricMapWidget(QWidget):
-    """
-    Class implementing a base class for showing a document map.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        self.setAttribute(Qt.WidgetAttribute.WA_OpaquePaintEvent)
-        
-        self.__width = 14
-        self.__lineBorder = 1
-        self.__lineHeight = 2
-        self.__backgroundColor = QColor("#e7e7e7")
-        self.__setSliderColor()
-        
-        self._master = None
-        self.__enabled = False
-        self.__rightSide = True
-        
-        if parent is not None and isinstance(parent, QAbstractScrollArea):
-            self.setMaster(parent)
-    
-    def __setSliderColor(self):
-        """
-        Private method to set the slider color depending upon the background
-        color.
-        """
-        if self.__backgroundColor.toHsv().value() < 128:
-            # dark background, use white slider
-            self.__sliderColor = Qt.GlobalColor.white
-        else:
-            # light background, use black slider
-            self.__sliderColor = Qt.GlobalColor.black
-    
-    def __updateMasterViewportWidth(self):
-        """
-        Private method to update the master's viewport width.
-        """
-        if self._master:
-            if self.__enabled:
-                width = self.__width
-            else:
-                width = 0
-            if self.__rightSide:
-                self._master.setViewportMargins(0, 0, width, 0)
-            else:
-                self._master.setViewportMargins(width, 0, 0, 0)
-    
-    def setMaster(self, master):
-        """
-        Public method to set the map master widget.
-        
-        @param master map master widget (QAbstractScrollArea)
-        """
-        self._master = master
-        self._master.setVerticalScrollBarPolicy(
-            Qt.ScrollBarPolicy.ScrollBarAlwaysOn)
-        self._master.verticalScrollBar().valueChanged.connect(self.update)
-        self._master.verticalScrollBar().rangeChanged.connect(self.update)
-        self.__updateMasterViewportWidth()
-    
-    def setWidth(self, width):
-        """
-        Public method to set the widget width.
-        
-        @param width widget width (integer)
-        """
-        if width != self.__width:
-            self.__width = max(6, width)    # minimum width 6 pixels
-            self.__updateMasterViewportWidth()
-            self.update()
-    
-    def width(self):
-        """
-        Public method to get the widget's width.
-        
-        @return widget width (integer)
-        """
-        return self.__width
-    
-    def setMapPosition(self, onRight):
-        """
-        Public method to set, whether the map should be shown to the right or
-        left of the master widget.
-        
-        @param onRight flag indicating to show the map on the right side of
-            the master widget
-        @type bool
-        """
-        if onRight != self.__rightSide:
-            self.__rightSide = onRight
-            self.__updateMasterViewportWidth()
-            self.update()
-    
-    def isOnRightSide(self):
-        """
-        Public method to test, if the map is shown on the right side of the
-        master widget.
-        
-        @return flag indicating that the map is to the right of the master
-            widget
-        @rtype bool
-        """
-        return self.__rightSide
-    
-    def setLineDimensions(self, border, height):
-        """
-        Public method to set the line (indicator) dimensions.
-        
-        @param border border width on each side in x-direction (integer)
-        @param height height of the line in pixels (integer)
-        """
-        if border != self.__lineBorder or height != self.__lineHeight:
-            self.__lineBorder = max(1, border)  # min border 1 pixel
-            self.__lineHeight = max(1, height)  # min height 1 pixel
-            self.update()
-    
-    def lineDimensions(self):
-        """
-        Public method to get the line (indicator) dimensions.
-        
-        @return tuple with border width (integer) and line height (integer)
-        """
-        return self.__lineBorder, self.__lineHeight
-    
-    def setEnabled(self, enable):
-        """
-        Public method to set the enabled state.
-        
-        @param enable flag indicating the enabled state (boolean)
-        """
-        if enable != self.__enabled:
-            self.__enabled = enable
-            self.setVisible(enable)
-            self.__updateMasterViewportWidth()
-    
-    def isEnabled(self):
-        """
-        Public method to check the enabled state.
-        
-        @return flag indicating the enabled state (boolean)
-        """
-        return self.__enabled
-    
-    def setBackgroundColor(self, color):
-        """
-        Public method to set the widget background color.
-        
-        @param color color for the background (QColor)
-        """
-        if color != self.__backgroundColor:
-            self.__backgroundColor = color
-            self.__setSliderColor()
-            self.update()
-    
-    def backgroundColor(self):
-        """
-        Public method to get the background color.
-        
-        @return background color (QColor)
-        """
-        return QColor(self.__backgroundColor)
-    
-    def sizeHint(self):
-        """
-        Public method to give an indication about the preferred size.
-        
-        @return preferred size (QSize)
-        """
-        return QSize(self.__width, 0)
-    
-    def paintEvent(self, event):
-        """
-        Protected method to handle a paint event.
-        
-        @param event paint event (QPaintEvent)
-        """
-        # step 1: fill the whole painting area
-        painter = QPainter(self)
-        painter.fillRect(event.rect(), self.__backgroundColor)
-        
-        # step 2: paint the indicators
-        self._paintIt(painter)
-        
-        # step 3: paint the slider
-        if self._master:
-            penColor = self.__sliderColor
-            painter.setPen(penColor)
-            brushColor = Qt.GlobalColor.transparent
-            painter.setBrush(QBrush(brushColor))
-            painter.drawRect(self.__generateSliderRange(
-                self._master.verticalScrollBar()))
-    
-    def _paintIt(self, painter):
-        """
-        Protected method for painting the widget's indicators.
-        
-        Note: This method should be implemented by subclasses.
-        
-        @param painter reference to the painter object (QPainter)
-        """
-        pass
-    
-    def mousePressEvent(self, event):
-        """
-        Protected method to handle a mouse button press.
-        
-        @param event reference to the mouse event (QMouseEvent)
-        """
-        if event.button() == Qt.MouseButton.LeftButton and self._master:
-            vsb = self._master.verticalScrollBar()
-            value = self.position2Value(event.position().toPoint().y() - 1)
-            vsb.setValue(value - 0.5 * vsb.pageStep())  # center on page
-        self.__mousePressPos = None
-    
-    def mouseMoveEvent(self, event):
-        """
-        Protected method to handle a mouse moves.
-        
-        @param event reference to the mouse event (QMouseEvent)
-        """
-        if event.buttons() & Qt.MouseButton.LeftButton and self._master:
-            vsb = self._master.verticalScrollBar()
-            value = self.position2Value(event.position().toPoint().y() - 1)
-            vsb.setValue(value - 0.5 * vsb.pageStep())  # center on page
-    
-    def wheelEvent(self, event):
-        """
-        Protected slot handling mouse wheel events.
-        
-        @param event reference to the wheel event (QWheelEvent)
-        """
-        isVertical = event.angleDelta().x() == 0
-        if (
-            self._master and
-            event.modifiers() == Qt.KeyboardModifier.NoModifier and
-            isVertical
-        ):
-            QCoreApplication.sendEvent(self._master.verticalScrollBar(), event)
-    
-    def calculateGeometry(self):
-        """
-        Public method to recalculate the map widget's geometry.
-        """
-        if self._master:
-            cr = self._master.contentsRect()
-            vsb = self._master.verticalScrollBar()
-            if vsb.isVisible():
-                vsbw = vsb.contentsRect().width()
-            else:
-                vsbw = 0
-            margins = self._master.contentsMargins()
-            if margins.right() > vsbw:
-                vsbw = 0
-            if self.__rightSide:
-                self.setGeometry(
-                    QRect(cr.right() - self.__width - vsbw, cr.top(),
-                          self.__width, cr.height()))
-            else:
-                self.setGeometry(
-                    QRect(0, cr.top(), self.__width, cr.height()))
-            self.update()
-    
-    def scaleFactor(self, slider=False):
-        """
-        Public method to determine the scrollbar's scale factor.
-        
-        @param slider flag indicating to calculate the result for the slider
-            (boolean)
-        @return scale factor (float)
-        """
-        if self._master:
-            delta = 0 if slider else 2
-            vsb = self._master.verticalScrollBar()
-            posHeight = vsb.height() - delta - 1
-            valHeight = vsb.maximum() - vsb.minimum() + vsb.pageStep()
-            return float(posHeight) / valHeight
-        else:
-            return 1.0
-    
-    def value2Position(self, value, slider=False):
-        """
-        Public method to convert a scrollbar value into a position.
-        
-        @param value value to convert (integer)
-        @param slider flag indicating to calculate the result for the slider
-            (boolean)
-        @return position (integer)
-        """
-        if self._master:
-            offset = 0 if slider else 1
-            vsb = self._master.verticalScrollBar()
-            return (value - vsb.minimum()) * self.scaleFactor(slider) + offset
-        else:
-            return value
-    
-    def position2Value(self, position, slider=False):
-        """
-        Public method to convert a position into a scrollbar value.
-        
-        @param position scrollbar position to convert (integer)
-        @param slider flag indicating to calculate the result for the slider
-            (boolean)
-        @return scrollbar value (integer)
-        """
-        if self._master:
-            offset = 0 if slider else 1
-            vsb = self._master.verticalScrollBar()
-            return vsb.minimum() + max(
-                0, (position - offset) / self.scaleFactor(slider))
-        else:
-            return position
-    
-    def generateIndicatorRect(self, position):
-        """
-        Public method to generate an indicator rectangle.
-        
-        @param position indicator position (integer)
-        @return indicator rectangle (QRect)
-        """
-        return QRect(self.__lineBorder, position - self.__lineHeight // 2,
-                     self.__width - self.__lineBorder, self.__lineHeight)
-    
-    def __generateSliderRange(self, scrollbar):
-        """
-        Private method to generate the slider rectangle.
-        
-        @param scrollbar reference to the vertical scrollbar (QScrollBar)
-        @return slider rectangle (QRect)
-        """
-        pos1 = self.value2Position(scrollbar.value(), slider=True)
-        pos2 = self.value2Position(scrollbar.value() + scrollbar.pageStep(),
-                                   slider=True)
-        return QRect(0, pos1, self.__width - 1, pos2 - pos1)
--- a/eric7/E5Gui/EricMessageBox.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,303 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing QMessageBox replacements and more convenience function.
-"""
-
-from PyQt6.QtCore import Qt
-from PyQt6.QtWidgets import QMessageBox, QApplication
-
-###############################################################################
-##  Mappings to standard QMessageBox                                         ##
-###############################################################################
-
-# QMessageBox.Icon
-NoIcon = QMessageBox.Icon.NoIcon
-Critical = QMessageBox.Icon.Critical
-Information = QMessageBox.Icon.Information
-Question = QMessageBox.Icon.Question
-Warning = QMessageBox.Icon.Warning       # __IGNORE_WARNING_M131__
-
-# QMessageBox.StandardButton
-Abort = QMessageBox.StandardButton.Abort
-Apply = QMessageBox.StandardButton.Apply
-Cancel = QMessageBox.StandardButton.Cancel
-Close = QMessageBox.StandardButton.Close
-Discard = QMessageBox.StandardButton.Discard
-Help = QMessageBox.StandardButton.Help
-Ignore = QMessageBox.StandardButton.Ignore
-No = QMessageBox.StandardButton.No
-NoToAll = QMessageBox.StandardButton.NoToAll
-Ok = QMessageBox.StandardButton.Ok
-Open = QMessageBox.StandardButton.Open
-Reset = QMessageBox.StandardButton.Reset
-RestoreDefaults = QMessageBox.StandardButton.RestoreDefaults
-Retry = QMessageBox.StandardButton.Retry
-Save = QMessageBox.StandardButton.Save
-SaveAll = QMessageBox.StandardButton.SaveAll
-Yes = QMessageBox.StandardButton.Yes
-YesToAll = QMessageBox.StandardButton.YesToAll
-NoButton = QMessageBox.StandardButton.NoButton
-
-# QMessageBox.ButtonRole
-AcceptRole = QMessageBox.ButtonRole.AcceptRole
-ActionRole = QMessageBox.ButtonRole.ActionRole
-ApplyRole = QMessageBox.ButtonRole.ApplyRole
-DestructiveRole = QMessageBox.ButtonRole.DestructiveRole
-InvalidRole = QMessageBox.ButtonRole.InvalidRole
-HelpRole = QMessageBox.ButtonRole.HelpRole
-NoRole = QMessageBox.ButtonRole.NoRole
-RejectRole = QMessageBox.ButtonRole.RejectRole
-ResetRole = QMessageBox.ButtonRole.ResetRole
-YesRole = QMessageBox.ButtonRole.YesRole
-
-###############################################################################
-##  Replacement for the QMessageBox class                                    ##
-###############################################################################
-
-
-class EricMessageBox(QMessageBox):
-    """
-    Class implementing a replacement for QMessageBox.
-    """
-    def __init__(self, icon, title, text, modal=False,
-                 buttons=QMessageBox.StandardButton.NoButton,
-                 parent=None):
-        """
-        Constructor
-        
-        @param icon type of icon to be shown (QMessageBox.Icon)
-        @param title caption of the message box (string)
-        @param text text to be shown by the message box (string)
-        @param modal flag indicating a modal dialog (boolean)
-        @param buttons set of standard buttons to generate (StandardButtons)
-        @param parent parent widget of the message box (QWidget)
-        """
-        super().__init__(parent)
-        self.setIcon(icon)
-        if modal:
-            if parent is not None:
-                self.setWindowModality(Qt.WindowModality.WindowModal)
-            else:
-                self.setWindowModality(Qt.WindowModality.ApplicationModal)
-        else:
-            self.setWindowModality(Qt.WindowModality.NonModal)
-        if title == "":
-            self.setWindowTitle("{0}".format(
-                QApplication.applicationName()))
-        else:
-            self.setWindowTitle("{0} - {1}".format(
-                QApplication.applicationName(), title))
-        self.setText(text)
-        self.setStandardButtons(buttons)
-
-###############################################################################
-##  Replacements for QMessageBox static methods                              ##
-###############################################################################
-
-
-def __messageBox(parent, title, text, icon,
-                 buttons=QMessageBox.StandardButton.Ok,
-                 defaultButton=QMessageBox.StandardButton.NoButton,
-                 textFormat=Qt.TextFormat.AutoText):
-    """
-    Private module function to show a modal message box.
-    
-    @param parent parent widget of the message box (QWidget)
-    @param title caption of the message box (string)
-    @param text text to be shown by the message box (string)
-    @param icon type of icon to be shown (QMessageBox.Icon)
-    @param buttons flags indicating which buttons to show
-        (QMessageBox.StandardButtons)
-    @param defaultButton flag indicating the default button
-        (QMessageBox.StandardButton)
-    @param textFormat format of the text (Qt.TextFormat)
-    @return button pressed by the user (QMessageBox.StandardButton)
-    """
-    messageBox = QMessageBox(parent)
-    messageBox.setIcon(icon)
-    if parent is not None:
-        messageBox.setWindowModality(Qt.WindowModality.WindowModal)
-    if title == "":
-        messageBox.setWindowTitle("{0}".format(
-            QApplication.applicationName()))
-    else:
-        messageBox.setWindowTitle("{0} - {1}".format(
-            QApplication.applicationName(), title))
-    messageBox.setTextFormat(textFormat)
-    messageBox.setText(text)
-    messageBox.setStandardButtons(buttons)
-    messageBox.setDefaultButton(defaultButton)
-    messageBox.exec()
-    clickedButton = messageBox.clickedButton()
-    if clickedButton is None:
-        return QMessageBox.StandardButton.NoButton
-    else:
-        return messageBox.standardButton(clickedButton)
-
-# the about functions are here for consistancy
-about = QMessageBox.about
-aboutQt = QMessageBox.aboutQt
-
-
-def critical(parent, title, text,
-             buttons=QMessageBox.StandardButton.Ok,
-             defaultButton=QMessageBox.StandardButton.NoButton):
-    """
-    Function to show a modal critical message box.
-    
-    @param parent parent widget of the message box (QWidget)
-    @param title caption of the message box (string)
-    @param text text to be shown by the message box (string)
-    @param buttons flags indicating which buttons to show
-        (QMessageBox.StandardButtons)
-    @param defaultButton flag indicating the default button
-        (QMessageBox.StandardButton)
-    @return button pressed by the user (QMessageBox.StandardButton)
-    """
-    return __messageBox(parent, title, text, QMessageBox.Icon.Critical,
-                        buttons, defaultButton)
-
-
-def information(parent, title, text,
-                buttons=QMessageBox.StandardButton.Ok,
-                defaultButton=QMessageBox.StandardButton.NoButton):
-    """
-    Function to show a modal information message box.
-    
-    @param parent parent widget of the message box (QWidget)
-    @param title caption of the message box (string)
-    @param text text to be shown by the message box (string)
-    @param buttons flags indicating which buttons to show
-        (QMessageBox.StandardButtons)
-    @param defaultButton flag indicating the default button
-        (QMessageBox.StandardButton)
-    @return button pressed by the user (QMessageBox.StandardButton)
-    """
-    return __messageBox(parent, title, text, QMessageBox.Icon.Information,
-                        buttons, defaultButton)
-
-
-def question(parent, title, text,
-             buttons=QMessageBox.StandardButton.Ok,
-             defaultButton=QMessageBox.StandardButton.NoButton):
-    """
-    Function to show a modal question message box.
-    
-    @param parent parent widget of the message box (QWidget)
-    @param title caption of the message box (string)
-    @param text text to be shown by the message box (string)
-    @param buttons flags indicating which buttons to show
-        (QMessageBox.StandardButtons)
-    @param defaultButton flag indicating the default button
-        (QMessageBox.StandardButton)
-    @return button pressed by the user (QMessageBox.StandardButton)
-    """
-    return __messageBox(parent, title, text, QMessageBox.Icon.Question,
-                        buttons, defaultButton)
-
-
-def warning(parent, title, text,
-            buttons=QMessageBox.StandardButton.Ok,
-            defaultButton=QMessageBox.StandardButton.NoButton):
-    """
-    Function to show a modal warning message box.
-    
-    @param parent parent widget of the message box (QWidget)
-    @param title caption of the message box (string)
-    @param text text to be shown by the message box (string)
-    @param buttons flags indicating which buttons to show
-        (QMessageBox.StandardButtons)
-    @param defaultButton flag indicating the default button
-        (QMessageBox.StandardButton)
-    @return button pressed by the user (QMessageBox.StandardButton)
-    """
-    return __messageBox(parent, title, text, QMessageBox.Icon.Warning,
-                        buttons, defaultButton)
-
-###############################################################################
-##  Additional convenience functions                                         ##
-###############################################################################
-
-
-def yesNo(parent, title, text, icon=Question, yesDefault=False,
-          textFormat=Qt.TextFormat.AutoText):
-    """
-    Function to show a model yes/no message box.
-    
-    @param parent parent widget of the message box (QWidget)
-    @param title caption of the message box (string)
-    @param text text to be shown by the message box (string)
-    @param icon icon for the dialog (Critical, Information, Question or
-        Warning)
-    @param yesDefault flag indicating that the Yes button should be the
-        default button (boolean)
-    @param textFormat format of the text (Qt.TextFormat)
-    @return flag indicating the selection of the Yes button (boolean)
-    @exception ValueError raised to indicate a bad parameter value
-    """
-    if icon not in [Critical, Information, Question, Warning]:
-        raise ValueError("Bad value for 'icon' parameter.")
-    
-    res = __messageBox(
-        parent, title, text, icon,
-        QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
-        yesDefault and QMessageBox.StandardButton.Yes or
-        QMessageBox.StandardButton.No,
-        textFormat)
-    return res == QMessageBox.StandardButton.Yes
-
-
-def retryAbort(parent, title, text, icon=Question,
-               textFormat=Qt.TextFormat.AutoText):
-    """
-    Function to show a model abort/retry message box.
-    
-    @param parent parent widget of the message box (QWidget)
-    @param title caption of the message box (string)
-    @param text text to be shown by the message box (string)
-    @param icon icon for the dialog (Critical, Information, Question or
-        Warning)
-    @param textFormat format of the text (Qt.TextFormat)
-    @return flag indicating the selection of the Retry button (boolean)
-    @exception ValueError raised to indicate a bad parameter value
-    """
-    if icon not in [Critical, Information, Question, Warning]:
-        raise ValueError("Bad value for 'icon' parameter.")
-    
-    res = __messageBox(
-        parent, title, text, icon,
-        QMessageBox.StandardButton.Retry | QMessageBox.StandardButton.Abort,
-        QMessageBox.StandardButton.Retry,
-        textFormat)
-    return res == QMessageBox.StandardButton.Retry
-
-
-def okToClearData(parent, title, text, saveFunc,
-                  textFormat=Qt.TextFormat.AutoText):
-    """
-    Function to show a model message box to ask for clearing the data.
-    
-    @param parent parent widget of the message box (QWidget)
-    @param title caption of the message box (string)
-    @param text text to be shown by the message box (string)
-    @param saveFunc reference to a function performing the save action. It
-        must be a parameterless function returning a flag indicating success.
-    @param textFormat format of the text (Qt.TextFormat)
-    @return flag indicating that it is ok to clear the data (boolean)
-    """
-    res = __messageBox(
-        parent, title, text, QMessageBox.Icon.Warning,
-        (QMessageBox.StandardButton.Abort |
-         QMessageBox.StandardButton.Discard |
-         QMessageBox.StandardButton.Save),
-        QMessageBox.StandardButton.Save,
-        textFormat)
-    if res == QMessageBox.StandardButton.Abort:
-        return False
-    if res == QMessageBox.StandardButton.Save:
-        return saveFunc()
-    return True
--- a/eric7/E5Gui/EricModelMenu.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,441 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a menu populated from a QAbstractItemModel.
-"""
-
-from PyQt6.QtCore import pyqtSignal, Qt, QModelIndex, QPoint
-from PyQt6.QtGui import QFontMetrics, QDrag, QAction
-from PyQt6.QtWidgets import QMenu, QApplication
-
-import UI.PixmapCache
-
-
-class EricModelMenu(QMenu):
-    """
-    Class implementing a menu populated from a QAbstractItemModel.
-    
-    @signal activated(QModelIndex) emitted when an action has been triggered
-    """
-    activated = pyqtSignal(QModelIndex)
-    
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        
-        self.__maxRows = -1
-        self.__firstSeparator = -1
-        self.__maxWidth = -1
-        self.__statusBarTextRole = 0
-        self.__separatorRole = 0
-        self.__model = None
-        self.__root = QModelIndex()
-        self.__dragStartPosition = QPoint()
-        
-        self.setAcceptDrops(True)
-        
-        self._mouseButton = Qt.MouseButton.NoButton
-        self._keyboardModifiers = Qt.KeyboardModifier.NoModifier
-        self.__dropRow = -1
-        self.__dropIndex = None
-        
-        # This is to ensure it will be shown on Mac OS X
-        self.addAction("--not populated--")
-        
-        self.aboutToShow.connect(self.__aboutToShow)
-        self.triggered.connect(self.__actionTriggered)
-    
-    def prePopulated(self):
-        """
-        Public method to add any actions before the tree.
-       
-        @return flag indicating if any actions were added
-        """
-        return False
-    
-    def postPopulated(self):
-        """
-        Public method to add any actions after the tree.
-        """
-        pass
-    
-    def setModel(self, model):
-        """
-        Public method to set the model for the menu.
-        
-        @param model reference to the model (QAbstractItemModel)
-        """
-        self.__model = model
-    
-    def model(self):
-        """
-        Public method to get a reference to the model.
-        
-        @return reference to the model (QAbstractItemModel)
-        """
-        return self.__model
-    
-    def setMaxRows(self, rows):
-        """
-        Public method to set the maximum number of entries to show.
-        
-        @param rows maximum number of entries to show (integer)
-        """
-        self.__maxRows = rows
-    
-    def maxRows(self):
-        """
-        Public method to get the maximum number of entries to show.
-        
-        @return maximum number of entries to show (integer)
-        """
-        return self.__maxRows
-    
-    def setFirstSeparator(self, offset):
-        """
-        Public method to set the first separator.
-        
-        @param offset row number of the first separator (integer)
-        """
-        self.__firstSeparator = offset
-    
-    def firstSeparator(self):
-        """
-        Public method to get the first separator.
-        
-        @return row number of the first separator (integer)
-        """
-        return self.__firstSeparator
-    
-    def setRootIndex(self, index):
-        """
-        Public method to set the index of the root item.
-        
-        @param index index of the root item (QModelIndex)
-        """
-        self.__root = index
-    
-    def rootIndex(self):
-        """
-        Public method to get the index of the root item.
-        
-        @return index of the root item (QModelIndex)
-        """
-        return self.__root
-    
-    def setStatusBarTextRole(self, role):
-        """
-        Public method to set the role of the status bar text.
-        
-        @param role role of the status bar text (integer)
-        """
-        self.__statusBarTextRole = role
-    
-    def statusBarTextRole(self):
-        """
-        Public method to get the role of the status bar text.
-        
-        @return role of the status bar text (integer)
-        """
-        return self.__statusBarTextRole
-    
-    def setSeparatorRole(self, role):
-        """
-        Public method to set the role of the separator.
-        
-        @param role role of the separator (integer)
-        """
-        self.__separatorRole = role
-    
-    def separatorRole(self):
-        """
-        Public method to get the role of the separator.
-        
-        @return role of the separator (integer)
-        """
-        return self.__separatorRole
-    
-    def __aboutToShow(self):
-        """
-        Private slot to show the menu.
-        """
-        self.clear()
-        
-        if self.prePopulated():
-            self.addSeparator()
-        max_ = self.__maxRows
-        if max_ != -1:
-            max_ += self.__firstSeparator
-        self.createMenu(self.__root, max_, self, self)
-        self.postPopulated()
-    
-    def createBaseMenu(self):
-        """
-        Public method to get the menu that is used to populate sub menu's.
-        
-        @return reference to the menu (EricModelMenu)
-        """
-        return EricModelMenu(self)
-    
-    def createMenu(self, parent, max_, parentMenu=None, menu=None):
-        """
-        Public method to put all the children of a parent into a menu of a
-        given length.
-        
-        @param parent index of the parent item (QModelIndex)
-        @param max_ maximum number of entries (integer)
-        @param parentMenu reference to the parent menu (QMenu)
-        @param menu reference to the menu to be populated (QMenu)
-        """
-        if menu is None:
-            v = parent
-            
-            title = parent.data()
-            modelMenu = self.createBaseMenu()
-            # triggered goes all the way up the menu structure
-            modelMenu.triggered.disconnect(modelMenu.__actionTriggered)
-            modelMenu.setTitle(title)
-            
-            icon = parent.data(Qt.ItemDataRole.DecorationRole)
-            if icon == NotImplemented or icon is None:
-                icon = UI.PixmapCache.getIcon("defaultIcon")
-            modelMenu.setIcon(icon)
-            if parentMenu is not None:
-                parentMenu.addMenu(modelMenu).setData(v)
-            modelMenu.setRootIndex(parent)
-            modelMenu.setModel(self.__model)
-            return
-        
-        if self.__model is None:
-            return
-        
-        end = self.__model.rowCount(parent)
-        if max_ != -1:
-            end = min(max_, end)
-        
-        for i in range(end):
-            idx = self.__model.index(i, 0, parent)
-            if self.__model.hasChildren(idx):
-                self.createMenu(idx, -1, menu)
-            else:
-                if (
-                    self.__separatorRole != 0 and
-                    idx.data(self.__separatorRole)
-                ):
-                    self.addSeparator()
-                else:
-                    menu.addAction(self.__makeAction(idx))
-            
-            if menu == self and i == self.__firstSeparator - 1:
-                self.addSeparator()
-    
-    def __makeAction(self, idx):
-        """
-        Private method to create an action.
-        
-        @param idx index of the item to create an action for (QModelIndex)
-        @return reference to the created action (QAction)
-        """
-        icon = idx.data(Qt.ItemDataRole.DecorationRole)
-        if icon == NotImplemented or icon is None:
-            icon = UI.PixmapCache.getIcon("defaultIcon")
-        action = self.makeAction(icon, idx.data(), self)
-        action.setStatusTip(idx.data(self.__statusBarTextRole))
-        
-        v = idx
-        action.setData(v)
-        
-        return action
-    
-    def makeAction(self, icon, text, parent):
-        """
-        Public method to create an action.
-        
-        @param icon icon of the action (QIcon)
-        @param text text of the action (string)
-        @param parent reference to the parent object (QObject)
-        @return reference to the created action (QAction)
-        """
-        fm = QFontMetrics(self.font())
-        if self.__maxWidth == -1:
-            try:
-                self.__maxWidth = fm.horizontalAdvance("m") * 30
-            except AttributeError:
-                self.__maxWidth = fm.width('m') * 30
-        smallText = fm.elidedText(text, Qt.TextElideMode.ElideMiddle,
-                                  self.__maxWidth)
-        
-        return QAction(icon, smallText, parent)
-    
-    def __actionTriggered(self, action):
-        """
-        Private slot to handle the triggering of an action.
-        
-        @param action reference to the action that was triggered (QAction)
-        """
-        idx = self.index(action)
-        if idx.isValid():
-            self._keyboardModifiers = QApplication.keyboardModifiers()
-            self.activated[QModelIndex].emit(idx)
-    
-    def index(self, action):
-        """
-        Public method to get the index of an action.
-        
-        @param action reference to the action to get the index for (QAction)
-        @return index of the action (QModelIndex)
-        """
-        if action is None:
-            return QModelIndex()
-        
-        idx = action.data()
-        if idx is None:
-            return QModelIndex()
-        
-        if not isinstance(idx, QModelIndex):
-            return QModelIndex()
-        
-        return idx
-    
-    def dragEnterEvent(self, evt):
-        """
-        Protected method to handle drag enter events.
-        
-        @param evt reference to the event (QDragEnterEvent)
-        """
-        if self.__model is not None:
-            mimeTypes = self.__model.mimeTypes()
-            for mimeType in mimeTypes:
-                if evt.mimeData().hasFormat(mimeType):
-                    evt.acceptProposedAction()
-        
-        super().dragEnterEvent(evt)
-    
-    def dropEvent(self, evt):
-        """
-        Protected method to handle drop events.
-        
-        @param evt reference to the event (QDropEvent)
-        """
-        if self.__model is not None:
-            act = self.actionAt(evt.position().toPoint())
-            parentIndex = self.__root
-            if act is None:
-                row = self.__model.rowCount(self.__root)
-            else:
-                idx = self.index(act)
-                if not idx.isValid():
-                    super().dropEvent(evt)
-                    return
-                
-                row = idx.row()
-                if self.__model.hasChildren(idx):
-                    parentIndex = idx
-                    row = self.__model.rowCount(idx)
-            
-            self.__dropRow = row
-            self.__dropIndex = parentIndex
-            evt.acceptProposedAction()
-            self.__model.dropMimeData(evt.mimeData(), evt.dropAction(),
-                                      row, 0, parentIndex)
-            self.close()
-        
-        super().dropEvent(evt)
-    
-    def mousePressEvent(self, evt):
-        """
-        Protected method handling mouse press events.
-        
-        @param evt reference to the event object (QMouseEvent)
-        """
-        if evt.button() == Qt.MouseButton.LeftButton:
-            self.__dragStartPosition = evt.position().toPoint()
-        super().mousePressEvent(evt)
-    
-    def mouseMoveEvent(self, evt):
-        """
-        Protected method to handle mouse move events.
-        
-        @param evt reference to the event (QMouseEvent)
-        """
-        if self.__model is None:
-            super().mouseMoveEvent(evt)
-            return
-        
-        if not (evt.buttons() & Qt.MouseButton.LeftButton):
-            super().mouseMoveEvent(evt)
-            return
-        
-        if self.__dragStartPosition.isNull():
-            super().mouseMoveEvent(evt)
-            return
-        
-        manhattanLength = (evt.position().toPoint() -
-                           self.__dragStartPosition).manhattanLength()
-        if manhattanLength <= QApplication.startDragDistance():
-            super().mouseMoveEvent(evt)
-            return
-        
-        act = self.actionAt(self.__dragStartPosition)
-        if act is None:
-            super().mouseMoveEvent(evt)
-            return
-        
-        idx = self.index(act)
-        if not idx.isValid():
-            super().mouseMoveEvent(evt)
-            return
-        
-        drag = QDrag(self)
-        drag.setMimeData(self.__model.mimeData([idx]))
-        actionRect = self.actionGeometry(act)
-        drag.setPixmap(self.grab(actionRect))
-        
-        if drag.exec() == Qt.DropAction.MoveAction:
-            row = idx.row()
-            if self.__dropIndex == idx.parent() and self.__dropRow <= row:
-                row += 1
-            self.__model.removeRow(row, self.__root)
-            
-            if not self.isAncestorOf(drag.target()):
-                self.close()
-            else:
-                self.aboutToShow.emit()
-    
-    def mouseReleaseEvent(self, evt):
-        """
-        Protected method handling mouse release events.
-        
-        @param evt reference to the event object (QMouseEvent)
-        """
-        self._mouseButton = evt.button()
-        self._keyboardModifiers = evt.modifiers()
-        
-        if evt.button() == Qt.MouseButton.LeftButton:
-            self.__dragStartPosition = QPoint()
-        
-        super().mouseReleaseEvent(evt)
-    
-    def resetFlags(self):
-        """
-        Public method to reset the saved internal state.
-        """
-        self._mouseButton = Qt.MouseButton.NoButton
-        self._keyboardModifiers = Qt.KeyboardModifier.NoModifier
-    
-    def removeEntry(self, idx):
-        """
-        Public method to remove a menu entry.
-        
-        @param idx index of the entry to be removed (QModelIndex)
-        """
-        row = idx.row()
-        self.__model.removeRow(row, self.__root)
-        self.aboutToShow.emit()
--- a/eric7/E5Gui/EricModelToolBar.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,293 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a tool bar populated from a QAbstractItemModel.
-"""
-
-from PyQt6.QtCore import pyqtSignal, Qt, QModelIndex, QPoint, QEvent
-from PyQt6.QtGui import QDrag, QIcon
-from PyQt6.QtWidgets import QApplication, QToolBar, QToolButton
-
-
-class EricModelToolBar(QToolBar):
-    """
-    Class implementing a tool bar populated from a QAbstractItemModel.
-    
-    @signal activated(QModelIndex) emitted when an action has been triggered
-    """
-    activated = pyqtSignal(QModelIndex)
-    
-    def __init__(self, title=None, parent=None):
-        """
-        Constructor
-        
-        @param title title for the tool bar (string)
-        @param parent reference to the parent widget (QWidget)
-        """
-        if title is not None:
-            super().__init__(title, parent)
-        else:
-            super().__init__(parent)
-        
-        self.__model = None
-        
-        self.__root = QModelIndex()
-        self.__dragStartPosition = QPoint()
-        
-        if self.isVisible():
-            self._build()
-        
-        self.setAcceptDrops(True)
-        
-        self._mouseButton = Qt.MouseButton.NoButton
-        self._keyboardModifiers = Qt.KeyboardModifier.NoModifier
-        self.__dropRow = -1
-        self.__dropIndex = None
-    
-    def setModel(self, model):
-        """
-        Public method to set the model for the tool bar.
-        
-        @param model reference to the model (QAbstractItemModel)
-        """
-        if self.__model is not None:
-            self.__model.modelReset.disconnect(self._build)
-            self.__model.rowsInserted[QModelIndex, int, int].disconnect(
-                self._build)
-            self.__model.rowsRemoved[QModelIndex, int, int].disconnect(
-                self._build)
-            self.__model.dataChanged.disconnect(
-                self._build)
-        
-        self.__model = model
-        
-        if self.__model is not None:
-            self.__model.modelReset.connect(self._build)
-            self.__model.rowsInserted[QModelIndex, int, int].connect(
-                self._build)
-            self.__model.rowsRemoved[QModelIndex, int, int].connect(
-                self._build)
-            self.__model.dataChanged.connect(
-                self._build)
-    
-    def model(self):
-        """
-        Public method to get a reference to the model.
-        
-        @return reference to the model (QAbstractItemModel)
-        """
-        return self.__model
-    
-    def setRootIndex(self, idx):
-        """
-        Public method to set the root index.
-        
-        @param idx index to be set as the root index (QModelIndex)
-        """
-        self.__root = idx
-    
-    def rootIndex(self):
-        """
-        Public method to get the root index.
-        
-        @return root index (QModelIndex)
-        """
-        return self.__root
-    
-    def _build(self):
-        """
-        Protected slot to build the tool bar.
-        """
-        if self.__model is None:
-            return
-        
-        self.clear()
-        
-        for i in range(self.__model.rowCount(self.__root)):
-            idx = self.__model.index(i, 0, self.__root)
-            
-            title = idx.data(Qt.ItemDataRole.DisplayRole)
-            icon = idx.data(Qt.ItemDataRole.DecorationRole)
-            if icon == NotImplemented or icon is None:
-                icon = QIcon()
-            folder = self.__model.hasChildren(idx)
-            
-            act = self.addAction(icon, title)
-            act.setData(idx)
-            
-            button = self.widgetForAction(act)
-            button.installEventFilter(self)
-            
-            if folder:
-                menu = self._createMenu()
-                menu.setModel(self.__model)
-                menu.setRootIndex(idx)
-                button.setMenu(menu)
-                button.setPopupMode(
-                    QToolButton.ToolButtonPopupMode.InstantPopup)
-                button.setToolButtonStyle(
-                    Qt.ToolButtonStyle.ToolButtonTextBesideIcon)
-    
-    def index(self, action):
-        """
-        Public method to get the index of an action.
-        
-        @param action reference to the action to get the index for (QAction)
-        @return index of the action (QModelIndex)
-        """
-        if action is None:
-            return QModelIndex()
-        
-        idx = action.data()
-        if idx is None:
-            return QModelIndex()
-        
-        if not isinstance(idx, QModelIndex):
-            return QModelIndex()
-        
-        return idx
-    
-    def _createMenu(self):
-        """
-        Protected method to create the menu for a tool bar action.
-        
-        @return menu for a tool bar action (EricModelMenu)
-        """
-        from .EricModelMenu import EricModelMenu
-        return EricModelMenu(self)
-    
-    def eventFilter(self, obj, evt):
-        """
-        Public method to handle event for other objects.
-        
-        @param obj reference to the object (QObject)
-        @param evt reference to the event (QEvent)
-        @return flag indicating that the event should be filtered out (boolean)
-        """
-        if evt.type() == QEvent.Type.MouseButtonRelease:
-            self._mouseButton = evt.button()
-            self._keyboardModifiers = evt.modifiers()
-            act = obj.defaultAction()
-            idx = self.index(act)
-            if idx.isValid():
-                self.activated[QModelIndex].emit(idx)
-        elif (
-            evt.type() == QEvent.Type.MouseButtonPress and
-            evt.buttons() & Qt.MouseButton.LeftButton
-        ):
-            self.__dragStartPosition = self.mapFromGlobal(evt.globalPosition().toPoint())
-        
-        return False
-    
-    def dragEnterEvent(self, evt):
-        """
-        Protected method to handle drag enter events.
-        
-        @param evt reference to the event (QDragEnterEvent)
-        """
-        if self.__model is not None:
-            mimeTypes = self.__model.mimeTypes()
-            for mimeType in mimeTypes:
-                if evt.mimeData().hasFormat(mimeType):
-                    evt.acceptProposedAction()
-        
-        super().dragEnterEvent(evt)
-    
-    def dropEvent(self, evt):
-        """
-        Protected method to handle drop events.
-        
-        @param evt reference to the event (QDropEvent)
-        @exception RuntimeError raised to indicate an invalid model index
-        """
-        if self.__model is not None:
-            act = self.actionAt(evt.position().toPoint())
-            parentIndex = self.__root
-            if act is None:
-                row = self.__model.rowCount(self.__root)
-            else:
-                idx = self.index(act)
-                if not idx.isValid():
-                    raise RuntimeError("invalid index")
-                row = idx.row()
-                if self.__model.hasChildren(idx):
-                    parentIndex = idx
-                    row = self.__model.rowCount(idx)
-            
-            self.__dropRow = row
-            self.__dropIndex = parentIndex
-            evt.acceptProposedAction()
-            self.__model.dropMimeData(evt.mimeData(), evt.dropAction(),
-                                      row, 0, parentIndex)
-        
-        super().dropEvent(evt)
-    
-    def mouseMoveEvent(self, evt):
-        """
-        Protected method to handle mouse move events.
-        
-        @param evt reference to the event (QMouseEvent)
-        @exception RuntimeError raised to indicate an invalid model index
-        """
-        if self.__model is None:
-            super().mouseMoveEvent(evt)
-            return
-        
-        if not (evt.buttons() & Qt.MouseButton.LeftButton):
-            super().mouseMoveEvent(evt)
-            return
-        
-        manhattanLength = (evt.position().toPoint() -
-                           self.__dragStartPosition).manhattanLength()
-        if manhattanLength <= QApplication.startDragDistance():
-            super().mouseMoveEvent(evt)
-            return
-        
-        act = self.actionAt(self.__dragStartPosition)
-        if act is None:
-            super().mouseMoveEvent(evt)
-            return
-        
-        idx = self.index(act)
-        if not idx.isValid():
-            raise RuntimeError("invalid index")
-        
-        drag = QDrag(self)
-        drag.setMimeData(self.__model.mimeData([idx]))
-        actionRect = self.actionGeometry(act)
-        drag.setPixmap(self.grab(actionRect))
-        
-        if drag.exec() == Qt.DropAction.MoveAction:
-            row = idx.row()
-            if self.__dropIndex == idx.parent() and self.__dropRow <= row:
-                row += 1
-            self.__model.removeRow(row, self.__root)
-    
-    def hideEvent(self, evt):
-        """
-        Protected method to handle hide events.
-        
-        @param evt reference to the hide event (QHideEvent)
-        """
-        self.clear()
-        super().hideEvent(evt)
-    
-    def showEvent(self, evt):
-        """
-        Protected method to handle show events.
-        
-        @param evt reference to the hide event (QHideEvent)
-        """
-        if len(self.actions()) == 0:
-            self._build()
-        super().showEvent(evt)
-    
-    def resetFlags(self):
-        """
-        Public method to reset the saved internal state.
-        """
-        self._mouseButton = Qt.MouseButton.NoButton
-        self._keyboardModifiers = Qt.KeyboardModifier.NoModifier
--- a/eric7/E5Gui/EricOverrideCursor.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a context manager class for an override cursor and a
-QProcess class controlling an override cursor.
-"""
-
-import contextlib
-
-from PyQt6.QtCore import pyqtSlot, Qt, QProcess, QEventLoop
-from PyQt6.QtGui import QCursor, QGuiApplication
-
-
-class EricOverrideCursor(contextlib.AbstractContextManager):
-    """
-    Class implementing a context manager class for an override cursor.
-    """
-    def __init__(self, cursorShape=Qt.CursorShape.WaitCursor):
-        """
-        Constructor
-        
-        @param cursorShape shape of the override cursor
-        @type Qt.CursorShape
-        """
-        self.__cursorShape = cursorShape
-    
-    def __enter__(self):
-        """
-        Special method called when entering the runtime ccontext.
-        
-        @return reference to the context manager object
-        @rtype EricOverrideCursor
-        """
-        QGuiApplication.setOverrideCursor(QCursor(self.__cursorShape))
-        QGuiApplication.processEvents(
-            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
-        
-        return self
-    
-    def __exit__(self, exc_type, exc_value, traceback):
-        """
-        Special method called when exiting the runtime ccontext.
-        
-        @param exc_type type of an exception raised in the runtime context
-        @param exc_value value of an exception raised in the runtime context
-        @param traceback traceback of an exception raised in the runtime
-            context
-        @return always returns None to not suppress any exception
-        @rtype None
-        """
-        QGuiApplication.restoreOverrideCursor()
-        QGuiApplication.processEvents(
-            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
-        
-        return None     # __IGNORE_WARNING_M831__
-
-
-class EricOverridenCursor(contextlib.AbstractContextManager):
-    """
-    Class implementing a context manager class for an overriden cursor.
-    
-    The cursor is reset upon entering the runtime context and restored
-    upon exiting it.
-    """
-    def __init__(self):
-        """
-        Constructor
-        """
-        self.__cursorShape = None
-    
-    def __enter__(self):
-        """
-        Special method called when entering the runtime ccontext.
-        
-        @return reference to the context manager object
-        @rtype EricOverrideCursor
-        """
-        cursor = QGuiApplication.overrideCursor()
-        if cursor is not None:
-            self.__cursorShape = cursor.shape()
-            QGuiApplication.restoreOverrideCursor()
-            QGuiApplication.processEvents(
-                QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
-        
-        return self
-    
-    def __exit__(self, exc_type, exc_value, traceback):
-        """
-        Special method called when exiting the runtime ccontext.
-        
-        @param exc_type type of an exception raised in the runtime context
-        @param exc_value value of an exception raised in the runtime context
-        @param traceback traceback of an exception raised in the runtime
-            context
-        @return always returns None to not suppress any exception
-        @rtype None
-        """
-        if self.__cursorShape is not None:
-            QGuiApplication.setOverrideCursor(QCursor(self.__cursorShape))
-            QGuiApplication.processEvents(
-                QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
-        
-        return None     # __IGNORE_WARNING_M831__
-
-
-class EricOverrideCursorProcess(QProcess):
-    """
-    Class implementing a QProcess subclass controlling an override cursor.
-    """
-    def __init__(self, parent=None, cursorShape=Qt.CursorShape.WaitCursor):
-        """
-        Constructor
-        
-        @param parent reference to the parent object
-        @type QObject
-        @param cursorShape shape of the override cursor
-        @type Qt.CursorShape
-        """
-        super().__init__(parent)
-        
-        self.__cursorShape = cursorShape
-        
-        self.started.connect(self.__processStarted)
-        self.finished.connect(self.__processFinished)
-    
-    @pyqtSlot()
-    def __processStarted(self):
-        """
-        Private slot setting the cursor after the process has started.
-        """
-        QGuiApplication.setOverrideCursor(QCursor(self.__cursorShape))
-        QGuiApplication.processEvents(
-            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
-    
-    @pyqtSlot()
-    def __processFinished(self):
-        """
-        Private slot resetting the cursor when the process finished.
-        """
-        QGuiApplication.restoreOverrideCursor()
-        QGuiApplication.processEvents(
-            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
--- a/eric7/E5Gui/EricPassivePopup.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,254 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing dialog-like popup that displays messages without
-interrupting the user.
-"""
-
-import enum
-
-from PyQt6.QtCore import pyqtSignal, Qt, QTimer, QPoint, QRect
-from PyQt6.QtWidgets import QFrame, QVBoxLayout, QApplication
-
-
-class EricPassivePopupStyle(enum.Enum):
-    """
-    Class defining the popup styles.
-    """
-    BOXED = 0           # box with no shadow
-    STYLED = 1          # styled panel with no shadow
-    CUSTOM = 128        # reserved for extensions
-
-
-class EricPassivePopup(QFrame):
-    """
-    Class implementing dialog-like popup that displays messages without
-    interrupting the user.
-    
-    @signal clicked emitted to indicate a mouse button click
-    """
-    DefaultPopupTime = 6 * 1000     # time im milliseconds
-    
-    clicked = pyqtSignal((), (QPoint, ))
-    
-    def __init__(self, style=EricPassivePopupStyle.BOXED, parent=None):
-        """
-        Constructor
-        
-        @param style style of the popup
-        @type EricPassivePopupStyle
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(None)
-        
-        self.__msgView = None
-        self.__topLayout = None
-        self.__hideDelay = EricPassivePopup.DefaultPopupTime
-        self.__hideTimer = QTimer(self)
-        self.__autoDelete = False
-        self.__fixedPosition = QPoint()
-        
-        self.setWindowFlags(
-            Qt.WindowType.Tool |
-            Qt.WindowType.X11BypassWindowManagerHint |
-            Qt.WindowType.WindowStaysOnTopHint |
-            Qt.WindowType.FramelessWindowHint
-        )
-        if style == EricPassivePopupStyle.STYLED:
-            self.setFrameStyle(QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
-        else:
-            # default style is Boxed - Plain
-            self.setFrameStyle(QFrame.Shape.Box | QFrame.Shadow.Plain)
-        self.setLineWidth(2)
-        self.__hideTimer.timeout.connect(self.hide)
-        self.clicked.connect(self.hide)
-        
-        self.__customData = {}  # dictionary to store some custom data
-    
-    def setView(self, child):
-        """
-        Public method to set the message view.
-        
-        @param child reference to the widget to set as the message view
-            (QWidget)
-        """
-        self.__msgView = child
-        self.__topLayout = QVBoxLayout(self)
-        self.__topLayout.addWidget(self.__msgView)
-        self.__topLayout.activate()
-    
-    def view(self):
-        """
-        Public method to get a reference to the message view.
-        
-        @return reference to the message view (QWidget)
-        """
-        return self.__msgView
-    
-    def setVisible(self, visible):
-        """
-        Public method to show or hide the popup.
-        
-        @param visible flag indicating the visibility status (boolean)
-        """
-        if not visible:
-            super().setVisible(visible)
-            return
-        
-        if self.size() != self.sizeHint():
-            self.resize(self.sizeHint())
-        
-        if self.__fixedPosition.isNull():
-            self.__positionSelf()
-        else:
-            self.move(self.__fixedPosition)
-        super().setVisible(True)
-        
-        delay = self.__hideDelay
-        if delay < 0:
-            delay = EricPassivePopup.DefaultPopupTime
-        if delay > 0:
-            self.__hideTimer.start(delay)
-    
-    def show(self, p=None):
-        """
-        Public slot to show the popup.
-        
-        @param p position for the popup (QPoint)
-        """
-        if p is not None:
-            self.__fixedPosition = p
-        super().show()
-    
-    def setTimeout(self, delay):
-        """
-        Public method to set the delay for the popup is removed automatically.
-        
-        Setting the delay to 0 disables the timeout. If you're doing this, you
-        may want to connect the clicked() signal to the hide() slot. Setting
-        the delay to -1 makes it use the default value.
-        
-        @param delay value for the delay in milliseconds (integer)
-        """
-        self.__hideDelay = delay
-        if self.__hideTimer.isActive():
-            if delay:
-                if delay == -1:
-                    delay = EricPassivePopup.DefaultPopupTime
-                self.__hideTimer.start(delay)
-            else:
-                self.__hideTimer.stop()
-    
-    def timeout(self):
-        """
-        Public method to get the delay before the popup is removed
-        automatically.
-        
-        @return the delay before the popup is removed automatically (integer)
-        """
-        return self.__hideDelay
-    
-    def mouseReleaseEvent(self, evt):
-        """
-        Protected method to handle a mouse release event.
-        
-        @param evt reference to the mouse event (QMouseEvent)
-        """
-        self.clicked.emit()
-        self.clicked.emit(evt.position().toPoint())
-    
-    def hideEvent(self, evt):
-        """
-        Protected method to handle the hide event.
-        
-        @param evt reference to the hide event (QHideEvent)
-        """
-        self.__hideTimer.stop()
-    
-    def __defaultArea(self):
-        """
-        Private method to determine the default rectangle to be passed to
-        moveNear().
-        
-        @return default rectangle (QRect)
-        """
-        return QRect(100, 100, 200, 200)
-    
-    def __positionSelf(self):
-        """
-        Private method to position the popup.
-        """
-        self.__moveNear(self.__defaultArea())
-    
-    def __moveNear(self, target):
-        """
-        Private method to move the popup to be adjacent to the specified
-        rectangle.
-        
-        @param target rectangle to be placed at (QRect)
-        """
-        pos = self.__calculateNearbyPoint(target)
-        self.move(pos.x(), pos.y())
-    
-    def __calculateNearbyPoint(self, target):
-        """
-        Private method to calculate the position to place the popup near the
-        specified rectangle.
-        
-        @param target rectangle to be placed at (QRect)
-        @return position to place the popup (QPoint)
-        """
-        pos = target.topLeft()
-        x = pos.x()
-        y = pos.y()
-        w = self.minimumSizeHint().width()
-        h = self.minimumSizeHint().height()
-        
-        r = QApplication.screenAt(QPoint(x + w // 2, y + h // 2)).geometry()
-        
-        if x < r.center().x():
-            x += target.width()
-        else:
-            x -= w
-        
-        # It's apparently trying to go off screen, so display it ALL at the
-        # bottom.
-        if (y + h) > r.bottom():
-            y = r.bottom() - h
-        
-        if (x + w) > r.right():
-            x = r.right() - w
-        
-        if y < r.top():
-            y = r.top()
-        
-        if x < r.left():
-            x = r.left()
-        
-        return QPoint(x, y)
-    
-    def setCustomData(self, key, data):
-        """
-        Public method to set some custom data.
-        
-        @param key key for the custom data
-        @type str
-        @param data data to be stored
-        @type any
-        """
-        self.__customData[key] = data
-    
-    def getCustomData(self, key):
-        """
-        Public method to get some custom data.
-        
-        @param key key for the custom data
-        @type str
-        @return stored data
-        @rtype any
-        """
-        return self.__customData[key]
--- a/eric7/E5Gui/EricPasswordMeter.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2011 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a custom widget indicating the strength of a password.
-"""
-
-from PyQt6.QtWidgets import QProgressBar
-
-from Utilities.PasswordChecker import PasswordChecker
-
-
-class EricPasswordMeter(QProgressBar):
-    """
-    Class implementing a custom widget indicating the strength of a password.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        
-        super().setTextVisible(False)
-        super().setMaximum(100)
-        self.__increment = 100 // (PasswordChecker.Complexity_VeryStrong + 1)
-        
-        self.__indicatorColors = [
-            "#ff0000",      # red
-            "#ff8800",      # orange
-            "#ffff00",      # yellow
-            "#ccff00",      # yellow green
-            "#00ff00",      # green
-        ]
-        self.__noIndicator = "#ffffff"
-        
-        self.__styleSheetTemplate = (
-            "QProgressBar {{"
-            " border: 2px solid black;"
-            " border-radius: 5px;"
-            " text-align: center; }}"
-            "QProgressBar::chunk:horizontal {{"
-            " background-color: {0}; }}"
-        )
-        self.setStyleSheet(
-            self.__styleSheetTemplate.format(self.__noIndicator))
-    
-    def checkPasswordStrength(self, password):
-        """
-        Public slot to check the password strength and update the
-        progress bar accordingly.
-        
-        @param password password to be checked (string)
-        """
-        strength = PasswordChecker().checkPassword(password)
-        self.setStyleSheet(self.__styleSheetTemplate.format(
-            self.__indicatorColors[strength]))
-        super().setValue(
-            (strength + 1) * self.__increment)
-    
-    def setValue(self, value):
-        """
-        Public method to set the value.
-        
-        Overwritten to do nothing.
-        
-        @param value value (integer)
-        """
-        pass
-    
-    def setMaximum(self, value):
-        """
-        Public method to set the maximum value.
-        
-        Overwritten to do nothing.
-        
-        @param value maximum value (integer)
-        """
-        pass
-    
-    def setMinimum(self, value):
-        """
-        Public method to set the minimal value.
-        
-        Overwritten to do nothing.
-        
-        @param value minimum value (integer)
-        """
-        pass
-
-if __name__ == "__main__":
-    import sys
-    from PyQt6.QtWidgets import QApplication
-    
-    app = QApplication(sys.argv)
-    meter = EricPasswordMeter()
-    meter.show()
-    meter.checkPasswordStrength("Blah2+")
-    app.exec()
--- a/eric7/E5Gui/EricPathPicker.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,718 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a path picker widget.
-"""
-
-import enum
-import os
-
-from PyQt6.QtCore import pyqtSignal, Qt, QFileInfo, QCoreApplication, QDir
-from PyQt6.QtWidgets import (
-    QWidget, QHBoxLayout, QToolButton, QSizePolicy, QLineEdit, QComboBox
-)
-
-from . import EricFileDialog
-from .EricCompleters import EricFileCompleter, EricDirCompleter
-
-import UI.PixmapCache
-
-
-class EricPathPickerModes(enum.Enum):
-    """
-    Class implementing the path picker modes.
-    """
-    OPEN_FILE_MODE = 0
-    OPEN_FILES_MODE = 1
-    SAVE_FILE_MODE = 2
-    SAVE_FILE_ENSURE_EXTENSION_MODE = 3
-    SAVE_FILE_OVERWRITE_MODE = 4
-    DIRECTORY_MODE = 5
-    DIRECTORY_SHOW_FILES_MODE = 6
-    CUSTOM_MODE = 99
-    NO_MODE = 100
-
-
-class EricPathPickerBase(QWidget):
-    """
-    Class implementing the base of a path picker widget consisting of a
-    line edit or combo box and a tool button to open a file dialog.
-    
-    @signal textChanged(path) emitted when the entered path has changed
-        (line edit based widget)
-    @signal editTextChanged(path) emitted when the entered path has changed
-        (combo box based widget)
-    @signal pathSelected(path) emitted after a path has been selected via the
-        file dialog
-    @signal aboutToShowPathPickerDialog emitted before the file dialog is shown
-    @signal pickerButtonClicked emitted when the picker button was pressed and
-        the widget mode is custom
-    """
-    DefaultMode = EricPathPickerModes.NO_MODE
-    
-    textChanged = pyqtSignal(str)
-    editTextChanged = pyqtSignal(str)
-    pathSelected = pyqtSignal(str)
-    aboutToShowPathPickerDialog = pyqtSignal()
-    pickerButtonClicked = pyqtSignal()
-    
-    def __init__(self, parent=None, useLineEdit=True):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget
-        @type QWidget
-        @param useLineEdit flag indicating the use of a line edit
-        @type bool
-        """
-        super().__init__(parent)
-        
-        self.__lineEditKind = useLineEdit
-        
-        self.__mode = EricPathPicker.DefaultMode
-        self.__editorEnabled = True
-        
-        self._completer = None
-        self.__filters = ""
-        self.__defaultDirectory = ""
-        self.__windowTitle = ""
-        
-        self.__layout = QHBoxLayout(self)
-        self.__layout.setSpacing(0)
-        self.__layout.setContentsMargins(0, 0, 0, 0)
-        self.setLayout(self.__layout)
-        
-        if useLineEdit:
-            self._editor = QLineEdit(self)
-            self._editor.setPlaceholderText(QCoreApplication.translate(
-                    "EricPathPickerBase", "Enter Path Name"))
-            self._editor.setClearButtonEnabled(True)
-        else:
-            self._editor = QComboBox(self)
-            self._editor.setEditable(True)
-            self._editor.lineEdit().setPlaceholderText(
-                QCoreApplication.translate(
-                    "EricPathPickerBase", "Enter Path Name"))
-            self._editor.lineEdit().setClearButtonEnabled(True)
-        
-        self.__button = QToolButton(self)
-        self.__button.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
-        self.__button.setIcon(UI.PixmapCache.getIcon("open"))
-        
-        self.__layout.addWidget(self._editor)
-        self.__layout.addWidget(self.__button)
-        
-        self.__button.clicked.connect(self.__showPathPickerDialog)
-        if useLineEdit:
-            self._editor.textEdited.connect(self.__pathEdited)
-            self._editor.textChanged.connect(self.textChanged)
-        else:
-            self._editor.editTextChanged.connect(self.editTextChanged)
-        
-        self.setFocusProxy(self._editor)
-        self.setFocusPolicy(Qt.FocusPolicy.StrongFocus)
-        self.setSizePolicy(QSizePolicy.Policy.Expanding,
-                           QSizePolicy.Policy.Preferred)
-        
-        self.__button.setEnabled(self.__mode != EricPathPickerModes.NO_MODE)
-    
-    def __pathEdited(self, path):
-        """
-        Private slot handling editing of the path.
-        
-        @param path current text of the path line edit
-        @type str
-        """
-        if self._completer and not self._completer.popup().isVisible():
-            self._completer.setRootPath(QDir.toNativeSeparators(path))
-    
-    def setMode(self, mode):
-        """
-        Public method to set the path picker mode.
-        
-        @param mode picker mode
-        @type EricPathPickerModes
-        @exception ValueError raised to indicate a bad parameter value
-        """
-        if mode not in EricPathPickerModes:
-            raise ValueError("Bad value for 'mode' parameter.")
-        
-        oldMode = self.__mode
-        self.__mode = mode
-        
-        if mode != oldMode or (self.__lineEditKind and not self._completer):
-            if self.__lineEditKind and self._completer:
-                # Remove current completer
-                self._editor.setCompleter(None)
-                self._completer = None
-            
-            if mode != EricPathPickerModes.NO_MODE:
-                if self.__lineEditKind:
-                    # Set a new completer
-                    if mode == EricPathPickerModes.DIRECTORY_MODE:
-                        self._completer = EricDirCompleter(self._editor)
-                    else:
-                        self._completer = EricFileCompleter(self._editor)
-                
-                # set inactive text
-                if mode == EricPathPickerModes.OPEN_FILES_MODE:
-                    self._editor.setPlaceholderText(
-                        self.tr("Enter Path Names separated by ';'"))
-                else:
-                    self._editor.setPlaceholderText(
-                        self.tr("Enter Path Name"))
-        self.__button.setEnabled(self.__mode != EricPathPickerModes.NO_MODE)
-    
-    def mode(self):
-        """
-        Public method to get the path picker mode.
-        
-        @return path picker mode
-        @rtype EricPathPickerModes
-        """
-        return self.__mode
-    
-    def setPickerEnabled(self, enable):
-        """
-        Public method to set the enabled state of the file dialog button.
-        
-        @param enable flag indicating the enabled state
-        @type bool
-        """
-        self.__button.setEnabled(enable)
-    
-    def isPickerEnabled(self):
-        """
-        Public method to get the file dialog button enabled state.
-        
-        @return flag indicating the enabled state
-        @rtype bool
-        """
-        return self.__button.isEnabled()
-    
-    def clear(self):
-        """
-        Public method to clear the current path or list of paths.
-        """
-        self._editor.clear()
-    
-    def clearEditText(self):
-        """
-        Public method to clear the current path.
-        """
-        if not self.__lineEditKind:
-            self._editor.clearEditText()
-    
-    def _setEditorText(self, text):
-        """
-        Protected method to set the text of the editor.
-        
-        @param text text to set
-        @type str
-        """
-        if self.__lineEditKind:
-            self._editor.setText(text)
-        else:
-            self._editor.setEditText(text)
-            if text and self._editor.findText(text) == -1:
-                self._editor.insertItem(0, text)
-    
-    def _editorText(self):
-        """
-        Protected method to get the text of the editor.
-        
-        @return text of the editor
-        @rtype str
-        """
-        if self.__lineEditKind:
-            return self._editor.text()
-        else:
-            return self._editor.currentText()
-    
-    def setText(self, path, toNative=True):
-        """
-        Public method to set the current path.
-        
-        @param path path to be set
-        @type str
-        @param toNative flag indicating to convert the path into
-            a native format
-        @type bool
-        """
-        if self.__mode == EricPathPickerModes.OPEN_FILES_MODE:
-            self._setEditorText(path)
-        else:
-            if toNative:
-                path = QDir.toNativeSeparators(path)
-            self._setEditorText(path)
-            if self._completer:
-                self._completer.setRootPath(path)
-    
-    def text(self, toNative=True):
-        """
-        Public method to get the current path.
-        
-        @param toNative flag indicating to convert the path into
-            a native format
-        @type bool
-        @return current path
-        @rtype str
-        """
-        if self.__mode == EricPathPickerModes.OPEN_FILES_MODE:
-            if toNative:
-                return ";".join(
-                    [QDir.toNativeSeparators(path)
-                     for path in self._editorText().split(";")])
-            else:
-                return self._editorText()
-        else:
-            if toNative:
-                return os.path.expanduser(
-                    QDir.toNativeSeparators(self._editorText()))
-            else:
-                return os.path.expanduser(self._editorText())
-    
-    def setEditText(self, path, toNative=True):
-        """
-        Public method to set the current path.
-        
-        @param path path to be set
-        @type str
-        @param toNative flag indicating to convert the path into
-            a native format
-        @type bool
-        """
-        self.setText(path, toNative=toNative)
-    
-    def currentText(self, toNative=True):
-        """
-        Public method to get the current path.
-        
-        @param toNative flag indicating to convert the path into
-            a native format
-        @type bool
-        @return current path
-        @rtype str
-        """
-        return self.text(toNative=toNative)
-    
-    def setPath(self, path, toNative=True):
-        """
-        Public method to set the current path.
-        
-        @param path path to be set
-        @type str
-        @param toNative flag indicating to convert the path into
-            a native format
-        @type bool
-        """
-        self.setText(path, toNative=toNative)
-    
-    def path(self, toNative=True):
-        """
-        Public method to get the current path.
-        
-        @param toNative flag indicating to convert the path into
-            a native format
-        @type bool
-        @return current path
-        @rtype str
-        """
-        return self.text(toNative=toNative)
-    
-    def paths(self, toNative=True):
-        """
-        Public method to get the list of entered paths.
-        
-        @param toNative flag indicating to convert the path into
-            a native format
-        @type bool
-        @return entered paths
-        @rtype list of str
-        """
-        if self.__mode == EricPathPickerModes.OPEN_FILES_MODE:
-            return self.path(toNative=toNative).split(";")
-        else:
-            return [self.path(toNative=toNative)]
-    
-    def firstPath(self, toNative=True):
-        """
-        Public method to get the first path of a list of entered paths.
-        
-        @param toNative flag indicating to convert the path into
-            a native format
-        @type bool
-        @return first path
-        @rtype str
-        """
-        return self.paths(toNative=toNative)[0]
-    
-    def lastPath(self, toNative=True):
-        """
-        Public method to get the last path of a list of entered paths.
-        
-        @param toNative flag indicating to convert the path into
-            a native format
-        @type bool
-        @return last path
-        @rtype str
-        """
-        return self.paths(toNative=toNative)[-1]
-    
-    def setEditorEnabled(self, enable):
-        """
-        Public method to set the path editor's enabled state.
-        
-        @param enable flag indicating the enable state
-        @type bool
-        """
-        if enable != self._editorEnabled:
-            self._editorEnabled = enable
-            self._editor.setEnabled(enable)
-    
-    def editorEnabled(self):
-        """
-        Public method to get the path editor's enabled state.
-        
-        @return flag indicating the enabled state
-        @rtype bool
-        """
-        return self._editorEnabled
-    
-    def setDefaultDirectory(self, directory):
-        """
-        Public method to set the default directory.
-        
-        @param directory default directory
-        @type str
-        """
-        self.__defaultDirectory = directory
-    
-    def defaultDirectory(self):
-        """
-        Public method to get the default directory.
-        
-        @return default directory
-        @rtype str
-        """
-        return self.__defaultDirectory
-    
-    def setWindowTitle(self, title):
-        """
-        Public method to set the path picker dialog window title.
-        
-        @param title window title
-        @type str
-        """
-        self.__windowTitle = title
-    
-    def windowTitle(self):
-        """
-        Public method to get the path picker dialog's window title.
-        
-        @return window title
-        @rtype str
-        """
-        return self.__windowTitle
-    
-    def setFilters(self, filters):
-        """
-        Public method to set the filters for the path picker dialog.
-        
-        Note: Multiple filters must be separated by ';;'.
-        
-        @param filters string containing the file filters
-        @type str
-        """
-        self.__filters = filters
-    
-    def filters(self):
-        """
-        Public methods to get the filter string.
-        
-        @return filter string
-        @rtype str
-        """
-        return self.__filters
-    
-    def setNameFilters(self, filters):
-        """
-        Public method to set the name filters for the completer.
-        
-        @param filters list of file name filters
-        @type list of str
-        """
-        if self._completer:
-            self._completer.model().setNameFilters(filters)
-    
-    def setButtonToolTip(self, tooltip):
-        """
-        Public method to set the tool button tool tip.
-        
-        @param tooltip text to be set as a tool tip
-        @type str
-        """
-        self.__button.setToolTip(tooltip)
-    
-    def buttonToolTip(self):
-        """
-        Public method to get the tool button tool tip.
-        
-        @return tool tip text
-        @rtype str
-        """
-        return self.__button.toolTip()
-    
-    def setEditorToolTip(self, tooltip):
-        """
-        Public method to set the editor tool tip.
-        
-        @param tooltip text to be set as a tool tip
-        @type str
-        """
-        self._editor.setToolTip(tooltip)
-    
-    def editorToolTip(self):
-        """
-        Public method to get the editor tool tip.
-        
-        @return tool tip text
-        @rtype str
-        """
-        return self._editor.toolTip()
-    
-    def __showPathPickerDialog(self):
-        """
-        Private slot to show the path picker dialog.
-        """
-        if self.__mode == EricPathPickerModes.NO_MODE:
-            return
-        
-        if self.__mode == EricPathPickerModes.CUSTOM_MODE:
-            self.pickerButtonClicked.emit()
-            return
-        
-        self.aboutToShowPathPickerDialog.emit()
-        
-        windowTitle = self.__windowTitle
-        if not windowTitle:
-            if self.__mode == EricPathPickerModes.OPEN_FILE_MODE:
-                windowTitle = self.tr("Choose a file to open")
-            elif self.__mode == EricPathPickerModes.OPEN_FILES_MODE:
-                windowTitle = self.tr("Choose files to open")
-            elif self.__mode in [
-                EricPathPickerModes.SAVE_FILE_MODE,
-                    EricPathPickerModes.SAVE_FILE_ENSURE_EXTENSION_MODE,
-                    EricPathPickerModes.SAVE_FILE_OVERWRITE_MODE]:
-                windowTitle = self.tr("Choose a file to save")
-            elif self.__mode == EricPathPickerModes.DIRECTORY_MODE:
-                windowTitle = self.tr("Choose a directory")
-        
-        directory = self._editorText()
-        if not directory and self.__defaultDirectory:
-            directory = self.__defaultDirectory
-        directory = (
-            os.path.expanduser(directory.split(";")[0])
-            if self.__mode == EricPathPickerModes.OPEN_FILES_MODE else
-            os.path.expanduser(directory)
-        )
-        if not os.path.isabs(directory) and self.__defaultDirectory:
-            directory = os.path.join(self.__defaultDirectory, directory)
-        directory = QDir.fromNativeSeparators(directory)
-        
-        if self.__mode == EricPathPickerModes.OPEN_FILE_MODE:
-            path = EricFileDialog.getOpenFileName(
-                self,
-                windowTitle,
-                directory,
-                self.__filters)
-            path = QDir.toNativeSeparators(path)
-        elif self.__mode == EricPathPickerModes.OPEN_FILES_MODE:
-            paths = EricFileDialog.getOpenFileNames(
-                self,
-                windowTitle,
-                directory,
-                self.__filters)
-            path = ";".join([QDir.toNativeSeparators(path)
-                             for path in paths])
-        elif self.__mode == EricPathPickerModes.SAVE_FILE_MODE:
-            path = EricFileDialog.getSaveFileName(
-                self,
-                windowTitle,
-                directory,
-                self.__filters,
-                EricFileDialog.DontConfirmOverwrite)
-            path = QDir.toNativeSeparators(path)
-        elif self.__mode == EricPathPickerModes.SAVE_FILE_ENSURE_EXTENSION_MODE:
-            path, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
-                self,
-                windowTitle,
-                directory,
-                self.__filters,
-                None,
-                EricFileDialog.DontConfirmOverwrite)
-            path = QDir.toNativeSeparators(path)
-            if path:
-                ext = QFileInfo(path).suffix()
-                if not ext:
-                    ex = selectedFilter.split("(*")[1].split(")")[0]
-                    if ex:
-                        path += ex
-        elif self.__mode == EricPathPickerModes.SAVE_FILE_OVERWRITE_MODE:
-            path = EricFileDialog.getSaveFileName(
-                self,
-                windowTitle,
-                directory,
-                self.__filters)
-            path = QDir.toNativeSeparators(path)
-        elif self.__mode == EricPathPickerModes.DIRECTORY_MODE:
-            path = EricFileDialog.getExistingDirectory(
-                self,
-                windowTitle,
-                directory,
-                EricFileDialog.ShowDirsOnly)
-            path = QDir.toNativeSeparators(path)
-            while path.endswith(os.sep):
-                path = path[:-1]
-        elif self.__mode == EricPathPickerModes.DIRECTORY_SHOW_FILES_MODE:
-            path = EricFileDialog.getExistingDirectory(
-                self,
-                windowTitle,
-                directory,
-                EricFileDialog.DontUseNativeDialog)
-            path = QDir.toNativeSeparators(path)
-            while path.endswith(os.sep):
-                path = path[:-1]
-        
-        if path:
-            self._setEditorText(path)
-            self.pathSelected.emit(path)
-    
-    def setReadOnly(self, readOnly):
-        """
-        Public method to set the path picker to read only mode.
-        
-        @param readOnly flag indicating read only mode
-        @type bool
-        """
-        try:
-            self._editor.setReadOnly(readOnly)
-        except AttributeError:
-            self._editor.setEditable(not readOnly)
-        self.setPickerEnabled(not readOnly)
-    
-    def isReadOnly(self):
-        """
-        Public method to check the path picker for read only mode.
-        
-        @return flg indicating read only mode
-        @rtype bool
-        """
-        try:
-            return self._editor.isReadOnly()
-        except AttributeError:
-            return not self._editor.isEditable()
-    
-    ##################################################################
-    ## Methods below emulate some of the QComboBox API
-    ##################################################################
-    
-    def addItems(self, pathsList):
-        """
-        Public method to add paths to the current list.
-        
-        @param pathsList list of paths to add
-        @type list of str
-        """
-        self._editor.addItems(pathsList)
-    
-    def addItem(self, path):
-        """
-        Public method to add a paths to the current list.
-        
-        @param path path to add
-        @type str
-        """
-        self._editor.addItem(path)
-    
-    def setPathsList(self, pathsList):
-        """
-        Public method to set the paths list.
-        
-        @param pathsList list of paths
-        @type list of str
-        """
-        self.clear()
-        self.addItems(pathsList)
-    
-    def setCurrentIndex(self, index):
-        """
-        Public slot to set the current index.
-        
-        @param index index of the item to set current
-        @type int
-        """
-        self._editor.setCurrentIndex(index)
-    
-    def setInsertPolicy(self, policy):
-        """
-        Public method to set the insertion policy of the combo box.
-        
-        @param policy insertion policy
-        @type QComboBox.InsertPolicy
-        """
-        self._editor.setInsertPolicy(policy)
-    
-    def setSizeAdjustPolicy(self, policy):
-        """
-        Public method to set the size adjust policy of the combo box.
-        
-        @param policy size adjust policy
-        @type QComboBox.SizeAdjustPolicy
-        """
-        self._editor.setSizeAdjustPolicy(policy)
-
-
-class EricPathPicker(EricPathPickerBase):
-    """
-    Class implementing a path picker widget consisting of a line edit and a
-    tool button to open a file dialog.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent, useLineEdit=True)
-
-
-class EricComboPathPicker(EricPathPickerBase):
-    """
-    Class implementing a path picker widget consisting of a combobox and a
-    tool button to open a file dialog.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent, useLineEdit=False)
-    
-    def getPathItems(self):
-        """
-        Public method to get the list of remembered paths.
-        
-        @return list od remembered paths
-        @rtype list of str
-        """
-        paths = []
-        for index in range(self._editor.count()):
-            paths.append(self._editor.itemText(index))
-        return paths
--- a/eric7/E5Gui/EricPathPickerDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2018 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to enter a file system path using a file picker.
-"""
-
-from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel
-
-from .EricPathPicker import EricPathPicker, EricPathPickerModes
-
-
-class EricPathPickerDialog(QDialog):
-    """
-    Class implementing a dialog to enter a file system path using a file
-    picker.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-        
-        self.setMinimumWidth(400)
-        
-        self.__layout = QVBoxLayout(self)
-        
-        self.__label = QLabel(self)
-        self.__label.setWordWrap(True)
-        
-        self.__pathPicker = EricPathPicker(self)
-        self.__buttonBox = QDialogButtonBox(
-            QDialogButtonBox.StandardButton.Cancel |
-            QDialogButtonBox.StandardButton.Ok, self)
-        
-        self.__layout.addWidget(self.__label)
-        self.__layout.addWidget(self.__pathPicker)
-        self.__layout.addWidget(self.__buttonBox)
-        
-        self.__buttonBox.accepted.connect(self.accept)
-        self.__buttonBox.rejected.connect(self.reject)
-    
-    def setLabelText(self, text):
-        """
-        Public method to set the label text.
-        
-        @param text label text
-        @type str
-        """
-        self.__label.setText(text)
-    
-    def setTitle(self, title):
-        """
-        Public method to set the window title.
-        
-        @param title window title
-        @type str
-        """
-        self.setWindowTitle(title)
-        self.__pathPicker.setWindowTitle(title)
-    
-    def setPickerMode(self, mode):
-        """
-        Public method to set the mode of the path picker.
-        
-        @param mode picker mode
-        @type EricPathPickerModes
-        """
-        self.__pathPicker.setMode(mode)
-    
-    def setPickerPath(self, path):
-        """
-        Public method to set the path of the path picker.
-        
-        @param path path to be set
-        @type str
-        """
-        self.__pathPicker.setPath(path)
-    
-    def setDefaultDirectory(self, directory):
-        """
-        Public method to set the default directory of the path picker.
-        
-        @param directory default directory
-        @type str
-        """
-        self.__pathPicker.setDefaultDirectory(directory)
-    
-    def setPickerFilters(self, filters):
-        """
-        Public method to set the filters of the path picker.
-        
-        Note: Multiple filters must be separated by ';;'.
-        
-        @param filters string containing the file filters
-        @type str
-        """
-        self.__pathPicker.setFilters(filters)
-    
-    def getPath(self):
-        """
-        Public method to get the current path.
-        
-        @return current path
-        @rtype str
-        """
-        return self.__pathPicker.path()
-
-
-def getPath(parent, title, label, mode=EricPathPickerModes.OPEN_FILE_MODE,
-            path="", defaultDirectory="", filters=None):
-    """
-    Function to get a file or directory path from the user.
-    
-    @param parent reference to the parent widget
-    @type QWidget
-    @param title title of the dialog
-    @type str
-    @param label text to be shown above the path picker
-    @type str
-    @param mode mode of the path picker
-    @type EricPathPickerModes
-    @param path initial path to be shown
-    @type str
-    @param defaultDirectory default directory of the path picker selection
-        dialog
-    @type str
-    @param filters list of file filters
-    @type list of str
-    @return tuple containing the entered path and a flag indicating that the
-        user pressed the OK button
-    @rtype tuple of (str, bool)
-    """
-    # step 1: setup of the dialog
-    dlg = EricPathPickerDialog(parent)
-    if title:
-        dlg.setTitle(title)
-    if label:
-        dlg.setLabelText(label)
-    dlg.setPickerMode(mode)
-    if path:
-        dlg.setPickerPath(path)
-    if defaultDirectory:
-        dlg.setDefaultDirectory(defaultDirectory)
-    if filters is not None and len(filters) > 0:
-        dlg.setPickerFilters(";;".join(filters))
-    
-    # step 2: show the dialog and get the result
-    if dlg.exec() == QDialog.DialogCode.Accepted:
-        ok = True
-        path = dlg.getPath().strip()
-    else:
-        ok = False
-        path = ""
-    
-    # step 3: return the result
-    return path, ok
--- a/eric7/E5Gui/EricPlainTextDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to show some plain text.
-"""
-
-from PyQt6.QtCore import pyqtSlot
-from PyQt6.QtGui import QGuiApplication
-from PyQt6.QtWidgets import QDialog, QDialogButtonBox
-
-from .Ui_EricPlainTextDialog import Ui_EricPlainTextDialog
-
-
-class EricPlainTextDialog(QDialog, Ui_EricPlainTextDialog):
-    """
-    Class implementing a dialog to show some plain text.
-    """
-    def __init__(self, title="", text="", parent=None):
-        """
-        Constructor
-        
-        @param title title of the window
-        @type str
-        @param text text to be shown
-        @type str
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-        self.setupUi(self)
-        
-        self.copyButton = self.buttonBox.addButton(
-            self.tr("Copy to Clipboard"),
-            QDialogButtonBox.ButtonRole.ActionRole)
-        self.copyButton.clicked.connect(self.on_copyButton_clicked)
-        
-        self.setWindowTitle(title)
-        self.textEdit.setPlainText(text)
-    
-    @pyqtSlot()
-    def on_copyButton_clicked(self):
-        """
-        Private slot to copy the text to the clipboard.
-        """
-        txt = self.textEdit.toPlainText()
-        cb = QGuiApplication.clipboard()
-        cb.setText(txt)
--- a/eric7/E5Gui/EricPlainTextDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EricPlainTextDialog</class>
- <widget class="QDialog" name="EricPlainTextDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>500</width>
-    <height>400</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string/>
-  </property>
-  <property name="sizeGripEnabled">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QPlainTextEdit" name="textEdit">
-     <property name="readOnly">
-      <bool>true</bool>
-     </property>
-     <property name="textInteractionFlags">
-      <set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Close</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>EricPlainTextDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>EricPlainTextDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
--- a/eric7/E5Gui/EricProcessDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,314 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2019 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog starting a process and showing its output.
-"""
-
-import os
-import re
-
-from PyQt6.QtCore import (
-    QProcess, QTimer, pyqtSlot, Qt, QCoreApplication, QProcessEnvironment
-)
-from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QLineEdit
-
-from E5Gui import EricMessageBox
-
-from .Ui_EricProcessDialog import Ui_EricProcessDialog
-
-from Globals import strToQByteArray
-import Preferences
-
-
-class EricProcessDialog(QDialog, Ui_EricProcessDialog):
-    """
-    Class implementing a dialog starting a process and showing its output.
-    
-    It starts a QProcess and displays a dialog that shows the output of the
-    process. The dialog is modal, which causes a synchronized execution of
-    the process.
-    """
-    def __init__(self, outputTitle="", windowTitle="", showProgress=False,
-                 parent=None):
-        """
-        Constructor
-        
-        @param outputTitle title for the output group
-        @type str
-        @param windowTitle title of the dialog
-        @type str
-        @param showProgress flag indicating to show a progress bar
-        @type bool
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-        self.setupUi(self)
-        
-        self.buttonBox.button(
-            QDialogButtonBox.StandardButton.Close).setEnabled(False)
-        self.buttonBox.button(
-            QDialogButtonBox.StandardButton.Cancel).setDefault(True)
-        
-        font = Preferences.getEditorOtherFonts("MonospacedFont")
-        self.resultbox.setFontFamily(font.family())
-        self.resultbox.setFontPointSize(font.pointSize())
-        self.errors.setFontFamily(font.family())
-        self.errors.setFontPointSize(font.pointSize())
-        
-        if windowTitle:
-            self.setWindowTitle(windowTitle)
-        if outputTitle:
-            self.outputGroup.setTitle(outputTitle)
-        self.__showProgress = showProgress
-        self.progressBar.setVisible(self.__showProgress)
-        
-        self.__process = None
-        self.__progressRe = re.compile(r"""(\d{1,3})\s*%""")
-        
-        self.show()
-        QCoreApplication.processEvents()
-    
-    def __finish(self):
-        """
-        Private slot called when the process finished or the user pressed
-        the button.
-        """
-        if (
-            self.__process is not None and
-            self.__process.state() != QProcess.ProcessState.NotRunning
-        ):
-            self.__process.terminate()
-            QTimer.singleShot(2000, self.__process.kill)
-            self.__process.waitForFinished(3000)
-        
-        self.inputGroup.setEnabled(False)
-        self.inputGroup.hide()
-        
-        self.__process = None
-        
-        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.Close).setFocus(
-            Qt.FocusReason.OtherFocusReason)
-    
-    def on_buttonBox_clicked(self, button):
-        """
-        Private slot called by a button of the button box clicked.
-        
-        @param button button that was clicked
-        @type QAbstractButton
-        """
-        if button == self.buttonBox.button(
-            QDialogButtonBox.StandardButton.Close
-        ):
-            self.close()
-        elif button == self.buttonBox.button(
-            QDialogButtonBox.StandardButton.Cancel
-        ):
-            self.statusLabel.setText(self.tr("Process canceled."))
-            self.__finish()
-    
-    def __procFinished(self, exitCode, exitStatus):
-        """
-        Private slot connected to the finished signal.
-        
-        @param exitCode exit code of the process
-        @type int
-        @param exitStatus exit status of the process
-        @type QProcess.ExitStatus
-        """
-        self.__normal = (
-            (exitStatus == QProcess.ExitStatus.NormalExit) and
-            (exitCode == 0)
-        )
-        if self.__normal:
-            self.statusLabel.setText(self.tr("Process finished successfully."))
-        elif exitStatus == QProcess.ExitStatus.CrashExit:
-            self.statusLabel.setText(self.tr("Process crashed."))
-        else:
-            self.statusLabel.setText(
-                self.tr("Process finished with exit code {0}")
-                .format(exitCode))
-        self.__finish()
-    
-    def startProcess(self, program, args, workingDir=None, showArgs=True,
-                     environment=None):
-        """
-        Public slot used to start the process.
-        
-        @param program path of the program to be executed
-        @type str
-        @param args list of arguments for the process
-        @type list of str
-        @param workingDir working directory for the process
-        @type str
-        @param showArgs flag indicating to show the arguments
-        @type bool
-        @param environment dictionary of environment settings to add
-            or change for the process
-        @type dict
-        @return flag indicating a successful start of the process
-        @rtype bool
-        """
-        self.errorGroup.hide()
-        self.__normal = False
-        self.__intercept = False
-        
-        if environment is None:
-            environment = {}
-        
-        if showArgs:
-            self.resultbox.append(program + ' ' + ' '.join(args))
-            self.resultbox.append('')
-        
-        self.__process = QProcess()
-        if environment:
-            env = QProcessEnvironment.systemEnvironment()
-            for key, value in environment.items():
-                env.insert(key, value)
-            self.__process.setProcessEnvironment(env)
-        
-        self.__process.finished.connect(self.__procFinished)
-        self.__process.readyReadStandardOutput.connect(self.__readStdout)
-        self.__process.readyReadStandardError.connect(self.__readStderr)
-        
-        if workingDir:
-            self.__process.setWorkingDirectory(workingDir)
-        
-        self.__process.start(program, args)
-        procStarted = self.__process.waitForStarted(10000)
-        if not procStarted:
-            self.buttonBox.setFocus()
-            self.inputGroup.setEnabled(False)
-            EricMessageBox.critical(
-                self,
-                self.tr('Process Generation Error'),
-                self.tr(
-                    '<p>The process <b>{0}</b> could not be started.</p>'
-                ).format(program))
-        else:
-            self.inputGroup.setEnabled(True)
-            self.inputGroup.show()
-        
-        return procStarted
-    
-    def normalExit(self):
-        """
-        Public method to check for a normal process termination.
-        
-        @return flag indicating normal process termination
-        @rtype bool
-        """
-        return self.__normal
-    
-    def normalExitWithoutErrors(self):
-        """
-        Public method to check for a normal process termination without
-        error messages.
-        
-        @return flag indicating normal process termination
-        @rtype bool
-        """
-        return self.__normal and self.errors.toPlainText() == ""
-    
-    def __readStdout(self):
-        """
-        Private slot to handle the readyReadStandardOutput signal.
-        
-        It reads the output of the process and inserts it into the
-        output pane.
-        """
-        if self.__process is not None:
-            s = str(self.__process.readAllStandardOutput(),
-                    Preferences.getSystem("IOEncoding"),
-                    'replace')
-            if self.__showProgress:
-                match = self.__progressRe.search(s)
-                if match:
-                    progress = int(match.group(1))
-                    self.progressBar.setValue(progress)
-                    if not s.endswith("\n"):
-                        s += "\n"
-            self.resultbox.insertPlainText(s)
-            self.resultbox.ensureCursorVisible()
-            
-            QCoreApplication.processEvents()
-    
-    def __readStderr(self):
-        """
-        Private slot to handle the readyReadStandardError signal.
-        
-        It reads the error output of the process and inserts it into the
-        error pane.
-        """
-        if self.__process is not None:
-            s = str(self.__process.readAllStandardError(),
-                    Preferences.getSystem("IOEncoding"),
-                    'replace')
-            
-            self.errorGroup.show()
-            self.errors.insertPlainText(s)
-            self.errors.ensureCursorVisible()
-            
-            QCoreApplication.processEvents()
-    
-    def on_passwordCheckBox_toggled(self, isOn):
-        """
-        Private slot to handle the password checkbox toggled.
-        
-        @param isOn flag indicating the status of the check box
-        @type bool
-        """
-        if isOn:
-            self.input.setEchoMode(QLineEdit.EchoMode.Password)
-        else:
-            self.input.setEchoMode(QLineEdit.EchoMode.Normal)
-    
-    @pyqtSlot()
-    def on_sendButton_clicked(self):
-        """
-        Private slot to send the input to the git process.
-        """
-        inputTxt = self.input.text()
-        inputTxt += os.linesep
-        
-        if self.passwordCheckBox.isChecked():
-            self.errors.insertPlainText(os.linesep)
-            self.errors.ensureCursorVisible()
-        else:
-            self.errors.insertPlainText(inputTxt)
-            self.errors.ensureCursorVisible()
-        
-        self.__process.write(strToQByteArray(inputTxt))
-        
-        self.passwordCheckBox.setChecked(False)
-        self.input.clear()
-    
-    def on_input_returnPressed(self):
-        """
-        Private slot to handle the press of the return key in the input field.
-        """
-        self.__intercept = True
-        self.on_sendButton_clicked()
-    
-    def keyPressEvent(self, evt):
-        """
-        Protected slot to handle a key press event.
-        
-        @param evt the key press event (QKeyEvent)
-        """
-        if self.__intercept:
-            self.__intercept = False
-            evt.accept()
-            return
-        
-        super().keyPressEvent(evt)
--- a/eric7/E5Gui/EricProcessDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EricProcessDialog</class>
- <widget class="QDialog" name="EricProcessDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>600</width>
-    <height>500</height>
-   </rect>
-  </property>
-  <property name="sizeGripEnabled">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QGroupBox" name="outputGroup">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
-       <horstretch>0</horstretch>
-       <verstretch>2</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="title">
-      <string>Output</string>
-     </property>
-     <layout class="QVBoxLayout">
-      <item>
-       <widget class="QTextEdit" name="resultbox">
-        <property name="readOnly">
-         <bool>true</bool>
-        </property>
-        <property name="acceptRichText">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QProgressBar" name="progressBar">
-     <property name="value">
-      <number>0</number>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QLabel" name="statusLabel"/>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="errorGroup">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
-       <horstretch>0</horstretch>
-       <verstretch>1</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="title">
-      <string>Errors</string>
-     </property>
-     <layout class="QVBoxLayout">
-      <item>
-       <widget class="QTextEdit" name="errors">
-        <property name="readOnly">
-         <bool>true</bool>
-        </property>
-        <property name="acceptRichText">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="inputGroup">
-     <property name="title">
-      <string>Input</string>
-     </property>
-     <layout class="QGridLayout">
-      <item row="1" column="1">
-       <spacer>
-        <property name="orientation">
-         <enum>Qt::Horizontal</enum>
-        </property>
-        <property name="sizeType">
-         <enum>QSizePolicy::Expanding</enum>
-        </property>
-        <property name="sizeHint" stdset="0">
-         <size>
-          <width>327</width>
-          <height>29</height>
-         </size>
-        </property>
-       </spacer>
-      </item>
-      <item row="1" column="2">
-       <widget class="QPushButton" name="sendButton">
-        <property name="toolTip">
-         <string>Press to send the input to the running process</string>
-        </property>
-        <property name="text">
-         <string>&amp;Send</string>
-        </property>
-        <property name="shortcut">
-         <string>Alt+S</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="0" colspan="3">
-       <widget class="QLineEdit" name="input">
-        <property name="toolTip">
-         <string>Enter data to be sent to the running process</string>
-        </property>
-        <property name="clearButtonEnabled">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QCheckBox" name="passwordCheckBox">
-        <property name="toolTip">
-         <string>Select to switch the input field to password mode</string>
-        </property>
-        <property name="text">
-         <string>&amp;Password Mode</string>
-        </property>
-        <property name="shortcut">
-         <string>Alt+P</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Close</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
- <tabstops>
-  <tabstop>resultbox</tabstop>
-  <tabstop>errors</tabstop>
-  <tabstop>input</tabstop>
-  <tabstop>passwordCheckBox</tabstop>
-  <tabstop>sendButton</tabstop>
-  <tabstop>buttonBox</tabstop>
- </tabstops>
- <resources/>
- <connections/>
-</ui>
--- a/eric7/E5Gui/EricProgressDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2013 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a progress dialog allowing a customized progress bar label.
-"""
-
-from PyQt6.QtCore import Qt
-from PyQt6.QtWidgets import QProgressBar, QProgressDialog
-
-
-class EricProgressDialog(QProgressDialog):
-    """
-    Class implementing a progress dialog allowing a customized progress bar
-    label.
-    """
-    def __init__(self, labelText, cancelButtonText, minimum, maximum,
-                 labelFormat=None, parent=None, flags=None):
-        """
-        Constructor
-        
-        @param labelText text of the dialog label (string)
-        @param cancelButtonText text of the cancel button (string)
-        @param minimum minimum value (integer)
-        @param maximum maximum value (integer)
-        @param labelFormat label format of the progress bar (string)
-        @param parent reference to the parent widget (QWidget)
-        @param flags window flags of the dialog (Qt.WindowFlags)
-        """
-        if flags is None:
-            flags = Qt.WindowType(0)
-        super().__init__(
-            labelText, cancelButtonText, minimum, maximum, parent, flags)
-        
-        self.__progressBar = QProgressBar(self)
-        self.__progressBar.setMinimum(minimum)
-        self.__progressBar.setMaximum(maximum)
-        if labelFormat:
-            self.__progressBar.setFormat(labelFormat)
-        
-        self.setBar(self.__progressBar)
-    
-    def format(self):
-        """
-        Public method to get the progress bar format.
-        
-        @return progress bar format (string)
-        """
-        return self.__progressBar.format()
-    
-    def setFormat(self, labelFormat):
-        """
-        Public method to set the progress bar format.
-        
-        @param labelFormat progress bar format (string)
-        """
-        self.__progressBar.setFormat(labelFormat)
--- a/eric7/E5Gui/EricSideBar.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,706 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a sidebar class.
-"""
-
-import enum
-import json
-
-from PyQt6.QtCore import QEvent, QSize, Qt, QTimer
-from PyQt6.QtWidgets import (
-    QTabBar, QWidget, QStackedWidget, QBoxLayout, QToolButton, QSizePolicy
-)
-
-from E5Gui.EricApplication import ericApp
-
-import UI.PixmapCache
-
-
-class EricSideBarSide(enum.Enum):
-    """
-    Class defining the sidebar sides.
-    """
-    NORTH = 0
-    EAST = 1
-    SOUTH = 2
-    WEST = 3
-
-
-class EricSideBar(QWidget):
-    """
-    Class implementing a sidebar with a widget area, that is hidden or shown,
-    if the current tab is clicked again.
-    """
-    Version = 2
-    
-    def __init__(self, orientation=None, delay=200, parent=None):
-        """
-        Constructor
-        
-        @param orientation orientation of the sidebar widget
-        @type EricSideBarSide
-        @param delay value for the expand/shrink delay in milliseconds
-        @type int
-        @param parent parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-        
-        self.__tabBar = QTabBar()
-        self.__tabBar.setDrawBase(True)
-        self.__tabBar.setShape(QTabBar.Shape.RoundedNorth)
-        self.__tabBar.setUsesScrollButtons(True)
-        self.__tabBar.setDrawBase(False)
-        self.__stackedWidget = QStackedWidget(self)
-        self.__stackedWidget.setContentsMargins(0, 0, 0, 0)
-        self.__autoHideButton = QToolButton()
-        self.__autoHideButton.setCheckable(True)
-        self.__autoHideButton.setIcon(
-            UI.PixmapCache.getIcon("autoHideOff"))
-        self.__autoHideButton.setChecked(True)
-        self.__autoHideButton.setToolTip(
-            self.tr("Deselect to activate automatic collapsing"))
-        self.barLayout = QBoxLayout(QBoxLayout.Direction.LeftToRight)
-        self.barLayout.setContentsMargins(0, 0, 0, 0)
-        self.layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
-        self.layout.setContentsMargins(0, 0, 0, 0)
-        self.layout.setSpacing(0)
-        self.barLayout.addWidget(self.__autoHideButton)
-        self.barLayout.addWidget(self.__tabBar)
-        self.layout.addLayout(self.barLayout)
-        self.layout.addWidget(self.__stackedWidget)
-        self.setLayout(self.layout)
-        
-        # initialize the delay timer
-        self.__actionMethod = None
-        self.__delayTimer = QTimer(self)
-        self.__delayTimer.setSingleShot(True)
-        self.__delayTimer.setInterval(delay)
-        self.__delayTimer.timeout.connect(self.__delayedAction)
-        
-        self.__minimized = False
-        self.__minSize = 0
-        self.__maxSize = 0
-        self.__bigSize = QSize()
-        
-        self.splitter = None
-        self.splitterSizes = []
-        
-        self.__hasFocus = False
-        # flag storing if this widget or any child has the focus
-        self.__autoHide = False
-        
-        self.__tabBar.installEventFilter(self)
-        
-        self.__orientation = EricSideBarSide.NORTH
-        if orientation is None:
-            orientation = EricSideBarSide.NORTH
-        self.setOrientation(orientation)
-        
-        self.__tabBar.currentChanged[int].connect(
-            self.__stackedWidget.setCurrentIndex)
-        ericApp().focusChanged.connect(self.__appFocusChanged)
-        self.__autoHideButton.toggled[bool].connect(self.__autoHideToggled)
-    
-    def setSplitter(self, splitter):
-        """
-        Public method to set the splitter managing the sidebar.
-        
-        @param splitter reference to the splitter (QSplitter)
-        """
-        self.splitter = splitter
-        self.splitter.splitterMoved.connect(self.__splitterMoved)
-        self.splitter.setChildrenCollapsible(False)
-        index = self.splitter.indexOf(self)
-        self.splitter.setCollapsible(index, False)
-    
-    def __splitterMoved(self, pos, index):
-        """
-        Private slot to react on splitter moves.
-        
-        @param pos new position of the splitter handle (integer)
-        @param index index of the splitter handle (integer)
-        """
-        if self.splitter:
-            self.splitterSizes = self.splitter.sizes()
-    
-    def __delayedAction(self):
-        """
-        Private slot to handle the firing of the delay timer.
-        """
-        if self.__actionMethod is not None:
-            self.__actionMethod()
-    
-    def setDelay(self, delay):
-        """
-        Public method to set the delay value for the expand/shrink delay in
-        milliseconds.
-        
-        @param delay value for the expand/shrink delay in milliseconds
-            (integer)
-        """
-        self.__delayTimer.setInterval(delay)
-    
-    def delay(self):
-        """
-        Public method to get the delay value for the expand/shrink delay in
-        milliseconds.
-        
-        @return value for the expand/shrink delay in milliseconds (integer)
-        """
-        return self.__delayTimer.interval()
-    
-    def __cancelDelayTimer(self):
-        """
-        Private method to cancel the current delay timer.
-        """
-        self.__delayTimer.stop()
-        self.__actionMethod = None
-    
-    def shrink(self):
-        """
-        Public method to record a shrink request.
-        """
-        self.__delayTimer.stop()
-        self.__actionMethod = self.__shrinkIt
-        self.__delayTimer.start()
-   
-    def __shrinkIt(self):
-        """
-        Private method to shrink the sidebar.
-        """
-        self.__minimized = True
-        self.__bigSize = self.size()
-        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
-            self.__minSize = self.minimumSizeHint().height()
-            self.__maxSize = self.maximumHeight()
-        else:
-            self.__minSize = self.minimumSizeHint().width()
-            self.__maxSize = self.maximumWidth()
-        if self.splitter:
-            self.splitterSizes = self.splitter.sizes()
-        
-        self.__stackedWidget.hide()
-        
-        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
-            self.setFixedHeight(self.__tabBar.minimumSizeHint().height())
-        else:
-            self.setFixedWidth(self.__tabBar.minimumSizeHint().width())
-        
-        self.__actionMethod = None
-    
-    def expand(self):
-        """
-        Public method to record a expand request.
-        """
-        self.__delayTimer.stop()
-        self.__actionMethod = self.__expandIt
-        self.__delayTimer.start()
-    
-    def __expandIt(self):
-        """
-        Private method to expand the sidebar.
-        """
-        self.__minimized = False
-        self.__stackedWidget.show()
-        self.resize(self.__bigSize)
-        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
-            minSize = max(self.__minSize, self.minimumSizeHint().height())
-            self.setMinimumHeight(minSize)
-            self.setMaximumHeight(self.__maxSize)
-        else:
-            minSize = max(self.__minSize, self.minimumSizeHint().width())
-            self.setMinimumWidth(minSize)
-            self.setMaximumWidth(self.__maxSize)
-        if self.splitter:
-            self.splitter.setSizes(self.splitterSizes)
-        
-        self.__actionMethod = None
-    
-    def isMinimized(self):
-        """
-        Public method to check the minimized state.
-        
-        @return flag indicating the minimized state (boolean)
-        """
-        return self.__minimized
-    
-    def isAutoHiding(self):
-        """
-        Public method to check, if the auto hide function is active.
-        
-        @return flag indicating the state of auto hiding (boolean)
-        """
-        return self.__autoHide
-    
-    def eventFilter(self, obj, evt):
-        """
-        Public method to handle some events for the tabbar.
-        
-        @param obj reference to the object (QObject)
-        @param evt reference to the event object (QEvent)
-        @return flag indicating, if the event was handled (boolean)
-        """
-        if obj == self.__tabBar:
-            if evt.type() == QEvent.Type.MouseButtonPress:
-                pos = evt.position().toPoint()
-                for i in range(self.__tabBar.count()):
-                    if self.__tabBar.tabRect(i).contains(pos):
-                        break
-                
-                if i == self.__tabBar.currentIndex():
-                    if self.isMinimized():
-                        self.expand()
-                    else:
-                        self.shrink()
-                    return True
-                elif self.isMinimized():
-                    self.expand()
-            elif evt.type() == QEvent.Type.Wheel:
-                delta = evt.angleDelta().y()
-                if delta > 0:
-                    self.prevTab()
-                else:
-                    self.nextTab()
-                return True
-        
-        return QWidget.eventFilter(self, obj, evt)
-    
-    def addTab(self, widget, iconOrLabel, label=None):
-        """
-        Public method to add a tab to the sidebar.
-        
-        @param widget reference to the widget to add (QWidget)
-        @param iconOrLabel reference to the icon or the label text of the tab
-            (QIcon, string)
-        @param label the labeltext of the tab (string) (only to be
-            used, if the second parameter is a QIcon)
-        """
-        if label:
-            index = self.__tabBar.addTab(iconOrLabel, label)
-            self.__tabBar.setTabToolTip(index, label)
-        else:
-            index = self.__tabBar.addTab(iconOrLabel)
-            self.__tabBar.setTabToolTip(index, iconOrLabel)
-        self.__stackedWidget.addWidget(widget)
-        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
-            self.__minSize = self.minimumSizeHint().height()
-        else:
-            self.__minSize = self.minimumSizeHint().width()
-    
-    def insertTab(self, index, widget, iconOrLabel, label=None):
-        """
-        Public method to insert a tab into the sidebar.
-        
-        @param index the index to insert the tab at (integer)
-        @param widget reference to the widget to insert (QWidget)
-        @param iconOrLabel reference to the icon or the labeltext of the tab
-            (QIcon, string)
-        @param label the labeltext of the tab (string) (only to be
-            used, if the second parameter is a QIcon)
-        """
-        if label:
-            index = self.__tabBar.insertTab(index, iconOrLabel, label)
-            self.__tabBar.setTabToolTip(index, label)
-        else:
-            index = self.__tabBar.insertTab(index, iconOrLabel)
-            self.__tabBar.setTabToolTip(index, iconOrLabel)
-        self.__stackedWidget.insertWidget(index, widget)
-        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
-            self.__minSize = self.minimumSizeHint().height()
-        else:
-            self.__minSize = self.minimumSizeHint().width()
-    
-    def removeTab(self, index):
-        """
-        Public method to remove a tab.
-        
-        @param index the index of the tab to remove (integer)
-        """
-        self.__stackedWidget.removeWidget(self.__stackedWidget.widget(index))
-        self.__tabBar.removeTab(index)
-        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
-            self.__minSize = self.minimumSizeHint().height()
-        else:
-            self.__minSize = self.minimumSizeHint().width()
-    
-    def clear(self):
-        """
-        Public method to remove all tabs.
-        """
-        while self.count() > 0:
-            self.removeTab(0)
-    
-    def prevTab(self):
-        """
-        Public slot used to show the previous tab.
-        """
-        ind = self.currentIndex() - 1
-        if ind == -1:
-            ind = self.count() - 1
-            
-        self.setCurrentIndex(ind)
-        self.currentWidget().setFocus()
-    
-    def nextTab(self):
-        """
-        Public slot used to show the next tab.
-        """
-        ind = self.currentIndex() + 1
-        if ind == self.count():
-            ind = 0
-            
-        self.setCurrentIndex(ind)
-        self.currentWidget().setFocus()
-    
-    def count(self):
-        """
-        Public method to get the number of tabs.
-        
-        @return number of tabs in the sidebar (integer)
-        """
-        return self.__tabBar.count()
-    
-    def currentIndex(self):
-        """
-        Public method to get the index of the current tab.
-        
-        @return index of the current tab (integer)
-        """
-        return self.__stackedWidget.currentIndex()
-    
-    def setCurrentIndex(self, index):
-        """
-        Public slot to set the current index.
-        
-        @param index the index to set as the current index (integer)
-        """
-        self.__tabBar.setCurrentIndex(index)
-        self.__stackedWidget.setCurrentIndex(index)
-        if self.isMinimized():
-            self.expand()
-    
-    def currentWidget(self):
-        """
-        Public method to get a reference to the current widget.
-        
-        @return reference to the current widget (QWidget)
-        """
-        return self.__stackedWidget.currentWidget()
-    
-    def setCurrentWidget(self, widget):
-        """
-        Public slot to set the current widget.
-        
-        @param widget reference to the widget to become the current widget
-            (QWidget)
-        """
-        self.__stackedWidget.setCurrentWidget(widget)
-        self.__tabBar.setCurrentIndex(self.__stackedWidget.currentIndex())
-        if self.isMinimized():
-            self.expand()
-    
-    def indexOf(self, widget):
-        """
-        Public method to get the index of the given widget.
-        
-        @param widget reference to the widget to get the index of (QWidget)
-        @return index of the given widget (integer)
-        """
-        return self.__stackedWidget.indexOf(widget)
-    
-    def isTabEnabled(self, index):
-        """
-        Public method to check, if a tab is enabled.
-        
-        @param index index of the tab to check (integer)
-        @return flag indicating the enabled state (boolean)
-        """
-        return self.__tabBar.isTabEnabled(index)
-    
-    def setTabEnabled(self, index, enabled):
-        """
-        Public method to set the enabled state of a tab.
-        
-        @param index index of the tab to set (integer)
-        @param enabled enabled state to set (boolean)
-        """
-        self.__tabBar.setTabEnabled(index, enabled)
-    
-    def orientation(self):
-        """
-        Public method to get the orientation of the sidebar.
-        
-        @return orientation of the sidebar
-        @rtype EricSideBarSide
-        """
-        return self.__orientation
-    
-    def setOrientation(self, orient):
-        """
-        Public method to set the orientation of the sidebar.
-
-        @param orient orientation of the sidebar
-        @type EricSideBarSide
-        """
-        if orient == EricSideBarSide.NORTH:
-            self.__tabBar.setShape(QTabBar.Shape.RoundedNorth)
-            self.__tabBar.setSizePolicy(
-                QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
-            self.barLayout.setDirection(QBoxLayout.Direction.LeftToRight)
-            self.layout.setDirection(QBoxLayout.Direction.TopToBottom)
-            self.layout.setAlignment(self.barLayout,
-                                     Qt.AlignmentFlag.AlignLeft)
-        elif orient == EricSideBarSide.EAST:
-            self.__tabBar.setShape(QTabBar.Shape.RoundedEast)
-            self.__tabBar.setSizePolicy(
-                QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding)
-            self.barLayout.setDirection(QBoxLayout.Direction.TopToBottom)
-            self.layout.setDirection(QBoxLayout.Direction.RightToLeft)
-            self.layout.setAlignment(self.barLayout, Qt.AlignmentFlag.AlignTop)
-        elif orient == EricSideBarSide.SOUTH:
-            self.__tabBar.setShape(QTabBar.Shape.RoundedSouth)
-            self.__tabBar.setSizePolicy(
-                QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
-            self.barLayout.setDirection(QBoxLayout.Direction.LeftToRight)
-            self.layout.setDirection(QBoxLayout.Direction.BottomToTop)
-            self.layout.setAlignment(self.barLayout,
-                                     Qt.AlignmentFlag.AlignLeft)
-        elif orient == EricSideBarSide.WEST:
-            self.__tabBar.setShape(QTabBar.Shape.RoundedWest)
-            self.__tabBar.setSizePolicy(
-                QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding)
-            self.barLayout.setDirection(QBoxLayout.Direction.TopToBottom)
-            self.layout.setDirection(QBoxLayout.Direction.LeftToRight)
-            self.layout.setAlignment(self.barLayout, Qt.AlignmentFlag.AlignTop)
-        self.__orientation = orient
-    
-    def tabIcon(self, index):
-        """
-        Public method to get the icon of a tab.
-        
-        @param index index of the tab (integer)
-        @return icon of the tab (QIcon)
-        """
-        return self.__tabBar.tabIcon(index)
-    
-    def setTabIcon(self, index, icon):
-        """
-        Public method to set the icon of a tab.
-        
-        @param index index of the tab (integer)
-        @param icon icon to be set (QIcon)
-        """
-        self.__tabBar.setTabIcon(index, icon)
-    
-    def tabText(self, index):
-        """
-        Public method to get the text of a tab.
-        
-        @param index index of the tab (integer)
-        @return text of the tab (string)
-        """
-        return self.__tabBar.tabText(index)
-    
-    def setTabText(self, index, text):
-        """
-        Public method to set the text of a tab.
-        
-        @param index index of the tab (integer)
-        @param text text to set (string)
-        """
-        self.__tabBar.setTabText(index, text)
-    
-    def tabToolTip(self, index):
-        """
-        Public method to get the tooltip text of a tab.
-        
-        @param index index of the tab (integer)
-        @return tooltip text of the tab (string)
-        """
-        return self.__tabBar.tabToolTip(index)
-    
-    def setTabToolTip(self, index, tip):
-        """
-        Public method to set the tooltip text of a tab.
-        
-        @param index index of the tab (integer)
-        @param tip tooltip text to set (string)
-        """
-        self.__tabBar.setTabToolTip(index, tip)
-    
-    def tabWhatsThis(self, index):
-        """
-        Public method to get the WhatsThis text of a tab.
-        
-        @param index index of the tab (integer)
-        @return WhatsThis text of the tab (string)
-        """
-        return self.__tabBar.tabWhatsThis(index)
-    
-    def setTabWhatsThis(self, index, text):
-        """
-        Public method to set the WhatsThis text of a tab.
-        
-        @param index index of the tab (integer)
-        @param text WhatsThis text to set (string)
-        """
-        self.__tabBar.setTabWhatsThis(index, text)
-    
-    def widget(self, index):
-        """
-        Public method to get a reference to the widget associated with a tab.
-        
-        @param index index of the tab (integer)
-        @return reference to the widget (QWidget)
-        """
-        return self.__stackedWidget.widget(index)
-    
-    def saveState(self):
-        """
-        Public method to save the state of the sidebar.
-        
-        @return saved state as a byte array (QByteArray)
-        """
-        if len(self.splitterSizes) == 0:
-            if self.splitter:
-                self.splitterSizes = self.splitter.sizes()
-            self.__bigSize = self.size()
-            if self.__orientation in (
-                EricSideBarSide.NORTH, EricSideBarSide.SOUTH
-            ):
-                self.__minSize = self.minimumSizeHint().height()
-                self.__maxSize = self.maximumHeight()
-            else:
-                self.__minSize = self.minimumSizeHint().width()
-                self.__maxSize = self.maximumWidth()
-        
-        dataDict = {
-            "version": self.Version,
-            "minimized": self.__minimized,
-            "big_size": [self.__bigSize.width(), self.__bigSize.height()],
-            "min_size": self.__minSize,
-            "max_size": self.__maxSize,
-            "splitter_sizes": self.splitterSizes,
-            "auto_hide": self.__autoHide
-        }
-        data = json.dumps(dataDict)
-        
-        return data
-    
-    def restoreState(self, state):
-        """
-        Public method to restore the state of the sidebar.
-        
-        @param state byte array containing the saved state (QByteArray)
-        @return flag indicating success (boolean)
-        """
-        if not isinstance(state, str) or state == "":
-            return False
-        
-        try:
-            stateDict = json.loads(state)
-        except json.JSONDecodeError:
-            return False
-        
-        if not stateDict:
-            return False
-        
-        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
-            minSize = self.layout.minimumSize().height()
-            maxSize = self.maximumHeight()
-        else:
-            minSize = self.layout.minimumSize().width()
-            maxSize = self.maximumWidth()
-        
-        if stateDict["version"] == 2:
-            if stateDict["minimized"] and not self.__minimized:
-                self.shrink()
-            
-            self.__bigSize = QSize(*stateDict["big_size"])
-            self.__minSize = max(stateDict["min_size"], minSize)
-            self.__maxSize = max(stateDict["max_size"], maxSize)
-            self.splitterSizes = stateDict["splitter_sizes"]
-            
-            self.__autoHide = stateDict["auto_hide"]
-            self.__autoHideButton.setChecked(not self.__autoHide)
-            
-            if not stateDict["minimized"]:
-                self.expand()
-            
-            return True
-        
-        return False
-    
-    #######################################################################
-    ## methods below implement the autohide functionality
-    #######################################################################
-    
-    def __autoHideToggled(self, checked):
-        """
-        Private slot to handle the toggling of the autohide button.
-        
-        @param checked flag indicating the checked state of the button
-            (boolean)
-        """
-        self.__autoHide = not checked
-        if self.__autoHide:
-            self.__autoHideButton.setIcon(
-                UI.PixmapCache.getIcon("autoHideOn"))
-        else:
-            self.__autoHideButton.setIcon(
-                UI.PixmapCache.getIcon("autoHideOff"))
-    
-    def __appFocusChanged(self, old, now):
-        """
-        Private slot to handle a change of the focus.
-        
-        @param old reference to the widget, that lost focus (QWidget or None)
-        @param now reference to the widget having the focus (QWidget or None)
-        """
-        if isinstance(now, QWidget):
-            self.__hasFocus = self.isAncestorOf(now)
-            if (
-                self.__autoHide and
-                not self.__hasFocus and
-                not self.isMinimized()
-            ):
-                self.shrink()
-            elif self.__autoHide and self.__hasFocus and self.isMinimized():
-                self.expand()
-    
-    def enterEvent(self, event):
-        """
-        Protected method to handle the mouse entering this widget.
-        
-        @param event reference to the event (QEvent)
-        """
-        if self.__autoHide and self.isMinimized():
-            self.expand()
-        else:
-            self.__cancelDelayTimer()
-    
-    def leaveEvent(self, event):
-        """
-        Protected method to handle the mouse leaving this widget.
-        
-        @param event reference to the event (QEvent)
-        """
-        if self.__autoHide and not self.__hasFocus and not self.isMinimized():
-            self.shrink()
-        else:
-            self.__cancelDelayTimer()
-    
-    def shutdown(self):
-        """
-        Public method to shut down the object.
-        
-        This method does some preparations so the object can be deleted
-        properly. It disconnects from the focusChanged signal in order to
-        avoid trouble later on.
-        """
-        ericApp().focusChanged.disconnect(self.__appFocusChanged)
--- a/eric7/E5Gui/EricSimpleHelpDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to show some help text.
-"""
-
-from PyQt6.QtCore import Qt
-from PyQt6.QtWidgets import QDialog
-
-from .Ui_EricSimpleHelpDialog import Ui_EricSimpleHelpDialog
-
-
-class EricSimpleHelpDialog(QDialog, Ui_EricSimpleHelpDialog):
-    """
-    Class implementing a dialog to show some help text.
-    """
-    def __init__(self, title="", label="", helpStr="", parent=None):
-        """
-        Constructor
-        
-        @param title title of the window
-        @type str
-        @param label label for the help
-        @type str
-        @param helpStr HTML help text
-        @type str
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-        self.setupUi(self)
-        self.setWindowFlags(Qt.WindowType.Window)
-        
-        self.setWindowTitle(title)
-        if label:
-            self.helpLabel.setText(label)
-        else:
-            self.helpLabel.hide()
-        self.helpEdit.setHtml(helpStr)
--- a/eric7/E5Gui/EricSimpleHelpDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EricSimpleHelpDialog</class>
- <widget class="QDialog" name="EricSimpleHelpDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>500</width>
-    <height>600</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string/>
-  </property>
-  <property name="sizeGripEnabled">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QLabel" name="helpLabel"/>
-   </item>
-   <item>
-    <widget class="QTextBrowser" name="helpEdit">
-     <property name="tabChangesFocus">
-      <bool>true</bool>
-     </property>
-     <property name="readOnly">
-      <bool>true</bool>
-     </property>
-     <property name="textInteractionFlags">
-      <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
-     </property>
-     <property name="openExternalLinks">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Close</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>EricSimpleHelpDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>EricSimpleHelpDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
--- a/eric7/E5Gui/EricSingleApplication.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,186 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2004 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing the single application server and client.
-"""
-
-import os
-
-from E5Gui.EricApplication import ericApp
-
-from Toolbox.SingleApplication import (
-    SingleApplicationClient, SingleApplicationServer
-)
-
-import Utilities
-
-###########################################################################
-## define some module global stuff
-###########################################################################
-
-SAFile = "eric7"
-
-# define the protocol tokens
-SAOpenFile = 'OpenFile'
-SAOpenProject = 'OpenProject'
-SAOpenMultiProject = 'OpenMultiProject'
-SAArguments = 'Arguments'
-
-
-class EricSingleApplicationServer(SingleApplicationServer):
-    """
-    Class implementing the single application server embedded within the IDE.
-    """
-    def __init__(self):
-        """
-        Constructor
-        """
-        SingleApplicationServer.__init__(self, SAFile)
-
-    def handleCommand(self, command, arguments):
-        """
-        Public slot to handle the command sent by the client.
-        
-        @param command command sent by the client
-        @type str
-        @param arguments list of command arguments
-        @type list of str
-        """
-        if command == SAOpenFile:
-            self.__saOpenFile(arguments[0])
-            return
-
-        if command == SAOpenProject:
-            self.__saOpenProject(arguments[0])
-            return
-
-        if command == SAOpenMultiProject:
-            self.__saOpenMultiProject(arguments[0])
-            return
-
-        if command == SAArguments:
-            self.__saArguments(arguments[0])
-            return
-
-    def __saOpenFile(self, fname):
-        """
-        Private method used to handle the "Open File" command.
-        
-        @param fname filename to be opened (string)
-        """
-        ericApp().getObject("ViewManager").openSourceFile(fname)
-        
-    def __saOpenProject(self, pfname):
-        """
-        Private method used to handle the "Open Project" command.
-        
-        @param pfname filename of the project to be opened (string)
-        """
-        ericApp().getObject("Project").openProject(pfname)
-        
-    def __saOpenMultiProject(self, pfname):
-        """
-        Private method used to handle the "Open Multi-Project" command.
-        
-        @param pfname filename of the multi project to be opened (string)
-        """
-        ericApp().getObject("MultiProject").openMultiProject(pfname)
-        
-    def __saArguments(self, argsStr):
-        """
-        Private method used to handle the "Arguments" command.
-        
-        @param argsStr space delimited list of command args(string)
-        """
-        ericApp().getObject("DebugUI").setArgvHistory(argsStr)
-
-
-class EricSingleApplicationClient(SingleApplicationClient):
-    """
-    Class implementing the single application client of the IDE.
-    """
-    def __init__(self):
-        """
-        Constructor
-        """
-        SingleApplicationClient.__init__(self, SAFile)
-        
-    def processArgs(self, args):
-        """
-        Public method to process the command line args passed to the UI.
-        
-        @param args list of files to open
-        """
-        # no args, return
-        if args is None:
-            return
-        
-        # holds space delimited list of command args, if any
-        argsStr = None
-        # flag indicating '--' options was found
-        ddseen = False
-        
-        argChars = ['-', '/'] if Utilities.isWindowsPlatform() else ['-']
-        
-        for arg in args:
-            if arg == '--' and not ddseen:
-                ddseen = True
-                continue
-                
-            if arg[0] in argChars or ddseen:
-                if argsStr is None:
-                    argsStr = arg
-                else:
-                    argsStr = "{0} {1}".format(argsStr, arg)
-                continue
-            
-            ext = os.path.splitext(arg)[1]
-            ext = os.path.normcase(ext)
-            
-            if ext in ('.epj', '.e4p'):
-                self.__openProject(arg)
-            elif ext in ('.emj', '.e4m', '.e5m'):
-                self.__openMultiProject(arg)
-            else:
-                self.__openFile(arg)
-        
-        # send any args we had
-        if argsStr is not None:
-            self.__sendArguments(argsStr)
-        
-        self.disconnect()
-        
-    def __openFile(self, fname):
-        """
-        Private method to open a file in the application server.
-        
-        @param fname name of file to be opened (string)
-        """
-        self.sendCommand(SAOpenFile, [os.path.abspath(fname)])
-        
-    def __openProject(self, pfname):
-        """
-        Private method to open a project in the application server.
-        
-        @param pfname name of the projectfile to be opened (string)
-        """
-        self.sendCommand(SAOpenProject, [os.path.abspath(pfname)])
-        
-    def __openMultiProject(self, pfname):
-        """
-        Private method to open a project in the application server.
-        
-        @param pfname name of the projectfile to be opened (string)
-        """
-        self.sendCommand(SAOpenMultiProject, [os.path.abspath(pfname)])
-        
-    def __sendArguments(self, argsStr):
-        """
-        Private method to set the command arguments in the application server.
-        
-        @param argsStr space delimited list of command args (string)
-        """
-        self.sendCommand(SAArguments, [argsStr])
--- a/eric7/E5Gui/EricSqueezeLabels.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing labels that squeeze their contents to fit the size of the
-label.
-"""
-
-from PyQt6.QtCore import Qt
-from PyQt6.QtWidgets import QLabel
-
-from Utilities import compactPath
-
-
-class EricSqueezeLabel(QLabel):
-    """
-    Class implementing a label that squeezes its contents to fit its size.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent Widget (QWidget)
-        """
-        super().__init__(parent)
-        
-        self.__text = ''
-        self.__elided = ''
-    
-    def paintEvent(self, event):
-        """
-        Protected method called when some painting is required.
-        
-        @param event reference to the paint event (QPaintEvent)
-        """
-        fm = self.fontMetrics()
-        try:
-            pixelLength = fm.horizontalAdvance(self.__text)
-        except AttributeError:
-            pixelLength = fm.width(self.__text)
-        if pixelLength > self.contentsRect().width():
-            self.__elided = fm.elidedText(
-                self.text(), Qt.TextElideMode.ElideMiddle, self.width())
-            super().setText(self.__elided)
-        else:
-            super().setText(self.__text)
-        super().paintEvent(event)
-    
-    def setText(self, txt):
-        """
-        Public method to set the label's text.
-        
-        @param txt the text to be shown (string)
-        """
-        self.__text = txt
-        super().setText(self.__text)
-
-
-class EricSqueezeLabelPath(QLabel):
-    """
-    Class implementing a label showing a file path compacted to fit its size.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent Widget (QWidget)
-        """
-        super().__init__(parent)
-        
-        self.__path = ''
-        self.__surrounding = "{0}"
-    
-    def setSurrounding(self, surrounding):
-        """
-        Public method to set the surrounding of the path string.
-        
-        @param surrounding the a string containg placeholders for the path
-            (string)
-        """
-        self.__surrounding = surrounding
-        super().setText(
-            self.__surrounding.format(self.__path))
-    
-    def setPath(self, path):
-        """
-        Public method to set the path of the label.
-        
-        @param path path to be shown (string)
-        """
-        self.__path = path
-        super().setText(
-            self.__surrounding.format(self.__path))
-    
-    def setTextPath(self, surrounding, path):
-        """
-        Public method to set the surrounding and the path of the label.
-        
-        @param surrounding the a string containg placeholders for the path
-            (string)
-        @param path path to be shown (string)
-        """
-        self.__surrounding = surrounding
-        self.__path = path
-        super().setText(
-            self.__surrounding.format(self.__path))
-    
-    def paintEvent(self, event):
-        """
-        Protected method called when some painting is required.
-        
-        @param event reference to the paint event (QPaintEvent)
-        """
-        if self.length(self.__path) > self.contentsRect().width():
-            super().setText(
-                self.__surrounding.format(compactPath(self.__path,
-                                          self.contentsRect().width(),
-                                          self.length))
-            )
-        else:
-            super().setText(
-                self.__surrounding.format(self.__path))
-        super().paintEvent(event)
-    
-    def length(self, txt):
-        """
-        Public method to return the length of a text in pixels.
-        
-        @param txt text to calculate the length for after wrapped (string)
-        @return length of the wrapped text in pixels (integer)
-        """
-        fm = self.fontMetrics()
-        try:
-            return fm.horizontalAdvance(self.__surrounding.format(txt))
-        except AttributeError:
-            return fm.width(self.__surrounding.format(txt))
--- a/eric7/E5Gui/EricStringListEditWidget.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to edit a list of strings.
-"""
-
-from PyQt6.QtCore import (
-    pyqtSlot, pyqtSignal, Qt, QSortFilterProxyModel, QStringListModel
-)
-from PyQt6.QtWidgets import QWidget, QInputDialog, QLineEdit
-
-from .Ui_EricStringListEditWidget import Ui_EricStringListEditWidget
-
-
-class EricStringListEditWidget(QWidget, Ui_EricStringListEditWidget):
-    """
-    Class implementing a dialog to edit a list of strings.
-    
-    @signal setToDefault() emitted to request the default list of values
-    """
-    setToDefault = pyqtSignal()
-    
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        self.setupUi(self)
-        
-        self.__model = QStringListModel(self)
-        self.__proxyModel = QSortFilterProxyModel(self)
-        self.__proxyModel.setFilterCaseSensitivity(
-            Qt.CaseSensitivity.CaseInsensitive)
-        self.__proxyModel.setSourceModel(self.__model)
-        self.stringList.setModel(self.__proxyModel)
-        
-        self.defaultButton.hide()
-        
-        self.searchEdit.textChanged.connect(
-            self.__proxyModel.setFilterFixedString)
-        
-        self.removeButton.clicked.connect(self.stringList.removeSelected)
-        self.removeAllButton.clicked.connect(self.stringList.removeAll)
-        self.defaultButton.clicked.connect(self.setToDefault)
-    
-    def setList(self, stringList):
-        """
-        Public method to set the list of strings to be edited.
-        
-        @param stringList list of strings to be edited (list of string)
-        """
-        self.__model.setStringList(stringList)
-        self.__model.sort(0)
-    
-    def getList(self):
-        """
-        Public method to get the edited list of strings.
-        
-        @return edited list of string (list of string)
-        """
-        return self.__model.stringList()[:]
-    
-    def setListWhatsThis(self, txt):
-        """
-        Public method to set a what's that help text for the string list.
-        
-        @param txt help text to be set (string)
-        """
-        self.stringList.setWhatsThis(txt)
-    
-    def setDefaultVisible(self, visible):
-        """
-        Public method to show or hide the default button.
-        
-        @param visible flag indicating the visibility of the default button
-        @type bool
-        """
-        self.defaultButton.setVisible(visible)
-    
-    def setAddVisible(self, visible):
-        """
-        Public method to show or hide the add button.
-        
-        @param visible flag indicating the visibility of the add button
-        @type bool
-        """
-        self.addButton.setVisible(visible)
-        self.addLine.setVisible(visible)
-    
-    @pyqtSlot()
-    def on_addButton_clicked(self):
-        """
-        Private slot to add an entry to the list.
-        """
-        entry, ok = QInputDialog.getText(
-            self,
-            self.tr("Add Entry"),
-            self.tr("Enter the entry to add to the list:"),
-            QLineEdit.EchoMode.Normal)
-        if ok and entry != "" and entry not in self.__model.stringList():
-            self.__model.insertRow(self.__model.rowCount())
-            self.__model.setData(
-                self.__model.index(self.__model.rowCount() - 1), entry)
-            self.__model.sort(0)
--- a/eric7/E5Gui/EricStringListEditWidget.ui	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EricStringListEditWidget</class>
- <widget class="QWidget" name="EricStringListEditWidget">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>500</width>
-    <height>300</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string/>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="topMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
-   <property name="bottomMargin">
-    <number>0</number>
-   </property>
-   <item>
-    <layout class="QGridLayout" name="gridLayout_4">
-     <property name="horizontalSpacing">
-      <number>0</number>
-     </property>
-     <item row="0" column="1">
-      <widget class="QLineEdit" name="searchEdit">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="minimumSize">
-        <size>
-         <width>300</width>
-         <height>0</height>
-        </size>
-       </property>
-       <property name="toolTip">
-        <string>Enter search term for strings</string>
-       </property>
-       <property name="clearButtonEnabled">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="0">
-      <spacer name="horizontalSpacer_2">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <item row="0" column="0" rowspan="6">
-      <widget class="EricListView" name="stringList">
-       <property name="alternatingRowColors">
-        <bool>true</bool>
-       </property>
-       <property name="selectionMode">
-        <enum>QAbstractItemView::ExtendedSelection</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QPushButton" name="addButton">
-       <property name="toolTip">
-        <string>Press to add an entry</string>
-       </property>
-       <property name="text">
-        <string>&amp;Add...</string>
-       </property>
-       <property name="autoDefault">
-        <bool>false</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="1">
-      <widget class="Line" name="addLine">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="1">
-      <widget class="QPushButton" name="removeButton">
-       <property name="toolTip">
-        <string>Press to remove the selected entries</string>
-       </property>
-       <property name="text">
-        <string>&amp;Remove</string>
-       </property>
-       <property name="autoDefault">
-        <bool>false</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="3" column="1">
-      <widget class="QPushButton" name="removeAllButton">
-       <property name="toolTip">
-        <string>Press to remove all entries</string>
-       </property>
-       <property name="text">
-        <string>R&amp;emove All</string>
-       </property>
-       <property name="autoDefault">
-        <bool>false</bool>
-       </property>
-      </widget>
-     </item>
-     <item row="4" column="1">
-      <spacer name="verticalSpacer_3">
-       <property name="orientation">
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>20</width>
-         <height>40</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item row="5" column="1">
-      <widget class="QPushButton" name="defaultButton">
-       <property name="toolTip">
-        <string>Press to set the default list of values</string>
-       </property>
-       <property name="text">
-        <string>&amp;Default</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>EricListView</class>
-   <extends>QListView</extends>
-   <header>E5Gui/EricListView.h</header>
-  </customwidget>
- </customwidgets>
- <tabstops>
-  <tabstop>stringList</tabstop>
-  <tabstop>searchEdit</tabstop>
-  <tabstop>addButton</tabstop>
-  <tabstop>removeButton</tabstop>
-  <tabstop>removeAllButton</tabstop>
-  <tabstop>defaultButton</tabstop>
- </tabstops>
- <resources/>
- <connections/>
-</ui>
--- a/eric7/E5Gui/EricTabWidget.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,358 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2005 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a TabWidget class substituting QTabWidget.
-"""
-
-import contextlib
-
-from PyQt6.QtCore import pyqtSignal, Qt, QPoint, QMimeData
-from PyQt6.QtGui import QDrag
-from PyQt6.QtWidgets import QTabWidget, QTabBar, QApplication, QStyle
-
-from E5Gui.EricAnimatedLabel import EricAnimatedLabel
-
-
-class EricWheelTabBar(QTabBar):
-    """
-    Class implementing a tab bar class substituting QTabBar to support wheel
-    events.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        self._tabWidget = parent
-    
-    def wheelEvent(self, event):
-        """
-        Protected slot to support wheel events.
-        
-        @param event reference to the wheel event (QWheelEvent)
-        """
-        with contextlib.suppress(AttributeError):
-            delta = event.angleDelta().y()
-            if delta > 0:
-                self._tabWidget.prevTab()
-            elif delta < 0:
-                self._tabWidget.nextTab()
-            
-            event.accept()
-
-
-class EricDnDTabBar(EricWheelTabBar):
-    """
-    Class implementing a tab bar class substituting QTabBar.
-    
-    @signal tabMoveRequested(int, int) emitted to signal a tab move request
-        giving the old and new index position
-    """
-    tabMoveRequested = pyqtSignal(int, int)
-    
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        EricWheelTabBar.__init__(self, parent)
-        self.setAcceptDrops(True)
-        
-        self.__dragStartPos = QPoint()
-    
-    def mousePressEvent(self, event):
-        """
-        Protected method to handle mouse press events.
-        
-        @param event reference to the mouse press event (QMouseEvent)
-        """
-        if event.button() == Qt.MouseButton.LeftButton:
-            self.__dragStartPos = QPoint(event.position().toPoint())
-        EricWheelTabBar.mousePressEvent(self, event)
-    
-    def mouseMoveEvent(self, event):
-        """
-        Protected method to handle mouse move events.
-        
-        @param event reference to the mouse move event (QMouseEvent)
-        """
-        if (
-            event.buttons() == Qt.MouseButton.LeftButton and
-            (event.position().toPoint() - self.__dragStartPos)
-            .manhattanLength() > QApplication.startDragDistance()
-        ):
-            drag = QDrag(self)
-            mimeData = QMimeData()
-            index = self.tabAt(event.position().toPoint())
-            mimeData.setText(self.tabText(index))
-            mimeData.setData("action", b"tab-reordering")
-            mimeData.setData("tabbar-id", str(id(self)).encode("utf-8"))
-            drag.setMimeData(mimeData)
-            drag.exec()
-        EricWheelTabBar.mouseMoveEvent(self, event)
-    
-    def dragEnterEvent(self, event):
-        """
-        Protected method to handle drag enter events.
-        
-        @param event reference to the drag enter event (QDragEnterEvent)
-        """
-        mimeData = event.mimeData()
-        formats = mimeData.formats()
-        if (
-            "action" in formats and
-            mimeData.data("action") == b"tab-reordering" and
-            "tabbar-id" in formats and
-            int(mimeData.data("tabbar-id")) == id(self)
-        ):
-            event.acceptProposedAction()
-        EricWheelTabBar.dragEnterEvent(self, event)
-    
-    def dropEvent(self, event):
-        """
-        Protected method to handle drop events.
-        
-        @param event reference to the drop event (QDropEvent)
-        """
-        fromIndex = self.tabAt(self.__dragStartPos)
-        toIndex = self.tabAt(event.position().toPoint())
-        if fromIndex != toIndex:
-            self.tabMoveRequested.emit(fromIndex, toIndex)
-            event.acceptProposedAction()
-        EricWheelTabBar.dropEvent(self, event)
-
-
-class EricTabWidget(QTabWidget):
-    """
-    Class implementing a tab widget class substituting QTabWidget.
-    
-    It provides slots to show the previous and next tab and give
-    them the input focus and it allows to have a context menu for the tabs.
-    
-    @signal customTabContextMenuRequested(const QPoint & point, int index)
-        emitted when a context menu for a tab is requested
-    """
-    customTabContextMenuRequested = pyqtSignal(QPoint, int)
-    
-    def __init__(self, parent=None, dnd=False):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        @param dnd flag indicating the support for Drag & Drop (boolean)
-        """
-        super().__init__(parent)
-        
-        if dnd:
-            if not hasattr(self, 'setMovable'):
-                self.__tabBar = EricDnDTabBar(self)
-                self.__tabBar.tabMoveRequested.connect(self.moveTab)
-                self.setTabBar(self.__tabBar)
-            else:
-                self.__tabBar = EricWheelTabBar(self)
-                self.setTabBar(self.__tabBar)
-                self.setMovable(True)
-        else:
-            self.__tabBar = EricWheelTabBar(self)
-            self.setTabBar(self.__tabBar)
-        
-        self.__lastCurrentIndex = -1
-        self.__currentIndex = -1
-        self.currentChanged.connect(self.__currentChanged)
-    
-    def setCustomTabBar(self, dnd, tabBar):
-        """
-        Public method to set a custom tab bar.
-        
-        @param dnd flag indicating the support for Drag & Drop (boolean)
-        @param tabBar reference to the tab bar to set (QTabBar)
-        """
-        self.__tabBar = tabBar
-        self.setTabBar(self.__tabBar)
-        if dnd:
-            if isinstance(tabBar, EricDnDTabBar):
-                self.__tabBar.tabMoveRequested.connect(self.moveTab)
-            else:
-                self.setMovable(True)
-    
-    def __currentChanged(self, index):
-        """
-        Private slot to handle the currentChanged signal.
-        
-        @param index index of the current tab
-        """
-        if index == -1:
-            self.__lastCurrentIndex = -1
-        else:
-            self.__lastCurrentIndex = self.__currentIndex
-        self.__currentIndex = index
-        
-    def switchTab(self):
-        """
-        Public slot used to switch between the current and the previous
-        current tab.
-        """
-        if self.__lastCurrentIndex == -1 or self.__currentIndex == -1:
-            return
-        
-        self.setCurrentIndex(self.__lastCurrentIndex)
-        self.currentWidget().setFocus()
-        
-    def nextTab(self):
-        """
-        Public slot used to show the next tab.
-        """
-        ind = self.currentIndex() + 1
-        if ind == self.count():
-            ind = 0
-            
-        self.setCurrentIndex(ind)
-        self.currentWidget().setFocus()
-
-    def prevTab(self):
-        """
-        Public slot used to show the previous tab.
-        """
-        ind = self.currentIndex() - 1
-        if ind == -1:
-            ind = self.count() - 1
-            
-        self.setCurrentIndex(ind)
-        self.currentWidget().setFocus()
-
-    def setTabContextMenuPolicy(self, policy):
-        """
-        Public method to set the context menu policy of the tab.
-        
-        @param policy context menu policy to set (Qt.ContextMenuPolicy)
-        """
-        self.tabBar().setContextMenuPolicy(policy)
-        if policy == Qt.ContextMenuPolicy.CustomContextMenu:
-            self.tabBar().customContextMenuRequested.connect(
-                self.__handleTabCustomContextMenuRequested)
-        else:
-            self.tabBar().customContextMenuRequested.disconnect(
-                self.__handleTabCustomContextMenuRequested)
-
-    def __handleTabCustomContextMenuRequested(self, point):
-        """
-        Private slot to handle the context menu request for the tabbar.
-        
-        @param point point the context menu was requested (QPoint)
-        """
-        _tabbar = self.tabBar()
-        for index in range(_tabbar.count()):
-            rect = _tabbar.tabRect(index)
-            if rect.contains(point):
-                self.customTabContextMenuRequested.emit(
-                    _tabbar.mapToParent(point), index)
-                return
-        
-        self.customTabContextMenuRequested.emit(_tabbar.mapToParent(point), -1)
-    
-    def selectTab(self, pos):
-        """
-        Public method to get the index of a tab given a position.
-        
-        @param pos position determining the tab index (QPoint)
-        @return index of the tab (integer)
-        """
-        _tabbar = self.tabBar()
-        for index in range(_tabbar.count()):
-            rect = _tabbar.tabRect(index)
-            if rect.contains(pos):
-                return index
-        
-        return -1
-
-    def moveTab(self, curIndex, newIndex):
-        """
-        Public method to move a tab to a new index.
-        
-        @param curIndex index of tab to be moved (integer)
-        @param newIndex index the tab should be moved to (integer)
-        """
-        # step 1: save the tab data of tab to be moved
-        toolTip = self.tabToolTip(curIndex)
-        text = self.tabText(curIndex)
-        icon = self.tabIcon(curIndex)
-        whatsThis = self.tabWhatsThis(curIndex)
-        widget = self.widget(curIndex)
-        curWidget = self.currentWidget()
-        
-        # step 2: move the tab
-        self.removeTab(curIndex)
-        self.insertTab(newIndex, widget, icon, text)
-        
-        # step 3: set the tab data again
-        self.setTabToolTip(newIndex, toolTip)
-        self.setTabWhatsThis(newIndex, whatsThis)
-        
-        # step 4: set current widget
-        self.setCurrentWidget(curWidget)
-    
-    def __freeSide(self):
-        """
-        Private method to determine the free side of a tab.
-        
-        @return free side (QTabBar.ButtonPosition)
-        """
-        side = self.__tabBar.style().styleHint(
-            QStyle.StyleHint.SH_TabBar_CloseButtonPosition,
-            None, None, None)
-        side = (
-            QTabBar.ButtonPosition.RightSide
-            if side == QTabBar.ButtonPosition.LeftSide else
-            QTabBar.ButtonPosition.LeftSide
-        )
-        return side
-    
-    def animationLabel(self, index, animationFile, interval=100):
-        """
-        Public slot to set an animated icon.
-        
-        @param index tab index
-        @type int
-        @param animationFile name of the file containing the animation
-        @type str
-        @param interval interval in milliseconds between animation frames
-        @type int
-        @return reference to the created label
-        @rtype EricAnimatedLabel
-        """
-        if index == -1:
-            return None
-        
-        if hasattr(self.__tabBar, 'setTabButton'):
-            side = self.__freeSide()
-            animation = EricAnimatedLabel(
-                self, animationFile=animationFile, interval=interval)
-            self.__tabBar.setTabButton(index, side, None)
-            self.__tabBar.setTabButton(index, side, animation)
-            animation.start()
-            return animation
-        else:
-            return None
-    
-    def resetAnimation(self, index):
-        """
-        Public slot to reset an animated icon.
-        
-        @param index tab index (integer)
-        """
-        if index == -1:
-            return
-        
-        if hasattr(self.__tabBar, 'tabButton'):
-            side = self.__freeSide()
-            animation = self.__tabBar.tabButton(index, side)
-            if animation is not None:
-                animation.stop()
-                self.__tabBar.setTabButton(index, side, None)
-                del animation
--- a/eric7/E5Gui/EricTableView.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing specialized table views.
-"""
-
-from PyQt6.QtCore import Qt, QItemSelectionModel
-from PyQt6.QtWidgets import QTableView
-
-
-class EricTableView(QTableView):
-    """
-    Class implementing a table view supporting removal of entries.
-    """
-    def keyPressEvent(self, evt):
-        """
-        Protected method implementing special key handling.
-        
-        @param evt reference to the event (QKeyEvent)
-        """
-        if (
-            evt.key() in [Qt.Key.Key_Delete, Qt.Key.Key_Backspace] and
-            self.model() is not None
-        ):
-            self.removeSelected()
-            evt.setAccepted(True)
-        else:
-            super().keyPressEvent(evt)
-    
-    def removeSelected(self):
-        """
-        Public method to remove the selected entries.
-        """
-        if self.model() is None or self.selectionModel() is None:
-            # no models available
-            return
-        
-        row = 0
-        selectedRows = self.selectionModel().selectedRows()
-        for selectedRow in reversed(selectedRows):
-            row = selectedRow.row()
-            self.model().removeRow(row, self.rootIndex())
-        
-        idx = self.model().index(row, 0, self.rootIndex())
-        if not idx.isValid():
-            idx = self.model().index(row - 1, 0, self.rootIndex())
-        self.selectionModel().select(
-            idx,
-            QItemSelectionModel.SelectionFlag.SelectCurrent |
-            QItemSelectionModel.SelectionFlag.Rows)
-        self.setCurrentIndex(idx)
-    
-    def removeAll(self):
-        """
-        Public method to clear the view.
-        """
-        if self.model() is not None:
-            self.model().removeRows(0, self.model().rowCount(self.rootIndex()),
-                                    self.rootIndex())
--- a/eric7/E5Gui/EricTextEditSearchWidget.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,378 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a horizontal search widget for QTextEdit.
-"""
-
-import enum
-
-from PyQt6.QtCore import pyqtSlot, Qt, QMetaObject, QSize
-from PyQt6.QtGui import QPalette, QBrush, QColor, QTextDocument, QTextCursor
-from PyQt6.QtWidgets import (
-    QWidget, QVBoxLayout, QHBoxLayout, QLabel, QComboBox, QCheckBox,
-    QToolButton, QSizePolicy
-)
-
-import UI.PixmapCache
-
-
-class EricTextEditType(enum.Enum):
-    """
-    Class defining the supported text edit types.
-    """
-    UNKNOWN = 0
-    QTEXTEDIT = 1
-    QTEXTBROWSER = 2
-    QWEBENGINEVIEW = 3
-
-
-class EricTextEditSearchWidget(QWidget):
-    """
-    Class implementing a horizontal search widget for QTextEdit.
-    """
-    def __init__(self, parent=None, widthForHeight=True):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget
-        @type QWidget
-        @param widthForHeight flag indicating to prefer width for height.
-            If this parameter is False, some widgets are shown in a third
-            line.
-        @type bool
-        """
-        super().__init__(parent)
-        self.__setupUi(widthForHeight)
-        
-        self.__textedit = None
-        self.__texteditType = EricTextEditType.UNKNOWN
-        self.__findBackwards = True
-        
-        self.__defaultBaseColor = (
-            self.findtextCombo.lineEdit().palette().color(
-                QPalette.ColorRole.Base)
-        )
-        self.__defaultTextColor = (
-            self.findtextCombo.lineEdit().palette().color(
-                QPalette.ColorRole.Text)
-        )
-        
-        self.findHistory = []
-        
-        self.findtextCombo.setCompleter(None)
-        self.findtextCombo.lineEdit().returnPressed.connect(
-            self.__findByReturnPressed)
-        
-        self.__setSearchButtons(False)
-        self.infoLabel.hide()
-        
-        self.setFocusProxy(self.findtextCombo)
-    
-    def __setupUi(self, widthForHeight):
-        """
-        Private method to generate the UI.
-        
-        @param widthForHeight flag indicating to prefer width for height
-        @type bool
-        """
-        self.setObjectName("EricTextEditSearchWidget")
-        
-        self.verticalLayout = QVBoxLayout(self)
-        self.verticalLayout.setObjectName("verticalLayout")
-        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
-        
-        # row 1 of widgets
-        self.horizontalLayout1 = QHBoxLayout()
-        self.horizontalLayout1.setObjectName("horizontalLayout1")
-        
-        self.label = QLabel(self)
-        self.label.setObjectName("label")
-        self.label.setText(self.tr("Find:"))
-        self.horizontalLayout1.addWidget(self.label)
-        
-        self.findtextCombo = QComboBox(self)
-        self.findtextCombo.setEditable(True)
-        self.findtextCombo.lineEdit().setClearButtonEnabled(True)
-        sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding,
-                                 QSizePolicy.Policy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(
-            self.findtextCombo.sizePolicy().hasHeightForWidth())
-        self.findtextCombo.setSizePolicy(sizePolicy)
-        self.findtextCombo.setMinimumSize(QSize(100, 0))
-        self.findtextCombo.setEditable(True)
-        self.findtextCombo.setInsertPolicy(QComboBox.InsertPolicy.InsertAtTop)
-        self.findtextCombo.setDuplicatesEnabled(False)
-        self.findtextCombo.setObjectName("findtextCombo")
-        self.horizontalLayout1.addWidget(self.findtextCombo)
-        
-        # row 2 (maybe) of widgets
-        self.horizontalLayout2 = QHBoxLayout()
-        self.horizontalLayout2.setObjectName("horizontalLayout2")
-        
-        self.caseCheckBox = QCheckBox(self)
-        self.caseCheckBox.setObjectName("caseCheckBox")
-        self.caseCheckBox.setText(self.tr("Match case"))
-        self.horizontalLayout2.addWidget(self.caseCheckBox)
-        
-        self.wordCheckBox = QCheckBox(self)
-        self.wordCheckBox.setObjectName("wordCheckBox")
-        self.wordCheckBox.setText(self.tr("Whole word"))
-        self.horizontalLayout2.addWidget(self.wordCheckBox)
-        
-        # layout for the navigation buttons
-        self.horizontalLayout3 = QHBoxLayout()
-        self.horizontalLayout3.setSpacing(0)
-        self.horizontalLayout3.setObjectName("horizontalLayout3")
-        
-        self.findPrevButton = QToolButton(self)
-        self.findPrevButton.setObjectName("findPrevButton")
-        self.findPrevButton.setToolTip(self.tr(
-            "Press to find the previous occurrence"))
-        self.findPrevButton.setIcon(UI.PixmapCache.getIcon("1leftarrow"))
-        self.horizontalLayout3.addWidget(self.findPrevButton)
-        
-        self.findNextButton = QToolButton(self)
-        self.findNextButton.setObjectName("findNextButton")
-        self.findNextButton.setToolTip(self.tr(
-            "Press to find the next occurrence"))
-        self.findNextButton.setIcon(UI.PixmapCache.getIcon("1rightarrow"))
-        self.horizontalLayout3.addWidget(self.findNextButton)
-        
-        self.horizontalLayout2.addLayout(self.horizontalLayout3)
-        
-        # info label (in row 2 or 3)
-        self.infoLabel = QLabel(self)
-        self.infoLabel.setText("")
-        self.infoLabel.setObjectName("infoLabel")
-        
-        # place everything together
-        self.verticalLayout.addLayout(self.horizontalLayout1)
-        self.__addWidthForHeightLayout(widthForHeight)
-        self.verticalLayout.addWidget(self.infoLabel)
-        
-        QMetaObject.connectSlotsByName(self)
-        
-        self.setTabOrder(self.findtextCombo, self.caseCheckBox)
-        self.setTabOrder(self.caseCheckBox, self.wordCheckBox)
-        self.setTabOrder(self.wordCheckBox, self.findPrevButton)
-        self.setTabOrder(self.findPrevButton, self.findNextButton)
-    
-    def setWidthForHeight(self, widthForHeight):
-        """
-        Public method to set the 'width for height'.
-        
-        @param widthForHeight flag indicating to prefer width
-        @type bool
-        """
-        if self.__widthForHeight:
-            self.horizontalLayout1.takeAt(self.__widthForHeightLayoutIndex)
-        else:
-            self.verticalLayout.takeAt(self.__widthForHeightLayoutIndex)
-        self.__addWidthForHeightLayout(widthForHeight)
-    
-    def __addWidthForHeightLayout(self, widthForHeight):
-        """
-        Private method to set the middle part of the layout.
-        
-        @param widthForHeight flag indicating to prefer width
-        @type bool
-        """
-        if widthForHeight:
-            self.horizontalLayout1.addLayout(self.horizontalLayout2)
-            self.__widthForHeightLayoutIndex = 2
-        else:
-            self.verticalLayout.insertLayout(1, self.horizontalLayout2)
-            self.__widthForHeightLayoutIndex = 1
-        
-        self.__widthForHeight = widthForHeight
-    
-    def attachTextEdit(self, textedit, editType=EricTextEditType.QTEXTEDIT):
-        """
-        Public method to attach a QTextEdit widget.
-        
-        @param textedit reference to the edit widget to be attached
-        @type QTextEdit, QWebEngineView or QWebView
-        @param editType type of the attached edit widget
-        @type EricTextEditType
-        """
-        self.__textedit = textedit
-        self.__texteditType = editType
-        
-        self.wordCheckBox.setVisible(editType == "QTextEdit")
-    
-    def keyPressEvent(self, event):
-        """
-        Protected slot to handle key press events.
-        
-        @param event reference to the key press event (QKeyEvent)
-        """
-        if self.__textedit and event.key() == Qt.Key.Key_Escape:
-            self.__textedit.setFocus(Qt.FocusReason.ActiveWindowFocusReason)
-            event.accept()
-    
-    @pyqtSlot(str)
-    def on_findtextCombo_editTextChanged(self, txt):
-        """
-        Private slot to enable/disable the find buttons.
-        
-        @param txt text of the combobox (string)
-        """
-        self.__setSearchButtons(txt != "")
-        
-        self.infoLabel.hide()
-        self.__setFindtextComboBackground(False)
-    
-    def __setSearchButtons(self, enabled):
-        """
-        Private slot to set the state of the search buttons.
-        
-        @param enabled flag indicating the state (boolean)
-        """
-        self.findPrevButton.setEnabled(enabled)
-        self.findNextButton.setEnabled(enabled)
-    
-    def __findByReturnPressed(self):
-        """
-        Private slot to handle the returnPressed signal of the findtext
-        combobox.
-        """
-        self.__find(self.__findBackwards)
-    
-    @pyqtSlot()
-    def on_findPrevButton_clicked(self):
-        """
-        Private slot to find the previous occurrence.
-        """
-        self.__find(True)
-    
-    @pyqtSlot()
-    def on_findNextButton_clicked(self):
-        """
-        Private slot to find the next occurrence.
-        """
-        self.__find(False)
-    
-    def __find(self, backwards):
-        """
-        Private method to search the associated text edit.
-        
-        @param backwards flag indicating a backwards search (boolean)
-        """
-        if not self.__textedit:
-            return
-        
-        self.infoLabel.clear()
-        self.infoLabel.hide()
-        self.__setFindtextComboBackground(False)
-        
-        txt = self.findtextCombo.currentText()
-        if not txt:
-            return
-        self.__findBackwards = backwards
-        
-        # This moves any previous occurrence of this statement to the head
-        # of the list and updates the combobox
-        if txt in self.findHistory:
-            self.findHistory.remove(txt)
-        self.findHistory.insert(0, txt)
-        self.findtextCombo.clear()
-        self.findtextCombo.addItems(self.findHistory)
-        
-        if self.__texteditType in (
-            EricTextEditType.QTEXTBROWSER, EricTextEditType.QTEXTEDIT
-        ):
-            ok = self.__findPrevNextQTextEdit(backwards)
-            self.__findNextPrevCallback(ok)
-        elif self.__texteditType == EricTextEditType.QWEBENGINEVIEW:
-            self.__findPrevNextQWebEngineView(backwards)
-    
-    def __findPrevNextQTextEdit(self, backwards):
-        """
-        Private method to to search the associated edit widget of
-        type QTextEdit.
-        
-        @param backwards flag indicating a backwards search
-        @type bool
-        @return flag indicating the search result
-        @rtype bool
-        """
-        flags = (
-            QTextDocument.FindFlag.FindBackward
-            if backwards else
-            QTextDocument.FindFlag(0)
-        )
-        if self.caseCheckBox.isChecked():
-            flags |= QTextDocument.FindFlag.FindCaseSensitively
-        if self.wordCheckBox.isChecked():
-            flags |= QTextDocument.FindFlag.FindWholeWords
-        
-        ok = self.__textedit.find(self.findtextCombo.currentText(), flags)
-        if not ok:
-            # wrap around once
-            cursor = self.__textedit.textCursor()
-            if backwards:
-                moveOp = QTextCursor.MoveOperation.End
-                # move to end of document
-            else:
-                moveOp = QTextCursor.MoveOperation.Start
-                # move to start of document
-            cursor.movePosition(moveOp)
-            self.__textedit.setTextCursor(cursor)
-            ok = self.__textedit.find(self.findtextCombo.currentText(), flags)
-        
-        return ok
-    
-    def __findPrevNextQWebEngineView(self, backwards):
-        """
-        Private method to to search the associated edit widget of
-        type QWebEngineView.
-        
-        @param backwards flag indicating a backwards search
-        @type bool
-        """
-        from PyQt6.QtWebEngineWidgets import QWebEnginePage
-        
-        findFlags = QWebEnginePage.FindFlag(0)
-        if self.caseCheckBox.isChecked():
-            findFlags |= QWebEnginePage.FindFlag.FindCaseSensitively
-        if backwards:
-            findFlags |= QWebEnginePage.FindFlag.FindBackward
-        self.__textedit.findText(self.findtextCombo.currentText(),
-                                 findFlags, self.__findNextPrevCallback)
-    
-    def __findNextPrevCallback(self, found):
-        """
-        Private method to process the result of the last search.
-        
-        @param found flag indicating if the last search succeeded
-        @type bool
-        """
-        if not found:
-            txt = self.findtextCombo.currentText()
-            self.infoLabel.setText(
-                self.tr("'{0}' was not found.").format(txt))
-            self.infoLabel.show()
-            self.__setFindtextComboBackground(True)
-    
-    def __setFindtextComboBackground(self, error):
-        """
-        Private slot to change the findtext combo background to indicate
-        errors.
-        
-        @param error flag indicating an error condition (boolean)
-        """
-        le = self.findtextCombo.lineEdit()
-        p = le.palette()
-        if error:
-            p.setBrush(QPalette.ColorRole.Base, QBrush(QColor("#FF6666")))
-            p.setBrush(QPalette.ColorRole.Text, QBrush(QColor("#000000")))
-        else:
-            p.setBrush(QPalette.ColorRole.Base, self.__defaultBaseColor)
-            p.setBrush(QPalette.ColorRole.Text, self.__defaultTextColor)
-        le.setPalette(p)
-        le.update()
--- a/eric7/E5Gui/EricTextInputDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2018 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a dialog to enter some text.
-"""
-
-from PyQt6.QtWidgets import (
-    QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QLineEdit
-)
-
-
-class EricTextInputDialog(QDialog):
-    """
-    Class implementing a dialog to enter some text.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-        
-        self.setMaximumWidth(600)
-        
-        self.__layout = QVBoxLayout(self)
-        
-        self.__label = QLabel(self)
-        self.__layout.addWidget(self.__label)
-        
-        self.__lineEdit = QLineEdit(self)
-        self.__lineEdit.setClearButtonEnabled(True)
-        self.__layout.addWidget(self.__lineEdit)
-        
-        self.__buttonBox = QDialogButtonBox(
-            QDialogButtonBox.StandardButton.Ok |
-            QDialogButtonBox.StandardButton.Cancel, self)
-        self.__layout.addWidget(self.__buttonBox)
-        
-        self.__buttonBox.accepted.connect(self.accept)
-        self.__buttonBox.rejected.connect(self.reject)
-        
-        msh = self.minimumSizeHint()
-        self.resize(max(self.width(), msh.width()), msh.height())
-    
-    def setTextEchoMode(self, echoMode):
-        """
-        Public method to set the echo mode of the line edit.
-        
-        @param echoMode echo mode of the line edit
-        @type QLineEdit.EchoMode
-        """
-        self.__lineEdit.setEchoMode(echoMode)
-    
-    def textEchoMode(self):
-        """
-        Public method to get the current echo mode of the line edit.
-        
-        @return echo mode of the line edit
-        @rtype QLineEdit.EchoMode
-        """
-        return self.__lineEdit.echoMode()
-    
-    def setTextValue(self, text):
-        """
-        Public method to set the text of the line edit.
-        
-        @param text text for the line edit
-        @type str
-        """
-        self.__lineEdit.setText(text)
-    
-    def textValue(self):
-        """
-        Public method to get the text of the line edit.
-        
-        @return text of the line edit
-        @rtype str
-        """
-        return self.__lineEdit.text()
-    
-    def setLabelText(self, text):
-        """
-        Public method to set the label text.
-        
-        @param text label text
-        @type str
-        """
-        self.__label.setText(text)
-        
-        msh = self.minimumSizeHint()
-        labelSizeHint = self.__label.sizeHint()
-        self.resize(max(self.width(), msh.width(), labelSizeHint.width()),
-                    msh.height())
-    
-    def labelText(self):
-        """
-        Public method to get the current label text.
-        
-        @return current label text
-        @rtype str
-        """
-        return self.label.text()
-
-
-def getText(parent, title, label, mode=QLineEdit.EchoMode.Normal, text="",
-            minimumWidth=300):
-    """
-    Function to get create a dialog to enter some text and return it.
-    
-    @param parent reference to the parent widget
-    @type QWidget
-    @param title title of the dialog
-    @type str
-    @param label label of the dialog
-    @type str
-    @param mode echo mode of the line edit
-    @type QLineEdit.EchoMode
-    @param text initial text of the line edit
-    @type str
-    @param minimumWidth minimum width of the dialog
-    @type int
-    @return tuple containing a flag indicating the dialog was accepted and the
-        entered text
-    @rtype tuple of (bool, str)
-    """
-    dlg = EricTextInputDialog(parent)
-    dlg.setWindowTitle(title)
-    dlg.setLabelText(label)
-    dlg.setTextEchoMode(mode)
-    dlg.setTextValue(text)
-    dlg.setMinimumWidth(minimumWidth)
-    
-    if dlg.exec() == QDialog.DialogCode.Accepted:
-        return True, dlg.textValue()
-    else:
-        return False, ""
--- a/eric7/E5Gui/EricTextSpinBox.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a spinbox with textual entries.
-"""
-
-from PyQt6.QtWidgets import QSpinBox
-
-
-class EricTextSpinBox(QSpinBox):
-    """
-    Class implementing a spinbox with textual entries.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        
-        self.__items = []
-        
-        self.setMinimum(0)
-        self.setMaximum(0)
-    
-    def addItem(self, txt, data=None):
-        """
-        Public method to add an item with item data.
-        
-        @param txt text to be shown (string)
-        @param data associated data
-        """
-        self.__items.append((txt, data))
-        self.setMaximum(len(self.__items) - 1)
-    
-    def itemData(self, index):
-        """
-        Public method to retrieve the data associated with an item.
-        
-        @param index index of the item (integer)
-        @return associated data
-        """
-        try:
-            return self.__items[index][1]
-        except IndexError:
-            return None
-    
-    def currentIndex(self):
-        """
-        Public method to retrieve the current index.
-        
-        @return current index (integer)
-        """
-        return self.value()
-    
-    def textFromValue(self, value):
-        """
-        Public method to convert a value to text.
-        
-        @param value value to be converted (integer)
-        @return text for the given value (string)
-        """
-        try:
-            return self.__items[value][0]
-        except IndexError:
-            return ""
-    
-    def valueFromText(self, txt):
-        """
-        Public method to convert a text to a value.
-        
-        @param txt text to be converted (string)
-        @return value for the given text (integer)
-        """
-        for index in range(len(self.__items)):
-            if self.__items[index][0] == txt:
-                return index
-        
-        return self.minimum()
--- a/eric7/E5Gui/EricToolBarDialog.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,525 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a toolbar configuration dialog.
-"""
-
-from PyQt6.QtCore import pyqtSlot, Qt
-from PyQt6.QtGui import QColor
-from PyQt6.QtWidgets import (
-    QDialog, QDialogButtonBox, QTreeWidgetItem, QInputDialog, QLineEdit,
-    QListWidgetItem, QAbstractButton
-)
-
-from E5Gui import EricMessageBox
-
-from .Ui_EricToolBarDialog import Ui_EricToolBarDialog
-
-import UI.PixmapCache
-
-
-class EricToolBarItem:
-    """
-    Class storing data belonging to a toolbar entry of the toolbar dialog.
-    """
-    def __init__(self, toolBarId, actionIDs, default):
-        """
-        Constructor
-        
-        @param toolBarId id of the toolbar object (integer)
-        @param actionIDs list of action IDs belonging to the toolbar
-            (list of integer)
-        @param default flag indicating a default toolbar (boolean)
-        """
-        self.toolBarId = toolBarId
-        self.actionIDs = actionIDs[:]
-        self.isDefault = default
-        self.title = ""
-        self.isChanged = False
-    
-
-class EricToolBarDialog(QDialog, Ui_EricToolBarDialog):
-    """
-    Class implementing a toolbar configuration dialog.
-    """
-    ActionIdRole = Qt.ItemDataRole.UserRole
-    WidgetActionRole = Qt.ItemDataRole.UserRole + 1
-    
-    def __init__(self, toolBarManager, parent=None):
-        """
-        Constructor
-        
-        @param toolBarManager reference to a toolbar manager object
-            (EricToolBarManager)
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        self.setupUi(self)
-        
-        self.__manager = toolBarManager
-        self.__toolbarItems = {}
-        # maps toolbar item IDs to toolbar items
-        self.__currentToolBarItem = None
-        self.__removedToolBarIDs = []
-        # remember custom toolbars to be deleted
-        
-        self.__widgetActionToToolBarItemID = {}
-        # maps widget action IDs to toolbar item IDs
-        self.__toolBarItemToWidgetActionID = {}
-        # maps toolbar item IDs to widget action IDs
-        
-        self.upButton.setIcon(UI.PixmapCache.getIcon("1uparrow"))
-        self.downButton.setIcon(UI.PixmapCache.getIcon("1downarrow"))
-        self.leftButton.setIcon(UI.PixmapCache.getIcon("1leftarrow"))
-        self.rightButton.setIcon(UI.PixmapCache.getIcon("1rightarrow"))
-        
-        self.__restoreDefaultsButton = self.buttonBox.button(
-            QDialogButtonBox.StandardButton.RestoreDefaults)
-        self.__resetButton = self.buttonBox.button(
-            QDialogButtonBox.StandardButton.Reset)
-        
-        self.actionsTree.header().hide()
-        self.__separatorText = self.tr("--Separator--")
-        itm = QTreeWidgetItem(self.actionsTree, [self.__separatorText])
-        self.actionsTree.setCurrentItem(itm)
-        
-        for category in sorted(self.__manager.categories()):
-            categoryItem = QTreeWidgetItem(self.actionsTree, [category])
-            for action in self.__manager.categoryActions(category):
-                item = QTreeWidgetItem(categoryItem)
-                item.setText(0, action.text())
-                item.setIcon(0, action.icon())
-                item.setTextAlignment(
-                    0,
-                    Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter
-                )
-                item.setData(0, EricToolBarDialog.ActionIdRole, int(id(action)))
-                item.setData(0, EricToolBarDialog.WidgetActionRole, False)
-                if self.__manager.isWidgetAction(action):
-                    item.setData(0, EricToolBarDialog.WidgetActionRole, True)
-                    item.setData(0, Qt.ItemDataRole.ForegroundRole,
-                                 QColor(Qt.GlobalColor.blue))
-                    self.__widgetActionToToolBarItemID[id(action)] = None
-            categoryItem.setExpanded(True)
-        
-        for tbID, actions in list(self.__manager.toolBarsActions().items()):
-            tb = self.__manager.toolBarById(tbID)
-            default = self.__manager.isDefaultToolBar(tb)
-            tbItem = EricToolBarItem(tbID, [], default)
-            self.__toolbarItems[id(tbItem)] = tbItem
-            self.__toolBarItemToWidgetActionID[id(tbItem)] = []
-            actionIDs = []
-            for action in actions:
-                if action is None:
-                    actionIDs.append(None)
-                else:
-                    aID = id(action)
-                    actionIDs.append(aID)
-                    if aID in self.__widgetActionToToolBarItemID:
-                        self.__widgetActionToToolBarItemID[aID] = id(tbItem)
-                        self.__toolBarItemToWidgetActionID[id(tbItem)].append(
-                            aID)
-            tbItem.actionIDs = actionIDs
-            self.toolbarComboBox.addItem(tb.windowTitle(), int(id(tbItem)))
-            if default:
-                self.toolbarComboBox.setItemData(
-                    self.toolbarComboBox.count() - 1,
-                    QColor(Qt.GlobalColor.darkGreen),
-                    Qt.ItemDataRole.ForegroundRole)
-        self.toolbarComboBox.model().sort(0)
-        
-        self.toolbarComboBox.currentIndexChanged[int].connect(
-            self.__toolbarComboBox_currentIndexChanged)
-        self.toolbarComboBox.setCurrentIndex(0)
-    
-    @pyqtSlot()
-    def on_newButton_clicked(self):
-        """
-        Private slot to create a new toolbar.
-        """
-        name, ok = QInputDialog.getText(
-            self,
-            self.tr("New Toolbar"),
-            self.tr("Toolbar Name:"),
-            QLineEdit.EchoMode.Normal)
-        if ok and name:
-            if self.toolbarComboBox.findText(name) != -1:
-                # toolbar with this name already exists
-                EricMessageBox.critical(
-                    self,
-                    self.tr("New Toolbar"),
-                    self.tr(
-                        """A toolbar with the name <b>{0}</b> already"""
-                        """ exists.""")
-                    .format(name))
-                return
-            
-            tbItem = EricToolBarItem(None, [], False)
-            tbItem.title = name
-            tbItem.isChanged = True
-            self.__toolbarItems[id(tbItem)] = tbItem
-            self.__toolBarItemToWidgetActionID[id(tbItem)] = []
-            self.toolbarComboBox.addItem(name, int(id(tbItem)))
-            self.toolbarComboBox.model().sort(0)
-            self.toolbarComboBox.setCurrentIndex(
-                self.toolbarComboBox.findText(name))
-    
-    @pyqtSlot()
-    def on_removeButton_clicked(self):
-        """
-        Private slot to remove a custom toolbar.
-        """
-        name = self.toolbarComboBox.currentText()
-        res = EricMessageBox.yesNo(
-            self,
-            self.tr("Remove Toolbar"),
-            self.tr(
-                """Should the toolbar <b>{0}</b> really be removed?""")
-            .format(name))
-        if res:
-            index = self.toolbarComboBox.currentIndex()
-            tbItemID = self.toolbarComboBox.itemData(index)
-            tbItem = self.__toolbarItems[tbItemID]
-            if (
-                tbItem.toolBarId is not None and
-                tbItem.toolBarId not in self.__removedToolBarIDs
-            ):
-                self.__removedToolBarIDs.append(tbItem.toolBarId)
-            del self.__toolbarItems[tbItemID]
-            for widgetActionID in self.__toolBarItemToWidgetActionID[tbItemID]:
-                self.__widgetActionToToolBarItemID[widgetActionID] = None
-            del self.__toolBarItemToWidgetActionID[tbItemID]
-            self.toolbarComboBox.removeItem(index)
-    
-    @pyqtSlot()
-    def on_renameButton_clicked(self):
-        """
-        Private slot to rename a custom toolbar.
-        """
-        oldName = self.toolbarComboBox.currentText()
-        newName, ok = QInputDialog.getText(
-            self,
-            self.tr("Rename Toolbar"),
-            self.tr("New Toolbar Name:"),
-            QLineEdit.EchoMode.Normal,
-            oldName)
-        if ok and newName:
-            if oldName == newName:
-                return
-            if self.toolbarComboBox.findText(newName) != -1:
-                # toolbar with this name already exists
-                EricMessageBox.critical(
-                    self,
-                    self.tr("Rename Toolbar"),
-                    self.tr(
-                        """A toolbar with the name <b>{0}</b> already"""
-                        """ exists.""")
-                    .format(newName))
-                return
-            index = self.toolbarComboBox.currentIndex()
-            self.toolbarComboBox.setItemText(index, newName)
-            tbItem = self.__toolbarItems[self.toolbarComboBox.itemData(index)]
-            tbItem.title = newName
-            tbItem.isChanged = True
-    
-    def __setupButtons(self):
-        """
-        Private slot to set the buttons state.
-        """
-        index = self.toolbarComboBox.currentIndex()
-        if index > -1:
-            itemID = self.toolbarComboBox.itemData(index)
-            self.__currentToolBarItem = self.__toolbarItems[itemID]
-            self.renameButton.setEnabled(
-                not self.__currentToolBarItem.isDefault)
-            self.removeButton.setEnabled(
-                not self.__currentToolBarItem.isDefault)
-            self.__restoreDefaultsButton.setEnabled(
-                self.__currentToolBarItem.isDefault)
-            self.__resetButton.setEnabled(
-                self.__currentToolBarItem.toolBarId is not None)
-        
-        row = self.toolbarActionsList.currentRow()
-        self.upButton.setEnabled(row > 0)
-        self.downButton.setEnabled(row < self.toolbarActionsList.count() - 1)
-        self.leftButton.setEnabled(self.toolbarActionsList.count() > 0)
-        rightEnable = (
-            self.actionsTree.currentItem().parent() is not None or
-            self.actionsTree.currentItem().text(0) == self.__separatorText
-        )
-        self.rightButton.setEnabled(rightEnable)
-    
-    @pyqtSlot(int)
-    def __toolbarComboBox_currentIndexChanged(self, index):
-        """
-        Private slot called upon a selection of the current toolbar.
-        
-        @param index index of the new current toolbar (integer)
-        """
-        itemID = self.toolbarComboBox.itemData(index)
-        self.__currentToolBarItem = self.__toolbarItems[itemID]
-        self.toolbarActionsList.clear()
-        for actionID in self.__currentToolBarItem.actionIDs:
-            item = QListWidgetItem(self.toolbarActionsList)
-            if actionID is None:
-                item.setText(self.__separatorText)
-            else:
-                action = self.__manager.actionById(actionID)
-                item.setText(action.text())
-                item.setIcon(action.icon())
-                item.setTextAlignment(Qt.AlignmentFlag.AlignLeft |
-                                      Qt.AlignmentFlag.AlignVCenter)
-                item.setData(EricToolBarDialog.ActionIdRole, int(id(action)))
-                item.setData(EricToolBarDialog.WidgetActionRole, False)
-                if self.__manager.isWidgetAction(action):
-                    item.setData(EricToolBarDialog.WidgetActionRole, True)
-                    item.setData(Qt.ItemDataRole.ForegroundRole,
-                                 QColor(Qt.GlobalColor.blue))
-        self.toolbarActionsList.setCurrentRow(0)
-        
-        self.__setupButtons()
-    
-    @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
-    def on_actionsTree_currentItemChanged(self, current, previous):
-        """
-        Private slot called, when the currently selected action changes.
-        
-        @param current reference to the current item (QTreeWidgetItem)
-        @param previous reference to the previous current item
-            (QTreeWidgetItem)
-        """
-        self.__setupButtons()
-    
-    @pyqtSlot(QListWidgetItem, QListWidgetItem)
-    def on_toolbarActionsList_currentItemChanged(self, current, previous):
-        """
-        Private slot to handle a change of the current item.
-        
-        @param current reference to the current item (QListWidgetItem)
-        @param previous reference to the previous current item
-            (QListWidgetItem)
-        """
-        self.__setupButtons()
-    
-    @pyqtSlot()
-    def on_upButton_clicked(self):
-        """
-        Private slot used to move an action up in the list.
-        """
-        row = self.toolbarActionsList.currentRow()
-        if row == 0:
-            # we're already at the top
-            return
-        
-        actionID = self.__currentToolBarItem.actionIDs.pop(row)
-        self.__currentToolBarItem.actionIDs.insert(row - 1, actionID)
-        self.__currentToolBarItem.isChanged = True
-        itm = self.toolbarActionsList.takeItem(row)
-        self.toolbarActionsList.insertItem(row - 1, itm)
-        self.toolbarActionsList.setCurrentItem(itm)
-        self.__setupButtons()
-    
-    @pyqtSlot()
-    def on_downButton_clicked(self):
-        """
-        Private slot used to move an action down in the list.
-        """
-        row = self.toolbarActionsList.currentRow()
-        if row == self.toolbarActionsList.count() - 1:
-            # we're already at the end
-            return
-        
-        actionID = self.__currentToolBarItem.actionIDs.pop(row)
-        self.__currentToolBarItem.actionIDs.insert(row + 1, actionID)
-        self.__currentToolBarItem.isChanged = True
-        itm = self.toolbarActionsList.takeItem(row)
-        self.toolbarActionsList.insertItem(row + 1, itm)
-        self.toolbarActionsList.setCurrentItem(itm)
-        self.__setupButtons()
-    
-    @pyqtSlot()
-    def on_leftButton_clicked(self):
-        """
-        Private slot to delete an action from the list.
-        """
-        row = self.toolbarActionsList.currentRow()
-        actionID = self.__currentToolBarItem.actionIDs.pop(row)
-        self.__currentToolBarItem.isChanged = True
-        if actionID in self.__widgetActionToToolBarItemID:
-            self.__widgetActionToToolBarItemID[actionID] = None
-            self.__toolBarItemToWidgetActionID[
-                id(self.__currentToolBarItem)].remove(actionID)
-        itm = self.toolbarActionsList.takeItem(row)
-        del itm
-        self.toolbarActionsList.setCurrentRow(row)
-        self.__setupButtons()
-    
-    @pyqtSlot()
-    def on_rightButton_clicked(self):
-        """
-        Private slot to add an action to the list.
-        """
-        row = self.toolbarActionsList.currentRow() + 1
-            
-        item = QListWidgetItem()
-        if self.actionsTree.currentItem().text(0) == self.__separatorText:
-            item.setText(self.__separatorText)
-            actionID = None
-        else:
-            actionID = self.actionsTree.currentItem().data(
-                0, EricToolBarDialog.ActionIdRole)
-            action = self.__manager.actionById(actionID)
-            item.setText(action.text())
-            item.setIcon(action.icon())
-            item.setTextAlignment(Qt.AlignmentFlag.AlignLeft |
-                                  Qt.AlignmentFlag.AlignVCenter)
-            item.setData(EricToolBarDialog.ActionIdRole, int(id(action)))
-            item.setData(EricToolBarDialog.WidgetActionRole, False)
-            if self.__manager.isWidgetAction(action):
-                item.setData(EricToolBarDialog.WidgetActionRole, True)
-                item.setData(Qt.ItemDataRole.ForegroundRole,
-                             QColor(Qt.GlobalColor.blue))
-                oldTbItemID = self.__widgetActionToToolBarItemID[actionID]
-                if oldTbItemID is not None:
-                    self.__toolbarItems[oldTbItemID].actionIDs.remove(actionID)
-                    self.__toolbarItems[oldTbItemID].isChanged = True
-                    self.__toolBarItemToWidgetActionID[oldTbItemID].remove(
-                        actionID)
-                self.__widgetActionToToolBarItemID[actionID] = id(
-                    self.__currentToolBarItem)
-                self.__toolBarItemToWidgetActionID[
-                    id(self.__currentToolBarItem)].append(actionID)
-        self.toolbarActionsList.insertItem(row, item)
-        self.__currentToolBarItem.actionIDs.insert(row, actionID)
-        self.__currentToolBarItem.isChanged = True
-        self.toolbarActionsList.setCurrentRow(row)
-        self.__setupButtons()
-    
-    @pyqtSlot(QAbstractButton)
-    def on_buttonBox_clicked(self, button):
-        """
-        Private slot called, when a button of the button box was clicked.
-        
-        @param button reference to the button clicked (QAbstractButton)
-        """
-        if button == self.buttonBox.button(
-            QDialogButtonBox.StandardButton.Cancel
-        ):
-            self.reject()
-        elif button == self.buttonBox.button(
-            QDialogButtonBox.StandardButton.Apply
-        ):
-            self.__saveToolBars()
-            self.__setupButtons()
-        elif button == self.buttonBox.button(
-            QDialogButtonBox.StandardButton.Ok
-        ):
-            self.__saveToolBars()
-            self.accept()
-        elif button == self.buttonBox.button(
-            QDialogButtonBox.StandardButton.Reset
-        ):
-            self.__resetCurrentToolbar()
-            self.__setupButtons()
-        elif button == self.buttonBox.button(
-            QDialogButtonBox.StandardButton.RestoreDefaults
-        ):
-            self.__restoreCurrentToolbarToDefault()
-            self.__setupButtons()
-    
-    def __saveToolBars(self):
-        """
-        Private method to save the configured toolbars.
-        
-        @exception RuntimeError raised to indicate an invalid action
-        """
-        # step 1: remove toolbars marked for deletion
-        for tbID in self.__removedToolBarIDs:
-            tb = self.__manager.toolBarById(tbID)
-            self.__manager.deleteToolBar(tb)
-        self.__removedToolBarIDs = []
-        
-        # step 2: save configured toolbars
-        for tbItem in list(self.__toolbarItems.values()):
-            if not tbItem.isChanged:
-                continue
-            
-            if tbItem.toolBarId is None:
-                # new custom toolbar
-                tb = self.__manager.createToolBar(tbItem.title)
-                tbItem.toolBarId = id(tb)
-            else:
-                tb = self.__manager.toolBarById(tbItem.toolBarId)
-                if not tbItem.isDefault and tbItem.title:
-                    self.__manager.renameToolBar(tb, tbItem.title)
-            
-            actions = []
-            for actionID in tbItem.actionIDs:
-                if actionID is None:
-                    actions.append(None)
-                else:
-                    action = self.__manager.actionById(actionID)
-                    if action is None:
-                        raise RuntimeError(
-                            "No such action, id: 0x{0:x}".format(actionID))
-                    actions.append(action)
-            self.__manager.setToolBar(tb, actions)
-            tbItem.isChanged = False
-    
-    def __restoreCurrentToolbar(self, actions):
-        """
-        Private methdo to restore the current toolbar to the given list of
-        actions.
-        
-        @param actions list of actions to set for the current toolbar
-        (list of QAction)
-        """
-        tbItemID = id(self.__currentToolBarItem)
-        for widgetActionID in self.__toolBarItemToWidgetActionID[tbItemID]:
-            self.__widgetActionToToolBarItemID[widgetActionID] = None
-        self.__toolBarItemToWidgetActionID[tbItemID] = []
-        self.__currentToolBarItem.actionIDs = []
-        
-        for action in actions:
-            if action is None:
-                self.__currentToolBarItem.actionIDs.append(None)
-            else:
-                actionID = id(action)
-                self.__currentToolBarItem.actionIDs.append(actionID)
-                if actionID in self.__widgetActionToToolBarItemID:
-                    oldTbItemID = self.__widgetActionToToolBarItemID[actionID]
-                    if oldTbItemID is not None:
-                        self.__toolbarItems[oldTbItemID].actionIDs.remove(
-                            actionID)
-                        self.__toolbarItems[oldTbItemID].isChanged = True
-                        self.__toolBarItemToWidgetActionID[oldTbItemID].remove(
-                            actionID)
-                    self.__widgetActionToToolBarItemID[actionID] = tbItemID
-                    self.__toolBarItemToWidgetActionID[tbItemID].append(
-                        actionID)
-        self.__toolbarComboBox_currentIndexChanged(
-            self.toolbarComboBox.currentIndex())
-    
-    def __resetCurrentToolbar(self):
-        """
-        Private method to revert all changes made to the current toolbar.
-        """
-        tbID = self.__currentToolBarItem.toolBarId
-        actions = self.__manager.toolBarActions(tbID)
-        self.__restoreCurrentToolbar(actions)
-        self.__currentToolBarItem.isChanged = False
-    
-    def __restoreCurrentToolbarToDefault(self):
-        """
-        Private method to set the current toolbar to its default configuration.
-        """
-        if not self.__currentToolBarItem.isDefault:
-            return
-        
-        tbID = self.__currentToolBarItem.toolBarId
-        actions = self.__manager.defaultToolBarActions(tbID)
-        self.__restoreCurrentToolbar(actions)
-        self.__currentToolBarItem.isChanged = True
--- a/eric7/E5Gui/EricToolBarDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,230 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EricToolBarDialog</class>
- <widget class="QDialog" name="EricToolBarDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>600</width>
-    <height>500</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Configure Toolbars</string>
-  </property>
-  <property name="sizeGripEnabled">
-   <bool>true</bool>
-  </property>
-  <layout class="QVBoxLayout">
-   <item>
-    <layout class="QHBoxLayout">
-     <item>
-      <widget class="QLabel" name="label">
-       <property name="text">
-        <string>&amp;Toolbar:</string>
-       </property>
-       <property name="buddy">
-        <cstring>toolbarComboBox</cstring>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QComboBox" name="toolbarComboBox">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="toolTip">
-        <string>Select the toolbar to configure</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="newButton">
-       <property name="toolTip">
-        <string>Press to create a new toolbar</string>
-       </property>
-       <property name="text">
-        <string>&amp;New</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="removeButton">
-       <property name="toolTip">
-        <string>Press to remove the selected toolbar</string>
-       </property>
-       <property name="text">
-        <string>&amp;Remove</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QPushButton" name="renameButton">
-       <property name="toolTip">
-        <string>Press to rename the selected toolbar</string>
-       </property>
-       <property name="text">
-        <string>R&amp;ename</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="Line" name="line">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <layout class="QGridLayout">
-     <item row="0" column="0">
-      <widget class="QLabel" name="label_2">
-       <property name="text">
-        <string>Actions:</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="2">
-      <widget class="QLabel" name="label_3">
-       <property name="text">
-        <string>Current Toolbar Actions:</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0" rowspan="3">
-      <widget class="QTreeWidget" name="actionsTree">
-       <property name="toolTip">
-        <string>Select the action to add to the current toolbar</string>
-       </property>
-       <property name="alternatingRowColors">
-        <bool>true</bool>
-       </property>
-       <property name="rootIsDecorated">
-        <bool>false</bool>
-       </property>
-       <column>
-        <property name="text">
-         <string/>
-        </property>
-       </column>
-      </widget>
-     </item>
-     <item row="1" column="1">
-      <spacer>
-       <property name="orientation">
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>20</width>
-         <height>40</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item row="1" column="2" rowspan="3">
-      <widget class="QListWidget" name="toolbarActionsList">
-       <property name="toolTip">
-        <string>Select the action to work on</string>
-       </property>
-       <property name="whatsThis">
-        <string>&lt;b&gt;Current Toolbar Actions&lt;/b&gt;&lt;p&gt;This list shows the actions of the selected toolbar. Select an action and use the up or down button to change the order of actions or the left button to delete it. To add an action to the toolbar, select it in the list of available actions and press the right button.&lt;/p&gt;</string>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="1">
-      <layout class="QGridLayout">
-       <property name="spacing">
-        <number>0</number>
-       </property>
-       <item row="0" column="1">
-        <widget class="QToolButton" name="upButton">
-         <property name="toolTip">
-          <string>Press to move the selected action up.</string>
-         </property>
-         <property name="text">
-          <string/>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="0">
-        <widget class="QToolButton" name="leftButton">
-         <property name="toolTip">
-          <string>Press to delete the selected action from the toolbar</string>
-         </property>
-         <property name="text">
-          <string/>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="2">
-        <widget class="QToolButton" name="rightButton">
-         <property name="toolTip">
-          <string>Press to add the selected action to the toolbar</string>
-         </property>
-         <property name="text">
-          <string/>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="1">
-        <widget class="QToolButton" name="downButton">
-         <property name="toolTip">
-          <string>Press to move the selected action down.</string>
-         </property>
-         <property name="text">
-          <string/>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item row="3" column="1">
-      <spacer>
-       <property name="orientation">
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>20</width>
-         <height>40</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <tabstops>
-  <tabstop>toolbarComboBox</tabstop>
-  <tabstop>newButton</tabstop>
-  <tabstop>removeButton</tabstop>
-  <tabstop>renameButton</tabstop>
-  <tabstop>actionsTree</tabstop>
-  <tabstop>toolbarActionsList</tabstop>
-  <tabstop>upButton</tabstop>
-  <tabstop>downButton</tabstop>
-  <tabstop>rightButton</tabstop>
-  <tabstop>leftButton</tabstop>
-  <tabstop>buttonBox</tabstop>
- </tabstops>
- <resources/>
- <connections/>
-</ui>
--- a/eric7/E5Gui/EricToolBarManager.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,728 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a toolbar manager class.
-"""
-
-from PyQt6.QtCore import QObject, QByteArray, QDataStream, QIODevice
-from PyQt6.QtWidgets import QToolBar
-
-import Utilities
-
-
-class EricToolBarManager(QObject):
-    """
-    Class implementing a toolbar manager.
-    """
-    VersionMarker = 0xffff
-    ToolBarMarker = 0xfefe
-    CustomToolBarMarker = 0xfdfd
-    
-    def __init__(self, ui=None, parent=None):
-        """
-        Constructor
-        
-        @param ui reference to the user interface object (UI.UserInterface)
-        @param parent reference to the parent object (QObject)
-        """
-        super().__init__(parent)
-        
-        self.__mainWindow = None
-        self.__ui = ui
-        
-        self.__toolBars = {}
-        # maps toolbar IDs to actions
-        self.__toolBarsWithSeparators = {}
-        # maps toolbar IDs to actions incl. separators
-        self.__defaultToolBars = {}
-        # maps default toolbar IDs to actions
-        self.__customToolBars = []
-        # list of custom toolbars
-        self.__allToolBars = {}
-        # maps toolbar IDs to toolbars
-        
-        self.__categoryToActions = {}
-        # maps categories to actions
-        self.__actionToCategory = {}
-        # maps action IDs to categories
-        self.__allActions = {}
-        # maps action IDs to actions
-        self.__actionToToolBars = {}
-        # maps action IDs to toolbars
-        
-        self.__widgetActions = {}
-        # maps widget action IDs to toolbars
-        self.__allWidgetActions = {}
-        # maps widget action IDs to widget actions
-    
-    ######################################################
-    ## Private methods
-    ######################################################
-    
-    def __toolBarByName(self, name):
-        """
-        Private slot to get a toolbar by its object name.
-        
-        @param name object name of the toolbar (string)
-        @return reference to the toolbar (QToolBar)
-        """
-        for toolBar in list(self.__allToolBars.values()):
-            if toolBar.objectName() == name:
-                return toolBar
-        return None
-    
-    def __findAction(self, name):
-        """
-        Private method to find an action by name.
-        
-        @param name name of the action to search for (string)
-        @return reference to the action (QAction)
-        """
-        # check objectName() first
-        for action in list(self.__allActions.values()):
-            if action.objectName() == name:
-                return action
-        
-        # check text() next
-        for action in list(self.__allActions.values()):
-            if action.text() == name:
-                return action
-        
-        return None
-    
-    def __findDefaultToolBar(self, name):
-        """
-        Private method to find a default toolbar by name.
-        
-        @param name name of the default toolbar to search for (string)
-        @return reference to the default toolbar (QToolBar)
-        """
-        # check objectName() first
-        for tbID in self.__defaultToolBars:
-            tb = self.__allToolBars[tbID]
-            if tb.objectName() == name:
-                return tb
-        
-        # check windowTitle() next
-        for tbID in self.__defaultToolBars:
-            tb = self.__allToolBars[tbID]
-            if tb.windowTitle() == name:
-                return tb
-        
-        return None
-    
-    ######################################################
-    ## Public methods
-    ######################################################
-    
-    def setMainWindow(self, mainWindow):
-        """
-        Public method to set the reference to the main window.
-        
-        @param mainWindow reference to the main window (QMainWindow)
-        """
-        self.__mainWindow = mainWindow
-    
-    def mainWindow(self):
-        """
-        Public method to get the reference to the main window.
-        
-        @return reference to the main window (QMainWindow)
-        """
-        return self.__mainWindow
-    
-    def addToolBar(self, toolBar, category):
-        """
-        Public method to add a toolbar to be managed.
-        
-        @param toolBar reference to the toolbar to be managed (QToolBar)
-        @param category category for the toolbar (string)
-        """
-        if toolBar is None:
-            return
-        
-        newActions = []
-        newActionsWithSeparators = []
-        actions = toolBar.actions()
-        for action in actions:
-            actID = id(action)
-            self.addAction(action, category)
-            if actID in self.__widgetActions:
-                self.__widgetActions[actID] = toolBar
-            newActionsWithSeparators.append(action)
-            if action.isSeparator():
-                action = None
-            else:
-                if toolBar not in self.__actionToToolBars[actID]:
-                    self.__actionToToolBars[actID].append(toolBar)
-            newActions.append(action)
-        tbID = id(toolBar)
-        self.__defaultToolBars[tbID] = newActions
-        self.__toolBars[tbID] = newActions
-        self.__toolBarsWithSeparators[tbID] = newActionsWithSeparators
-        self.__allToolBars[tbID] = toolBar
-    
-    def removeToolBar(self, toolBar):
-        """
-        Public method to remove a toolbar added with addToolBar().
-        
-        @param toolBar reference to the toolbar to be removed (QToolBar)
-        """
-        if toolBar is None:
-            return
-        
-        tbID = id(toolBar)
-        
-        if tbID not in self.__defaultToolBars:
-            return
-        
-        defaultActions = self.__defaultToolBars[tbID][:]
-        self.setToolBar(toolBar, [])
-        for action in defaultActions:
-            self.removeAction(action)
-        
-        del self.__defaultToolBars[tbID]
-        del self.__toolBars[tbID]
-        del self.__toolBarsWithSeparators[tbID]
-        del self.__allToolBars[tbID]
-        
-        for action in defaultActions:
-            if action is None:
-                toolBar.addSeparator()
-            else:
-                toolBar.addAction(action)
-    
-    def setToolBars(self, toolBars):
-        """
-        Public method to set the actions of several toolbars.
-        
-        @param toolBars dictionary with toolbar id as key and
-            a list of actions as value
-        """
-        for key, actions in list(toolBars.items()):
-            tb = self.__allToolBars[key]
-            self.setToolBar(tb, actions)
-    
-    def setToolBar(self, toolBar, actions):
-        """
-        Public method to set the actions of a toolbar.
-        
-        @param toolBar reference to the toolbar to configure (QToolBar)
-        @param actions list of actions to be set (list of QAction)
-        """
-        if toolBar is None:
-            return
-        
-        tbID = id(toolBar)
-        if tbID not in self.__toolBars:
-            return
-        if self.__toolBars[tbID] == actions:
-            return
-        
-        # step 1: check list of actions
-        toRemove = {}
-        newActions = []
-        for action in actions:
-            if (
-                action is None or
-                (action not in newActions and
-                 id(action) in self.__allActions)
-            ):
-                newActions.append(action)
-            oldTB = self.toolBarWidgetAction(action)
-            if oldTB is not None and oldTB != toolBar:
-                if id(oldTB) not in toRemove:
-                    toRemove[id(oldTB)] = []
-                toRemove[id(oldTB)].append(action)
-        self.removeWidgetActions(toRemove)
-        
-        # step 2: remove all toolbar actions
-        for action in self.__toolBarsWithSeparators[tbID]:
-            if self.toolBarWidgetAction(action) == tbID:
-                self.__widgetActions[id(action)] = None
-            toolBar.removeAction(action)
-            if action.isSeparator():
-                del action
-            else:
-                self.__actionToToolBars[id(action)].remove(toolBar)
-        
-        # step 3: set the actions as requested
-        newActionsWithSeparators = []
-        for action in newActions:
-            newAction = None
-            if action is None:
-                newAction = toolBar.addSeparator()
-            elif id(action) in self.__allActions:
-                toolBar.addAction(action)
-                newAction = action
-                self.__actionToToolBars[id(action)].append(toolBar)
-                if id(action) in self.__widgetActions:
-                    self.__widgetActions[id(action)] = toolBar
-            else:
-                continue
-            newActionsWithSeparators.append(newAction)
-        
-        if toolBar.isVisible():
-            toolBar.hide()
-            toolBar.show()
-        self.__toolBars[tbID] = newActions
-        self.__toolBarsWithSeparators[tbID] = newActionsWithSeparators
-    
-    def resetToolBar(self, toolBar):
-        """
-        Public method to reset a toolbar to its default state.
-        
-        @param toolBar reference to the toolbar to configure (QToolBar)
-        """
-        if not self.isDefaultToolBar():
-            return
-        self.setToolBar(toolBar, self.__defaultToolBars[id(toolBar)])
-    
-    def resetAllToolBars(self):
-        """
-        Public method to reset all toolbars to their default state.
-        """
-        self.setToolBars(self.__defaultToolBars)
-        for toolBar in self.__customToolBars[:]:
-            self.deleteToolBar(toolBar)
-        
-    def defaultToolBars(self):
-        """
-        Public method to get all toolbars added with addToolBar().
-        
-        @return list of all default toolbars (list of QToolBar)
-        """
-        return list(self.__defaultToolBars.values())
-    
-    def isDefaultToolBar(self, toolBar):
-        """
-        Public method to check, if a toolbar was added with addToolBar().
-        
-        @param toolBar reference to the toolbar to be checked (QToolBar)
-        @return flag indicating an added toolbar (boolean)
-        """
-        return (
-            toolBar is not None and
-            id(toolBar) in self.__defaultToolBars
-        )
-    
-    def createToolBar(self, title, name=""):
-        """
-        Public method to create a custom toolbar.
-        
-        @param title title to be used for the toolbar (string)
-        @param name optional name for the new toolbar (string)
-        @return reference to the created toolbar (QToolBar)
-        """
-        if self.__mainWindow is None:
-            return None
-        
-        toolBar = QToolBar(title, self.__mainWindow)
-        toolBar.setToolTip(title)
-        if not name:
-            index = 1
-            customPrefix = "__CustomPrefix__"
-            name = "{0}{1:d}".format(customPrefix, index)
-            while self.__toolBarByName(name) is not None:
-                index += 1
-                name = "{0}{1:d}".format(customPrefix, index)
-        toolBar.setObjectName(name)
-        self.__mainWindow.addToolBar(toolBar)
-        
-        tbID = id(toolBar)
-        self.__customToolBars.append(toolBar)
-        self.__allToolBars[tbID] = toolBar
-        self.__toolBars[tbID] = []
-        self.__toolBarsWithSeparators[tbID] = []
-        
-        if self.__ui is not None:
-            toolBar.setIconSize(self.__ui.getToolBarIconSize())
-            self.__ui.registerToolbar(name, title, toolBar)
-        
-        return toolBar
-    
-    def deleteToolBar(self, toolBar):
-        """
-        Public method to remove a custom toolbar created with createToolBar().
-        
-        @param toolBar reference to the toolbar to be managed (QToolBar)
-        """
-        if toolBar is None:
-            return
-        
-        tbID = id(toolBar)
-        if tbID not in self.__toolBars:
-            return
-        if tbID in self.__defaultToolBars:
-            return
-        
-        if self.__ui is not None:
-            self.__ui.unregisterToolbar(toolBar.objectName())
-        
-        self.setToolBar(toolBar, [])
-        
-        del self.__allToolBars[tbID]
-        del self.__toolBars[tbID]
-        del self.__toolBarsWithSeparators[tbID]
-        self.__customToolBars.remove(toolBar)
-        self.__mainWindow.removeToolBar(toolBar)
-        del toolBar
-    
-    def renameToolBar(self, toolBar, title):
-        """
-        Public method to give a toolbar a new title.
-        
-        @param toolBar reference to the toolbar to be managed (QToolBar)
-        @param title title to be used for the toolbar (string)
-        """
-        if toolBar is None:
-            return
-        
-        toolBar.setWindowTitle(title)
-        
-        if self.__ui is not None:
-            self.__ui.reregisterToolbar(toolBar.objectName(), title)
-    
-    def toolBars(self):
-        """
-        Public method to get all toolbars.
-        
-        @return list of all toolbars (list of QToolBar)
-        """
-        return list(self.__allToolBars.values())
-    
-    def addAction(self, action, category):
-        """
-        Public method to add an action to be managed.
-        
-        @param action reference to the action to be managed (QAction)
-        @param category category for the toolbar (string)
-        """
-        if action is None:
-            return
-        if action.isSeparator():
-            return
-        if id(action) in self.__allActions:
-            return
-        
-        if action.metaObject().className() == "QWidgetAction":
-            self.__widgetActions[id(action)] = None
-            self.__allWidgetActions[id(action)] = action
-        self.__allActions[id(action)] = action
-        if category not in self.__categoryToActions:
-            self.__categoryToActions[category] = []
-        self.__categoryToActions[category].append(action)
-        self.__actionToCategory[id(action)] = category
-        self.__actionToToolBars[id(action)] = []
-    
-    def addActions(self, actions, category):
-        """
-        Public method to add actions to be managed.
-        
-        @param actions list of actions to be managed
-        @type list of QAction
-        @param category category for the toolbar
-        @type str
-        """
-        for action in actions:
-            self.addAction(action, category)
-    
-    def removeAction(self, action):
-        """
-        Public method to remove an action from the manager.
-        
-        @param action reference to the action to be removed (QAction)
-        """
-        aID = id(action)
-        
-        if aID not in self.__allActions:
-            return
-        
-        toolBars = self.__actionToToolBars[aID]
-        for toolBar in toolBars:
-            tbID = id(toolBar)
-            self.__toolBars[tbID].remove(action)
-            self.__toolBarsWithSeparators[tbID].remove(action)
-            toolBar.removeAction(action)
-            if toolBar.isVisible():
-                toolBar.hide()
-                toolBar.show()
-        
-        for tbID in self.__defaultToolBars:
-            if action in self.__defaultToolBars[tbID]:
-                self.__defaultToolBars[tbID].remove(action)
-        
-        del self.__allActions[aID]
-        if aID in self.__widgetActions:
-            del self.__widgetActions[aID]
-            del self.__allWidgetActions[aID]
-        del self.__actionToCategory[aID]
-        del self.__actionToToolBars[aID]
-        
-        for category in self.__categoryToActions:
-            if action in self.__categoryToActions[category]:
-                self.__categoryToActions[category].remove(action)
-    
-    def removeCategoryActions(self, category):
-        """
-        Public method to remove the actions belonging to a category.
-        
-        @param category category for the actions (string)
-        """
-        for action in self.categoryActions(category):
-            self.removeAction(action)
-    
-    def saveState(self, version=0):
-        """
-        Public method to save the state of the toolbar manager.
-        
-        @param version version number stored with the data (integer)
-        @return saved state as a byte array (QByteArray)
-        """
-        data = QByteArray()
-        stream = QDataStream(data, QIODevice.OpenModeFlag.WriteOnly)
-        stream.setVersion(QDataStream.Version.Qt_4_6)
-        stream.writeUInt16(EricToolBarManager.VersionMarker)
-        stream.writeUInt16(version)
-        
-        # save default toolbars
-        stream.writeUInt16(EricToolBarManager.ToolBarMarker)
-        stream.writeUInt16(len(self.__defaultToolBars))
-        for tbID in self.__defaultToolBars:
-            tb = self.__allToolBars[tbID]
-            if tb.objectName():
-                stream.writeString(tb.objectName().encode("utf-8"))
-            else:
-                stream.writeString(tb.windowTitle().encode("utf-8"))
-            stream.writeUInt16(len(self.__toolBars[tbID]))
-            for action in self.__toolBars[tbID]:
-                if action is not None:
-                    if action.objectName():
-                        stream.writeString(action.objectName().encode("utf-8"))
-                    else:
-                        stream.writeString(action.text().encode("utf-8"))
-                else:
-                    stream.writeString("".encode("utf-8"))
-        
-        # save the custom toolbars
-        stream.writeUInt16(EricToolBarManager.CustomToolBarMarker)
-        stream.writeUInt16(len(self.__toolBars) - len(self.__defaultToolBars))
-        for tbID in self.__toolBars:
-            if tbID not in self.__defaultToolBars:
-                tb = self.__allToolBars[tbID]
-                stream.writeString(tb.objectName().encode("utf-8"))
-                stream.writeString(tb.windowTitle().encode("utf-8"))
-                stream.writeUInt16(len(self.__toolBars[tbID]))
-                for action in self.__toolBars[tbID]:
-                    if action is not None:
-                        if action.objectName():
-                            stream.writeString(action.objectName()
-                                               .encode("utf-8"))
-                        else:
-                            stream.writeString(action.text().encode("utf-8"))
-                    else:
-                        stream.writeString("".encode("utf-8"))
-        
-        return data
-    
-    def restoreState(self, state, version=0):
-        """
-        Public method to restore the state of the toolbar manager.
-        
-        @param state byte array containing the saved state (QByteArray)
-        @param version version number stored with the data (integer)
-        @return flag indicating success (boolean)
-        """
-        if state.isEmpty():
-            return False
-        
-        data = QByteArray(state)
-        stream = QDataStream(data, QIODevice.OpenModeFlag.ReadOnly)
-        stream.setVersion(QDataStream.Version.Qt_4_6)
-        marker = stream.readUInt16()
-        vers = stream.readUInt16()
-        if marker != EricToolBarManager.VersionMarker or vers != version:
-            return False
-        
-        tmarker = stream.readUInt16()
-        if tmarker != EricToolBarManager.ToolBarMarker:
-            return False
-        
-        toolBarCount = stream.readUInt16()
-        for _i in range(toolBarCount):
-            objectName = Utilities.readStringFromStream(stream)
-            actionCount = stream.readUInt16()
-            actions = []
-            for _j in range(actionCount):
-                actionName = Utilities.readStringFromStream(stream)
-                if actionName:
-                    action = self.__findAction(actionName)
-                    if action is not None:
-                        actions.append(action)
-                else:
-                    actions.append(None)
-            toolBar = self.__findDefaultToolBar(objectName)
-            if toolBar is not None:
-                self.setToolBar(toolBar, actions)
-        
-        cmarker = stream.readUInt16()
-        if cmarker != EricToolBarManager.CustomToolBarMarker:
-            return False
-        
-        oldCustomToolBars = self.__customToolBars[:]
-        
-        toolBarCount = stream.readUInt16()
-        for _i in range(toolBarCount):
-            objectName = Utilities.readStringFromStream(stream)
-            toolBarTitle = Utilities.readStringFromStream(stream)
-            actionCount = stream.readUInt16()
-            actions = []
-            for _j in range(actionCount):
-                actionName = Utilities.readStringFromStream(stream)
-                if actionName:
-                    action = self.__findAction(actionName)
-                    if action is not None:
-                        actions.append(action)
-                else:
-                    actions.append(None)
-            toolBar = self.__toolBarByName(objectName)
-            if toolBar is not None:
-                toolBar.setWindowTitle(toolBarTitle)
-                oldCustomToolBars.remove(toolBar)
-            else:
-                toolBar = self.createToolBar(toolBarTitle, objectName)
-            if toolBar is not None:
-                toolBar.setObjectName(objectName)
-                self.setToolBar(toolBar, actions)
-        
-        for tb in oldCustomToolBars:
-            self.deleteToolBar(tb)
-        
-        return True
-    
-    def toolBarWidgetAction(self, action):
-        """
-        Public method to get the toolbar for a widget action.
-        
-        @param action widget action to check for (QAction)
-        @return reference to the toolbar containing action (QToolBar)
-        """
-        aID = id(action)
-        if aID in self.__widgetActions:
-            return self.__widgetActions[aID]
-        return None
-    
-    def removeWidgetActions(self, actions):
-        """
-        Public method to remove widget actions.
-        
-        @param actions dictionary with toolbar id as key and
-            a list of widget actions as value
-        """
-        for tbID in list(actions.keys())[:]:
-            toolBar = self.__allToolBars[tbID]
-            newActions = self.__toolBars[tbID][:]
-            newActionsWithSeparators = self.__toolBarsWithSeparators[tbID][:]
-            
-            removedActions = []
-            for action in actions[tbID]:
-                if (
-                    action in newActions and
-                    self.toolBarWidgetAction(action) == toolBar
-                ):
-                    newActions.remove(action)
-                    newActionsWithSeparators.remove(action)
-                    removedActions.append(action)
-            
-            self.__toolBars[tbID] = newActions
-            self.__toolBarsWithSeparators[tbID] = newActionsWithSeparators
-            
-            for action in removedActions:
-                self.__widgetActions[id(action)] = None
-                self.__actionToToolBars[id(action)].remove(toolBar)
-                toolBar.removeAction(action)
-    
-    def isWidgetAction(self, action):
-        """
-        Public method to check, if action is a widget action.
-        
-        @param action reference to the action to be checked (QAction)
-        @return flag indicating a widget action (boolean)
-        """
-        return id(action) in self.__allWidgetActions
-    
-    def categories(self):
-        """
-        Public method to get the list of categories.
-        
-        @return list of categories (list of string)
-        """
-        return list(self.__categoryToActions.keys())
-    
-    def categoryActions(self, category):
-        """
-        Public method to get the actions belonging to a category.
-        
-        @param category category for the actions (string)
-        @return list of actions (list of QAction)
-        """
-        if category not in self.__categoryToActions:
-            return []
-        
-        return self.__categoryToActions[category][:]
-    
-    def actionById(self, aID):
-        """
-        Public method to get an action given its id.
-        
-        @param aID id of the action object (integer)
-        @return reference to the action (QAction)
-        """
-        if aID not in self.__allActions:
-            return None
-        return self.__allActions[aID]
-    
-    def toolBarById(self, tbID):
-        """
-        Public method to get a toolbar given its id.
-        
-        @param tbID id of the toolbar object (integer)
-        @return reference to the toolbar (QToolBar)
-        """
-        if tbID not in self.__allToolBars:
-            return None
-        return self.__allToolBars[tbID]
-    
-    def toolBarActions(self, tbID):
-        """
-        Public method to get a toolbar's actions given its id.
-        
-        @param tbID id of the toolbar object (integer)
-        @return list of actions (list of QAction)
-        """
-        if tbID not in self.__toolBars:
-            return []
-        return self.__toolBars[tbID][:]
-    
-    def toolBarsActions(self):
-        """
-        Public method to get all toolbars and their actions.
-        
-        @return reference to dictionary of toolbar IDs as key and list
-            of actions as values
-        """
-        return self.__toolBars
-    
-    def defaultToolBarActions(self, tbID):
-        """
-        Public method to get a default toolbar's actions given its id.
-        
-        @param tbID id of the default toolbar object (integer)
-        @return list of actions (list of QAction)
-        """
-        if tbID not in self.__defaultToolBars:
-            return []
-        return self.__defaultToolBars[tbID][:]
--- a/eric7/E5Gui/EricToolBox.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a horizontal and a vertical toolbox class.
-"""
-
-from PyQt6.QtWidgets import QToolBox, QTabWidget
-
-from .EricTabWidget import EricTabWidget
-
-
-class EricVerticalToolBox(QToolBox):
-    """
-    Class implementing a ToolBox class substituting QToolBox to support wheel
-    events.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-
-
-class EricHorizontalToolBox(EricTabWidget):
-    """
-    Class implementing a vertical QToolBox like widget.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        EricTabWidget.__init__(self, parent)
-        self.setTabPosition(QTabWidget.TabPosition.West)
-        self.setUsesScrollButtons(True)
-    
-    def addItem(self, widget, icon, text):
-        """
-        Public method to add a widget to the toolbox.
-        
-        @param widget reference to the widget to be added (QWidget)
-        @param icon the icon to be shown (QIcon)
-        @param text the text to be shown (string)
-        @return index of the added widget (integer)
-        """
-        index = self.addTab(widget, icon, "")
-        self.setTabToolTip(index, text)
-        return index
-    
-    def insertItem(self, index, widget, icon, text):
-        """
-        Public method to add a widget to the toolbox.
-        
-        @param index position at which the widget should be inserted (integer)
-        @param widget reference to the widget to be added (QWidget)
-        @param icon the icon to be shown (QIcon)
-        @param text the text to be shown (string)
-        @return index of the added widget (integer)
-        """
-        index = self.insertTab(index, widget, icon, "")
-        self.setTabToolTip(index, text)
-        return index
-    
-    def removeItem(self, index):
-        """
-        Public method to remove a widget from the toolbox.
-        
-        @param index index of the widget to remove (integer)
-        """
-        self.removeTab(index)
-    
-    def setItemToolTip(self, index, toolTip):
-        """
-        Public method to set the tooltip of an item.
-        
-        @param index index of the item (integer)
-        @param toolTip tooltip text to be set (string)
-        """
-        self.setTabToolTip(index, toolTip)
-    
-    def setItemEnabled(self, index, enabled):
-        """
-        Public method to set the enabled state of an item.
-        
-        @param index index of the item (integer)
-        @param enabled flag indicating the enabled state (boolean)
-        """
-        self.setTabEnabled(index, enabled)
--- a/eric7/E5Gui/EricToolButton.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,302 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a specialized tool button subclass.
-"""
-
-import enum
-
-from PyQt6.QtCore import pyqtSlot, pyqtSignal, Qt, QTimer, QSize
-from PyQt6.QtWidgets import (
-    QToolButton, QStyle, QStyleOptionToolButton, QStyleOption, QApplication,
-    QLabel
-)
-
-
-class EricToolButtonOptions(enum.IntEnum):
-    """
-    Class defining the tool button options.
-    """
-    DEFAULT = 0
-    SHOW_MENU_INSIDE = 1
-    TOOLBAR_LOOKUP = 2
-
-
-class EricToolButton(QToolButton):
-    """
-    Class implementing a specialized tool button subclass.
-    
-    @signal aboutToShowMenu() emitted before the tool button menu is shown
-    @signal aboutToHideMenu() emitted before the tool button menu is hidden
-    @signal middleClicked() emitted when the middle mouse button was clicked
-    @signal controlClicked() emitted when the left mouse button was
-        clicked while pressing the Ctrl key
-    @signal doubleClicked() emitted when the left mouse button was
-        double clicked
-    """
-    aboutToShowMenu = pyqtSignal()
-    aboutToHideMenu = pyqtSignal()
-    middleClicked = pyqtSignal()
-    controlClicked = pyqtSignal()
-    doubleClicked = pyqtSignal()
-    
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget
-        @type QWidget
-        """
-        super().__init__(parent)
-        
-        self.setMinimumWidth(16)
-        
-        self.__menu = None
-        self.__options = EricToolButtonOptions.DEFAULT
-        
-        self.__badgeLabel = QLabel(self)
-        font = self.__badgeLabel.font()
-        font.setPixelSize(self.__badgeLabel.height() / 2.5)
-        self.__badgeLabel.setFont(font)
-        self.__badgeLabel.hide()
-        
-        opt = QStyleOptionToolButton()
-        self.initStyleOption(opt)
-        
-        self.__pressTimer = QTimer()
-        self.__pressTimer.setSingleShot(True)
-        self.__pressTimer.setInterval(
-            QApplication.style().styleHint(
-                QStyle.StyleHint.SH_ToolButton_PopupDelay, opt, self))
-        self.__pressTimer.timeout.connect(self.__showMenu)
-    
-    ##################################################################
-    ## Menu handling methods below.
-    ##
-    ## The menu is handled in EricToolButton and is not passed to
-    ## QToolButton. No menu indicator will be shown in the button.
-    ##################################################################
-    
-    def menu(self):
-        """
-        Public method to get a reference to the tool button menu.
-        
-        @return reference to the tool button menu
-        @rtype QMenu
-        """
-        return self.__menu
-    
-    def setMenu(self, menu):
-        """
-        Public method to set the tool button menu.
-        
-        @param menu reference to the tool button menu
-        @type QMenu
-        """
-        if menu is not None:
-            if self.__menu:
-                self.__menu.aboutToHide.disconnect(self.__menuAboutToHide)
-            
-            self.__menu = menu
-            self.__menu.aboutToHide.connect(self.__menuAboutToHide)
-    
-    def showMenuInside(self):
-        """
-        Public method to check, if the menu edge shall be aligned with
-        the button.
-        
-        @return flag indicating that the menu edge shall be aligned
-        @rtype bool
-        """
-        return bool(self.__options & EricToolButtonOptions.SHOW_MENU_INSIDE)
-    
-    def setShowMenuInside(self, enable):
-        """
-        Public method to set a flag to show the menu edge aligned with
-        the button.
-        
-        @param enable flag indicating to align the menu edge to the button
-        @type bool
-        """
-        if enable:
-            self.__options |= EricToolButtonOptions.SHOW_MENU_INSIDE
-        else:
-            self.__options &= ~EricToolButtonOptions.SHOW_MENU_INSIDE
-    
-    @pyqtSlot()
-    def __showMenu(self):
-        """
-        Private slot to show the tool button menu.
-        """
-        if self.__menu is None or self.__menu.isVisible():
-            return
-        
-        self.aboutToShowMenu.emit()
-        
-        if self.__options & EricToolButtonOptions.SHOW_MENU_INSIDE:
-            pos = self.mapToGlobal(self.rect().bottomRight())
-            if (
-                QApplication.layoutDirection() ==
-                Qt.LayoutDirection.RightToLeft
-            ):
-                pos.setX(pos.x() - self.rect().width())
-            else:
-                pos.setX(pos.x() - self.__menu.sizeHint().width())
-        else:
-            pos = self.mapToGlobal(self.rect().bottomLeft())
-        
-        self.__menu.popup(pos)
-    
-    @pyqtSlot()
-    def __menuAboutToHide(self):
-        """
-        Private slot to handle the tool button menu about to be hidden.
-        """
-        self.setDown(False)
-        self.aboutToHideMenu.emit()
-    
-    ##################################################################
-    ## Methods to handle the tool button look
-    ##################################################################
-    
-    def toolbarButtonLook(self):
-        """
-        Public method to check, if the button has the toolbar look.
-        
-        @return flag indicating toolbar look
-        @rtype bool
-        """
-        return bool(self.__options & EricToolButtonOptions.TOOLBAR_LOOKUP)
-    
-    def setToolbarButtonLook(self, enable):
-        """
-        Public method to set the toolbar look state.
-        
-        @param enable flag indicating toolbar look
-        @type bool
-        """
-        if enable:
-            self.__options |= EricToolButtonOptions.TOOLBAR_LOOKUP
-            
-            opt = QStyleOption()
-            opt.initFrom(self)
-            size = self.style().pixelMetric(
-                QStyle.PixelMetric.PM_ToolBarIconSize, opt, self)
-            self.setIconSize(QSize(size, size))
-        else:
-            self.__options &= ~EricToolButtonOptions.TOOLBAR_LOOKUP
-        
-        self.setProperty("toolbar-look", enable)
-        self.style().unpolish(self)
-        self.style().polish(self)
-    
-    ##################################################################
-    ## Methods to handle some event types
-    ##################################################################
-    
-    def mousePressEvent(self, evt):
-        """
-        Protected method to handle mouse press events.
-        
-        @param evt reference to the mouse event
-        @type QMouseEvent
-        """
-        if self.popupMode() == QToolButton.ToolButtonPopupMode.DelayedPopup:
-            self.__pressTimer.start()
-        
-        if (
-            (evt.buttons() == Qt.MouseButton.LeftButton and
-             self.__menu is not None and
-             (self.popupMode() ==
-              QToolButton.ToolButtonPopupMode.InstantPopup)) or
-            (evt.buttons() == Qt.MouseButton.RightButton and
-             self.__menu is not None)
-        ):
-            self.setDown(True)
-            self.__showMenu()
-        else:
-            super().mousePressEvent(evt)
-    
-    def mouseReleaseEvent(self, evt):
-        """
-        Protected method to handle mouse release events.
-        
-        @param evt reference to the mouse event
-        @type QMouseEvent
-        """
-        self.__pressTimer.stop()
-        
-        if (
-            evt.button() == Qt.MouseButton.MiddleButton and
-            self.rect().contains(evt.position().toPoint())
-        ):
-            self.middleClicked.emit()
-            self.setDown(False)
-        elif (
-            evt.button() == Qt.MouseButton.LeftButton and
-            self.rect().contains(evt.position().toPoint()) and
-            evt.modifiers() == Qt.KeyboardModifier.ControlModifier
-        ):
-            self.controlClicked.emit()
-            self.setDown(False)
-        else:
-            super().mouseReleaseEvent(evt)
-    
-    def mouseDoubleClickEvent(self, evt):
-        """
-        Protected method to handle mouse double click events.
-        
-        @param evt reference to the mouse event
-        @type QMouseEvent
-        """
-        super().mouseDoubleClickEvent(evt)
-        
-        self.__pressTimer.stop()
-        
-        if evt.buttons() == Qt.MouseButton.LeftButton:
-            self.doubleClicked.emit()
-    
-    def contextMenuEvent(self, evt):
-        """
-        Protected method to handle context menu events.
-        
-        @param evt reference to the context menu event
-        @type QContextMenuEvent
-        """
-        # block to prevent showing the context menu and the tool button menu
-        if self.__menu is not None:
-            return
-        
-        super().contextMenuEvent(evt)
-    
-    ##################################################################
-    ## Methods to handle the tool button badge
-    ##################################################################
-    
-    def setBadgeText(self, text):
-        """
-        Public method to set the badge text.
-        
-        @param text badge text to be set
-        @type str
-        """
-        if text:
-            self.__badgeLabel.setText(text)
-            self.__badgeLabel.resize(self.__badgeLabel.sizeHint())
-            self.__badgeLabel.move(self.width() - self.__badgeLabel.width(), 0)
-            self.__badgeLabel.show()
-        else:
-            self.__badgeLabel.clear()
-            self.__badgeLabel.hide()
-    
-    def badgeText(self):
-        """
-        Public method to get the badge text.
-        
-        @return badge text
-        @rtype str
-        """
-        return self.__badgeLabel.text()
--- a/eric7/E5Gui/EricTreeSortFilterProxyModel.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a modified QSortFilterProxyModel.
-"""
-
-from PyQt6.QtCore import Qt, QModelIndex, QSortFilterProxyModel
-
-
-class EricTreeSortFilterProxyModel(QSortFilterProxyModel):
-    """
-    Class implementing a modified QSortFilterProxyModel.
-   
-    It always accepts the root nodes in the tree so filtering is only done
-    on the children.
-    """
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent object (QObject)
-        """
-        super().__init__(parent)
-        
-        self.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
-    
-    def filterAcceptsRow(self, sourceRow, sourceParent):
-        """
-        Public method to determine, if the row is acceptable.
-        
-        @param sourceRow row number in the source model (integer)
-        @param sourceParent index of the source item (QModelIndex)
-        @return flag indicating acceptance (boolean)
-        """
-        idx = self.sourceModel().index(sourceRow, 0, sourceParent)
-        if self.sourceModel().hasChildren(idx):
-            return True
-        
-        return QSortFilterProxyModel.filterAcceptsRow(
-            self, sourceRow, sourceParent)
-    
-    def hasChildren(self, parent=None):
-        """
-        Public method to check, if a parent node has some children.
-        
-        @param parent index of the parent node (QModelIndex)
-        @return flag indicating the presence of children (boolean)
-        """
-        if parent is None:
-            parent = QModelIndex()
-        sindex = self.mapToSource(parent)
-        return self.sourceModel().hasChildren(sindex)
--- a/eric7/E5Gui/EricTreeView.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing specialized tree views.
-"""
-
-from PyQt6.QtCore import Qt
-from PyQt6.QtWidgets import QTreeView
-
-
-class EricTreeView(QTreeView):
-    """
-    Class implementing a tree view supporting removal of entries.
-    """
-    def keyPressEvent(self, evt):
-        """
-        Protected method implementing special key handling.
-        
-        @param evt reference to the event (QKeyEvent)
-        """
-        if (
-            evt.key() in [Qt.Key.Key_Delete, Qt.Key.Key_Backspace] and
-            self.model() is not None
-        ):
-            self.removeSelected()
-            evt.setAccepted(True)
-        else:
-            super().keyPressEvent(evt)
-    
-    def removeSelected(self):
-        """
-        Public method to remove the selected entries.
-        """
-        if (
-            self.model() is None or
-            self.selectionModel() is None or
-            not self.selectionModel().hasSelection()
-        ):
-            # no models available or nothing selected
-            return
-        
-        selectedRows = self.selectionModel().selectedRows()
-        for idx in reversed(sorted(selectedRows)):
-            self.model().removeRow(idx.row(), idx.parent())
-    
-    def removeAll(self):
-        """
-        Public method to clear the view.
-        """
-        if self.model() is not None:
-            self.model().removeRows(0, self.model().rowCount(self.rootIndex()),
-                                    self.rootIndex())
--- a/eric7/E5Gui/EricTreeWidget.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,283 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing specialized tree views.
-"""
-
-import enum
-
-from PyQt6.QtCore import pyqtSignal, Qt
-from PyQt6.QtWidgets import QTreeWidget, QTreeWidgetItem, QAbstractItemView
-
-
-class EricTreeWidgetItemsState(enum.Enum):
-    """
-    Class defining the items expansion state.
-    """
-    COLLAPSED = 0
-    EXPANDED = 1
-
-
-class EricTreeWidget(QTreeWidget):
-    """
-    Class implementing an extended tree widget.
-    
-    @signal itemControlClicked(QTreeWidgetItem) emitted after a Ctrl-Click
-            on an item
-    @signal itemMiddleButtonClicked(QTreeWidgetItem) emitted after a click
-            of the middle button on an item
-    """
-    itemControlClicked = pyqtSignal(QTreeWidgetItem)
-    itemMiddleButtonClicked = pyqtSignal(QTreeWidgetItem)
-    
-    def __init__(self, parent=None):
-        """
-        Constructor
-        
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        
-        self.__refreshAllItemsNeeded = True
-        self.__allTreeItems = []
-        self.__showMode = EricTreeWidgetItemsState.COLLAPSED
-        
-        self.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel)
-        
-        self.itemChanged.connect(self.__scheduleRefresh)
-    
-    def setDefaultItemShowMode(self, mode):
-        """
-        Public method to set the default item show mode.
-        
-        @param mode default mode
-        @type EricTreeWidgetItemsState
-        """
-        self.__showMode = mode
-    
-    def allItems(self):
-        """
-        Public method to get a list of all items.
-        
-        @return list of all items (list of QTreeWidgetItem)
-        """
-        if self.__refreshAllItemsNeeded:
-            self.__allTreeItems = []
-            self.__iterateAllItems(None)
-            self.__refreshAllItemsNeeded = False
-        
-        return self.__allTreeItems
-    
-    def appendToParentItem(self, parent, item):
-        """
-        Public method to append an item to a parent item.
-        
-        @param parent text of the parent item (string) or
-            the parent item (QTreeWidgetItem)
-        @param item item to be appended (QTreeWidgetItem)
-        @return flag indicating success (boolean)
-        @exception RuntimeError raised to indicate an illegal type for
-            the parent
-        """
-        if not isinstance(parent, (QTreeWidgetItem, str)):
-            raise RuntimeError("illegal type for parent")
-        
-        if isinstance(parent, QTreeWidgetItem):
-            if parent is None or parent.treeWidget() != self:
-                return False
-            parentItem = parent
-        else:
-            lst = self.findItems(parent, Qt.MatchFlag.MatchExactly)
-            if not lst:
-                return False
-            parentItem = lst[0]
-            if parentItem is None:
-                return False
-        
-        self.__allTreeItems.append(item)
-        parentItem.addChild(item)
-        return True
-    
-    def prependToParentItem(self, parent, item):
-        """
-        Public method to prepend an item to a parent item.
-        
-        @param parent text of the parent item (string) or
-            the parent item (QTreeWidgetItem)
-        @param item item to be prepended (QTreeWidgetItem)
-        @return flag indicating success (boolean)
-        @exception RuntimeError raised to indicate an illegal type for
-            the parent
-        """
-        if not isinstance(parent, (QTreeWidgetItem, str)):
-            raise RuntimeError("illegal type for parent")
-        
-        if isinstance(parent, QTreeWidgetItem):
-            if parent is None or parent.treeWidget() != self:
-                return False
-            parentItem = parent
-        else:
-            lst = self.findItems(parent, Qt.MatchFlag.MatchExactly)
-            if not lst:
-                return False
-            parentItem = lst[0]
-            if parentItem is None:
-                return False
-        
-        self.__allTreeItems.append(item)
-        parentItem.insertChild(0, item)
-        return True
-    
-    def addTopLevelItem(self, item):
-        """
-        Public method to add a top level item.
-        
-        @param item item to be added as a top level item (QTreeWidgetItem)
-        """
-        self.__allTreeItems.append(item)
-        super().addTopLevelItem(item)
-    
-    def addTopLevelItems(self, items):
-        """
-        Public method to add a list of top level items.
-        
-        @param items items to be added as top level items
-            (list of QTreeWidgetItem)
-        """
-        self.__allTreeItems.extend(items)
-        super().addTopLevelItems(items)
-    
-    def insertTopLevelItem(self, index, item):
-        """
-        Public method to insert a top level item.
-        
-        @param index index for the insertion (integer)
-        @param item item to be inserted as a top level item (QTreeWidgetItem)
-        """
-        self.__allTreeItems.append(item)
-        super().insertTopLevelItem(index, item)
-    
-    def insertTopLevelItems(self, index, items):
-        """
-        Public method to insert a list of top level items.
-        
-        @param index index for the insertion (integer)
-        @param items items to be inserted as top level items
-            (list of QTreeWidgetItem)
-        """
-        self.__allTreeItems.extend(items)
-        super().insertTopLevelItems(index, items)
-    
-    def deleteItem(self, item):
-        """
-        Public method to delete an item.
-        
-        @param item item to be deleted (QTreeWidgetItem)
-        """
-        if item in self.__allTreeItems:
-            self.__allTreeItems.remove(item)
-        
-        self.__refreshAllItemsNeeded = True
-        
-        del item
-    
-    def deleteItems(self, items):
-        """
-        Public method to delete a list of items.
-        
-        @param items items to be deleted (list of QTreeWidgetItem)
-        """
-        for item in items:
-            self.deleteItem(item)
-    
-    def filterString(self, filterStr):
-        """
-        Public slot to set a new filter.
-        
-        @param filterStr filter to be set (string)
-        """
-        self.expandAll()
-        allItems = self.allItems()
-        
-        if filterStr:
-            lFilter = filterStr.lower()
-            for itm in allItems:
-                itm.setHidden(lFilter not in itm.text(0).lower())
-                itm.setExpanded(True)
-            for index in range(self.topLevelItemCount()):
-                self.topLevelItem(index).setHidden(False)
-            
-            firstItm = self.topLevelItem(0)
-            belowItm = self.itemBelow(firstItm)
-            topLvlIndex = 0
-            while firstItm:
-                if lFilter in firstItm.text(0).lower():
-                    firstItm.setHidden(False)
-                elif (
-                    not firstItm.parent() and
-                    (not belowItm or not belowItm.parent())
-                ):
-                    firstItm.setHidden(True)
-                elif not belowItm:
-                    break
-                
-                topLvlIndex += 1
-                firstItm = self.topLevelItem(topLvlIndex)
-                belowItm = self.itemBelow(firstItm)
-        else:
-            for itm in allItems:
-                itm.setHidden(False)
-            for index in range(self.topLevelItemCount()):
-                self.topLevelItem(index).setHidden(False)
-            if self.__showMode == EricTreeWidgetItemsState.COLLAPSED:
-                self.collapseAll()
-    
-    def clear(self):
-        """
-        Public slot to clear the tree.
-        """
-        self.__allTreeItems = []
-        super().clear()
-    
-    def __scheduleRefresh(self):
-        """
-        Private slot to schedule a refresh of the tree.
-        """
-        self.__refreshAllItemsNeeded = True
-    
-    def mousePressEvent(self, evt):
-        """
-        Protected method handling mouse press events.
-        
-        @param evt mouse press event (QMouseEvent)
-        """
-        if (
-            evt.modifiers() == Qt.KeyboardModifier.ControlModifier and
-            evt.buttons() == Qt.MouseButton.LeftButton
-        ):
-            self.itemControlClicked.emit(self.itemAt(evt.position().toPoint()))
-            return
-        elif evt.buttons() == Qt.MouseButton.MiddleButton:
-            self.itemMiddleButtonClicked.emit(self.itemAt(evt.position().toPoint()))
-            return
-        else:
-            super().mousePressEvent(evt)
-    
-    def __iterateAllItems(self, parent):
-        """
-        Private method to iterate over the child items of the parent.
-        
-        @param parent parent item to iterate (QTreeWidgetItem)
-        """
-        count = parent.childCount() if parent else self.topLevelItemCount()
-        
-        for index in range(count):
-            itm = parent.child(index) if parent else self.topLevelItem(index)
-            
-            if itm.childCount() == 0:
-                self.__allTreeItems.append(itm)
-            
-            self.__iterateAllItems(itm)
--- a/eric7/E5Gui/EricZoomWidget.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,314 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2013 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a zoom widget for the status bar.
-"""
-
-from PyQt6.QtCore import pyqtSlot, pyqtSignal
-from PyQt6.QtWidgets import QWidget
-
-from .Ui_EricZoomWidget import Ui_EricZoomWidget
-
-
-class EricZoomWidget(QWidget, Ui_EricZoomWidget):
-    """
-    Class implementing a zoom widget for the status bar.
-    
-    @signal valueChanged(value) emitted to indicate the new zoom value (int)
-    """
-    valueChanged = pyqtSignal(int)
-    
-    def __init__(self, outPix, inPix, resetPix, parent=None):
-        """
-        Constructor
-        
-        @param outPix pixmap for the zoom out button (QPixmap)
-        @param inPix pixmap for the zoom in button (QPixmap)
-        @param resetPix pixmap for the zoom reset button (QPixmap)
-        @param parent reference to the parent widget (QWidget)
-        """
-        super().__init__(parent)
-        self.setupUi(self)
-        
-        self.zoomOutLabel.setPixmap(outPix.scaled(16, 16))
-        self.zoomInLabel.setPixmap(inPix.scaled(16, 16))
-        self.zoomResetLabel.setPixmap(resetPix.scaled(16, 16))
-        
-        self.zoomOutLabel.clicked.connect(self.__zoomOut)
-        self.zoomInLabel.clicked.connect(self.__zoomIn)
-        self.zoomResetLabel.clicked.connect(self.__zoomReset)
-        
-        self.slider.valueChanged.connect(self._sliderValueChanged)
-        
-        self.__default = 0
-        self.__percent = False
-        
-        # mapped slider
-        self.__mapped = False
-        self.__mapping = []
-        
-        self.__setValueLabelWidth()
-    
-    @pyqtSlot(int)
-    def on_slider_sliderMoved(self, value):
-        """
-        Private slot to handle changes of the zoom value.
-        
-        @param value value of the slider (integer)
-        """
-        if self.__mapped:
-            self.valueChanged.emit(self.__mapping[value])
-        else:
-            self.valueChanged.emit(value)
-    
-    def setValue(self, value):
-        """
-        Public slot to set the value.
-        
-        @param value new zoom value (integer)
-        """
-        self.slider.setValue(self.__indexForValue(value))
-    
-    def value(self):
-        """
-        Public method to get the current value.
-        
-        @return current zoom value (integer)
-        """
-        if self.__mapped:
-            return self.__mapping[self.slider.value()]
-        else:
-            return self.slider.value()
-    
-    def setMinimum(self, minimum):
-        """
-        Public method to set the minimum value.
-        
-        @param minimum new minimum value (integer)
-        """
-        if not self.__mapped:
-            self.slider.setMinimum(minimum)
-            self.__setValueLabelWidth()
-    
-    def minimum(self):
-        """
-        Public method to get the minimum value.
-        
-        @return minimum value (integer)
-        """
-        if self.__mapped:
-            return self.__mapping[0]
-        else:
-            return self.slider.minimum()
-    
-    def setMaximum(self, maximum):
-        """
-        Public method to set the maximum value.
-        
-        @param maximum new maximum value (integer)
-        """
-        if not self.__mapped:
-            self.slider.setMaximum(maximum)
-            self.__setValueLabelWidth()
-    
-    def maximum(self):
-        """
-        Public method to get the maximum value.
-        
-        @return maximum value (integer)
-        """
-        if self.__mapped:
-            return self.__mapping[-1]
-        else:
-            return self.slider.maximum()
-    
-    def setSingleStep(self, value):
-        """
-        Public method to set the single step value.
-        
-        @param value value for the single step (integer)
-        """
-        self.slider.setSingleStep(value)
-    
-    def singleStep(self):
-        """
-        Public method to get the single step value.
-        
-        @return single step value (integer)
-        """
-        return self.slider.singleStep()
-    
-    def setPageStep(self, value):
-        """
-        Public method to set the page step value.
-        
-        @param value page step value (integer)
-        """
-        self.slider.setPageStep(value)
-    
-    def pageStep(self):
-        """
-        Public method to get the page step value.
-        
-        @return page step value (integer)
-        """
-        return self.slider.pageStep()
-    
-    def setDefault(self, value):
-        """
-        Public method to set the default zoom value.
-        
-        @param value default zoom value (integer)
-        """
-        self.__default = self.__indexForValue(value)
-    
-    def default(self):
-        """
-        Public method to get the default zoom value.
-        
-        @return default zoom value (integer)
-        """
-        if self.__mapped:
-            return self.__mapping[self.__default]
-        else:
-            return self.__default
-    
-    def setPercent(self, on):
-        """
-        Public method to set the percent mode of the widget.
-        
-        @param on flag indicating percent mode (boolean)
-        """
-        self.__percent = on
-        self.__setValueLabelWidth()
-    
-    def isPercent(self):
-        """
-        Public method to get the percent mode.
-        
-        @return flag indicating percent mode (boolean)
-        """
-        return self.__percent
-    
-    def setMapping(self, mapping, default, percent=True):
-        """
-        Public method to set a zoom level mapping.
-        
-        When zoom level mapping is activated, the slider covers
-        values from 0 to the max. index of the mapping list. The
-        default value is the value of the default zoom level. If
-        percent is given, the zoom level is shown as a percent value.
-        
-        @param mapping list of mapping values (list of integer)
-        @param default index of the default value (integer)
-        @param percent flag indicating to show zoom value in percent
-            (boolean)
-        """
-        if mapping:
-            self.__mapping = mapping[:]
-            self.__mapped = True
-            self.slider.setMinimum(0)
-            self.slider.setMaximum(len(self.__mapping) - 1)
-            self.__default = self.__indexForValue(default)
-            self.__percent = percent
-            self.slider.setValue(self.__default)
-        else:
-            # switch back to default values
-            self.__mapping = []
-            self.__mapped = False
-            self.slider.setMinimum(-10)
-            self.slider.setMaximum(20)
-            self.__default = 0
-            self.__percent = False
-            self.slider.setValue(0)
-        self.__setValueLabelWidth()
-    
-    def mapping(self):
-        """
-        Public method to get the current mapping.
-        
-        @return tuple of the mapping and the default index
-            (list of integer, integer)
-        """
-        return self.__mapping[:], self.__default
-    
-    def isMapped(self):
-        """
-        Public method to check for a mapped zoom widget.
-        
-        @return flag indicating a mapped zoom widget (boolean)
-        """
-        return self.__mapped
-    
-    def __zoomReset(self):
-        """
-        Private slot to reset the value.
-        """
-        self.slider.setValue(self.__default)
-        self.valueChanged.emit(self.value())
-    
-    def __zoomOut(self):
-        """
-        Private slot to zoom out one step.
-        """
-        self.slider.setValue(self.slider.value() - self.slider.singleStep())
-        self.valueChanged.emit(self.value())
-    
-    def __zoomIn(self):
-        """
-        Private slot to zoom in one step.
-        """
-        self.slider.setValue(self.slider.value() + self.slider.singleStep())
-        self.valueChanged.emit(self.value())
-    
-    def _sliderValueChanged(self, value):
-        """
-        Protected slot to handle changes of the slider value.
-        
-        @param value slider value (integer)
-        """
-        val = self.__mapping[value] if self.__mapped else value
-        fmtStr = "{0}%" if self.__percent else "{0}"
-        self.valueLabel.setText(fmtStr.format(val))
-        self.valueChanged.emit(val)
-    
-    def __setValueLabelWidth(self):
-        """
-        Private slot to determine the width of the zoom value label.
-        """
-        labelLen = (
-            max(len(str(v)) for v in self.__mapping)
-            if self.__mapped else
-            max(len(str(self.slider.maximum())),
-                len(str(self.slider.minimum())))
-        )
-        fmtStr = "{0}%" if self.__percent else "{0}"
-        label = fmtStr.format("0" * labelLen)
-        try:
-            width = self.valueLabel.fontMetrics().horizontalAdvance(label)
-        except AttributeError:
-            width = self.valueLabel.fontMetrics().width(label)
-        self.valueLabel.setMinimumWidth(width)
-        self.valueLabel.setMaximumWidth(width)
-    
-    def __indexForValue(self, value):
-        """
-        Private method to get the nearest index for a given value.
-        
-        @param value value to get the index for (integer)
-        @return index into the mapping list or the unchanged value,
-            if mapping is not set (integer)
-        """
-        if self.__mapped:
-            try:
-                index = self.__mapping.index(value)
-            except ValueError:
-                for index in range(len(self.__mapping)):
-                    if value <= self.__mapping[index]:
-                        break
-        else:
-            index = value
-        return index
--- a/eric7/E5Gui/EricZoomWidget.ui	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>EricZoomWidget</class>
- <widget class="QWidget" name="EricZoomWidget">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>242</width>
-    <height>21</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <layout class="QHBoxLayout" name="horizontalLayout">
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="topMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
-   <property name="bottomMargin">
-    <number>0</number>
-   </property>
-   <item>
-    <widget class="QLabel" name="valueLabel">
-     <property name="minimumSize">
-      <size>
-       <width>0</width>
-       <height>16</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>16777215</width>
-       <height>16</height>
-      </size>
-     </property>
-     <property name="text">
-      <string notr="true">0</string>
-     </property>
-     <property name="alignment">
-      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="EricClickableLabel" name="zoomOutLabel">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>16</width>
-       <height>16</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>16</width>
-       <height>16</height>
-      </size>
-     </property>
-     <property name="toolTip">
-      <string>Zoom out</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="QSlider" name="slider">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>160</width>
-       <height>16</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>160</width>
-       <height>16</height>
-      </size>
-     </property>
-     <property name="focusPolicy">
-      <enum>Qt::NoFocus</enum>
-     </property>
-     <property name="toolTip">
-      <string>Drag to zoom</string>
-     </property>
-     <property name="minimum">
-      <number>-10</number>
-     </property>
-     <property name="maximum">
-      <number>20</number>
-     </property>
-     <property name="orientation">
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="tickPosition">
-      <enum>QSlider::NoTicks</enum>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="EricClickableLabel" name="zoomInLabel">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>16</width>
-       <height>16</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>16</width>
-       <height>16</height>
-      </size>
-     </property>
-     <property name="toolTip">
-      <string>Zoom in</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <widget class="EricClickableLabel" name="zoomResetLabel">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>16</width>
-       <height>16</height>
-      </size>
-     </property>
-     <property name="maximumSize">
-      <size>
-       <width>16</width>
-       <height>16</height>
-      </size>
-     </property>
-     <property name="toolTip">
-      <string>Zoom reset</string>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>EricClickableLabel</class>
-   <extends>QLabel</extends>
-   <header>E5Gui/EricClickableLabel.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
--- a/eric7/E5Gui/__init__.py	Sat May 22 19:52:34 2021 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2006 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Package implementing some special GUI elements.
-
-They extend or ammend the standard elements as found in QtGui.
-"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricCore/EricTreeSortFilterProxyModel.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a modified QSortFilterProxyModel.
+"""
+
+from PyQt6.QtCore import Qt, QModelIndex, QSortFilterProxyModel
+
+
+class EricTreeSortFilterProxyModel(QSortFilterProxyModel):
+    """
+    Class implementing a modified QSortFilterProxyModel.
+   
+    It always accepts the root nodes in the tree so filtering is only done
+    on the children.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent object (QObject)
+        """
+        super().__init__(parent)
+        
+        self.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+    
+    def filterAcceptsRow(self, sourceRow, sourceParent):
+        """
+        Public method to determine, if the row is acceptable.
+        
+        @param sourceRow row number in the source model (integer)
+        @param sourceParent index of the source item (QModelIndex)
+        @return flag indicating acceptance (boolean)
+        """
+        idx = self.sourceModel().index(sourceRow, 0, sourceParent)
+        if self.sourceModel().hasChildren(idx):
+            return True
+        
+        return QSortFilterProxyModel.filterAcceptsRow(
+            self, sourceRow, sourceParent)
+    
+    def hasChildren(self, parent=None):
+        """
+        Public method to check, if a parent node has some children.
+        
+        @param parent index of the parent node (QModelIndex)
+        @return flag indicating the presence of children (boolean)
+        """
+        if parent is None:
+            parent = QModelIndex()
+        sindex = self.mapToSource(parent)
+        return self.sourceModel().hasChildren(sindex)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricCore/__init__.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2006 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package implementing some special Core elements.
+
+They extend or amend the standard elements as found in QtCore.
+"""
--- a/eric7/EricGraphics/EricGraphicsView.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/EricGraphics/EricGraphicsView.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtGui import QBrush, QPainter, QPixmap, QFont, QColor
 from PyQt6.QtWidgets import QGraphicsView
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricGui/EricAction.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,223 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2006 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing an Action class extending QAction.
+
+This extension is necessary in order to support alternate keyboard
+shortcuts.
+"""
+
+from PyQt6.QtGui import QIcon, QKeySequence, QAction, QActionGroup
+
+from EricWidgets.EricApplication import ericApp
+
+
+class ArgumentsError(RuntimeError):
+    """
+    Class implementing an exception, which is raised, if the wrong number of
+    arguments are given.
+    """
+    def __init__(self, error):
+        """
+        Constructor
+        
+        @param error error message of the exception (string)
+        """
+        self.errorMessage = str(error)
+        
+    def __repr__(self):
+        """
+        Special method returning a representation of the exception.
+        
+        @return string representing the error message
+        """
+        return str(self.errorMessage)
+        
+    def __str__(self):
+        """
+        Special method returning a string representation of the exception.
+        
+        @return string representing the error message
+        """
+        return str(self.errorMessage)
+
+
+class EricAction(QAction):
+    """
+    Class implementing an Action class extending QAction.
+    """
+    def __init__(self, *args):
+        """
+        Constructor
+        
+        @param args argument list of the constructor. This list is one of
+            <ul>
+            <li>text (string), icon (QIcon), menu text (string),
+                accelarator (QKeySequence), alternative accelerator
+                (QKeySequence), parent (QObject), name (string), toggle
+                (boolean)</li>
+            <li>text (string), icon (QIcon), menu text (string),
+                accelarator (QKeySequence), alternative accelerator
+                (QKeySequence), parent (QObject), name (string)</li>
+            <li>text (string), menu text (string),
+                accelarator (QKeySequence), alternative accelerator
+                (QKeySequence), parent (QObject), name (string), toggle
+                (boolean)</li>
+            <li>text (string), menu text (string),
+                accelarator (QKeySequence), alternative accelerator
+                (QKeySequence), parent (QObject), name (string)</li>
+            </ul>
+        @exception ArgumentsError raised to indicate invalid arguments
+        """
+        if isinstance(args[1], QIcon):
+            icon = args[1]
+            incr = 1
+        else:
+            icon = None
+            incr = 0
+        if len(args) < 6 + incr:
+            raise ArgumentsError(
+                "Not enough arguments, {0:d} expected, got {1:d}".format(
+                    6 + incr, len(args)))
+        elif len(args) > 7 + incr:
+            raise ArgumentsError(
+                "Too many arguments, max. {0:d} expected, got {1:d}".format(
+                    7 + incr, len(args)))
+            
+        parent = args[4 + incr]
+        super().__init__(parent)
+        name = args[5 + incr]
+        if name:
+            self.setObjectName(name)
+        
+        if args[1 + incr]:
+            self.setText(args[1 + incr])
+        
+        if args[0]:
+            self.setIconText(args[0])
+        if args[2 + incr]:
+            self.setShortcut(QKeySequence(args[2 + incr]))
+        
+        if args[3 + incr]:
+            self.setAlternateShortcut(QKeySequence(args[3 + incr]))
+        
+        if icon:
+            self.setIcon(icon)
+        
+        if len(args) == 7 + incr:
+            self.setCheckable(args[6 + incr])
+        
+        self.__ammendToolTip()
+        
+    def setAlternateShortcut(self, shortcut, removeEmpty=False):
+        """
+        Public slot to set the alternative keyboard shortcut.
+        
+        @param shortcut the alternative accelerator (QKeySequence)
+        @param removeEmpty flag indicating to remove the alternate shortcut,
+            if it is empty (boolean)
+        """
+        if not shortcut.isEmpty():
+            shortcuts = self.shortcuts()
+            if len(shortcuts) > 0:
+                if len(shortcuts) == 1:
+                    shortcuts.append(shortcut)
+                else:
+                    shortcuts[1] = shortcut
+                self.setShortcuts(shortcuts)
+        elif removeEmpty:
+            shortcuts = self.shortcuts()
+            if len(shortcuts) == 2:
+                del shortcuts[1]
+                self.setShortcuts(shortcuts)
+        
+    def alternateShortcut(self):
+        """
+        Public method to retrieve the alternative keyboard shortcut.
+        
+        @return the alternative accelerator (QKeySequence)
+        """
+        shortcuts = self.shortcuts()
+        if len(shortcuts) < 2:
+            return QKeySequence()
+        else:
+            return shortcuts[1]
+        
+    def setShortcut(self, shortcut):
+        """
+        Public slot to set the keyboard shortcut.
+        
+        @param shortcut the accelerator (QKeySequence)
+        """
+        super().setShortcut(shortcut)
+        self.__ammendToolTip()
+        
+    def setShortcuts(self, shortcuts):
+        """
+        Public slot to set the list of keyboard shortcuts.
+        
+        @param shortcuts list of keyboard accelerators (list of QKeySequence)
+            or key for a platform dependent list of accelerators
+            (QKeySequence.StandardKey)
+        """
+        super().setShortcuts(shortcuts)
+        self.__ammendToolTip()
+        
+    def setIconText(self, text):
+        """
+        Public slot to set the icon text of the action.
+        
+        @param text new icon text (string)
+        """
+        super().setIconText(text)
+        self.__ammendToolTip()
+        
+    def __ammendToolTip(self):
+        """
+        Private slot to add the primary keyboard accelerator to the tooltip.
+        """
+        shortcut = self.shortcut().toString(
+            QKeySequence.SequenceFormat.NativeText)
+        if shortcut:
+            if ericApp().isLeftToRight():
+                fmt = "{0} ({1})"
+            else:
+                fmt = "({1}) {0}"
+            self.setToolTip(fmt.format(self.iconText(), shortcut))
+
+
+def addActions(target, actions):
+    """
+    Module function to add a list of actions to a widget.
+    
+    @param target reference to the target widget (QWidget)
+    @param actions list of actions to be added to the target. A
+        None indicates a separator (list of QActions)
+    """
+    if target is None:
+        return
+    
+    for action in actions:
+        if action is None:
+            target.addSeparator()
+        else:
+            target.addAction(action)
+
+
+def createActionGroup(parent, name=None, exclusive=False):
+    """
+    Module function to create an action group.
+    
+    @param parent parent object of the action group (QObject)
+    @param name name of the action group object (string)
+    @param exclusive flag indicating an exclusive action group (boolean)
+    @return reference to the created action group (QActionGroup)
+    """
+    actGrp = QActionGroup(parent)
+    if name:
+        actGrp.setObjectName(name)
+    actGrp.setExclusive(exclusive)
+    return actGrp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricGui/EricGenericDiffHighlighter.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,172 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a syntax highlighter for diff outputs.
+"""
+
+import re
+
+from PyQt6.QtGui import QSyntaxHighlighter, QTextCharFormat, QFont
+
+import Preferences
+
+
+def TERMINAL(pattern):
+    """
+    Function to mark a pattern as the final one to search for.
+    
+    @param pattern pattern to be marked (string)
+    @return marked pattern (string)
+    """
+    return "__TERMINAL__:{0}".format(pattern)
+
+# Cache the results of re.compile for performance reasons
+_REGEX_CACHE = {}
+
+
+class EricGenericDiffHighlighter(QSyntaxHighlighter):
+    """
+    Class implementing a generic diff highlighter.
+    """
+    def __init__(self, doc):
+        """
+        Constructor
+        
+        @param doc reference to the text document (QTextDocument)
+        """
+        super().__init__(doc)
+        
+        self.regenerateRules()
+    
+    def __initColours(self):
+        """
+        Private method to initialize the highlighter colours.
+        """
+        self.textColor = Preferences.getDiffColour("TextColor")
+        self.addedColor = Preferences.getDiffColour("AddedColor")
+        self.removedColor = Preferences.getDiffColour("RemovedColor")
+        self.replacedColor = Preferences.getDiffColour("ReplacedColor")
+        self.contextColor = Preferences.getDiffColour("ContextColor")
+        self.headerColor = Preferences.getDiffColour("HeaderColor")
+        self.whitespaceColor = Preferences.getDiffColour("BadWhitespaceColor")
+    
+    def createRules(self, *rules):
+        """
+        Public method to create the highlighting rules.
+        
+        @param rules set of highlighting rules (list of tuples of rule
+            pattern (string) and highlighting format (QTextCharFormat))
+        """
+        for _idx, ruleFormat in enumerate(rules):
+            rule, formats = ruleFormat
+            terminal = rule.startswith(TERMINAL(''))
+            if terminal:
+                rule = rule[len(TERMINAL('')):]
+            try:
+                regex = _REGEX_CACHE[rule]
+            except KeyError:
+                regex = _REGEX_CACHE[rule] = re.compile(rule)
+            self._rules.append((regex, formats, terminal))
+    
+    def formats(self, line):
+        """
+        Public method to determine the highlighting formats for a line of
+        text.
+        
+        @param line text line to be highlighted (string)
+        @return list of matched highlighting rules (list of tuples of match
+            object and format (QTextCharFormat))
+        """
+        matched = []
+        for rx, formats, terminal in self._rules:
+            match = rx.match(line)
+            if not match:
+                continue
+            matched.append([match, formats])
+            if terminal:
+                return matched
+        
+        return matched
+    
+    def makeFormat(self, fg=None, bg=None, bold=False):
+        """
+        Public method to generate a format definition.
+        
+        @param fg foreground color (QColor)
+        @param bg background color (QColor)
+        @param bold flag indicating bold text (boolean)
+        @return format definiton (QTextCharFormat)
+        """
+        font = Preferences.getEditorOtherFonts("MonospacedFont")
+        charFormat = QTextCharFormat()
+        charFormat.setFontFamilies([font.family()])
+        charFormat.setFontPointSize(font.pointSize())
+        
+        if fg:
+            charFormat.setForeground(fg)
+        
+        if bg:
+            charFormat.setBackground(bg)
+        
+        if bold:
+            charFormat.setFontWeight(QFont.Weight.Bold)
+        
+        return charFormat
+    
+    def highlightBlock(self, text):
+        """
+        Public method to highlight a block of text.
+        
+        @param text text to be highlighted (string)
+        """
+        formats = self.formats(text)
+        if not formats:
+            # nothing matched
+            self.setFormat(0, len(text), self.normalFormat)
+            return
+        
+        for match, formatStr in formats:
+            start = match.start()
+            groups = match.groups()
+
+            # No groups in the regex, assume this is a single rule
+            # that spans the entire line
+            if not groups:
+                self.setFormat(0, len(text), formatStr)
+                continue
+
+            # Groups exist, rule is a tuple corresponding to group
+            for groupIndex, group in enumerate(groups):
+                if not group:
+                    # empty match
+                    continue
+                
+                # allow None as a no-op format
+                length = len(group)
+                if formatStr[groupIndex]:
+                    self.setFormat(start, start + length,
+                                   formatStr[groupIndex])
+                start += length
+    
+    def regenerateRules(self):
+        """
+        Public method to initialize or regenerate the syntax highlighter rules.
+        """
+        self.normalFormat = self.makeFormat()
+        
+        self.__initColours()
+        
+        self._rules = []
+        self.generateRules()
+    
+    def generateRules(self):
+        """
+        Public method to generate the rule set.
+        
+        Note: This method must me implemented by derived syntax
+        highlighters.
+        """
+        pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricGui/EricOverrideCursor.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,145 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a context manager class for an override cursor and a
+QProcess class controlling an override cursor.
+"""
+
+import contextlib
+
+from PyQt6.QtCore import pyqtSlot, Qt, QProcess, QEventLoop
+from PyQt6.QtGui import QCursor, QGuiApplication
+
+
+class EricOverrideCursor(contextlib.AbstractContextManager):
+    """
+    Class implementing a context manager class for an override cursor.
+    """
+    def __init__(self, cursorShape=Qt.CursorShape.WaitCursor):
+        """
+        Constructor
+        
+        @param cursorShape shape of the override cursor
+        @type Qt.CursorShape
+        """
+        self.__cursorShape = cursorShape
+    
+    def __enter__(self):
+        """
+        Special method called when entering the runtime ccontext.
+        
+        @return reference to the context manager object
+        @rtype EricOverrideCursor
+        """
+        QGuiApplication.setOverrideCursor(QCursor(self.__cursorShape))
+        QGuiApplication.processEvents(
+            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
+        
+        return self
+    
+    def __exit__(self, exc_type, exc_value, traceback):
+        """
+        Special method called when exiting the runtime ccontext.
+        
+        @param exc_type type of an exception raised in the runtime context
+        @param exc_value value of an exception raised in the runtime context
+        @param traceback traceback of an exception raised in the runtime
+            context
+        @return always returns None to not suppress any exception
+        @rtype None
+        """
+        QGuiApplication.restoreOverrideCursor()
+        QGuiApplication.processEvents(
+            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
+        
+        return None     # __IGNORE_WARNING_M831__
+
+
+class EricOverridenCursor(contextlib.AbstractContextManager):
+    """
+    Class implementing a context manager class for an overriden cursor.
+    
+    The cursor is reset upon entering the runtime context and restored
+    upon exiting it.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        self.__cursorShape = None
+    
+    def __enter__(self):
+        """
+        Special method called when entering the runtime ccontext.
+        
+        @return reference to the context manager object
+        @rtype EricOverrideCursor
+        """
+        cursor = QGuiApplication.overrideCursor()
+        if cursor is not None:
+            self.__cursorShape = cursor.shape()
+            QGuiApplication.restoreOverrideCursor()
+            QGuiApplication.processEvents(
+                QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
+        
+        return self
+    
+    def __exit__(self, exc_type, exc_value, traceback):
+        """
+        Special method called when exiting the runtime ccontext.
+        
+        @param exc_type type of an exception raised in the runtime context
+        @param exc_value value of an exception raised in the runtime context
+        @param traceback traceback of an exception raised in the runtime
+            context
+        @return always returns None to not suppress any exception
+        @rtype None
+        """
+        if self.__cursorShape is not None:
+            QGuiApplication.setOverrideCursor(QCursor(self.__cursorShape))
+            QGuiApplication.processEvents(
+                QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
+        
+        return None     # __IGNORE_WARNING_M831__
+
+
+class EricOverrideCursorProcess(QProcess):
+    """
+    Class implementing a QProcess subclass controlling an override cursor.
+    """
+    def __init__(self, parent=None, cursorShape=Qt.CursorShape.WaitCursor):
+        """
+        Constructor
+        
+        @param parent reference to the parent object
+        @type QObject
+        @param cursorShape shape of the override cursor
+        @type Qt.CursorShape
+        """
+        super().__init__(parent)
+        
+        self.__cursorShape = cursorShape
+        
+        self.started.connect(self.__processStarted)
+        self.finished.connect(self.__processFinished)
+    
+    @pyqtSlot()
+    def __processStarted(self):
+        """
+        Private slot setting the cursor after the process has started.
+        """
+        QGuiApplication.setOverrideCursor(QCursor(self.__cursorShape))
+        QGuiApplication.processEvents(
+            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
+    
+    @pyqtSlot()
+    def __processFinished(self):
+        """
+        Private slot resetting the cursor when the process finished.
+        """
+        QGuiApplication.restoreOverrideCursor()
+        QGuiApplication.processEvents(
+            QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricGui/__init__.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2006 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package implementing some special GUI elements.
+
+They extend or amend the standard elements as found in QtGui.
+"""
--- a/eric7/EricNetwork/EricGoogleMail.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/EricNetwork/EricGoogleMail.py	Sat May 22 19:58:24 2021 +0200
@@ -20,7 +20,7 @@
 from PyQt6.QtCore import pyqtSlot, pyqtSignal, QObject, QUrl, QUrlQuery
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout
 
-from E5Gui.EricTextInputDialog import EricTextInputDialog
+from EricWidgets.EricTextInputDialog import EricTextInputDialog
 
 import Globals
 
--- a/eric7/EricNetwork/EricJsonServer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/EricNetwork/EricJsonServer.py	Sat May 22 19:58:24 2021 +0200
@@ -16,7 +16,7 @@
 )
 from PyQt6.QtNetwork import QTcpServer, QHostAddress
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 import Preferences
 import Utilities
--- a/eric7/EricNetwork/EricNetworkProxyFactory.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/EricNetwork/EricNetworkProxyFactory.py	Sat May 22 19:58:24 2021 +0200
@@ -16,7 +16,7 @@
     QNetworkProxyFactory, QNetworkProxy, QNetworkProxyQuery
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 import Preferences
 import Globals
--- a/eric7/EricNetwork/EricSslCertificatesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/EricNetwork/EricSslCertificatesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -18,7 +18,7 @@
         QSslCertificate, QSslSocket, QSslConfiguration, QSsl
     )
 
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from .Ui_EricSslCertificatesDialog import Ui_EricSslCertificatesDialog
 
--- a/eric7/EricNetwork/EricSslErrorHandler.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/EricNetwork/EricSslErrorHandler.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtCore import QObject, QByteArray
 from PyQt6.QtNetwork import QSslCertificate, QSslConfiguration, QSslError, QSsl
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 import Preferences
 import Utilities
--- a/eric7/EricNetwork/EricTldExtractor.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/EricNetwork/EricTldExtractor.py	Sat May 22 19:58:24 2021 +0200
@@ -18,7 +18,7 @@
 
 from PyQt6.QtCore import QObject, QUrl, QFile, QFileInfo, qWarning
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 
 class EricTldHostParts:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricAnimatedLabel.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,180 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a label widget showing an animated pixmap.
+"""
+
+from PyQt6.QtCore import pyqtSlot, QTimer
+from PyQt6.QtGui import QPixmap
+from PyQt6.QtWidgets import QLabel
+
+import UI.PixmapCache
+
+
+class EricAnimatedLabel(QLabel):
+    """
+    Class implementing a label widget showing an animated pixmap.
+    """
+    def __init__(self, parent=None, *, animationFile="", interval=100):
+        """
+        Constructor
+        
+        @param parent reference to the parent window
+        @type QWidget
+        @keyparam animationFile path to the file containing the animation data
+        @type str
+        @keyparam interval interval in milliseconds between animation frames
+        @type int
+        """
+        super().__init__(parent)
+        
+        self.__timer = QTimer(self)
+        self.__timer.setInterval(interval)
+        self.__timer.timeout.connect(self.__animate)
+        
+        self.__currentFrame = 0
+        self.__frames = 0
+        self.__pixmap = None
+        self.__pixmapHeight = 0
+        self.__animationFile = ""
+        self.__animationFileLoaded = False
+        
+        self.__loadAnimationFile(animationFile)
+    
+    def __loadAnimationFile(self, animationFile):
+        """
+        Private method to load an animation file.
+        
+        @param animationFile path to the file containing the animation data
+        @type str
+        """
+        self.__animationFile = animationFile
+        
+        pixmap = UI.PixmapCache.getPixmap(animationFile)
+        if not pixmap.isNull():
+            self.__pixmap = pixmap
+            self.__pixmapHeight = pixmap.height()
+            self.__frames = pixmap.width() // pixmap.height()
+            # assume quadratic animation frames
+            self.__animationFileLoaded = True
+        else:
+            self.__pixmap = QPixmap()
+            self.__pixmapHeight = 0
+            self.__frames = 0
+            self.__animationFileLoaded = False
+        
+        self.reset()
+    
+    @pyqtSlot()
+    def __animate(self):
+        """
+        Private slot to animate the pixmap.
+        """
+        if self.__animationFileLoaded:
+            self.__currentFrame = (self.__currentFrame + 1) % self.__frames
+            super().setPixmap(self.__pixmap.copy(
+                self.__currentFrame * self.__pixmapHeight,
+                0,
+                self.__pixmapHeight,
+                self.__pixmapHeight
+            ))
+        else:
+            self.clear()
+    
+    @pyqtSlot()
+    def reset(self):
+        """
+        Public slot to reset the animation.
+        """
+        self.__currentFrame = -1
+        self.__animate()
+    
+    @pyqtSlot()
+    def start(self):
+        """
+        Public slot to start the animation.
+        """
+        if self.__animationFileLoaded:
+            self.__timer.start()
+    
+    @pyqtSlot()
+    def stop(self):
+        """
+        Public slot to stop the animation.
+        """
+        self.__timer.stop()
+    
+    def isActive(self):
+        """
+        Public method to check, if the animation is active.
+        
+        @return flag indicating an active animation
+        @rtype bool
+        """
+        return self.__timer.isActive() and self.__animationFileLoaded
+    
+    def setAnimationFile(self, animationFile):
+        """
+        Public method to set the name of the animation file.
+        
+        @param animationFile path to the file containing the animation data
+        @type str
+        """
+        active = self.__timer.isActive()
+        self.__timer.stop()
+        self.__loadAnimationFile(animationFile)
+        if active and self.__animationFileLoaded:
+            self.__timer.start()
+    
+    def getAnimationFile(self):
+        """
+        Public method to get the name of the animation file.
+        
+        @return path to the file containing the animation data
+        @rtype str
+        """
+        return self.__animationFile
+    
+    def isAnimationFileLoaded(self):
+        """
+        Public method to check, if the animation file was loaded.
+        
+        @return flag indicating a successfully loaded animation file
+        @rtype bool
+        """
+        return self.__animationFileLoaded
+    
+    def setInterval(self, interval):
+        """
+        Public method to set the interval between the animated frames.
+        
+        @param interval interval in milliseconds between animation frames
+        @type int
+        """
+        self.__timer.setInterval(interval)
+    
+    def getInterval(self):
+        """
+        Public method to get the interval between the animated frames.
+        
+        @return interval in milliseconds between animation frames
+        @rtype int
+        """
+        return self.__timer.interval()
+    
+    def setPixmap(self, pixmap):
+        """
+        Public slot to set the pixmap of the label.
+        
+        Setting a standard pixmap will stop the animation and set the given
+        pixmap without animating it. Thereafter the animation has to be
+        restarted with the start() method.
+        
+        @param pixmap pixmap to be set
+        @type QPixmap
+        """
+        self.stop()
+        super().setPixmap(pixmap)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricAnimatedWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing an animated widget.
+"""
+
+#
+# Code was inspired by qupzilla web browser
+#
+
+from PyQt6.QtCore import pyqtSlot, QTimeLine, QPoint
+from PyQt6.QtWidgets import QWidget
+
+
+class EricAnimatedWidget(QWidget):
+    """
+    Class implementing an animated widget.
+    """
+    DirectionDown = 0
+    DirectionUp = 1
+    
+    def __init__(self, direction=DirectionDown, duration=300, parent=None):
+        """
+        Constructor
+        
+        @param direction direction of the animation
+        @type int (one of DirectionDown or DirectionUp)
+        @param duration duration of the animation
+        @type int
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        
+        self.__direction = direction
+        self.__stepHeight = 0.0
+        self.__stepY = 0.0
+        self.__startY = 0
+        self.__widget = QWidget(self)
+        
+        self.__timeline = QTimeLine(duration)
+        self.__timeline.setFrameRange(0, 100)
+        self.__timeline.frameChanged.connect(self.__animateFrame)
+        
+        self.setMaximumHeight(0)
+    
+    def widget(self):
+        """
+        Public method to get a reference to the animated widget.
+        
+        @return reference to the animated widget
+        @rtype QWidget
+        """
+        return self.__widget
+    
+    @pyqtSlot()
+    def startAnimation(self):
+        """
+        Public slot to start the animation.
+        """
+        if self.__timeline.state() == QTimeLine.State.Running:
+            return
+        
+        shown = 0
+        hidden = 0
+        
+        if self.__direction == self.DirectionDown:
+            shown = 0
+            hidden = -self.__widget.height()
+        
+        self.__widget.move(QPoint(self.__widget.pos().x(), hidden))
+        
+        self.__stepY = (hidden - shown) / 100.0
+        self.__startY = hidden
+        self.__stepHeight = self.__widget.height() / 100.0
+        
+        self.__timeline.setDirection(QTimeLine.Direction.Forward)
+        self.__timeline.start()
+    
+    @pyqtSlot(int)
+    def __animateFrame(self, frame):
+        """
+        Private slot to animate the next frame.
+        
+        @param frame frame number
+        @type int
+        """
+        self.setFixedHeight(frame * self.__stepHeight)
+        self.__widget.move(self.pos().x(),
+                           self.__startY - frame * self.__stepY)
+    
+    @pyqtSlot()
+    def hide(self):
+        """
+        Public slot to hide the animated widget.
+        """
+        if self.__timeline.state() == QTimeLine.State.Running:
+            return
+        
+        self.__timeline.setDirection(QTimeLine.Direction.Backward)
+        self.__timeline.finished.connect(self.close)
+        self.__timeline.start()
+        
+        p = self.parentWidget()
+        if p is not None:
+            p.setFocus()
+    
+    def resizeEvent(self, evt):
+        """
+        Protected method to handle a resize event.
+        
+        @param evt reference to the event object
+        @type QResizeEvent
+        """
+        if evt.size().width() != self.__widget.width():
+            self.__widget.resize(evt.size().width(), self.__widget.height())
+        
+        super().resizeEvent(evt)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricApplication.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,152 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Class implementing a specialized application class.
+"""
+
+from PyQt6.QtCore import Qt, QCoreApplication
+from PyQt6.QtGui import QPalette
+from PyQt6.QtWidgets import QApplication
+
+QCoreApplication.setAttribute(
+    Qt.ApplicationAttribute.AA_ShareOpenGLContexts, True)
+
+
+class EricApplication(QApplication):
+    """
+    Eric application class with an object registry.
+    """
+    def __init__(self, argv):
+        """
+        Constructor
+        
+        @param argv command line arguments
+        @type list
+        """
+        super().__init__(argv)
+        
+        QCoreApplication.setAttribute(
+            Qt.ApplicationAttribute.AA_DontCreateNativeWidgetSiblings, True)
+        
+        self.__objectRegistry = {}
+        self.__pluginObjectRegistry = {}
+    
+    def registerObject(self, name, objectRef):
+        """
+        Public method to register an object in the object registry.
+        
+        @param name name of the object
+        @type str
+        @param objectRef reference to the object
+        @type any
+        @exception KeyError raised when the given name is already in use
+        """
+        if name in self.__objectRegistry:
+            raise KeyError('Object "{0}" already registered.'.format(name))
+        else:
+            self.__objectRegistry[name] = objectRef
+    
+    def getObject(self, name):
+        """
+        Public method to get a reference to a registered object.
+        
+        @param name name of the object
+        @type str
+        @return reference to the registered object
+        @rtype any
+        @exception KeyError raised when the given name is not known
+        """
+        if name not in self.__objectRegistry:
+            raise KeyError('Object "{0}" is not registered.'.format(name))
+        
+        return self.__objectRegistry[name]
+    
+    def registerPluginObject(self, name, objectRef, pluginType=None):
+        """
+        Public method to register a plugin object in the object registry.
+        
+        @param name name of the plugin object
+        @type str
+        @param objectRef reference to the plugin object
+        @type any
+        @param pluginType type of the plugin object
+        @type str
+        @exception KeyError raised when the given name is already in use
+        """
+        if name in self.__pluginObjectRegistry:
+            raise KeyError(
+                'Pluginobject "{0}" already registered.'.format(name))
+        else:
+            self.__pluginObjectRegistry[name] = (objectRef, pluginType)
+    
+    def unregisterPluginObject(self, name):
+        """
+        Public method to unregister a plugin object in the object registry.
+        
+        @param name name of the plugin object
+        @type str
+        """
+        if name in self.__pluginObjectRegistry:
+            del self.__pluginObjectRegistry[name]
+    
+    def getPluginObject(self, name):
+        """
+        Public method to get a reference to a registered plugin object.
+        
+        @param name name of the plugin object
+        @type str
+        @return reference to the registered plugin object
+        @rtype any
+        @exception KeyError raised when the given name is not known
+        """
+        if name not in self.__pluginObjectRegistry:
+            raise KeyError(
+                'Pluginobject "{0}" is not registered.'.format(name))
+        
+        return self.__pluginObjectRegistry[name][0]
+    
+    def getPluginObjects(self):
+        """
+        Public method to get a list of (name, reference) pairs of all
+        registered plugin objects.
+        
+        @return list of (name, reference) pairs
+        @rtype list of (str, any)
+        """
+        objects = []
+        for name in self.__pluginObjectRegistry:
+            objects.append((name, self.__pluginObjectRegistry[name][0]))
+        return objects
+    
+    def getPluginObjectType(self, name):
+        """
+        Public method to get the type of a registered plugin object.
+        
+        @param name name of the plugin object
+        @type str
+        @return type of the plugin object
+        @rtype str
+        @exception KeyError raised when the given name is not known
+        """
+        if name not in self.__pluginObjectRegistry:
+            raise KeyError(
+                'Pluginobject "{0}" is not registered.'.format(name))
+        
+        return self.__pluginObjectRegistry[name][1]
+    
+    def usesDarkPalette(self):
+        """
+        Public method to check, if the application uses a palette with a dark
+        background.
+        
+        @return flag indicating the use of a palette with a dark background
+        @rtype bool
+        """
+        palette = self.palette()
+        lightness = palette.color(QPalette.ColorRole.Window).lightness()
+        return lightness <= 128
+
+ericApp = QCoreApplication.instance
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricClickableLabel.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a clickable label.
+"""
+
+from PyQt6.QtCore import pyqtSignal, Qt, QPoint
+from PyQt6.QtWidgets import QLabel
+
+
+class EricClickableLabel(QLabel):
+    """
+    Class implementing a clickable label.
+    
+    @signal clicked(QPoint) emitted upon a click on the label
+        with the left button
+    @signal middleClicked(QPoint) emitted upon a click on the label
+        with the middle button or CTRL and left button
+    """
+    clicked = pyqtSignal(QPoint)
+    middleClicked = pyqtSignal(QPoint)
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        self.setCursor(Qt.CursorShape.PointingHandCursor)
+    
+    def mouseReleaseEvent(self, evt):
+        """
+        Protected method handling mouse release events.
+        
+        @param evt mouse event (QMouseEvent)
+        """
+        if (
+            evt.button() == Qt.MouseButton.LeftButton and
+            self.rect().contains(evt.position().toPoint())
+        ):
+            if evt.modifiers() == Qt.KeyboardModifier.ControlModifier:
+                self.middleClicked.emit(evt.globalPosition().toPoint())
+            else:
+                self.clicked.emit(evt.globalPosition().toPoint())
+        elif (
+            evt.button() == Qt.MouseButton.MiddleButton and
+            self.rect().contains(evt.position().toPoint())
+        ):
+            self.middleClicked.emit(evt.globalPosition().toPoint())
+        else:
+            super().mouseReleaseEvent(evt)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricComboSelectionDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,69 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to select one entry from a list of strings.
+"""
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox
+
+from .Ui_E5ComboSelectionDialog import Ui_E5ComboSelectionDialog
+
+
+class EricComboSelectionDialog(QDialog, Ui_E5ComboSelectionDialog):
+    """
+    Class implementing a dialog to select one entry from a list of strings.
+    """
+    def __init__(self, entries, title="", message="", parent=None):
+        """
+        Constructor
+        
+        @param entries list of entries to select from
+        @type list of str or list of tuples of (str, any)
+        @param title title of the dialog (defaults to "")
+        @type str (optional)
+        @param message message to be show in the dialog (defaults to "")
+        @type str (optional)
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        for entry in entries:
+            if isinstance(entry, tuple):
+                self.selectionComboBox.addItem(*entry)
+            else:
+                self.selectionComboBox.addItem(entry)
+        
+        self.on_selectionComboBox_currentTextChanged(
+            self.selectionComboBox.itemText(0))
+        
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+    
+    @pyqtSlot(str)
+    def on_selectionComboBox_currentTextChanged(self, txt):
+        """
+        Private slot to react upon changes of the selected entry.
+        
+        @param txt text of the selected entry
+        @type str
+        """
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Ok).setEnabled(bool(txt))
+    
+    def getSelection(self):
+        """
+        Public method to retrieve the selected item and its data.
+        
+        @return tuple containing the selected entry and its associated data
+        @rtype tuple of (str, any)
+        """
+        return (
+            self.selectionComboBox.currentText(),
+            self.selectionComboBox.currentData()
+        )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricComboSelectionDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EricComboSelectionDialog</class>
+ <widget class="QDialog" name="EricComboSelectionDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>100</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Select from List</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="messageLabel">
+     <property name="text">
+      <string>Select from the list below:</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QComboBox" name="selectionComboBox"/>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>EricComboSelectionDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>EricComboSelectionDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricCompleters.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,156 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2007 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing various kinds of completers.
+"""
+
+import os
+
+from PyQt6.QtCore import QDir, Qt, QStringListModel
+from PyQt6.QtGui import QFileSystemModel
+from PyQt6.QtWidgets import QCompleter
+
+from Globals import isWindowsPlatform
+
+
+class EricFileCompleter(QCompleter):
+    """
+    Class implementing a completer for file names.
+    """
+    def __init__(self, parent=None,
+                 completionMode=QCompleter.CompletionMode.PopupCompletion,
+                 showHidden=False):
+        """
+        Constructor
+        
+        @param parent parent widget of the completer (QWidget)
+        @param completionMode completion mode of the
+            completer (QCompleter.CompletionMode)
+        @param showHidden flag indicating to show hidden entries as well
+            (boolean)
+        """
+        super().__init__(parent)
+        self.__model = QFileSystemModel(self)
+        if showHidden:
+            self.__model.setFilter(
+                QDir.Filter.Dirs |
+                QDir.Filter.Files |
+                QDir.Filter.Drives |
+                QDir.Filter.AllDirs |
+                QDir.Filter.Hidden)
+        else:
+            self.__model.setFilter(
+                QDir.Filter.Dirs |
+                QDir.Filter.Files |
+                QDir.Filter.Drives |
+                QDir.Filter.AllDirs)
+        self.__model.setRootPath("")
+        self.setModel(self.__model)
+        self.setCompletionMode(completionMode)
+        if isWindowsPlatform():
+            self.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+        if parent:
+            parent.setCompleter(self)
+    
+    def setRootPath(self, path):
+        """
+        Public method to set the root path of the model.
+        
+        @param path root path for the model
+        @type str
+        """
+        if not os.path.isdir(path):
+            path = os.path.dirname(path)
+        self.__model.setRootPath(path)
+    
+    def rootPath(self):
+        """
+        Public method to get the root path of the model.
+        
+        @return root path of the model
+        @rtype str
+        """
+        return self.__model.rootPath()
+
+
+class EricDirCompleter(QCompleter):
+    """
+    Class implementing a completer for directory names.
+    """
+    def __init__(self, parent=None,
+                 completionMode=QCompleter.CompletionMode.PopupCompletion,
+                 showHidden=False):
+        """
+        Constructor
+        
+        @param parent parent widget of the completer (QWidget)
+        @param completionMode completion mode of the
+            completer (QCompleter.CompletionMode)
+        @param showHidden flag indicating to show hidden entries as well
+            (boolean)
+        """
+        super().__init__(parent)
+        self.__model = QFileSystemModel(self)
+        if showHidden:
+            self.__model.setFilter(
+                QDir.Filter.Drives |
+                QDir.Filter.AllDirs |
+                QDir.Filter.Hidden)
+        else:
+            self.__model.setFilter(
+                QDir.Filter.Drives | QDir.Filter.AllDirs)
+        self.__model.setRootPath("")
+        self.setModel(self.__model)
+        self.setCompletionMode(completionMode)
+        if isWindowsPlatform():
+            self.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
+        if parent:
+            parent.setCompleter(self)
+    
+    def setRootPath(self, path):
+        """
+        Public method to set the root path of the model.
+        
+        @param path root path for the model
+        @type str
+        """
+        if not os.path.isdir(path):
+            path = os.path.dirname(path)
+        self.__model.setRootPath(path)
+    
+    def rootPath(self):
+        """
+        Public method to get the root path of the model.
+        
+        @return root path of the model
+        @rtype str
+        """
+        return self.__model.rootPath()
+
+
+class EricStringListCompleter(QCompleter):
+    """
+    Class implementing a completer for string lists.
+    """
+    def __init__(self, parent=None, strings=None,
+                 completionMode=QCompleter.CompletionMode.PopupCompletion):
+        """
+        Constructor
+        
+        @param parent parent widget of the completer (QWidget)
+        @param strings list of string to load into the completer
+            (list of strings)
+        @param completionMode completion mode of the
+            completer (QCompleter.CompletionMode)
+        """
+        super().__init__(parent)
+        self.__model = QStringListModel(
+            [] if strings is None else strings[:],
+            parent)
+        self.setModel(self.__model)
+        self.setCompletionMode(completionMode)
+        if parent:
+            parent.setCompleter(self)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricErrorMessage.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,220 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2013 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a specialized error message dialog.
+"""
+
+import contextlib
+
+from PyQt6.QtCore import (
+    qInstallMessageHandler, Qt, Q_ARG, QSettings, QtMsgType, QThread,
+    QMetaObject
+)
+from PyQt6.QtWidgets import QErrorMessage, QDialog
+
+from EricWidgets.EricApplication import ericApp
+
+import Globals
+import Utilities
+import Preferences
+
+
+_msgHandlerDialog = None
+_origMsgHandler = None
+
+_filterSettings = QSettings(
+    QSettings.Format.IniFormat,
+    QSettings.Scope.UserScope,
+    Globals.settingsNameOrganization,
+    "eric7messagefilters")
+_defaultFilters = [
+    "QFont::",
+    "QCocoaMenu::removeMenuItem",
+    "QCocoaMenu::insertNative",
+    ",type id:",
+    "Remote debugging server started successfully",
+    "Uncaught SecurityError:",
+    "Content Security Policy",
+    "QXcbClipboard:",
+    "QXcbConnection: XCB error",
+    "libpng warning: iCCP:",
+    "Uncaught ReferenceError: $ is not defined",
+]
+
+
+def filterMessage(message):
+    """
+    Module function to filter messages.
+    
+    @param message message to be checked
+    @type str
+    @return flag indicating that the message should be filtered out
+    @rtype bool
+    """
+    return any(
+        filterStr in message
+        for filterStr in Globals.toList(_filterSettings.value(
+            "MessageFilters", [])) + _defaultFilters
+    )
+
+
+class EricErrorMessage(QErrorMessage):
+    """
+    Class implementing a specialized error message dialog.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+    
+    def showMessage(self, message, msgType=""):
+        """
+        Public method to show a message.
+        
+        @param message error message to be shown
+        @type str
+        @param msgType type of the error message
+        @type str
+        """
+        if not filterMessage(message):
+            if msgType:
+                super().showMessage(message, msgType)
+            else:
+                super().showMessage(message)
+    
+    def editMessageFilters(self):
+        """
+        Public method to edit the list of message filters.
+        """
+        from .EricErrorMessageFilterDialog import EricErrorMessageFilterDialog
+        dlg = EricErrorMessageFilterDialog(
+            Globals.toList(_filterSettings.value(
+                "MessageFilters", [])))
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            filters = dlg.getFilters()
+            _filterSettings.setValue("MessageFilters", filters)
+
+
+def messageHandler(msgType, context, message):
+    """
+    Module function handling messages.
+    
+    @param msgType type of the message
+    @type  int, QtMsgType
+    @param context context information
+    @type QMessageLogContext
+    @param message message to be shown
+    @type bytes
+    """
+    if _msgHandlerDialog:
+        if msgType.value < Preferences.getUI("MinimumMessageTypeSeverity"):
+            # severity is lower than configured
+            # just ignore the message
+            return
+        
+        with contextlib.suppress(RuntimeError):
+            if msgType == QtMsgType.QtDebugMsg:
+                messageType = "Debug Message:"
+            elif msgType == QtMsgType.QtInfoMsg:
+                messageType = "Info Message:"
+            elif msgType == QtMsgType.QtWarningMsg:
+                messageType = "Warning:"
+            elif msgType == QtMsgType.QtCriticalMsg:
+                messageType = "Critical:"
+            elif msgType == QtMsgType.QtFatalMsg:
+                messageType = "Fatal Error:"
+            if isinstance(message, bytes):
+                message = Utilities.decodeBytes(message)
+            if filterMessage(message):
+                return
+            message = (
+                message.replace("\r\n", "<br/>")
+                .replace("\n", "<br/>")
+                .replace("\r", "<br/>")
+            )
+            msg = (
+                (
+                    "<p><b>{0}</b></p><p>{1}</p><p>File: {2}</p>"
+                    "<p>Line: {3}</p><p>Function: {4}</p>"
+                ).format(messageType, Utilities.html_uencode(message),
+                         context.file, context.line, context.function)
+                if context.file is not None else
+                "<p><b>{0}</b></p><p>{1}</p>".format(
+                    messageType, Utilities.html_uencode(message))
+            )
+            if QThread.currentThread() == ericApp().thread():
+                _msgHandlerDialog.showMessage(msg)
+            else:
+                QMetaObject.invokeMethod(
+                    _msgHandlerDialog,
+                    "showMessage",
+                    Qt.ConnectionType.QueuedConnection,
+                    Q_ARG(str, msg))
+            return
+    elif _origMsgHandler:
+        _origMsgHandler(msgType, message)
+        return
+    
+    if msgType == QtMsgType.QtDebugMsg:
+        messageType = "Debug Message"
+    elif msgType == QtMsgType.QtInfoMsg:
+        messageType = "Info Message:"
+    elif msgType == QtMsgType.QtWarningMsg:
+        messageType = "Warning"
+    elif msgType == QtMsgType.QtCriticalMsg:
+        messageType = "Critical"
+    elif msgType == QtMsgType.QtFatalMsg:
+        messageType = "Fatal Error"
+    if isinstance(message, bytes):
+        message = message.decode()
+    print("{0}: {1} in {2} at line {3} ({4})".format(
+        messageType, message, context.file, context.line,
+        context.function))
+
+
+def qtHandler():
+    """
+    Module function to install an EricErrorMessage dialog as the global
+    message handler.
+    
+    @return reference to the message handler dialog
+    @rtype EricErrorMessage
+    """
+    global _msgHandlerDialog, _origMsgHandler
+    
+    if _msgHandlerDialog is None:
+        # Install an EricErrorMessage dialog as the global message handler.
+        _msgHandlerDialog = EricErrorMessage()
+        _origMsgHandler = qInstallMessageHandler(messageHandler)
+    
+    return _msgHandlerDialog
+
+
+def editMessageFilters():
+    """
+    Module function to edit the list of message filters.
+    """
+    if _msgHandlerDialog:
+        _msgHandlerDialog.editMessageFilters()
+    else:
+        print("No message handler installed.")
+
+
+def messageHandlerInstalled():
+    """
+    Module function to check, if a message handler was installed.
+    
+    @return flag indicating an installed message handler
+    @rtype bool
+    """
+    return _msgHandlerDialog is not None
+
+#
+# eflag: noqa = M801
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricErrorMessageFilterDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2013 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to manage the list of messages to be ignored.
+"""
+
+from PyQt6.QtWidgets import QDialog
+
+from .Ui_EricErrorMessageFilterDialog import Ui_EricErrorMessageFilterDialog
+
+
+class EricErrorMessageFilterDialog(QDialog, Ui_EricErrorMessageFilterDialog):
+    """
+    Class implementing a dialog to manage the list of messages to be ignored.
+    """
+    def __init__(self, messageFilters, parent=None):
+        """
+        Constructor
+        
+        @param messageFilters list of message filters to be edited
+        @type list of str
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        self.filtersEditWidget.setList(messageFilters)
+        self.filtersEditWidget.setListWhatsThis(self.tr(
+            "<b>Error Message Filters</b>"
+            "<p>This list shows the configured message filters used to"
+            " suppress error messages from within Qt.</p>"
+            "<p>A default list of message filters is added to this"
+            " user list.</p>"
+        ))
+    
+    def getFilters(self):
+        """
+        Public method to get the list of message filters.
+        
+        @return error message filters (list of strings)
+        """
+        return self.filtersEditWidget.getList()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricErrorMessageFilterDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EricErrorMessageFilterDialog</class>
+ <widget class="QDialog" name="EricErrorMessageFilterDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>500</width>
+    <height>350</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Error Messages Filter</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="EricStringListEditWidget" name="filtersEditWidget" native="true"/>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>EricStringListEditWidget</class>
+   <extends>QWidget</extends>
+   <header>EricWidgets/EricStringListEditWidget.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <tabstops>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>EricErrorMessageFilterDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>227</x>
+     <y>329</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>EricErrorMessageFilterDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>295</x>
+     <y>335</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricFileDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,197 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing alternative functions for the QFileDialog static methods
+to cope with distributor's usage of KDE wrapper dialogs for Qt file dialogs.
+"""
+
+from PyQt6.QtWidgets import QFileDialog
+
+import Globals
+
+##Options = QFileDialog.Options
+Option = QFileDialog.Option
+
+ShowDirsOnly = QFileDialog.Option.ShowDirsOnly
+DontResolveSymlinks = QFileDialog.Option.DontResolveSymlinks
+DontConfirmOverwrite = QFileDialog.Option.DontConfirmOverwrite
+DontUseNativeDialog = QFileDialog.Option.DontUseNativeDialog
+ReadOnly = QFileDialog.Option.ReadOnly
+HideNameFilterDetails = QFileDialog.Option.HideNameFilterDetails
+##DontUseSheet = QFileDialog.Option.DontUseSheet
+DontUseCustomDirectoryIcons = QFileDialog.Option.DontUseCustomDirectoryIcons
+
+
+def __reorderFilter(filterStr, initialFilter=""):
+    """
+    Private function to reorder the file filter to cope with a KDE issue
+    introduced by distributor's usage of KDE file dialogs.
+    
+    @param filterStr Qt file filter (string)
+    @param initialFilter initial filter (string)
+    @return the rearranged Qt file filter (string)
+    """
+    if initialFilter and not Globals.isMacPlatform():
+        fileFilters = filterStr.split(';;')
+        if len(fileFilters) < 10 and initialFilter in fileFilters:
+            fileFilters.remove(initialFilter)
+        fileFilters.insert(0, initialFilter)
+        return ";;".join(fileFilters)
+    else:
+        return filterStr
+
+
+def getOpenFileName(parent=None, caption="", directory="",
+                    filterStr="", options=None):
+    """
+    Module function to get the name of a file for opening it.
+    
+    @param parent parent widget of the dialog (QWidget)
+    @param caption window title of the dialog (string)
+    @param directory working directory of the dialog (string)
+    @param filterStr filter string for the dialog (string)
+    @param options various options for the dialog (QFileDialog.Options)
+    @return name of file to be opened (string)
+    """
+    if options is None:
+        options = QFileDialog.Option(0)
+    if Globals.isLinuxPlatform():
+        options |= QFileDialog.Option.DontUseNativeDialog
+    return QFileDialog.getOpenFileName(
+        parent, caption, directory, filterStr, "", options)[0]
+
+
+def getOpenFileNameAndFilter(parent=None, caption="", directory="",
+                             filterStr="", initialFilter="",
+                             options=None):
+    """
+    Module function to get the name of a file for opening it and the selected
+    file name filter.
+    
+    @param parent parent widget of the dialog (QWidget)
+    @param caption window title of the dialog (string)
+    @param directory working directory of the dialog (string)
+    @param filterStr filter string for the dialog (string)
+    @param initialFilter initial filter for the dialog (string)
+    @param options various options for the dialog (QFileDialog.Options)
+    @return name of file to be opened and selected filter (string, string)
+    """
+    if options is None:
+        options = QFileDialog.Option(0)
+    if Globals.isLinuxPlatform():
+        options |= QFileDialog.Option.DontUseNativeDialog
+    newfilter = __reorderFilter(filterStr, initialFilter)
+    return QFileDialog.getOpenFileName(
+        parent, caption, directory, newfilter, initialFilter, options)
+
+
+def getOpenFileNames(parent=None, caption="", directory="",
+                     filterStr="", options=None):
+    """
+    Module function to get a list of names of files for opening.
+    
+    @param parent parent widget of the dialog (QWidget)
+    @param caption window title of the dialog (string)
+    @param directory working directory of the dialog (string)
+    @param filterStr filter string for the dialog (string)
+    @param options various options for the dialog (QFileDialog.Options)
+    @return list of file names to be opened (list of string)
+    """
+    if options is None:
+        options = QFileDialog.Option(0)
+    if Globals.isLinuxPlatform():
+        options |= QFileDialog.Option.DontUseNativeDialog
+    return QFileDialog.getOpenFileNames(
+        parent, caption, directory, filterStr, "", options)[0]
+
+
+def getOpenFileNamesAndFilter(parent=None, caption="", directory="",
+                              filterStr="", initialFilter="",
+                              options=None):
+    """
+    Module function to get a list of names of files for opening and the
+    selected file name filter.
+    
+    @param parent parent widget of the dialog (QWidget)
+    @param caption window title of the dialog (string)
+    @param directory working directory of the dialog (string)
+    @param filterStr filter string for the dialog (string)
+    @param initialFilter initial filter for the dialog (string)
+    @param options various options for the dialog (QFileDialog.Options)
+    @return list of file names to be opened and selected filter
+        (list of string, string)
+    """
+    if options is None:
+        options = QFileDialog.Option(0)
+    if Globals.isLinuxPlatform():
+        options |= QFileDialog.Option.DontUseNativeDialog
+    newfilter = __reorderFilter(filterStr, initialFilter)
+    return QFileDialog.getOpenFileNames(
+        parent, caption, directory, newfilter, initialFilter, options)
+
+
+def getSaveFileName(parent=None, caption="", directory="",
+                    filterStr="", options=None):
+    """
+    Module function to get the name of a file for saving it.
+    
+    @param parent parent widget of the dialog (QWidget)
+    @param caption window title of the dialog (string)
+    @param directory working directory of the dialog (string)
+    @param filterStr filter string for the dialog (string)
+    @param options various options for the dialog (QFileDialog.Options)
+    @return name of file to be saved (string)
+    """
+    if options is None:
+        options = QFileDialog.Option(0)
+    if Globals.isLinuxPlatform():
+        options |= QFileDialog.Option.DontUseNativeDialog
+    return QFileDialog.getSaveFileName(
+        parent, caption, directory, filterStr, "", options)[0]
+
+
+def getSaveFileNameAndFilter(parent=None, caption="", directory="",
+                             filterStr="", initialFilter="",
+                             options=None):
+    """
+    Module function to get the name of a file for saving it and the selected
+    file name filter.
+    
+    @param parent parent widget of the dialog (QWidget)
+    @param caption window title of the dialog (string)
+    @param directory working directory of the dialog (string)
+    @param filterStr filter string for the dialog (string)
+    @param initialFilter initial filter for the dialog (string)
+    @param options various options for the dialog (QFileDialog.Options)
+    @return name of file to be saved and selected filter (string, string)
+    """
+    if options is None:
+        options = QFileDialog.Option(0)
+    if Globals.isLinuxPlatform():
+        options |= QFileDialog.Option.DontUseNativeDialog
+    newfilter = __reorderFilter(filterStr, initialFilter)
+    return QFileDialog.getSaveFileName(
+        parent, caption, directory, newfilter, initialFilter, options)
+
+
+def getExistingDirectory(parent=None, caption="",
+                         directory="",
+                         options=QFileDialog.Option.ShowDirsOnly):
+    """
+    Module function to get the name of a directory.
+    
+    @param parent parent widget of the dialog (QWidget)
+    @param caption window title of the dialog (string)
+    @param directory working directory of the dialog (string)
+    @param options various options for the dialog (QFileDialog.Options)
+    @return name of selected directory (string)
+    """
+    if options is None:
+        options = QFileDialog.Option(0)
+    if Globals.isLinuxPlatform():
+        options |= QFileDialog.Option.DontUseNativeDialog
+    return QFileDialog.getExistingDirectory(parent, caption, directory,
+                                            options)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricFileSaveConfirmDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,148 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2018 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to enter a file system path using a file picker.
+"""
+
+import os
+
+from PyQt6.QtWidgets import (
+    QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QLineEdit
+)
+
+from .EricPathPicker import EricPathPicker, EricPathPickerModes
+
+
+class EricFileSaveConfirmDialog(QDialog):
+    """
+    Class implementing a dialog to enter a file system path using a file
+    picker.
+    """
+    def __init__(self, filename, title, message="", picker=True, parent=None):
+        """
+        Constructor
+        
+        @param filename file name to be shown
+        @type str
+        @param title title for the dialog
+        @type str
+        @param message message to be shown
+        @type str
+        @param picker flag indicating to use a path picker
+        @type bool
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        
+        self.setMinimumWidth(400)
+        
+        self.__selectedAction = "cancel"
+        self.__filename = filename
+        
+        self.__layout = QVBoxLayout(self)
+        
+        self.__label = QLabel(self)
+        self.__label.setWordWrap(True)
+        if message:
+            self.__label.setText(message)
+        else:
+            self.__label.setText(self.tr("The given file exists already."))
+        
+        if picker:
+            self.__pathPicker = EricPathPicker(self)
+            self.__pathPicker.setMode(EricPathPickerModes.SAVE_FILE_MODE)
+        else:
+            self.__pathPicker = QLineEdit(self)
+            self.__pathPicker.setClearButtonEnabled(True)
+        
+        self.__buttonBox = QDialogButtonBox(self)
+        self.__cancelButton = self.__buttonBox.addButton(
+            QDialogButtonBox.StandardButton.Cancel)
+        self.__overwriteButton = self.__buttonBox.addButton(
+            self.tr("Overwrite"), QDialogButtonBox.ButtonRole.AcceptRole)
+        self.__renameButton = self.__buttonBox.addButton(
+            self.tr("Rename"), QDialogButtonBox.ButtonRole.AcceptRole)
+        
+        self.__layout.addWidget(self.__label)
+        self.__layout.addWidget(self.__pathPicker)
+        self.__layout.addWidget(self.__buttonBox)
+        
+        # set values and states
+        self.__pathPicker.setText(filename)
+        if picker:
+            self.__pathPicker.setDefaultDirectory(os.path.dirname(filename))
+        self.__renameButton.setEnabled(False)
+        self.__cancelButton.setDefault(True)
+        
+        self.__buttonBox.clicked.connect(self.__buttonBoxClicked)
+        self.__pathPicker.textChanged.connect(self.__filenameChanged)
+    
+    def __buttonBoxClicked(self, button):
+        """
+        Private slot to handle the user clicking a button.
+        
+        @param button reference to the clicked button
+        @type QAbstractButton
+        """
+        if button == self.__cancelButton:
+            self.__selectedAction = "cancel"
+            self.reject()
+        elif button == self.__renameButton:
+            self.__selectedAction = "rename"
+            self.accept()
+        elif button == self.__overwriteButton:
+            self.__selectedAction = "overwrite"
+            self.accept()
+    
+    def __filenameChanged(self, text):
+        """
+        Private slot to handle a change of the file name.
+        
+        @param text new file name
+        @type str
+        """
+        self.__renameButton.setEnabled(text != self.__filename)
+    
+    def selectedAction(self):
+        """
+        Public method to get the selected action and associated data.
+        
+        @return tuple containing the selected action (cancel, rename,
+            overwrite) and the filename (in case of 'rename' or 'overwrite')
+        @rtype tuple of (str, str)
+        """
+        if self.__selectedAction == "rename":
+            filename = self.__pathPicker.text()
+        elif self.__selectedAction == "overwrite":
+            filename = self.__filename
+        else:
+            filename = ""
+        return self.__selectedAction, filename
+
+
+def confirmOverwrite(filename, title, message="", picker=True, parent=None):
+    """
+    Function to confirm that a file shall be overwritten.
+    
+    @param filename file name to be shown
+    @type str
+    @param title title for the dialog
+    @type str
+    @param message message to be shown
+    @type str
+    @param picker flag indicating to use a path picker
+    @type bool
+    @param parent reference to the parent widget
+    @type QWidget
+    @return tuple containing the selected action (cancel, rename,
+        overwrite) and the filename (in case of 'rename' or 'overwrite')
+    @rtype tuple of (str, str)
+    """
+    dlg = EricFileSaveConfirmDialog(filename, title, message=message,
+                                  picker=picker, parent=parent)
+    dlg.exec()
+    return dlg.selectedAction()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricLed.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,336 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2006 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a LED widget.
+
+It was inspired by KLed.
+"""
+
+import enum
+
+from PyQt6.QtCore import pyqtSignal, Qt, QSize, QPoint
+from PyQt6.QtGui import QColor, QRadialGradient, QPalette, QPainter, QBrush
+from PyQt6.QtWidgets import QWidget
+
+
+class EricLedType(enum.Enum):
+    """
+    Class defining the LED types.
+    """
+    RECTANGULAR = 0
+    CIRCULAR = 1
+
+
+class EricLed(QWidget):
+    """
+    Class implementing a LED widget.
+    """
+    def __init__(self, parent=None, color=None, shape=EricLedType.CIRCULAR,
+                 rectRatio=1):
+        """
+        Constructor
+        
+        @param parent reference to parent widget
+        @type QWidget
+        @param color color of the LED
+        @type QColor
+        @param shape shape of the LED
+        @type EricLedType
+        @param rectRatio ratio width to height, if shape is rectangular
+        @type float
+        """
+        super().__init__(parent)
+        
+        if color is None:
+            color = QColor("green")
+        
+        self.__led_on = True
+        self.__dark_factor = 300
+        self.__offcolor = color.darker(self.__dark_factor)
+        self.__led_color = color
+        self.__framedLed = True
+        self.__shape = shape
+        self.__rectRatio = rectRatio
+        
+        self.setColor(color)
+        
+    def paintEvent(self, evt):
+        """
+        Protected slot handling the paint event.
+        
+        @param evt paint event object
+        @type QPaintEvent
+        """
+        if self.__shape == EricLedType.CIRCULAR:
+            self.__paintRound()
+        elif self.__shape == EricLedType.RECTANGULAR:
+            self.__paintRectangular()
+    
+    def __getBestRoundSize(self):
+        """
+        Private method to calculate the width of the LED.
+        
+        @return new width of the LED (integer)
+        """
+        width = min(self.width(), self.height())
+        width -= 2  # leave one pixel border
+        return width > -1 and width or 0
+        
+    def __paintRound(self):
+        """
+        Private method to paint a round raised LED.
+        """
+        # Initialize coordinates, width and height of the LED
+        width = self.__getBestRoundSize()
+        
+        # Calculate the gradient for the LED
+        wh = width / 2
+        color = self.__led_on and self.__led_color or self.__offcolor
+        gradient = QRadialGradient(wh, wh, wh, 0.8 * wh, 0.8 * wh)
+        gradient.setColorAt(0.0, color.lighter(200))
+        gradient.setColorAt(0.6, color)
+        if self.__framedLed:
+            gradient.setColorAt(0.9, color.darker())
+            gradient.setColorAt(
+                1.0, self.palette().color(QPalette.ColorRole.Dark))
+        else:
+            gradient.setColorAt(1.0, color.darker())
+        
+        # now do the drawing
+        paint = QPainter(self)
+        paint.setRenderHint(QPainter.RenderHint.Antialiasing, True)
+        paint.setBrush(QBrush(gradient))
+        paint.setPen(Qt.PenStyle.NoPen)
+        paint.drawEllipse(1, 1, width, width)
+        paint.end()
+        
+    def __paintRectangular(self):
+        """
+        Private method to paint a rectangular raised LED.
+        """
+        # Initialize coordinates, width and height of the LED
+        width = self.height() * self.__rectRatio
+        left = max(0, int((self.width() - width) / 2) - 1)
+        right = min(int((self.width() + width) / 2), self.width())
+        height = self.height()
+        
+        # now do the drawing
+        painter = QPainter(self)
+        painter.setRenderHint(QPainter.RenderHint.Antialiasing, True)
+        color = self.__led_on and self.__led_color or self.__offcolor
+
+        painter.setPen(color.lighter(200))
+        painter.drawLine(left, 0, left, height - 1)
+        painter.drawLine(left + 1, 0, right - 1, 0)
+        if self.__framedLed:
+            painter.setPen(self.palette().color(QPalette.ColorRole.Dark))
+        else:
+            painter.setPen(color.darker())
+        painter.drawLine(left + 1, height - 1, right - 1, height - 1)
+        painter.drawLine(right - 1, 1, right - 1, height - 1)
+        painter.fillRect(left + 1, 1, right - 2, height - 2, QBrush(color))
+        painter.end()
+        
+    def isOn(self):
+        """
+        Public method to return the LED state.
+        
+        @return flag indicating the light state (boolean)
+        """
+        return self.__led_on
+        
+    def shape(self):
+        """
+        Public method to return the LED shape.
+        
+        @return LED shape
+        @rtype EricLedType
+        """
+        return self.__shape
+        
+    def ratio(self):
+        """
+        Public method to return the LED rectangular ratio [= width / height].
+        
+        @return LED rectangular ratio (float)
+        """
+        return self.__rectRatio
+        
+    def color(self):
+        """
+        Public method to return the LED color.
+        
+        @return color of the LED (QColor)
+        """
+        return self.__led_color
+        
+    def setOn(self, state):
+        """
+        Public method to set the LED to on.
+        
+        @param state new state of the LED (boolean)
+        """
+        if self.__led_on != state:
+            self.__led_on = state
+            self.update()
+        
+    def setShape(self, shape):
+        """
+        Public method to set the LED shape.
+        
+        @param shape new LED shape
+        @type EricLedType
+        """
+        if self.__shape != shape:
+            self.__shape = shape
+            self.update()
+        
+    def setRatio(self, ratio):
+        """
+        Public method to set the LED rectangular ratio (width / height).
+        
+        @param ratio new LED rectangular ratio (float)
+        """
+        if self.__rectRatio != ratio:
+            self.__rectRatio = ratio
+            self.update()
+        
+    def setColor(self, color):
+        """
+        Public method to set the LED color.
+        
+        @param color color for the LED (QColor)
+        """
+        if self.__led_color != color:
+            self.__led_color = color
+            self.__offcolor = color.darker(self.__dark_factor)
+            self.update()
+        
+    def setDarkFactor(self, darkfactor):
+        """
+        Public method to set the dark factor.
+        
+        @param darkfactor value to set for the dark factor (integer)
+        """
+        if self.__dark_factor != darkfactor:
+            self.__dark_factor = darkfactor
+            self.__offcolor = self.__led_color.darker(darkfactor)
+            self.update()
+        
+    def darkFactor(self):
+        """
+        Public method to return the dark factor.
+        
+        @return the current dark factor (integer)
+        """
+        return self.__dark_factor
+        
+    def toggle(self):
+        """
+        Public slot to toggle the LED state.
+        """
+        self.setOn(not self.__led_on)
+        
+    def on(self):
+        """
+        Public slot to set the LED to on.
+        """
+        self.setOn(True)
+        
+    def off(self):
+        """
+        Public slot to set the LED to off.
+        """
+        self.setOn(False)
+        
+    def setFramed(self, framed):
+        """
+        Public slot to set the __framedLed attribute.
+        
+        @param framed flag indicating the framed state (boolean)
+        """
+        if self.__framedLed != framed:
+            self.__framedLed = framed
+            self.__off_map = None
+            self.__on_map = None
+            self.update()
+        
+    def isFramed(self):
+        """
+        Public method to return the framed state.
+        
+        @return flag indicating the current framed state (boolean)
+        """
+        return self.__framedLed
+        
+    def sizeHint(self):
+        """
+        Public method to give a hint about our desired size.
+        
+        @return size hint (QSize)
+        """
+        return QSize(18, 18)
+        
+    def minimumSizeHint(self):
+        """
+        Public method to give a hint about our minimum size.
+        
+        @return size hint (QSize)
+        """
+        return QSize(18, 18)
+
+
+class EricClickableLed(EricLed):
+    """
+    Class implementing a clickable LED widget.
+    
+    @signal clicked(QPoint) emitted upon a click on the LED with the
+        left button
+    @signal middleClicked(QPoint) emitted upon a click on the LED with
+        the middle button or CTRL and left button
+    """
+    clicked = pyqtSignal(QPoint)
+    middleClicked = pyqtSignal(QPoint)
+    
+    def __init__(self, parent=None, color=None, shape=EricLedType.CIRCULAR,
+                 rectRatio=1):
+        """
+        Constructor
+        
+        @param parent reference to parent widget
+        @type QWidget
+        @param color color of the LED
+        @type QColor
+        @param shape shape of the LED
+        @type EricLedType
+        @param rectRatio ratio width to height, if shape is rectangular
+        @type float
+        """
+        super().__init__(parent, color, shape, rectRatio)
+        
+        self.setCursor(Qt.CursorShape.PointingHandCursor)
+    
+    def mouseReleaseEvent(self, evt):
+        """
+        Protected method handling mouse release events.
+        
+        @param evt mouse event (QMouseEvent)
+        """
+        if (
+            evt.button() == Qt.MouseButton.LeftButton and
+            self.rect().contains(evt.position().toPoint())
+        ):
+            if evt.modifiers() == Qt.KeyboardModifier.ControlModifier:
+                self.middleClicked.emit(evt.globalPosition().toPoint())
+            else:
+                self.clicked.emit(evt.globalPosition().toPoint())
+        elif (
+            evt.button() == Qt.MouseButton.MiddleButton and
+            self.rect().contains(evt.position().toPoint())
+        ):
+            self.middleClicked.emit(evt.globalPosition().toPoint())
+        else:
+            super().mouseReleaseEvent(evt)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricLineEdit.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,264 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing specialized line edits.
+"""
+
+import enum
+
+from PyQt6.QtCore import pyqtSignal, Qt, QEvent
+from PyQt6.QtWidgets import (
+    QLineEdit, QWidget, QHBoxLayout, QBoxLayout, QLayout, QApplication,
+    QSpacerItem, QSizePolicy
+)
+
+
+class EricLineEditSideWidget(QWidget):
+    """
+    Class implementing the side widgets for the line edit class.
+    
+    @signal sizeHintChanged() emitted to indicate a change of the size hint
+    """
+    sizeHintChanged = pyqtSignal()
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+    
+    def event(self, evt):
+        """
+        Public method to handle events.
+        
+        @param evt reference to the event (QEvent)
+        @return flag indicating, whether the event was recognized (boolean)
+        """
+        if evt.type() == QEvent.Type.LayoutRequest:
+            self.sizeHintChanged.emit()
+        return QWidget.event(self, evt)
+
+
+class EricLineEditSide(enum.Enum):
+    """
+    Class defining the line edit sides.
+    """
+    LEFT = 0
+    RIGHT = 1
+
+
+class EricLineEdit(QLineEdit):
+    """
+    Class implementing a line edit widget showing some inactive text.
+    """
+    def __init__(self, parent=None, placeholderText=""):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        @param placeholderText text to be shown on inactivity
+        @type str
+        """
+        super().__init__(parent)
+        
+        self.setMinimumHeight(22)
+        
+        self.setPlaceholderText(placeholderText)
+        
+        self.__mainLayout = QHBoxLayout(self)
+        self.__mainLayout.setContentsMargins(0, 0, 0, 0)
+        self.__mainLayout.setSpacing(0)
+        
+        self.__leftMargin = 0
+        self.__leftWidget = EricLineEditSideWidget(self)
+        self.__leftWidget.resize(0, 0)
+        self.__leftLayout = QHBoxLayout(self.__leftWidget)
+        self.__leftLayout.setContentsMargins(0, 0, 2, 0)
+        if QApplication.isRightToLeft():
+            self.__leftLayout.setDirection(QBoxLayout.Direction.RightToLeft)
+        else:
+            self.__leftLayout.setDirection(QBoxLayout.Direction.LeftToRight)
+        self.__leftLayout.setSizeConstraint(
+            QLayout.SizeConstraint.SetFixedSize)
+        
+        self.__rightWidget = EricLineEditSideWidget(self)
+        self.__rightWidget.resize(0, 0)
+        self.__rightLayout = QHBoxLayout(self.__rightWidget)
+        self.__rightLayout.setContentsMargins(0, 0, 2, 0)
+        if self.isRightToLeft():
+            self.__rightLayout.setDirection(QBoxLayout.Direction.RightToLeft)
+        else:
+            self.__rightLayout.setDirection(QBoxLayout.Direction.LeftToRight)
+        
+        horizontalSpacer = QSpacerItem(
+            0, 0, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
+        self.__mainLayout.addWidget(
+            self.__leftWidget, 0,
+            Qt.AlignmentFlag.AlignVCenter | Qt.AlignmentFlag.AlignLeft)
+        self.__mainLayout.addItem(horizontalSpacer)
+        self.__mainLayout.addWidget(
+            self.__rightWidget, 0,
+            Qt.AlignmentFlag.AlignVCenter | Qt.AlignmentFlag.AlignRight)
+        if self.isRightToLeft():
+            self.__mainLayout.setDirection(QBoxLayout.Direction.RightToLeft)
+        else:
+            self.__mainLayout.setDirection(QBoxLayout.Direction.LeftToRight)
+        
+        self.setWidgetSpacing(3)
+        self.__leftWidget.sizeHintChanged.connect(self._updateTextMargins)
+        self.__rightWidget.sizeHintChanged.connect(self._updateTextMargins)
+    
+    def setLeftMargin(self, margin):
+        """
+        Public method to set the left margin.
+        
+        @param margin left margin in pixel (integer)
+        """
+        self.__leftMargin = margin
+    
+    def leftMargin(self):
+        """
+        Public method to get the size of the left margin.
+        
+        @return left margin in pixel (integer)
+        """
+        return self.__leftMargin
+    
+    def event(self, evt):
+        """
+        Public method to handle events.
+        
+        @param evt reference to the event (QEvent)
+        @return flag indicating, whether the event was recognized (boolean)
+        """
+        if evt.type() == QEvent.Type.LayoutDirectionChange:
+            if self.isRightToLeft():
+                self.__mainLayout.setDirection(
+                    QBoxLayout.Direction.RightToLeft)
+                self.__leftLayout.setDirection(
+                    QBoxLayout.Direction.RightToLeft)
+                self.__rightLayout.setDirection(
+                    QBoxLayout.Direction.RightToLeft)
+            else:
+                self.__mainLayout.setDirection(
+                    QBoxLayout.Direction.LeftToRight)
+                self.__leftLayout.setDirection(
+                    QBoxLayout.Direction.LeftToRight)
+                self.__rightLayout.setDirection(
+                    QBoxLayout.Direction.LeftToRight)
+        return QLineEdit.event(self, evt)
+    
+    def _updateTextMargins(self):
+        """
+        Protected slot to update the text margins.
+        """
+        left = (
+            self.__leftWidget.sizeHint().width()
+            if self.__leftMargin == 0 else
+            self.__leftMargin
+        )
+        right = self.__rightWidget.sizeHint().width()
+        top = 0
+        bottom = 0
+        self.setTextMargins(left, top, right, bottom)
+    
+    def addWidget(self, widget, position):
+        """
+        Public method to add a widget to a side.
+        
+        @param widget reference to the widget to add
+        @type QWidget
+        @param position position to add to
+        @type EricLineEditSide
+        """
+        if widget is None:
+            return
+        
+        if self.isRightToLeft():
+            if position == EricLineEditSide.LEFT:
+                position = EricLineEditSide.RIGHT
+            else:
+                position = EricLineEditSide.LEFT
+        if position == EricLineEditSide.LEFT:
+            self.__leftLayout.addWidget(widget)
+        else:
+            self.__rightLayout.insertWidget(1, widget)
+    
+    def removeWidget(self, widget):
+        """
+        Public method to remove a widget from a side.
+        
+        @param widget reference to the widget to remove
+        @type QWidget
+        """
+        if widget is None:
+            return
+        
+        self.__leftLayout.removeWidget(widget)
+        self.__rightLayout.removeWidget(widget)
+        widget.hide()
+    
+    def widgetSpacing(self):
+        """
+        Public method to get the side widget spacing.
+        
+        @return side widget spacing (integer)
+        """
+        return self.__leftLayout.spacing()
+    
+    def setWidgetSpacing(self, spacing):
+        """
+        Public method to set the side widget spacing.
+        
+        @param spacing side widget spacing (integer)
+        """
+        self.__leftLayout.setSpacing(spacing)
+        self.__rightLayout.setSpacing(spacing)
+        self._updateTextMargins()
+    
+    def textMargin(self, position):
+        """
+        Public method to get the text margin for a side.
+        
+        @param position side to get margin for
+        @type EricLineEditSide
+        @return text margin
+        @rtype int
+        """
+        spacing = self.__rightLayout.spacing()
+        w = 0
+        w = (
+            self.__leftWidget.sizeHint().width()
+            if position == EricLineEditSide.LEFT else
+            self.__rightWidget.sizeHint().width()
+        )
+        if w == 0:
+            return 0
+        return w + spacing * 2
+
+class EricClearableLineEdit(EricLineEdit):
+    """
+    Class implementing a line edit widget showing some inactive text and a
+    clear button, if it has some contents.
+    """
+    def __init__(self, parent=None, placeholderText="",
+                 side=EricLineEditSide.RIGHT):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        @param placeholderText text to be shown on inactivity
+        @type str
+        @param side side the clear button should be shown at
+        @type EricLineEditSide
+        """
+        super().__init__(parent, placeholderText)
+        
+        self.setClearButtonEnabled(True)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricLineEditButton.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a button class to be used with EricLineEdit.
+"""
+
+from PyQt6.QtCore import Qt, QPoint, QPointF
+from PyQt6.QtGui import QPainter, QPainterPath
+from PyQt6.QtWidgets import QAbstractButton
+
+
+# TODO: Get rid of this
+class EricLineEditButton(QAbstractButton):
+    """
+    Class implementing a button to be used with EricLineEdit.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        self.__menu = None
+        self.__image = None
+        
+        self.setFocusPolicy(Qt.FocusPolicy.NoFocus)
+        self.setCursor(Qt.CursorShape.ArrowCursor)
+        self.setMinimumSize(16, 16)
+        
+        self.clicked.connect(self.__clicked)
+    
+    def setMenu(self, menu):
+        """
+        Public method to set the button menu.
+        
+        @param menu reference to the menu (QMenu)
+        """
+        self.__menu = menu
+        self.update()
+    
+    def menu(self):
+        """
+        Public method to get a reference to the menu.
+        
+        @return reference to the associated menu (QMenu)
+        """
+        return self.__menu
+    
+    def setIcon(self, icon):
+        """
+        Public method to set the button icon.
+        
+        @param icon icon to be set (QIcon)
+        """
+        if icon.isNull():
+            self.__image = None
+        else:
+            self.__image = icon.pixmap(16, 16).toImage()
+        super().setIcon(icon)
+    
+    def __clicked(self):
+        """
+        Private slot to handle a button click.
+        """
+        if self.__menu:
+            pos = self.mapToGlobal(QPoint(0, self.height()))
+            self.__menu.exec(pos)
+    
+    def paintEvent(self, evt):
+        """
+        Protected method handling a paint event.
+        
+        @param evt reference to the paint event (QPaintEvent)
+        """
+        painter = QPainter(self)
+        
+        if self.__image is not None and not self.__image.isNull():
+            x = (self.width() - self.__image.width()) // 2 - 1
+            y = (self.height() - self.__image.height()) // 2 - 1
+            painter.drawImage(x, y, self.__image)
+        
+        if self.__menu is not None:
+            triagPath = QPainterPath()
+            startPos = QPointF(self.width() - 5, self.height() - 3)
+            triagPath.moveTo(startPos)
+            triagPath.lineTo(startPos.x() + 4, startPos.y())
+            triagPath.lineTo(startPos.x() + 2, startPos.y() + 2)
+            triagPath.closeSubpath()
+            painter.setPen(Qt.GlobalColor.black)
+            painter.setBrush(Qt.GlobalColor.black)
+            painter.setRenderHint(QPainter.RenderHint.Antialiasing, False)
+            painter.drawPath(triagPath)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricListSelectionDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,111 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2016 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to select from a list of strings.
+"""
+
+from PyQt6.QtCore import pyqtSlot, Qt
+from PyQt6.QtWidgets import (
+    QDialog, QDialogButtonBox, QAbstractItemView, QListWidgetItem
+)
+
+from .Ui_EricListSelectionDialog import Ui_EricListSelectionDialog
+
+
+class EricListSelectionDialog(QDialog, Ui_EricListSelectionDialog):
+    """
+    Class implementing a dialog to select from a list of strings.
+    """
+    def __init__(self, entries,
+                 selectionMode=QAbstractItemView.SelectionMode
+                 .ExtendedSelection,
+                 title="", message="", checkBoxSelection=False, parent=None):
+        """
+        Constructor
+        
+        @param entries list of entries to select from
+        @type list of str
+        @param selectionMode selection mode for the list
+        @type QAbstractItemView.SelectionMode
+        @param title title of the dialog
+        @type str
+        @param message message to be show in the dialog
+        @type str
+        @param checkBoxSelection flag indicating to select items via their
+            checkbox
+        @type bool
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        if title:
+            self.setWindowTitle(title)
+        if message:
+            self.messageLabel.setText(message)
+        
+        self.__checkCount = 0
+        self.__isCheckBoxSelection = checkBoxSelection
+        if self.__isCheckBoxSelection:
+            self.selectionList.setSelectionMode(
+                QAbstractItemView.SelectionMode.NoSelection)
+            for entry in entries:
+                itm = QListWidgetItem(entry)
+                itm.setFlags(Qt.ItemFlag.ItemIsUserCheckable |
+                             Qt.ItemFlag.ItemIsEnabled)
+                itm.setCheckState(Qt.CheckState.Unchecked)
+                self.selectionList.addItem(itm)
+        else:
+            self.selectionList.setSelectionMode(selectionMode)
+            self.selectionList.addItems(entries)
+        
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Ok).setEnabled(False)
+    
+    @pyqtSlot()
+    def on_selectionList_itemSelectionChanged(self):
+        """
+        Private slot handling a change of the selection.
+        """
+        if not self.__isCheckBoxSelection:
+            self.buttonBox.button(
+                QDialogButtonBox.StandardButton.Ok).setEnabled(
+                    len(self.selectionList.selectedItems()) > 0)
+    
+    def on_selectionList_itemChanged(self, itm):
+        """
+        Private slot handling a change of an item.
+        
+        @param itm reference to the changed item
+        @type QListWidgetItem
+        """
+        if self.__isCheckBoxSelection:
+            if itm.checkState() == Qt.CheckState.Checked:
+                self.__checkCount += 1
+            else:
+                self.__checkCount -= 1
+            self.buttonBox.button(
+                QDialogButtonBox.StandardButton.Ok).setEnabled(
+                self.__checkCount > 0)
+    
+    def getSelection(self):
+        """
+        Public method to retrieve the selected items.
+        
+        @return selected entries
+        @rtype list of str
+        """
+        entries = []
+        if self.__isCheckBoxSelection:
+            for row in range(self.selectionList.count()):
+                item = self.selectionList.item(row)
+                if item.checkState() == Qt.CheckState.Checked:
+                    entries.append(item.text())
+        else:
+            for item in self.selectionList.selectedItems():
+                entries.append(item.text())
+        return entries
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricListSelectionDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EricListSelectionDialog</class>
+ <widget class="QDialog" name="EricListSelectionDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>500</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Select from List</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="messageLabel">
+     <property name="text">
+      <string>Select from the list below:</string>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QListWidget" name="selectionList">
+     <property name="alternatingRowColors">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>EricListSelectionDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>EricListSelectionDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricListView.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing specialized list views.
+"""
+
+from PyQt6.QtCore import Qt, QItemSelectionModel
+from PyQt6.QtWidgets import QListView
+
+
+class EricListView(QListView):
+    """
+    Class implementing a list view supporting removal of entries.
+    """
+    def keyPressEvent(self, evt):
+        """
+        Protected method implementing special key handling.
+        
+        @param evt reference to the event (QKeyEvent)
+        """
+        if (
+            evt.key() in [Qt.Key.Key_Delete, Qt.Key.Key_Backspace] and
+            self.model() is not None
+        ):
+            self.removeSelected()
+            evt.setAccepted(True)
+        else:
+            super().keyPressEvent(evt)
+    
+    def removeSelected(self):
+        """
+        Public method to remove the selected entries.
+        """
+        if self.model() is None or self.selectionModel() is None:
+            # no models available
+            return
+        
+        row = 0
+        selectedRows = self.selectionModel().selectedRows()
+        for selectedRow in reversed(selectedRows):
+            row = selectedRow.row()
+            self.model().removeRow(row, self.rootIndex())
+        
+        idx = self.model().index(row, 0, self.rootIndex())
+        if not idx.isValid():
+            idx = self.model().index(row - 1, 0, self.rootIndex())
+        self.selectionModel().select(
+            idx,
+            QItemSelectionModel.SelectionFlag.SelectCurrent |
+            QItemSelectionModel.SelectionFlag.Rows)
+        self.setCurrentIndex(idx)
+    
+    def removeAll(self):
+        """
+        Public method to clear the view.
+        """
+        if self.model() is not None:
+            self.model().removeRows(0, self.model().rowCount(self.rootIndex()),
+                                    self.rootIndex())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricMainWindow.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,68 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a main window class with styling support.
+"""
+
+from PyQt6.QtCore import QCoreApplication
+from PyQt6.QtWidgets import QMainWindow, QStyleFactory, QApplication
+
+from .EricApplication import ericApp
+from . import EricMessageBox
+
+
+class EricMainWindow(QMainWindow):
+    """
+    Class implementing a main window with styling support.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        self.defaultStyleName = QApplication.style().objectName()
+    
+    def setStyle(self, styleName, styleSheetFile):
+        """
+        Public method to set the style of the interface.
+        
+        @param styleName name of the style to set (string)
+        @param styleSheetFile name of a style sheet file to read to overwrite
+            defaults of the given style (string)
+        """
+        # step 1: set the style
+        style = None
+        if styleName != "System" and styleName in QStyleFactory.keys():
+            # __IGNORE_WARNING_Y118__
+            style = QStyleFactory.create(styleName)
+        if style is None:
+            style = QStyleFactory.create(self.defaultStyleName)
+        if style is not None:
+            QApplication.setStyle(style)
+        
+        # step 2: set a style sheet
+        if styleSheetFile:
+            try:
+                with open(styleSheetFile, "r", encoding="utf-8") as f:
+                    styleSheet = f.read()
+            except OSError as msg:
+                EricMessageBox.warning(
+                    self,
+                    QCoreApplication.translate(
+                        "EricMainWindow", "Loading Style Sheet"),
+                    QCoreApplication.translate(
+                        "EricMainWindow",
+                        """<p>The Qt Style Sheet file <b>{0}</b> could"""
+                        """ not be read.<br>Reason: {1}</p>""")
+                    .format(styleSheetFile, str(msg)))
+                return
+        else:
+            styleSheet = ""
+        
+        ericApp().setStyleSheet(styleSheet)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricMapWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,352 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2014 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a base class for showing a document map.
+"""
+
+from PyQt6.QtCore import Qt, QSize, QRect, QCoreApplication
+from PyQt6.QtGui import QColor, QBrush, QPainter
+from PyQt6.QtWidgets import QWidget, QAbstractScrollArea
+
+
+class EricMapWidget(QWidget):
+    """
+    Class implementing a base class for showing a document map.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        self.setAttribute(Qt.WidgetAttribute.WA_OpaquePaintEvent)
+        
+        self.__width = 14
+        self.__lineBorder = 1
+        self.__lineHeight = 2
+        self.__backgroundColor = QColor("#e7e7e7")
+        self.__setSliderColor()
+        
+        self._master = None
+        self.__enabled = False
+        self.__rightSide = True
+        
+        if parent is not None and isinstance(parent, QAbstractScrollArea):
+            self.setMaster(parent)
+    
+    def __setSliderColor(self):
+        """
+        Private method to set the slider color depending upon the background
+        color.
+        """
+        if self.__backgroundColor.toHsv().value() < 128:
+            # dark background, use white slider
+            self.__sliderColor = Qt.GlobalColor.white
+        else:
+            # light background, use black slider
+            self.__sliderColor = Qt.GlobalColor.black
+    
+    def __updateMasterViewportWidth(self):
+        """
+        Private method to update the master's viewport width.
+        """
+        if self._master:
+            if self.__enabled:
+                width = self.__width
+            else:
+                width = 0
+            if self.__rightSide:
+                self._master.setViewportMargins(0, 0, width, 0)
+            else:
+                self._master.setViewportMargins(width, 0, 0, 0)
+    
+    def setMaster(self, master):
+        """
+        Public method to set the map master widget.
+        
+        @param master map master widget (QAbstractScrollArea)
+        """
+        self._master = master
+        self._master.setVerticalScrollBarPolicy(
+            Qt.ScrollBarPolicy.ScrollBarAlwaysOn)
+        self._master.verticalScrollBar().valueChanged.connect(self.update)
+        self._master.verticalScrollBar().rangeChanged.connect(self.update)
+        self.__updateMasterViewportWidth()
+    
+    def setWidth(self, width):
+        """
+        Public method to set the widget width.
+        
+        @param width widget width (integer)
+        """
+        if width != self.__width:
+            self.__width = max(6, width)    # minimum width 6 pixels
+            self.__updateMasterViewportWidth()
+            self.update()
+    
+    def width(self):
+        """
+        Public method to get the widget's width.
+        
+        @return widget width (integer)
+        """
+        return self.__width
+    
+    def setMapPosition(self, onRight):
+        """
+        Public method to set, whether the map should be shown to the right or
+        left of the master widget.
+        
+        @param onRight flag indicating to show the map on the right side of
+            the master widget
+        @type bool
+        """
+        if onRight != self.__rightSide:
+            self.__rightSide = onRight
+            self.__updateMasterViewportWidth()
+            self.update()
+    
+    def isOnRightSide(self):
+        """
+        Public method to test, if the map is shown on the right side of the
+        master widget.
+        
+        @return flag indicating that the map is to the right of the master
+            widget
+        @rtype bool
+        """
+        return self.__rightSide
+    
+    def setLineDimensions(self, border, height):
+        """
+        Public method to set the line (indicator) dimensions.
+        
+        @param border border width on each side in x-direction (integer)
+        @param height height of the line in pixels (integer)
+        """
+        if border != self.__lineBorder or height != self.__lineHeight:
+            self.__lineBorder = max(1, border)  # min border 1 pixel
+            self.__lineHeight = max(1, height)  # min height 1 pixel
+            self.update()
+    
+    def lineDimensions(self):
+        """
+        Public method to get the line (indicator) dimensions.
+        
+        @return tuple with border width (integer) and line height (integer)
+        """
+        return self.__lineBorder, self.__lineHeight
+    
+    def setEnabled(self, enable):
+        """
+        Public method to set the enabled state.
+        
+        @param enable flag indicating the enabled state (boolean)
+        """
+        if enable != self.__enabled:
+            self.__enabled = enable
+            self.setVisible(enable)
+            self.__updateMasterViewportWidth()
+    
+    def isEnabled(self):
+        """
+        Public method to check the enabled state.
+        
+        @return flag indicating the enabled state (boolean)
+        """
+        return self.__enabled
+    
+    def setBackgroundColor(self, color):
+        """
+        Public method to set the widget background color.
+        
+        @param color color for the background (QColor)
+        """
+        if color != self.__backgroundColor:
+            self.__backgroundColor = color
+            self.__setSliderColor()
+            self.update()
+    
+    def backgroundColor(self):
+        """
+        Public method to get the background color.
+        
+        @return background color (QColor)
+        """
+        return QColor(self.__backgroundColor)
+    
+    def sizeHint(self):
+        """
+        Public method to give an indication about the preferred size.
+        
+        @return preferred size (QSize)
+        """
+        return QSize(self.__width, 0)
+    
+    def paintEvent(self, event):
+        """
+        Protected method to handle a paint event.
+        
+        @param event paint event (QPaintEvent)
+        """
+        # step 1: fill the whole painting area
+        painter = QPainter(self)
+        painter.fillRect(event.rect(), self.__backgroundColor)
+        
+        # step 2: paint the indicators
+        self._paintIt(painter)
+        
+        # step 3: paint the slider
+        if self._master:
+            penColor = self.__sliderColor
+            painter.setPen(penColor)
+            brushColor = Qt.GlobalColor.transparent
+            painter.setBrush(QBrush(brushColor))
+            painter.drawRect(self.__generateSliderRange(
+                self._master.verticalScrollBar()))
+    
+    def _paintIt(self, painter):
+        """
+        Protected method for painting the widget's indicators.
+        
+        Note: This method should be implemented by subclasses.
+        
+        @param painter reference to the painter object (QPainter)
+        """
+        pass
+    
+    def mousePressEvent(self, event):
+        """
+        Protected method to handle a mouse button press.
+        
+        @param event reference to the mouse event (QMouseEvent)
+        """
+        if event.button() == Qt.MouseButton.LeftButton and self._master:
+            vsb = self._master.verticalScrollBar()
+            value = self.position2Value(event.position().toPoint().y() - 1)
+            vsb.setValue(value - 0.5 * vsb.pageStep())  # center on page
+        self.__mousePressPos = None
+    
+    def mouseMoveEvent(self, event):
+        """
+        Protected method to handle a mouse moves.
+        
+        @param event reference to the mouse event (QMouseEvent)
+        """
+        if event.buttons() & Qt.MouseButton.LeftButton and self._master:
+            vsb = self._master.verticalScrollBar()
+            value = self.position2Value(event.position().toPoint().y() - 1)
+            vsb.setValue(value - 0.5 * vsb.pageStep())  # center on page
+    
+    def wheelEvent(self, event):
+        """
+        Protected slot handling mouse wheel events.
+        
+        @param event reference to the wheel event (QWheelEvent)
+        """
+        isVertical = event.angleDelta().x() == 0
+        if (
+            self._master and
+            event.modifiers() == Qt.KeyboardModifier.NoModifier and
+            isVertical
+        ):
+            QCoreApplication.sendEvent(self._master.verticalScrollBar(), event)
+    
+    def calculateGeometry(self):
+        """
+        Public method to recalculate the map widget's geometry.
+        """
+        if self._master:
+            cr = self._master.contentsRect()
+            vsb = self._master.verticalScrollBar()
+            if vsb.isVisible():
+                vsbw = vsb.contentsRect().width()
+            else:
+                vsbw = 0
+            margins = self._master.contentsMargins()
+            if margins.right() > vsbw:
+                vsbw = 0
+            if self.__rightSide:
+                self.setGeometry(
+                    QRect(cr.right() - self.__width - vsbw, cr.top(),
+                          self.__width, cr.height()))
+            else:
+                self.setGeometry(
+                    QRect(0, cr.top(), self.__width, cr.height()))
+            self.update()
+    
+    def scaleFactor(self, slider=False):
+        """
+        Public method to determine the scrollbar's scale factor.
+        
+        @param slider flag indicating to calculate the result for the slider
+            (boolean)
+        @return scale factor (float)
+        """
+        if self._master:
+            delta = 0 if slider else 2
+            vsb = self._master.verticalScrollBar()
+            posHeight = vsb.height() - delta - 1
+            valHeight = vsb.maximum() - vsb.minimum() + vsb.pageStep()
+            return float(posHeight) / valHeight
+        else:
+            return 1.0
+    
+    def value2Position(self, value, slider=False):
+        """
+        Public method to convert a scrollbar value into a position.
+        
+        @param value value to convert (integer)
+        @param slider flag indicating to calculate the result for the slider
+            (boolean)
+        @return position (integer)
+        """
+        if self._master:
+            offset = 0 if slider else 1
+            vsb = self._master.verticalScrollBar()
+            return (value - vsb.minimum()) * self.scaleFactor(slider) + offset
+        else:
+            return value
+    
+    def position2Value(self, position, slider=False):
+        """
+        Public method to convert a position into a scrollbar value.
+        
+        @param position scrollbar position to convert (integer)
+        @param slider flag indicating to calculate the result for the slider
+            (boolean)
+        @return scrollbar value (integer)
+        """
+        if self._master:
+            offset = 0 if slider else 1
+            vsb = self._master.verticalScrollBar()
+            return vsb.minimum() + max(
+                0, (position - offset) / self.scaleFactor(slider))
+        else:
+            return position
+    
+    def generateIndicatorRect(self, position):
+        """
+        Public method to generate an indicator rectangle.
+        
+        @param position indicator position (integer)
+        @return indicator rectangle (QRect)
+        """
+        return QRect(self.__lineBorder, position - self.__lineHeight // 2,
+                     self.__width - self.__lineBorder, self.__lineHeight)
+    
+    def __generateSliderRange(self, scrollbar):
+        """
+        Private method to generate the slider rectangle.
+        
+        @param scrollbar reference to the vertical scrollbar (QScrollBar)
+        @return slider rectangle (QRect)
+        """
+        pos1 = self.value2Position(scrollbar.value(), slider=True)
+        pos2 = self.value2Position(scrollbar.value() + scrollbar.pageStep(),
+                                   slider=True)
+        return QRect(0, pos1, self.__width - 1, pos2 - pos1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricMessageBox.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,303 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing QMessageBox replacements and more convenience function.
+"""
+
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QMessageBox, QApplication
+
+###############################################################################
+##  Mappings to standard QMessageBox                                         ##
+###############################################################################
+
+# QMessageBox.Icon
+NoIcon = QMessageBox.Icon.NoIcon
+Critical = QMessageBox.Icon.Critical
+Information = QMessageBox.Icon.Information
+Question = QMessageBox.Icon.Question
+Warning = QMessageBox.Icon.Warning       # __IGNORE_WARNING_M131__
+
+# QMessageBox.StandardButton
+Abort = QMessageBox.StandardButton.Abort
+Apply = QMessageBox.StandardButton.Apply
+Cancel = QMessageBox.StandardButton.Cancel
+Close = QMessageBox.StandardButton.Close
+Discard = QMessageBox.StandardButton.Discard
+Help = QMessageBox.StandardButton.Help
+Ignore = QMessageBox.StandardButton.Ignore
+No = QMessageBox.StandardButton.No
+NoToAll = QMessageBox.StandardButton.NoToAll
+Ok = QMessageBox.StandardButton.Ok
+Open = QMessageBox.StandardButton.Open
+Reset = QMessageBox.StandardButton.Reset
+RestoreDefaults = QMessageBox.StandardButton.RestoreDefaults
+Retry = QMessageBox.StandardButton.Retry
+Save = QMessageBox.StandardButton.Save
+SaveAll = QMessageBox.StandardButton.SaveAll
+Yes = QMessageBox.StandardButton.Yes
+YesToAll = QMessageBox.StandardButton.YesToAll
+NoButton = QMessageBox.StandardButton.NoButton
+
+# QMessageBox.ButtonRole
+AcceptRole = QMessageBox.ButtonRole.AcceptRole
+ActionRole = QMessageBox.ButtonRole.ActionRole
+ApplyRole = QMessageBox.ButtonRole.ApplyRole
+DestructiveRole = QMessageBox.ButtonRole.DestructiveRole
+InvalidRole = QMessageBox.ButtonRole.InvalidRole
+HelpRole = QMessageBox.ButtonRole.HelpRole
+NoRole = QMessageBox.ButtonRole.NoRole
+RejectRole = QMessageBox.ButtonRole.RejectRole
+ResetRole = QMessageBox.ButtonRole.ResetRole
+YesRole = QMessageBox.ButtonRole.YesRole
+
+###############################################################################
+##  Replacement for the QMessageBox class                                    ##
+###############################################################################
+
+
+class EricMessageBox(QMessageBox):
+    """
+    Class implementing a replacement for QMessageBox.
+    """
+    def __init__(self, icon, title, text, modal=False,
+                 buttons=QMessageBox.StandardButton.NoButton,
+                 parent=None):
+        """
+        Constructor
+        
+        @param icon type of icon to be shown (QMessageBox.Icon)
+        @param title caption of the message box (string)
+        @param text text to be shown by the message box (string)
+        @param modal flag indicating a modal dialog (boolean)
+        @param buttons set of standard buttons to generate (StandardButtons)
+        @param parent parent widget of the message box (QWidget)
+        """
+        super().__init__(parent)
+        self.setIcon(icon)
+        if modal:
+            if parent is not None:
+                self.setWindowModality(Qt.WindowModality.WindowModal)
+            else:
+                self.setWindowModality(Qt.WindowModality.ApplicationModal)
+        else:
+            self.setWindowModality(Qt.WindowModality.NonModal)
+        if title == "":
+            self.setWindowTitle("{0}".format(
+                QApplication.applicationName()))
+        else:
+            self.setWindowTitle("{0} - {1}".format(
+                QApplication.applicationName(), title))
+        self.setText(text)
+        self.setStandardButtons(buttons)
+
+###############################################################################
+##  Replacements for QMessageBox static methods                              ##
+###############################################################################
+
+
+def __messageBox(parent, title, text, icon,
+                 buttons=QMessageBox.StandardButton.Ok,
+                 defaultButton=QMessageBox.StandardButton.NoButton,
+                 textFormat=Qt.TextFormat.AutoText):
+    """
+    Private module function to show a modal message box.
+    
+    @param parent parent widget of the message box (QWidget)
+    @param title caption of the message box (string)
+    @param text text to be shown by the message box (string)
+    @param icon type of icon to be shown (QMessageBox.Icon)
+    @param buttons flags indicating which buttons to show
+        (QMessageBox.StandardButtons)
+    @param defaultButton flag indicating the default button
+        (QMessageBox.StandardButton)
+    @param textFormat format of the text (Qt.TextFormat)
+    @return button pressed by the user (QMessageBox.StandardButton)
+    """
+    messageBox = QMessageBox(parent)
+    messageBox.setIcon(icon)
+    if parent is not None:
+        messageBox.setWindowModality(Qt.WindowModality.WindowModal)
+    if title == "":
+        messageBox.setWindowTitle("{0}".format(
+            QApplication.applicationName()))
+    else:
+        messageBox.setWindowTitle("{0} - {1}".format(
+            QApplication.applicationName(), title))
+    messageBox.setTextFormat(textFormat)
+    messageBox.setText(text)
+    messageBox.setStandardButtons(buttons)
+    messageBox.setDefaultButton(defaultButton)
+    messageBox.exec()
+    clickedButton = messageBox.clickedButton()
+    if clickedButton is None:
+        return QMessageBox.StandardButton.NoButton
+    else:
+        return messageBox.standardButton(clickedButton)
+
+# the about functions are here for consistancy
+about = QMessageBox.about
+aboutQt = QMessageBox.aboutQt
+
+
+def critical(parent, title, text,
+             buttons=QMessageBox.StandardButton.Ok,
+             defaultButton=QMessageBox.StandardButton.NoButton):
+    """
+    Function to show a modal critical message box.
+    
+    @param parent parent widget of the message box (QWidget)
+    @param title caption of the message box (string)
+    @param text text to be shown by the message box (string)
+    @param buttons flags indicating which buttons to show
+        (QMessageBox.StandardButtons)
+    @param defaultButton flag indicating the default button
+        (QMessageBox.StandardButton)
+    @return button pressed by the user (QMessageBox.StandardButton)
+    """
+    return __messageBox(parent, title, text, QMessageBox.Icon.Critical,
+                        buttons, defaultButton)
+
+
+def information(parent, title, text,
+                buttons=QMessageBox.StandardButton.Ok,
+                defaultButton=QMessageBox.StandardButton.NoButton):
+    """
+    Function to show a modal information message box.
+    
+    @param parent parent widget of the message box (QWidget)
+    @param title caption of the message box (string)
+    @param text text to be shown by the message box (string)
+    @param buttons flags indicating which buttons to show
+        (QMessageBox.StandardButtons)
+    @param defaultButton flag indicating the default button
+        (QMessageBox.StandardButton)
+    @return button pressed by the user (QMessageBox.StandardButton)
+    """
+    return __messageBox(parent, title, text, QMessageBox.Icon.Information,
+                        buttons, defaultButton)
+
+
+def question(parent, title, text,
+             buttons=QMessageBox.StandardButton.Ok,
+             defaultButton=QMessageBox.StandardButton.NoButton):
+    """
+    Function to show a modal question message box.
+    
+    @param parent parent widget of the message box (QWidget)
+    @param title caption of the message box (string)
+    @param text text to be shown by the message box (string)
+    @param buttons flags indicating which buttons to show
+        (QMessageBox.StandardButtons)
+    @param defaultButton flag indicating the default button
+        (QMessageBox.StandardButton)
+    @return button pressed by the user (QMessageBox.StandardButton)
+    """
+    return __messageBox(parent, title, text, QMessageBox.Icon.Question,
+                        buttons, defaultButton)
+
+
+def warning(parent, title, text,
+            buttons=QMessageBox.StandardButton.Ok,
+            defaultButton=QMessageBox.StandardButton.NoButton):
+    """
+    Function to show a modal warning message box.
+    
+    @param parent parent widget of the message box (QWidget)
+    @param title caption of the message box (string)
+    @param text text to be shown by the message box (string)
+    @param buttons flags indicating which buttons to show
+        (QMessageBox.StandardButtons)
+    @param defaultButton flag indicating the default button
+        (QMessageBox.StandardButton)
+    @return button pressed by the user (QMessageBox.StandardButton)
+    """
+    return __messageBox(parent, title, text, QMessageBox.Icon.Warning,
+                        buttons, defaultButton)
+
+###############################################################################
+##  Additional convenience functions                                         ##
+###############################################################################
+
+
+def yesNo(parent, title, text, icon=Question, yesDefault=False,
+          textFormat=Qt.TextFormat.AutoText):
+    """
+    Function to show a model yes/no message box.
+    
+    @param parent parent widget of the message box (QWidget)
+    @param title caption of the message box (string)
+    @param text text to be shown by the message box (string)
+    @param icon icon for the dialog (Critical, Information, Question or
+        Warning)
+    @param yesDefault flag indicating that the Yes button should be the
+        default button (boolean)
+    @param textFormat format of the text (Qt.TextFormat)
+    @return flag indicating the selection of the Yes button (boolean)
+    @exception ValueError raised to indicate a bad parameter value
+    """
+    if icon not in [Critical, Information, Question, Warning]:
+        raise ValueError("Bad value for 'icon' parameter.")
+    
+    res = __messageBox(
+        parent, title, text, icon,
+        QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
+        yesDefault and QMessageBox.StandardButton.Yes or
+        QMessageBox.StandardButton.No,
+        textFormat)
+    return res == QMessageBox.StandardButton.Yes
+
+
+def retryAbort(parent, title, text, icon=Question,
+               textFormat=Qt.TextFormat.AutoText):
+    """
+    Function to show a model abort/retry message box.
+    
+    @param parent parent widget of the message box (QWidget)
+    @param title caption of the message box (string)
+    @param text text to be shown by the message box (string)
+    @param icon icon for the dialog (Critical, Information, Question or
+        Warning)
+    @param textFormat format of the text (Qt.TextFormat)
+    @return flag indicating the selection of the Retry button (boolean)
+    @exception ValueError raised to indicate a bad parameter value
+    """
+    if icon not in [Critical, Information, Question, Warning]:
+        raise ValueError("Bad value for 'icon' parameter.")
+    
+    res = __messageBox(
+        parent, title, text, icon,
+        QMessageBox.StandardButton.Retry | QMessageBox.StandardButton.Abort,
+        QMessageBox.StandardButton.Retry,
+        textFormat)
+    return res == QMessageBox.StandardButton.Retry
+
+
+def okToClearData(parent, title, text, saveFunc,
+                  textFormat=Qt.TextFormat.AutoText):
+    """
+    Function to show a model message box to ask for clearing the data.
+    
+    @param parent parent widget of the message box (QWidget)
+    @param title caption of the message box (string)
+    @param text text to be shown by the message box (string)
+    @param saveFunc reference to a function performing the save action. It
+        must be a parameterless function returning a flag indicating success.
+    @param textFormat format of the text (Qt.TextFormat)
+    @return flag indicating that it is ok to clear the data (boolean)
+    """
+    res = __messageBox(
+        parent, title, text, QMessageBox.Icon.Warning,
+        (QMessageBox.StandardButton.Abort |
+         QMessageBox.StandardButton.Discard |
+         QMessageBox.StandardButton.Save),
+        QMessageBox.StandardButton.Save,
+        textFormat)
+    if res == QMessageBox.StandardButton.Abort:
+        return False
+    if res == QMessageBox.StandardButton.Save:
+        return saveFunc()
+    return True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricModelMenu.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,441 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a menu populated from a QAbstractItemModel.
+"""
+
+from PyQt6.QtCore import pyqtSignal, Qt, QModelIndex, QPoint
+from PyQt6.QtGui import QFontMetrics, QDrag, QAction
+from PyQt6.QtWidgets import QMenu, QApplication
+
+import UI.PixmapCache
+
+
+class EricModelMenu(QMenu):
+    """
+    Class implementing a menu populated from a QAbstractItemModel.
+    
+    @signal activated(QModelIndex) emitted when an action has been triggered
+    """
+    activated = pyqtSignal(QModelIndex)
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        self.__maxRows = -1
+        self.__firstSeparator = -1
+        self.__maxWidth = -1
+        self.__statusBarTextRole = 0
+        self.__separatorRole = 0
+        self.__model = None
+        self.__root = QModelIndex()
+        self.__dragStartPosition = QPoint()
+        
+        self.setAcceptDrops(True)
+        
+        self._mouseButton = Qt.MouseButton.NoButton
+        self._keyboardModifiers = Qt.KeyboardModifier.NoModifier
+        self.__dropRow = -1
+        self.__dropIndex = None
+        
+        # This is to ensure it will be shown on Mac OS X
+        self.addAction("--not populated--")
+        
+        self.aboutToShow.connect(self.__aboutToShow)
+        self.triggered.connect(self.__actionTriggered)
+    
+    def prePopulated(self):
+        """
+        Public method to add any actions before the tree.
+       
+        @return flag indicating if any actions were added
+        """
+        return False
+    
+    def postPopulated(self):
+        """
+        Public method to add any actions after the tree.
+        """
+        pass
+    
+    def setModel(self, model):
+        """
+        Public method to set the model for the menu.
+        
+        @param model reference to the model (QAbstractItemModel)
+        """
+        self.__model = model
+    
+    def model(self):
+        """
+        Public method to get a reference to the model.
+        
+        @return reference to the model (QAbstractItemModel)
+        """
+        return self.__model
+    
+    def setMaxRows(self, rows):
+        """
+        Public method to set the maximum number of entries to show.
+        
+        @param rows maximum number of entries to show (integer)
+        """
+        self.__maxRows = rows
+    
+    def maxRows(self):
+        """
+        Public method to get the maximum number of entries to show.
+        
+        @return maximum number of entries to show (integer)
+        """
+        return self.__maxRows
+    
+    def setFirstSeparator(self, offset):
+        """
+        Public method to set the first separator.
+        
+        @param offset row number of the first separator (integer)
+        """
+        self.__firstSeparator = offset
+    
+    def firstSeparator(self):
+        """
+        Public method to get the first separator.
+        
+        @return row number of the first separator (integer)
+        """
+        return self.__firstSeparator
+    
+    def setRootIndex(self, index):
+        """
+        Public method to set the index of the root item.
+        
+        @param index index of the root item (QModelIndex)
+        """
+        self.__root = index
+    
+    def rootIndex(self):
+        """
+        Public method to get the index of the root item.
+        
+        @return index of the root item (QModelIndex)
+        """
+        return self.__root
+    
+    def setStatusBarTextRole(self, role):
+        """
+        Public method to set the role of the status bar text.
+        
+        @param role role of the status bar text (integer)
+        """
+        self.__statusBarTextRole = role
+    
+    def statusBarTextRole(self):
+        """
+        Public method to get the role of the status bar text.
+        
+        @return role of the status bar text (integer)
+        """
+        return self.__statusBarTextRole
+    
+    def setSeparatorRole(self, role):
+        """
+        Public method to set the role of the separator.
+        
+        @param role role of the separator (integer)
+        """
+        self.__separatorRole = role
+    
+    def separatorRole(self):
+        """
+        Public method to get the role of the separator.
+        
+        @return role of the separator (integer)
+        """
+        return self.__separatorRole
+    
+    def __aboutToShow(self):
+        """
+        Private slot to show the menu.
+        """
+        self.clear()
+        
+        if self.prePopulated():
+            self.addSeparator()
+        max_ = self.__maxRows
+        if max_ != -1:
+            max_ += self.__firstSeparator
+        self.createMenu(self.__root, max_, self, self)
+        self.postPopulated()
+    
+    def createBaseMenu(self):
+        """
+        Public method to get the menu that is used to populate sub menu's.
+        
+        @return reference to the menu (EricModelMenu)
+        """
+        return EricModelMenu(self)
+    
+    def createMenu(self, parent, max_, parentMenu=None, menu=None):
+        """
+        Public method to put all the children of a parent into a menu of a
+        given length.
+        
+        @param parent index of the parent item (QModelIndex)
+        @param max_ maximum number of entries (integer)
+        @param parentMenu reference to the parent menu (QMenu)
+        @param menu reference to the menu to be populated (QMenu)
+        """
+        if menu is None:
+            v = parent
+            
+            title = parent.data()
+            modelMenu = self.createBaseMenu()
+            # triggered goes all the way up the menu structure
+            modelMenu.triggered.disconnect(modelMenu.__actionTriggered)
+            modelMenu.setTitle(title)
+            
+            icon = parent.data(Qt.ItemDataRole.DecorationRole)
+            if icon == NotImplemented or icon is None:
+                icon = UI.PixmapCache.getIcon("defaultIcon")
+            modelMenu.setIcon(icon)
+            if parentMenu is not None:
+                parentMenu.addMenu(modelMenu).setData(v)
+            modelMenu.setRootIndex(parent)
+            modelMenu.setModel(self.__model)
+            return
+        
+        if self.__model is None:
+            return
+        
+        end = self.__model.rowCount(parent)
+        if max_ != -1:
+            end = min(max_, end)
+        
+        for i in range(end):
+            idx = self.__model.index(i, 0, parent)
+            if self.__model.hasChildren(idx):
+                self.createMenu(idx, -1, menu)
+            else:
+                if (
+                    self.__separatorRole != 0 and
+                    idx.data(self.__separatorRole)
+                ):
+                    self.addSeparator()
+                else:
+                    menu.addAction(self.__makeAction(idx))
+            
+            if menu == self and i == self.__firstSeparator - 1:
+                self.addSeparator()
+    
+    def __makeAction(self, idx):
+        """
+        Private method to create an action.
+        
+        @param idx index of the item to create an action for (QModelIndex)
+        @return reference to the created action (QAction)
+        """
+        icon = idx.data(Qt.ItemDataRole.DecorationRole)
+        if icon == NotImplemented or icon is None:
+            icon = UI.PixmapCache.getIcon("defaultIcon")
+        action = self.makeAction(icon, idx.data(), self)
+        action.setStatusTip(idx.data(self.__statusBarTextRole))
+        
+        v = idx
+        action.setData(v)
+        
+        return action
+    
+    def makeAction(self, icon, text, parent):
+        """
+        Public method to create an action.
+        
+        @param icon icon of the action (QIcon)
+        @param text text of the action (string)
+        @param parent reference to the parent object (QObject)
+        @return reference to the created action (QAction)
+        """
+        fm = QFontMetrics(self.font())
+        if self.__maxWidth == -1:
+            try:
+                self.__maxWidth = fm.horizontalAdvance("m") * 30
+            except AttributeError:
+                self.__maxWidth = fm.width('m') * 30
+        smallText = fm.elidedText(text, Qt.TextElideMode.ElideMiddle,
+                                  self.__maxWidth)
+        
+        return QAction(icon, smallText, parent)
+    
+    def __actionTriggered(self, action):
+        """
+        Private slot to handle the triggering of an action.
+        
+        @param action reference to the action that was triggered (QAction)
+        """
+        idx = self.index(action)
+        if idx.isValid():
+            self._keyboardModifiers = QApplication.keyboardModifiers()
+            self.activated[QModelIndex].emit(idx)
+    
+    def index(self, action):
+        """
+        Public method to get the index of an action.
+        
+        @param action reference to the action to get the index for (QAction)
+        @return index of the action (QModelIndex)
+        """
+        if action is None:
+            return QModelIndex()
+        
+        idx = action.data()
+        if idx is None:
+            return QModelIndex()
+        
+        if not isinstance(idx, QModelIndex):
+            return QModelIndex()
+        
+        return idx
+    
+    def dragEnterEvent(self, evt):
+        """
+        Protected method to handle drag enter events.
+        
+        @param evt reference to the event (QDragEnterEvent)
+        """
+        if self.__model is not None:
+            mimeTypes = self.__model.mimeTypes()
+            for mimeType in mimeTypes:
+                if evt.mimeData().hasFormat(mimeType):
+                    evt.acceptProposedAction()
+        
+        super().dragEnterEvent(evt)
+    
+    def dropEvent(self, evt):
+        """
+        Protected method to handle drop events.
+        
+        @param evt reference to the event (QDropEvent)
+        """
+        if self.__model is not None:
+            act = self.actionAt(evt.position().toPoint())
+            parentIndex = self.__root
+            if act is None:
+                row = self.__model.rowCount(self.__root)
+            else:
+                idx = self.index(act)
+                if not idx.isValid():
+                    super().dropEvent(evt)
+                    return
+                
+                row = idx.row()
+                if self.__model.hasChildren(idx):
+                    parentIndex = idx
+                    row = self.__model.rowCount(idx)
+            
+            self.__dropRow = row
+            self.__dropIndex = parentIndex
+            evt.acceptProposedAction()
+            self.__model.dropMimeData(evt.mimeData(), evt.dropAction(),
+                                      row, 0, parentIndex)
+            self.close()
+        
+        super().dropEvent(evt)
+    
+    def mousePressEvent(self, evt):
+        """
+        Protected method handling mouse press events.
+        
+        @param evt reference to the event object (QMouseEvent)
+        """
+        if evt.button() == Qt.MouseButton.LeftButton:
+            self.__dragStartPosition = evt.position().toPoint()
+        super().mousePressEvent(evt)
+    
+    def mouseMoveEvent(self, evt):
+        """
+        Protected method to handle mouse move events.
+        
+        @param evt reference to the event (QMouseEvent)
+        """
+        if self.__model is None:
+            super().mouseMoveEvent(evt)
+            return
+        
+        if not (evt.buttons() & Qt.MouseButton.LeftButton):
+            super().mouseMoveEvent(evt)
+            return
+        
+        if self.__dragStartPosition.isNull():
+            super().mouseMoveEvent(evt)
+            return
+        
+        manhattanLength = (evt.position().toPoint() -
+                           self.__dragStartPosition).manhattanLength()
+        if manhattanLength <= QApplication.startDragDistance():
+            super().mouseMoveEvent(evt)
+            return
+        
+        act = self.actionAt(self.__dragStartPosition)
+        if act is None:
+            super().mouseMoveEvent(evt)
+            return
+        
+        idx = self.index(act)
+        if not idx.isValid():
+            super().mouseMoveEvent(evt)
+            return
+        
+        drag = QDrag(self)
+        drag.setMimeData(self.__model.mimeData([idx]))
+        actionRect = self.actionGeometry(act)
+        drag.setPixmap(self.grab(actionRect))
+        
+        if drag.exec() == Qt.DropAction.MoveAction:
+            row = idx.row()
+            if self.__dropIndex == idx.parent() and self.__dropRow <= row:
+                row += 1
+            self.__model.removeRow(row, self.__root)
+            
+            if not self.isAncestorOf(drag.target()):
+                self.close()
+            else:
+                self.aboutToShow.emit()
+    
+    def mouseReleaseEvent(self, evt):
+        """
+        Protected method handling mouse release events.
+        
+        @param evt reference to the event object (QMouseEvent)
+        """
+        self._mouseButton = evt.button()
+        self._keyboardModifiers = evt.modifiers()
+        
+        if evt.button() == Qt.MouseButton.LeftButton:
+            self.__dragStartPosition = QPoint()
+        
+        super().mouseReleaseEvent(evt)
+    
+    def resetFlags(self):
+        """
+        Public method to reset the saved internal state.
+        """
+        self._mouseButton = Qt.MouseButton.NoButton
+        self._keyboardModifiers = Qt.KeyboardModifier.NoModifier
+    
+    def removeEntry(self, idx):
+        """
+        Public method to remove a menu entry.
+        
+        @param idx index of the entry to be removed (QModelIndex)
+        """
+        row = idx.row()
+        self.__model.removeRow(row, self.__root)
+        self.aboutToShow.emit()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricModelToolBar.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,293 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a tool bar populated from a QAbstractItemModel.
+"""
+
+from PyQt6.QtCore import pyqtSignal, Qt, QModelIndex, QPoint, QEvent
+from PyQt6.QtGui import QDrag, QIcon
+from PyQt6.QtWidgets import QApplication, QToolBar, QToolButton
+
+
+class EricModelToolBar(QToolBar):
+    """
+    Class implementing a tool bar populated from a QAbstractItemModel.
+    
+    @signal activated(QModelIndex) emitted when an action has been triggered
+    """
+    activated = pyqtSignal(QModelIndex)
+    
+    def __init__(self, title=None, parent=None):
+        """
+        Constructor
+        
+        @param title title for the tool bar (string)
+        @param parent reference to the parent widget (QWidget)
+        """
+        if title is not None:
+            super().__init__(title, parent)
+        else:
+            super().__init__(parent)
+        
+        self.__model = None
+        
+        self.__root = QModelIndex()
+        self.__dragStartPosition = QPoint()
+        
+        if self.isVisible():
+            self._build()
+        
+        self.setAcceptDrops(True)
+        
+        self._mouseButton = Qt.MouseButton.NoButton
+        self._keyboardModifiers = Qt.KeyboardModifier.NoModifier
+        self.__dropRow = -1
+        self.__dropIndex = None
+    
+    def setModel(self, model):
+        """
+        Public method to set the model for the tool bar.
+        
+        @param model reference to the model (QAbstractItemModel)
+        """
+        if self.__model is not None:
+            self.__model.modelReset.disconnect(self._build)
+            self.__model.rowsInserted[QModelIndex, int, int].disconnect(
+                self._build)
+            self.__model.rowsRemoved[QModelIndex, int, int].disconnect(
+                self._build)
+            self.__model.dataChanged.disconnect(
+                self._build)
+        
+        self.__model = model
+        
+        if self.__model is not None:
+            self.__model.modelReset.connect(self._build)
+            self.__model.rowsInserted[QModelIndex, int, int].connect(
+                self._build)
+            self.__model.rowsRemoved[QModelIndex, int, int].connect(
+                self._build)
+            self.__model.dataChanged.connect(
+                self._build)
+    
+    def model(self):
+        """
+        Public method to get a reference to the model.
+        
+        @return reference to the model (QAbstractItemModel)
+        """
+        return self.__model
+    
+    def setRootIndex(self, idx):
+        """
+        Public method to set the root index.
+        
+        @param idx index to be set as the root index (QModelIndex)
+        """
+        self.__root = idx
+    
+    def rootIndex(self):
+        """
+        Public method to get the root index.
+        
+        @return root index (QModelIndex)
+        """
+        return self.__root
+    
+    def _build(self):
+        """
+        Protected slot to build the tool bar.
+        """
+        if self.__model is None:
+            return
+        
+        self.clear()
+        
+        for i in range(self.__model.rowCount(self.__root)):
+            idx = self.__model.index(i, 0, self.__root)
+            
+            title = idx.data(Qt.ItemDataRole.DisplayRole)
+            icon = idx.data(Qt.ItemDataRole.DecorationRole)
+            if icon == NotImplemented or icon is None:
+                icon = QIcon()
+            folder = self.__model.hasChildren(idx)
+            
+            act = self.addAction(icon, title)
+            act.setData(idx)
+            
+            button = self.widgetForAction(act)
+            button.installEventFilter(self)
+            
+            if folder:
+                menu = self._createMenu()
+                menu.setModel(self.__model)
+                menu.setRootIndex(idx)
+                button.setMenu(menu)
+                button.setPopupMode(
+                    QToolButton.ToolButtonPopupMode.InstantPopup)
+                button.setToolButtonStyle(
+                    Qt.ToolButtonStyle.ToolButtonTextBesideIcon)
+    
+    def index(self, action):
+        """
+        Public method to get the index of an action.
+        
+        @param action reference to the action to get the index for (QAction)
+        @return index of the action (QModelIndex)
+        """
+        if action is None:
+            return QModelIndex()
+        
+        idx = action.data()
+        if idx is None:
+            return QModelIndex()
+        
+        if not isinstance(idx, QModelIndex):
+            return QModelIndex()
+        
+        return idx
+    
+    def _createMenu(self):
+        """
+        Protected method to create the menu for a tool bar action.
+        
+        @return menu for a tool bar action (EricModelMenu)
+        """
+        from .EricModelMenu import EricModelMenu
+        return EricModelMenu(self)
+    
+    def eventFilter(self, obj, evt):
+        """
+        Public method to handle event for other objects.
+        
+        @param obj reference to the object (QObject)
+        @param evt reference to the event (QEvent)
+        @return flag indicating that the event should be filtered out (boolean)
+        """
+        if evt.type() == QEvent.Type.MouseButtonRelease:
+            self._mouseButton = evt.button()
+            self._keyboardModifiers = evt.modifiers()
+            act = obj.defaultAction()
+            idx = self.index(act)
+            if idx.isValid():
+                self.activated[QModelIndex].emit(idx)
+        elif (
+            evt.type() == QEvent.Type.MouseButtonPress and
+            evt.buttons() & Qt.MouseButton.LeftButton
+        ):
+            self.__dragStartPosition = self.mapFromGlobal(evt.globalPosition().toPoint())
+        
+        return False
+    
+    def dragEnterEvent(self, evt):
+        """
+        Protected method to handle drag enter events.
+        
+        @param evt reference to the event (QDragEnterEvent)
+        """
+        if self.__model is not None:
+            mimeTypes = self.__model.mimeTypes()
+            for mimeType in mimeTypes:
+                if evt.mimeData().hasFormat(mimeType):
+                    evt.acceptProposedAction()
+        
+        super().dragEnterEvent(evt)
+    
+    def dropEvent(self, evt):
+        """
+        Protected method to handle drop events.
+        
+        @param evt reference to the event (QDropEvent)
+        @exception RuntimeError raised to indicate an invalid model index
+        """
+        if self.__model is not None:
+            act = self.actionAt(evt.position().toPoint())
+            parentIndex = self.__root
+            if act is None:
+                row = self.__model.rowCount(self.__root)
+            else:
+                idx = self.index(act)
+                if not idx.isValid():
+                    raise RuntimeError("invalid index")
+                row = idx.row()
+                if self.__model.hasChildren(idx):
+                    parentIndex = idx
+                    row = self.__model.rowCount(idx)
+            
+            self.__dropRow = row
+            self.__dropIndex = parentIndex
+            evt.acceptProposedAction()
+            self.__model.dropMimeData(evt.mimeData(), evt.dropAction(),
+                                      row, 0, parentIndex)
+        
+        super().dropEvent(evt)
+    
+    def mouseMoveEvent(self, evt):
+        """
+        Protected method to handle mouse move events.
+        
+        @param evt reference to the event (QMouseEvent)
+        @exception RuntimeError raised to indicate an invalid model index
+        """
+        if self.__model is None:
+            super().mouseMoveEvent(evt)
+            return
+        
+        if not (evt.buttons() & Qt.MouseButton.LeftButton):
+            super().mouseMoveEvent(evt)
+            return
+        
+        manhattanLength = (evt.position().toPoint() -
+                           self.__dragStartPosition).manhattanLength()
+        if manhattanLength <= QApplication.startDragDistance():
+            super().mouseMoveEvent(evt)
+            return
+        
+        act = self.actionAt(self.__dragStartPosition)
+        if act is None:
+            super().mouseMoveEvent(evt)
+            return
+        
+        idx = self.index(act)
+        if not idx.isValid():
+            raise RuntimeError("invalid index")
+        
+        drag = QDrag(self)
+        drag.setMimeData(self.__model.mimeData([idx]))
+        actionRect = self.actionGeometry(act)
+        drag.setPixmap(self.grab(actionRect))
+        
+        if drag.exec() == Qt.DropAction.MoveAction:
+            row = idx.row()
+            if self.__dropIndex == idx.parent() and self.__dropRow <= row:
+                row += 1
+            self.__model.removeRow(row, self.__root)
+    
+    def hideEvent(self, evt):
+        """
+        Protected method to handle hide events.
+        
+        @param evt reference to the hide event (QHideEvent)
+        """
+        self.clear()
+        super().hideEvent(evt)
+    
+    def showEvent(self, evt):
+        """
+        Protected method to handle show events.
+        
+        @param evt reference to the hide event (QHideEvent)
+        """
+        if len(self.actions()) == 0:
+            self._build()
+        super().showEvent(evt)
+    
+    def resetFlags(self):
+        """
+        Public method to reset the saved internal state.
+        """
+        self._mouseButton = Qt.MouseButton.NoButton
+        self._keyboardModifiers = Qt.KeyboardModifier.NoModifier
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricPassivePopup.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,254 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing dialog-like popup that displays messages without
+interrupting the user.
+"""
+
+import enum
+
+from PyQt6.QtCore import pyqtSignal, Qt, QTimer, QPoint, QRect
+from PyQt6.QtWidgets import QFrame, QVBoxLayout, QApplication
+
+
+class EricPassivePopupStyle(enum.Enum):
+    """
+    Class defining the popup styles.
+    """
+    BOXED = 0           # box with no shadow
+    STYLED = 1          # styled panel with no shadow
+    CUSTOM = 128        # reserved for extensions
+
+
+class EricPassivePopup(QFrame):
+    """
+    Class implementing dialog-like popup that displays messages without
+    interrupting the user.
+    
+    @signal clicked emitted to indicate a mouse button click
+    """
+    DefaultPopupTime = 6 * 1000     # time im milliseconds
+    
+    clicked = pyqtSignal((), (QPoint, ))
+    
+    def __init__(self, style=EricPassivePopupStyle.BOXED, parent=None):
+        """
+        Constructor
+        
+        @param style style of the popup
+        @type EricPassivePopupStyle
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(None)
+        
+        self.__msgView = None
+        self.__topLayout = None
+        self.__hideDelay = EricPassivePopup.DefaultPopupTime
+        self.__hideTimer = QTimer(self)
+        self.__autoDelete = False
+        self.__fixedPosition = QPoint()
+        
+        self.setWindowFlags(
+            Qt.WindowType.Tool |
+            Qt.WindowType.X11BypassWindowManagerHint |
+            Qt.WindowType.WindowStaysOnTopHint |
+            Qt.WindowType.FramelessWindowHint
+        )
+        if style == EricPassivePopupStyle.STYLED:
+            self.setFrameStyle(QFrame.Shape.StyledPanel | QFrame.Shadow.Plain)
+        else:
+            # default style is Boxed - Plain
+            self.setFrameStyle(QFrame.Shape.Box | QFrame.Shadow.Plain)
+        self.setLineWidth(2)
+        self.__hideTimer.timeout.connect(self.hide)
+        self.clicked.connect(self.hide)
+        
+        self.__customData = {}  # dictionary to store some custom data
+    
+    def setView(self, child):
+        """
+        Public method to set the message view.
+        
+        @param child reference to the widget to set as the message view
+            (QWidget)
+        """
+        self.__msgView = child
+        self.__topLayout = QVBoxLayout(self)
+        self.__topLayout.addWidget(self.__msgView)
+        self.__topLayout.activate()
+    
+    def view(self):
+        """
+        Public method to get a reference to the message view.
+        
+        @return reference to the message view (QWidget)
+        """
+        return self.__msgView
+    
+    def setVisible(self, visible):
+        """
+        Public method to show or hide the popup.
+        
+        @param visible flag indicating the visibility status (boolean)
+        """
+        if not visible:
+            super().setVisible(visible)
+            return
+        
+        if self.size() != self.sizeHint():
+            self.resize(self.sizeHint())
+        
+        if self.__fixedPosition.isNull():
+            self.__positionSelf()
+        else:
+            self.move(self.__fixedPosition)
+        super().setVisible(True)
+        
+        delay = self.__hideDelay
+        if delay < 0:
+            delay = EricPassivePopup.DefaultPopupTime
+        if delay > 0:
+            self.__hideTimer.start(delay)
+    
+    def show(self, p=None):
+        """
+        Public slot to show the popup.
+        
+        @param p position for the popup (QPoint)
+        """
+        if p is not None:
+            self.__fixedPosition = p
+        super().show()
+    
+    def setTimeout(self, delay):
+        """
+        Public method to set the delay for the popup is removed automatically.
+        
+        Setting the delay to 0 disables the timeout. If you're doing this, you
+        may want to connect the clicked() signal to the hide() slot. Setting
+        the delay to -1 makes it use the default value.
+        
+        @param delay value for the delay in milliseconds (integer)
+        """
+        self.__hideDelay = delay
+        if self.__hideTimer.isActive():
+            if delay:
+                if delay == -1:
+                    delay = EricPassivePopup.DefaultPopupTime
+                self.__hideTimer.start(delay)
+            else:
+                self.__hideTimer.stop()
+    
+    def timeout(self):
+        """
+        Public method to get the delay before the popup is removed
+        automatically.
+        
+        @return the delay before the popup is removed automatically (integer)
+        """
+        return self.__hideDelay
+    
+    def mouseReleaseEvent(self, evt):
+        """
+        Protected method to handle a mouse release event.
+        
+        @param evt reference to the mouse event (QMouseEvent)
+        """
+        self.clicked.emit()
+        self.clicked.emit(evt.position().toPoint())
+    
+    def hideEvent(self, evt):
+        """
+        Protected method to handle the hide event.
+        
+        @param evt reference to the hide event (QHideEvent)
+        """
+        self.__hideTimer.stop()
+    
+    def __defaultArea(self):
+        """
+        Private method to determine the default rectangle to be passed to
+        moveNear().
+        
+        @return default rectangle (QRect)
+        """
+        return QRect(100, 100, 200, 200)
+    
+    def __positionSelf(self):
+        """
+        Private method to position the popup.
+        """
+        self.__moveNear(self.__defaultArea())
+    
+    def __moveNear(self, target):
+        """
+        Private method to move the popup to be adjacent to the specified
+        rectangle.
+        
+        @param target rectangle to be placed at (QRect)
+        """
+        pos = self.__calculateNearbyPoint(target)
+        self.move(pos.x(), pos.y())
+    
+    def __calculateNearbyPoint(self, target):
+        """
+        Private method to calculate the position to place the popup near the
+        specified rectangle.
+        
+        @param target rectangle to be placed at (QRect)
+        @return position to place the popup (QPoint)
+        """
+        pos = target.topLeft()
+        x = pos.x()
+        y = pos.y()
+        w = self.minimumSizeHint().width()
+        h = self.minimumSizeHint().height()
+        
+        r = QApplication.screenAt(QPoint(x + w // 2, y + h // 2)).geometry()
+        
+        if x < r.center().x():
+            x += target.width()
+        else:
+            x -= w
+        
+        # It's apparently trying to go off screen, so display it ALL at the
+        # bottom.
+        if (y + h) > r.bottom():
+            y = r.bottom() - h
+        
+        if (x + w) > r.right():
+            x = r.right() - w
+        
+        if y < r.top():
+            y = r.top()
+        
+        if x < r.left():
+            x = r.left()
+        
+        return QPoint(x, y)
+    
+    def setCustomData(self, key, data):
+        """
+        Public method to set some custom data.
+        
+        @param key key for the custom data
+        @type str
+        @param data data to be stored
+        @type any
+        """
+        self.__customData[key] = data
+    
+    def getCustomData(self, key):
+        """
+        Public method to get some custom data.
+        
+        @param key key for the custom data
+        @type str
+        @return stored data
+        @rtype any
+        """
+        return self.__customData[key]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricPasswordMeter.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,102 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2011 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a custom widget indicating the strength of a password.
+"""
+
+from PyQt6.QtWidgets import QProgressBar
+
+from Utilities.PasswordChecker import PasswordChecker
+
+
+class EricPasswordMeter(QProgressBar):
+    """
+    Class implementing a custom widget indicating the strength of a password.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        super().setTextVisible(False)
+        super().setMaximum(100)
+        self.__increment = 100 // (PasswordChecker.Complexity_VeryStrong + 1)
+        
+        self.__indicatorColors = [
+            "#ff0000",      # red
+            "#ff8800",      # orange
+            "#ffff00",      # yellow
+            "#ccff00",      # yellow green
+            "#00ff00",      # green
+        ]
+        self.__noIndicator = "#ffffff"
+        
+        self.__styleSheetTemplate = (
+            "QProgressBar {{"
+            " border: 2px solid black;"
+            " border-radius: 5px;"
+            " text-align: center; }}"
+            "QProgressBar::chunk:horizontal {{"
+            " background-color: {0}; }}"
+        )
+        self.setStyleSheet(
+            self.__styleSheetTemplate.format(self.__noIndicator))
+    
+    def checkPasswordStrength(self, password):
+        """
+        Public slot to check the password strength and update the
+        progress bar accordingly.
+        
+        @param password password to be checked (string)
+        """
+        strength = PasswordChecker().checkPassword(password)
+        self.setStyleSheet(self.__styleSheetTemplate.format(
+            self.__indicatorColors[strength]))
+        super().setValue(
+            (strength + 1) * self.__increment)
+    
+    def setValue(self, value):
+        """
+        Public method to set the value.
+        
+        Overwritten to do nothing.
+        
+        @param value value (integer)
+        """
+        pass
+    
+    def setMaximum(self, value):
+        """
+        Public method to set the maximum value.
+        
+        Overwritten to do nothing.
+        
+        @param value maximum value (integer)
+        """
+        pass
+    
+    def setMinimum(self, value):
+        """
+        Public method to set the minimal value.
+        
+        Overwritten to do nothing.
+        
+        @param value minimum value (integer)
+        """
+        pass
+
+if __name__ == "__main__":
+    import sys
+    from PyQt6.QtWidgets import QApplication
+    
+    app = QApplication(sys.argv)
+    meter = EricPasswordMeter()
+    meter.show()
+    meter.checkPasswordStrength("Blah2+")
+    app.exec()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricPathPicker.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,718 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a path picker widget.
+"""
+
+import enum
+import os
+
+from PyQt6.QtCore import pyqtSignal, Qt, QFileInfo, QCoreApplication, QDir
+from PyQt6.QtWidgets import (
+    QWidget, QHBoxLayout, QToolButton, QSizePolicy, QLineEdit, QComboBox
+)
+
+from . import EricFileDialog
+from .EricCompleters import EricFileCompleter, EricDirCompleter
+
+import UI.PixmapCache
+
+
+class EricPathPickerModes(enum.Enum):
+    """
+    Class implementing the path picker modes.
+    """
+    OPEN_FILE_MODE = 0
+    OPEN_FILES_MODE = 1
+    SAVE_FILE_MODE = 2
+    SAVE_FILE_ENSURE_EXTENSION_MODE = 3
+    SAVE_FILE_OVERWRITE_MODE = 4
+    DIRECTORY_MODE = 5
+    DIRECTORY_SHOW_FILES_MODE = 6
+    CUSTOM_MODE = 99
+    NO_MODE = 100
+
+
+class EricPathPickerBase(QWidget):
+    """
+    Class implementing the base of a path picker widget consisting of a
+    line edit or combo box and a tool button to open a file dialog.
+    
+    @signal textChanged(path) emitted when the entered path has changed
+        (line edit based widget)
+    @signal editTextChanged(path) emitted when the entered path has changed
+        (combo box based widget)
+    @signal pathSelected(path) emitted after a path has been selected via the
+        file dialog
+    @signal aboutToShowPathPickerDialog emitted before the file dialog is shown
+    @signal pickerButtonClicked emitted when the picker button was pressed and
+        the widget mode is custom
+    """
+    DefaultMode = EricPathPickerModes.NO_MODE
+    
+    textChanged = pyqtSignal(str)
+    editTextChanged = pyqtSignal(str)
+    pathSelected = pyqtSignal(str)
+    aboutToShowPathPickerDialog = pyqtSignal()
+    pickerButtonClicked = pyqtSignal()
+    
+    def __init__(self, parent=None, useLineEdit=True):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        @param useLineEdit flag indicating the use of a line edit
+        @type bool
+        """
+        super().__init__(parent)
+        
+        self.__lineEditKind = useLineEdit
+        
+        self.__mode = EricPathPicker.DefaultMode
+        self.__editorEnabled = True
+        
+        self._completer = None
+        self.__filters = ""
+        self.__defaultDirectory = ""
+        self.__windowTitle = ""
+        
+        self.__layout = QHBoxLayout(self)
+        self.__layout.setSpacing(0)
+        self.__layout.setContentsMargins(0, 0, 0, 0)
+        self.setLayout(self.__layout)
+        
+        if useLineEdit:
+            self._editor = QLineEdit(self)
+            self._editor.setPlaceholderText(QCoreApplication.translate(
+                    "EricPathPickerBase", "Enter Path Name"))
+            self._editor.setClearButtonEnabled(True)
+        else:
+            self._editor = QComboBox(self)
+            self._editor.setEditable(True)
+            self._editor.lineEdit().setPlaceholderText(
+                QCoreApplication.translate(
+                    "EricPathPickerBase", "Enter Path Name"))
+            self._editor.lineEdit().setClearButtonEnabled(True)
+        
+        self.__button = QToolButton(self)
+        self.__button.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
+        self.__button.setIcon(UI.PixmapCache.getIcon("open"))
+        
+        self.__layout.addWidget(self._editor)
+        self.__layout.addWidget(self.__button)
+        
+        self.__button.clicked.connect(self.__showPathPickerDialog)
+        if useLineEdit:
+            self._editor.textEdited.connect(self.__pathEdited)
+            self._editor.textChanged.connect(self.textChanged)
+        else:
+            self._editor.editTextChanged.connect(self.editTextChanged)
+        
+        self.setFocusProxy(self._editor)
+        self.setFocusPolicy(Qt.FocusPolicy.StrongFocus)
+        self.setSizePolicy(QSizePolicy.Policy.Expanding,
+                           QSizePolicy.Policy.Preferred)
+        
+        self.__button.setEnabled(self.__mode != EricPathPickerModes.NO_MODE)
+    
+    def __pathEdited(self, path):
+        """
+        Private slot handling editing of the path.
+        
+        @param path current text of the path line edit
+        @type str
+        """
+        if self._completer and not self._completer.popup().isVisible():
+            self._completer.setRootPath(QDir.toNativeSeparators(path))
+    
+    def setMode(self, mode):
+        """
+        Public method to set the path picker mode.
+        
+        @param mode picker mode
+        @type EricPathPickerModes
+        @exception ValueError raised to indicate a bad parameter value
+        """
+        if mode not in EricPathPickerModes:
+            raise ValueError("Bad value for 'mode' parameter.")
+        
+        oldMode = self.__mode
+        self.__mode = mode
+        
+        if mode != oldMode or (self.__lineEditKind and not self._completer):
+            if self.__lineEditKind and self._completer:
+                # Remove current completer
+                self._editor.setCompleter(None)
+                self._completer = None
+            
+            if mode != EricPathPickerModes.NO_MODE:
+                if self.__lineEditKind:
+                    # Set a new completer
+                    if mode == EricPathPickerModes.DIRECTORY_MODE:
+                        self._completer = EricDirCompleter(self._editor)
+                    else:
+                        self._completer = EricFileCompleter(self._editor)
+                
+                # set inactive text
+                if mode == EricPathPickerModes.OPEN_FILES_MODE:
+                    self._editor.setPlaceholderText(
+                        self.tr("Enter Path Names separated by ';'"))
+                else:
+                    self._editor.setPlaceholderText(
+                        self.tr("Enter Path Name"))
+        self.__button.setEnabled(self.__mode != EricPathPickerModes.NO_MODE)
+    
+    def mode(self):
+        """
+        Public method to get the path picker mode.
+        
+        @return path picker mode
+        @rtype EricPathPickerModes
+        """
+        return self.__mode
+    
+    def setPickerEnabled(self, enable):
+        """
+        Public method to set the enabled state of the file dialog button.
+        
+        @param enable flag indicating the enabled state
+        @type bool
+        """
+        self.__button.setEnabled(enable)
+    
+    def isPickerEnabled(self):
+        """
+        Public method to get the file dialog button enabled state.
+        
+        @return flag indicating the enabled state
+        @rtype bool
+        """
+        return self.__button.isEnabled()
+    
+    def clear(self):
+        """
+        Public method to clear the current path or list of paths.
+        """
+        self._editor.clear()
+    
+    def clearEditText(self):
+        """
+        Public method to clear the current path.
+        """
+        if not self.__lineEditKind:
+            self._editor.clearEditText()
+    
+    def _setEditorText(self, text):
+        """
+        Protected method to set the text of the editor.
+        
+        @param text text to set
+        @type str
+        """
+        if self.__lineEditKind:
+            self._editor.setText(text)
+        else:
+            self._editor.setEditText(text)
+            if text and self._editor.findText(text) == -1:
+                self._editor.insertItem(0, text)
+    
+    def _editorText(self):
+        """
+        Protected method to get the text of the editor.
+        
+        @return text of the editor
+        @rtype str
+        """
+        if self.__lineEditKind:
+            return self._editor.text()
+        else:
+            return self._editor.currentText()
+    
+    def setText(self, path, toNative=True):
+        """
+        Public method to set the current path.
+        
+        @param path path to be set
+        @type str
+        @param toNative flag indicating to convert the path into
+            a native format
+        @type bool
+        """
+        if self.__mode == EricPathPickerModes.OPEN_FILES_MODE:
+            self._setEditorText(path)
+        else:
+            if toNative:
+                path = QDir.toNativeSeparators(path)
+            self._setEditorText(path)
+            if self._completer:
+                self._completer.setRootPath(path)
+    
+    def text(self, toNative=True):
+        """
+        Public method to get the current path.
+        
+        @param toNative flag indicating to convert the path into
+            a native format
+        @type bool
+        @return current path
+        @rtype str
+        """
+        if self.__mode == EricPathPickerModes.OPEN_FILES_MODE:
+            if toNative:
+                return ";".join(
+                    [QDir.toNativeSeparators(path)
+                     for path in self._editorText().split(";")])
+            else:
+                return self._editorText()
+        else:
+            if toNative:
+                return os.path.expanduser(
+                    QDir.toNativeSeparators(self._editorText()))
+            else:
+                return os.path.expanduser(self._editorText())
+    
+    def setEditText(self, path, toNative=True):
+        """
+        Public method to set the current path.
+        
+        @param path path to be set
+        @type str
+        @param toNative flag indicating to convert the path into
+            a native format
+        @type bool
+        """
+        self.setText(path, toNative=toNative)
+    
+    def currentText(self, toNative=True):
+        """
+        Public method to get the current path.
+        
+        @param toNative flag indicating to convert the path into
+            a native format
+        @type bool
+        @return current path
+        @rtype str
+        """
+        return self.text(toNative=toNative)
+    
+    def setPath(self, path, toNative=True):
+        """
+        Public method to set the current path.
+        
+        @param path path to be set
+        @type str
+        @param toNative flag indicating to convert the path into
+            a native format
+        @type bool
+        """
+        self.setText(path, toNative=toNative)
+    
+    def path(self, toNative=True):
+        """
+        Public method to get the current path.
+        
+        @param toNative flag indicating to convert the path into
+            a native format
+        @type bool
+        @return current path
+        @rtype str
+        """
+        return self.text(toNative=toNative)
+    
+    def paths(self, toNative=True):
+        """
+        Public method to get the list of entered paths.
+        
+        @param toNative flag indicating to convert the path into
+            a native format
+        @type bool
+        @return entered paths
+        @rtype list of str
+        """
+        if self.__mode == EricPathPickerModes.OPEN_FILES_MODE:
+            return self.path(toNative=toNative).split(";")
+        else:
+            return [self.path(toNative=toNative)]
+    
+    def firstPath(self, toNative=True):
+        """
+        Public method to get the first path of a list of entered paths.
+        
+        @param toNative flag indicating to convert the path into
+            a native format
+        @type bool
+        @return first path
+        @rtype str
+        """
+        return self.paths(toNative=toNative)[0]
+    
+    def lastPath(self, toNative=True):
+        """
+        Public method to get the last path of a list of entered paths.
+        
+        @param toNative flag indicating to convert the path into
+            a native format
+        @type bool
+        @return last path
+        @rtype str
+        """
+        return self.paths(toNative=toNative)[-1]
+    
+    def setEditorEnabled(self, enable):
+        """
+        Public method to set the path editor's enabled state.
+        
+        @param enable flag indicating the enable state
+        @type bool
+        """
+        if enable != self._editorEnabled:
+            self._editorEnabled = enable
+            self._editor.setEnabled(enable)
+    
+    def editorEnabled(self):
+        """
+        Public method to get the path editor's enabled state.
+        
+        @return flag indicating the enabled state
+        @rtype bool
+        """
+        return self._editorEnabled
+    
+    def setDefaultDirectory(self, directory):
+        """
+        Public method to set the default directory.
+        
+        @param directory default directory
+        @type str
+        """
+        self.__defaultDirectory = directory
+    
+    def defaultDirectory(self):
+        """
+        Public method to get the default directory.
+        
+        @return default directory
+        @rtype str
+        """
+        return self.__defaultDirectory
+    
+    def setWindowTitle(self, title):
+        """
+        Public method to set the path picker dialog window title.
+        
+        @param title window title
+        @type str
+        """
+        self.__windowTitle = title
+    
+    def windowTitle(self):
+        """
+        Public method to get the path picker dialog's window title.
+        
+        @return window title
+        @rtype str
+        """
+        return self.__windowTitle
+    
+    def setFilters(self, filters):
+        """
+        Public method to set the filters for the path picker dialog.
+        
+        Note: Multiple filters must be separated by ';;'.
+        
+        @param filters string containing the file filters
+        @type str
+        """
+        self.__filters = filters
+    
+    def filters(self):
+        """
+        Public methods to get the filter string.
+        
+        @return filter string
+        @rtype str
+        """
+        return self.__filters
+    
+    def setNameFilters(self, filters):
+        """
+        Public method to set the name filters for the completer.
+        
+        @param filters list of file name filters
+        @type list of str
+        """
+        if self._completer:
+            self._completer.model().setNameFilters(filters)
+    
+    def setButtonToolTip(self, tooltip):
+        """
+        Public method to set the tool button tool tip.
+        
+        @param tooltip text to be set as a tool tip
+        @type str
+        """
+        self.__button.setToolTip(tooltip)
+    
+    def buttonToolTip(self):
+        """
+        Public method to get the tool button tool tip.
+        
+        @return tool tip text
+        @rtype str
+        """
+        return self.__button.toolTip()
+    
+    def setEditorToolTip(self, tooltip):
+        """
+        Public method to set the editor tool tip.
+        
+        @param tooltip text to be set as a tool tip
+        @type str
+        """
+        self._editor.setToolTip(tooltip)
+    
+    def editorToolTip(self):
+        """
+        Public method to get the editor tool tip.
+        
+        @return tool tip text
+        @rtype str
+        """
+        return self._editor.toolTip()
+    
+    def __showPathPickerDialog(self):
+        """
+        Private slot to show the path picker dialog.
+        """
+        if self.__mode == EricPathPickerModes.NO_MODE:
+            return
+        
+        if self.__mode == EricPathPickerModes.CUSTOM_MODE:
+            self.pickerButtonClicked.emit()
+            return
+        
+        self.aboutToShowPathPickerDialog.emit()
+        
+        windowTitle = self.__windowTitle
+        if not windowTitle:
+            if self.__mode == EricPathPickerModes.OPEN_FILE_MODE:
+                windowTitle = self.tr("Choose a file to open")
+            elif self.__mode == EricPathPickerModes.OPEN_FILES_MODE:
+                windowTitle = self.tr("Choose files to open")
+            elif self.__mode in [
+                EricPathPickerModes.SAVE_FILE_MODE,
+                    EricPathPickerModes.SAVE_FILE_ENSURE_EXTENSION_MODE,
+                    EricPathPickerModes.SAVE_FILE_OVERWRITE_MODE]:
+                windowTitle = self.tr("Choose a file to save")
+            elif self.__mode == EricPathPickerModes.DIRECTORY_MODE:
+                windowTitle = self.tr("Choose a directory")
+        
+        directory = self._editorText()
+        if not directory and self.__defaultDirectory:
+            directory = self.__defaultDirectory
+        directory = (
+            os.path.expanduser(directory.split(";")[0])
+            if self.__mode == EricPathPickerModes.OPEN_FILES_MODE else
+            os.path.expanduser(directory)
+        )
+        if not os.path.isabs(directory) and self.__defaultDirectory:
+            directory = os.path.join(self.__defaultDirectory, directory)
+        directory = QDir.fromNativeSeparators(directory)
+        
+        if self.__mode == EricPathPickerModes.OPEN_FILE_MODE:
+            path = EricFileDialog.getOpenFileName(
+                self,
+                windowTitle,
+                directory,
+                self.__filters)
+            path = QDir.toNativeSeparators(path)
+        elif self.__mode == EricPathPickerModes.OPEN_FILES_MODE:
+            paths = EricFileDialog.getOpenFileNames(
+                self,
+                windowTitle,
+                directory,
+                self.__filters)
+            path = ";".join([QDir.toNativeSeparators(path)
+                             for path in paths])
+        elif self.__mode == EricPathPickerModes.SAVE_FILE_MODE:
+            path = EricFileDialog.getSaveFileName(
+                self,
+                windowTitle,
+                directory,
+                self.__filters,
+                EricFileDialog.DontConfirmOverwrite)
+            path = QDir.toNativeSeparators(path)
+        elif self.__mode == EricPathPickerModes.SAVE_FILE_ENSURE_EXTENSION_MODE:
+            path, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
+                self,
+                windowTitle,
+                directory,
+                self.__filters,
+                None,
+                EricFileDialog.DontConfirmOverwrite)
+            path = QDir.toNativeSeparators(path)
+            if path:
+                ext = QFileInfo(path).suffix()
+                if not ext:
+                    ex = selectedFilter.split("(*")[1].split(")")[0]
+                    if ex:
+                        path += ex
+        elif self.__mode == EricPathPickerModes.SAVE_FILE_OVERWRITE_MODE:
+            path = EricFileDialog.getSaveFileName(
+                self,
+                windowTitle,
+                directory,
+                self.__filters)
+            path = QDir.toNativeSeparators(path)
+        elif self.__mode == EricPathPickerModes.DIRECTORY_MODE:
+            path = EricFileDialog.getExistingDirectory(
+                self,
+                windowTitle,
+                directory,
+                EricFileDialog.ShowDirsOnly)
+            path = QDir.toNativeSeparators(path)
+            while path.endswith(os.sep):
+                path = path[:-1]
+        elif self.__mode == EricPathPickerModes.DIRECTORY_SHOW_FILES_MODE:
+            path = EricFileDialog.getExistingDirectory(
+                self,
+                windowTitle,
+                directory,
+                EricFileDialog.DontUseNativeDialog)
+            path = QDir.toNativeSeparators(path)
+            while path.endswith(os.sep):
+                path = path[:-1]
+        
+        if path:
+            self._setEditorText(path)
+            self.pathSelected.emit(path)
+    
+    def setReadOnly(self, readOnly):
+        """
+        Public method to set the path picker to read only mode.
+        
+        @param readOnly flag indicating read only mode
+        @type bool
+        """
+        try:
+            self._editor.setReadOnly(readOnly)
+        except AttributeError:
+            self._editor.setEditable(not readOnly)
+        self.setPickerEnabled(not readOnly)
+    
+    def isReadOnly(self):
+        """
+        Public method to check the path picker for read only mode.
+        
+        @return flg indicating read only mode
+        @rtype bool
+        """
+        try:
+            return self._editor.isReadOnly()
+        except AttributeError:
+            return not self._editor.isEditable()
+    
+    ##################################################################
+    ## Methods below emulate some of the QComboBox API
+    ##################################################################
+    
+    def addItems(self, pathsList):
+        """
+        Public method to add paths to the current list.
+        
+        @param pathsList list of paths to add
+        @type list of str
+        """
+        self._editor.addItems(pathsList)
+    
+    def addItem(self, path):
+        """
+        Public method to add a paths to the current list.
+        
+        @param path path to add
+        @type str
+        """
+        self._editor.addItem(path)
+    
+    def setPathsList(self, pathsList):
+        """
+        Public method to set the paths list.
+        
+        @param pathsList list of paths
+        @type list of str
+        """
+        self.clear()
+        self.addItems(pathsList)
+    
+    def setCurrentIndex(self, index):
+        """
+        Public slot to set the current index.
+        
+        @param index index of the item to set current
+        @type int
+        """
+        self._editor.setCurrentIndex(index)
+    
+    def setInsertPolicy(self, policy):
+        """
+        Public method to set the insertion policy of the combo box.
+        
+        @param policy insertion policy
+        @type QComboBox.InsertPolicy
+        """
+        self._editor.setInsertPolicy(policy)
+    
+    def setSizeAdjustPolicy(self, policy):
+        """
+        Public method to set the size adjust policy of the combo box.
+        
+        @param policy size adjust policy
+        @type QComboBox.SizeAdjustPolicy
+        """
+        self._editor.setSizeAdjustPolicy(policy)
+
+
+class EricPathPicker(EricPathPickerBase):
+    """
+    Class implementing a path picker widget consisting of a line edit and a
+    tool button to open a file dialog.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent, useLineEdit=True)
+
+
+class EricComboPathPicker(EricPathPickerBase):
+    """
+    Class implementing a path picker widget consisting of a combobox and a
+    tool button to open a file dialog.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent, useLineEdit=False)
+    
+    def getPathItems(self):
+        """
+        Public method to get the list of remembered paths.
+        
+        @return list od remembered paths
+        @rtype list of str
+        """
+        paths = []
+        for index in range(self._editor.count()):
+            paths.append(self._editor.itemText(index))
+        return paths
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricPathPickerDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,162 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2018 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to enter a file system path using a file picker.
+"""
+
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel
+
+from .EricPathPicker import EricPathPicker, EricPathPickerModes
+
+
+class EricPathPickerDialog(QDialog):
+    """
+    Class implementing a dialog to enter a file system path using a file
+    picker.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        
+        self.setMinimumWidth(400)
+        
+        self.__layout = QVBoxLayout(self)
+        
+        self.__label = QLabel(self)
+        self.__label.setWordWrap(True)
+        
+        self.__pathPicker = EricPathPicker(self)
+        self.__buttonBox = QDialogButtonBox(
+            QDialogButtonBox.StandardButton.Cancel |
+            QDialogButtonBox.StandardButton.Ok, self)
+        
+        self.__layout.addWidget(self.__label)
+        self.__layout.addWidget(self.__pathPicker)
+        self.__layout.addWidget(self.__buttonBox)
+        
+        self.__buttonBox.accepted.connect(self.accept)
+        self.__buttonBox.rejected.connect(self.reject)
+    
+    def setLabelText(self, text):
+        """
+        Public method to set the label text.
+        
+        @param text label text
+        @type str
+        """
+        self.__label.setText(text)
+    
+    def setTitle(self, title):
+        """
+        Public method to set the window title.
+        
+        @param title window title
+        @type str
+        """
+        self.setWindowTitle(title)
+        self.__pathPicker.setWindowTitle(title)
+    
+    def setPickerMode(self, mode):
+        """
+        Public method to set the mode of the path picker.
+        
+        @param mode picker mode
+        @type EricPathPickerModes
+        """
+        self.__pathPicker.setMode(mode)
+    
+    def setPickerPath(self, path):
+        """
+        Public method to set the path of the path picker.
+        
+        @param path path to be set
+        @type str
+        """
+        self.__pathPicker.setPath(path)
+    
+    def setDefaultDirectory(self, directory):
+        """
+        Public method to set the default directory of the path picker.
+        
+        @param directory default directory
+        @type str
+        """
+        self.__pathPicker.setDefaultDirectory(directory)
+    
+    def setPickerFilters(self, filters):
+        """
+        Public method to set the filters of the path picker.
+        
+        Note: Multiple filters must be separated by ';;'.
+        
+        @param filters string containing the file filters
+        @type str
+        """
+        self.__pathPicker.setFilters(filters)
+    
+    def getPath(self):
+        """
+        Public method to get the current path.
+        
+        @return current path
+        @rtype str
+        """
+        return self.__pathPicker.path()
+
+
+def getPath(parent, title, label, mode=EricPathPickerModes.OPEN_FILE_MODE,
+            path="", defaultDirectory="", filters=None):
+    """
+    Function to get a file or directory path from the user.
+    
+    @param parent reference to the parent widget
+    @type QWidget
+    @param title title of the dialog
+    @type str
+    @param label text to be shown above the path picker
+    @type str
+    @param mode mode of the path picker
+    @type EricPathPickerModes
+    @param path initial path to be shown
+    @type str
+    @param defaultDirectory default directory of the path picker selection
+        dialog
+    @type str
+    @param filters list of file filters
+    @type list of str
+    @return tuple containing the entered path and a flag indicating that the
+        user pressed the OK button
+    @rtype tuple of (str, bool)
+    """
+    # step 1: setup of the dialog
+    dlg = EricPathPickerDialog(parent)
+    if title:
+        dlg.setTitle(title)
+    if label:
+        dlg.setLabelText(label)
+    dlg.setPickerMode(mode)
+    if path:
+        dlg.setPickerPath(path)
+    if defaultDirectory:
+        dlg.setDefaultDirectory(defaultDirectory)
+    if filters is not None and len(filters) > 0:
+        dlg.setPickerFilters(";;".join(filters))
+    
+    # step 2: show the dialog and get the result
+    if dlg.exec() == QDialog.DialogCode.Accepted:
+        ok = True
+        path = dlg.getPath().strip()
+    else:
+        ok = False
+        path = ""
+    
+    # step 3: return the result
+    return path, ok
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricPlainTextDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2020 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to show some plain text.
+"""
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtGui import QGuiApplication
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox
+
+from .Ui_EricPlainTextDialog import Ui_EricPlainTextDialog
+
+
+class EricPlainTextDialog(QDialog, Ui_EricPlainTextDialog):
+    """
+    Class implementing a dialog to show some plain text.
+    """
+    def __init__(self, title="", text="", parent=None):
+        """
+        Constructor
+        
+        @param title title of the window
+        @type str
+        @param text text to be shown
+        @type str
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        self.copyButton = self.buttonBox.addButton(
+            self.tr("Copy to Clipboard"),
+            QDialogButtonBox.ButtonRole.ActionRole)
+        self.copyButton.clicked.connect(self.on_copyButton_clicked)
+        
+        self.setWindowTitle(title)
+        self.textEdit.setPlainText(text)
+    
+    @pyqtSlot()
+    def on_copyButton_clicked(self):
+        """
+        Private slot to copy the text to the clipboard.
+        """
+        txt = self.textEdit.toPlainText()
+        cb = QGuiApplication.clipboard()
+        cb.setText(txt)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricPlainTextDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EricPlainTextDialog</class>
+ <widget class="QDialog" name="EricPlainTextDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>500</width>
+    <height>400</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QPlainTextEdit" name="textEdit">
+     <property name="readOnly">
+      <bool>true</bool>
+     </property>
+     <property name="textInteractionFlags">
+      <set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Close</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>EricPlainTextDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>EricPlainTextDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricProcessDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,314 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2019 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog starting a process and showing its output.
+"""
+
+import os
+import re
+
+from PyQt6.QtCore import (
+    QProcess, QTimer, pyqtSlot, Qt, QCoreApplication, QProcessEnvironment
+)
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QLineEdit
+
+from EricWidgets import EricMessageBox
+
+from .Ui_EricProcessDialog import Ui_EricProcessDialog
+
+from Globals import strToQByteArray
+import Preferences
+
+
+class EricProcessDialog(QDialog, Ui_EricProcessDialog):
+    """
+    Class implementing a dialog starting a process and showing its output.
+    
+    It starts a QProcess and displays a dialog that shows the output of the
+    process. The dialog is modal, which causes a synchronized execution of
+    the process.
+    """
+    def __init__(self, outputTitle="", windowTitle="", showProgress=False,
+                 parent=None):
+        """
+        Constructor
+        
+        @param outputTitle title for the output group
+        @type str
+        @param windowTitle title of the dialog
+        @type str
+        @param showProgress flag indicating to show a progress bar
+        @type bool
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Close).setEnabled(False)
+        self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Cancel).setDefault(True)
+        
+        font = Preferences.getEditorOtherFonts("MonospacedFont")
+        self.resultbox.setFontFamily(font.family())
+        self.resultbox.setFontPointSize(font.pointSize())
+        self.errors.setFontFamily(font.family())
+        self.errors.setFontPointSize(font.pointSize())
+        
+        if windowTitle:
+            self.setWindowTitle(windowTitle)
+        if outputTitle:
+            self.outputGroup.setTitle(outputTitle)
+        self.__showProgress = showProgress
+        self.progressBar.setVisible(self.__showProgress)
+        
+        self.__process = None
+        self.__progressRe = re.compile(r"""(\d{1,3})\s*%""")
+        
+        self.show()
+        QCoreApplication.processEvents()
+    
+    def __finish(self):
+        """
+        Private slot called when the process finished or the user pressed
+        the button.
+        """
+        if (
+            self.__process is not None and
+            self.__process.state() != QProcess.ProcessState.NotRunning
+        ):
+            self.__process.terminate()
+            QTimer.singleShot(2000, self.__process.kill)
+            self.__process.waitForFinished(3000)
+        
+        self.inputGroup.setEnabled(False)
+        self.inputGroup.hide()
+        
+        self.__process = None
+        
+        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.Close).setFocus(
+            Qt.FocusReason.OtherFocusReason)
+    
+    def on_buttonBox_clicked(self, button):
+        """
+        Private slot called by a button of the button box clicked.
+        
+        @param button button that was clicked
+        @type QAbstractButton
+        """
+        if button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Close
+        ):
+            self.close()
+        elif button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Cancel
+        ):
+            self.statusLabel.setText(self.tr("Process canceled."))
+            self.__finish()
+    
+    def __procFinished(self, exitCode, exitStatus):
+        """
+        Private slot connected to the finished signal.
+        
+        @param exitCode exit code of the process
+        @type int
+        @param exitStatus exit status of the process
+        @type QProcess.ExitStatus
+        """
+        self.__normal = (
+            (exitStatus == QProcess.ExitStatus.NormalExit) and
+            (exitCode == 0)
+        )
+        if self.__normal:
+            self.statusLabel.setText(self.tr("Process finished successfully."))
+        elif exitStatus == QProcess.ExitStatus.CrashExit:
+            self.statusLabel.setText(self.tr("Process crashed."))
+        else:
+            self.statusLabel.setText(
+                self.tr("Process finished with exit code {0}")
+                .format(exitCode))
+        self.__finish()
+    
+    def startProcess(self, program, args, workingDir=None, showArgs=True,
+                     environment=None):
+        """
+        Public slot used to start the process.
+        
+        @param program path of the program to be executed
+        @type str
+        @param args list of arguments for the process
+        @type list of str
+        @param workingDir working directory for the process
+        @type str
+        @param showArgs flag indicating to show the arguments
+        @type bool
+        @param environment dictionary of environment settings to add
+            or change for the process
+        @type dict
+        @return flag indicating a successful start of the process
+        @rtype bool
+        """
+        self.errorGroup.hide()
+        self.__normal = False
+        self.__intercept = False
+        
+        if environment is None:
+            environment = {}
+        
+        if showArgs:
+            self.resultbox.append(program + ' ' + ' '.join(args))
+            self.resultbox.append('')
+        
+        self.__process = QProcess()
+        if environment:
+            env = QProcessEnvironment.systemEnvironment()
+            for key, value in environment.items():
+                env.insert(key, value)
+            self.__process.setProcessEnvironment(env)
+        
+        self.__process.finished.connect(self.__procFinished)
+        self.__process.readyReadStandardOutput.connect(self.__readStdout)
+        self.__process.readyReadStandardError.connect(self.__readStderr)
+        
+        if workingDir:
+            self.__process.setWorkingDirectory(workingDir)
+        
+        self.__process.start(program, args)
+        procStarted = self.__process.waitForStarted(10000)
+        if not procStarted:
+            self.buttonBox.setFocus()
+            self.inputGroup.setEnabled(False)
+            EricMessageBox.critical(
+                self,
+                self.tr('Process Generation Error'),
+                self.tr(
+                    '<p>The process <b>{0}</b> could not be started.</p>'
+                ).format(program))
+        else:
+            self.inputGroup.setEnabled(True)
+            self.inputGroup.show()
+        
+        return procStarted
+    
+    def normalExit(self):
+        """
+        Public method to check for a normal process termination.
+        
+        @return flag indicating normal process termination
+        @rtype bool
+        """
+        return self.__normal
+    
+    def normalExitWithoutErrors(self):
+        """
+        Public method to check for a normal process termination without
+        error messages.
+        
+        @return flag indicating normal process termination
+        @rtype bool
+        """
+        return self.__normal and self.errors.toPlainText() == ""
+    
+    def __readStdout(self):
+        """
+        Private slot to handle the readyReadStandardOutput signal.
+        
+        It reads the output of the process and inserts it into the
+        output pane.
+        """
+        if self.__process is not None:
+            s = str(self.__process.readAllStandardOutput(),
+                    Preferences.getSystem("IOEncoding"),
+                    'replace')
+            if self.__showProgress:
+                match = self.__progressRe.search(s)
+                if match:
+                    progress = int(match.group(1))
+                    self.progressBar.setValue(progress)
+                    if not s.endswith("\n"):
+                        s += "\n"
+            self.resultbox.insertPlainText(s)
+            self.resultbox.ensureCursorVisible()
+            
+            QCoreApplication.processEvents()
+    
+    def __readStderr(self):
+        """
+        Private slot to handle the readyReadStandardError signal.
+        
+        It reads the error output of the process and inserts it into the
+        error pane.
+        """
+        if self.__process is not None:
+            s = str(self.__process.readAllStandardError(),
+                    Preferences.getSystem("IOEncoding"),
+                    'replace')
+            
+            self.errorGroup.show()
+            self.errors.insertPlainText(s)
+            self.errors.ensureCursorVisible()
+            
+            QCoreApplication.processEvents()
+    
+    def on_passwordCheckBox_toggled(self, isOn):
+        """
+        Private slot to handle the password checkbox toggled.
+        
+        @param isOn flag indicating the status of the check box
+        @type bool
+        """
+        if isOn:
+            self.input.setEchoMode(QLineEdit.EchoMode.Password)
+        else:
+            self.input.setEchoMode(QLineEdit.EchoMode.Normal)
+    
+    @pyqtSlot()
+    def on_sendButton_clicked(self):
+        """
+        Private slot to send the input to the git process.
+        """
+        inputTxt = self.input.text()
+        inputTxt += os.linesep
+        
+        if self.passwordCheckBox.isChecked():
+            self.errors.insertPlainText(os.linesep)
+            self.errors.ensureCursorVisible()
+        else:
+            self.errors.insertPlainText(inputTxt)
+            self.errors.ensureCursorVisible()
+        
+        self.__process.write(strToQByteArray(inputTxt))
+        
+        self.passwordCheckBox.setChecked(False)
+        self.input.clear()
+    
+    def on_input_returnPressed(self):
+        """
+        Private slot to handle the press of the return key in the input field.
+        """
+        self.__intercept = True
+        self.on_sendButton_clicked()
+    
+    def keyPressEvent(self, evt):
+        """
+        Protected slot to handle a key press event.
+        
+        @param evt the key press event (QKeyEvent)
+        """
+        if self.__intercept:
+            self.__intercept = False
+            evt.accept()
+            return
+        
+        super().keyPressEvent(evt)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricProcessDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EricProcessDialog</class>
+ <widget class="QDialog" name="EricProcessDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>600</width>
+    <height>500</height>
+   </rect>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QGroupBox" name="outputGroup">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>2</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string>Output</string>
+     </property>
+     <layout class="QVBoxLayout">
+      <item>
+       <widget class="QTextEdit" name="resultbox">
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+        <property name="acceptRichText">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QProgressBar" name="progressBar">
+     <property name="value">
+      <number>0</number>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QLabel" name="statusLabel"/>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="errorGroup">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>1</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string>Errors</string>
+     </property>
+     <layout class="QVBoxLayout">
+      <item>
+       <widget class="QTextEdit" name="errors">
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+        <property name="acceptRichText">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="inputGroup">
+     <property name="title">
+      <string>Input</string>
+     </property>
+     <layout class="QGridLayout">
+      <item row="1" column="1">
+       <spacer>
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeType">
+         <enum>QSizePolicy::Expanding</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>327</width>
+          <height>29</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="1" column="2">
+       <widget class="QPushButton" name="sendButton">
+        <property name="toolTip">
+         <string>Press to send the input to the running process</string>
+        </property>
+        <property name="text">
+         <string>&amp;Send</string>
+        </property>
+        <property name="shortcut">
+         <string>Alt+S</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0" colspan="3">
+       <widget class="QLineEdit" name="input">
+        <property name="toolTip">
+         <string>Enter data to be sent to the running process</string>
+        </property>
+        <property name="clearButtonEnabled">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QCheckBox" name="passwordCheckBox">
+        <property name="toolTip">
+         <string>Select to switch the input field to password mode</string>
+        </property>
+        <property name="text">
+         <string>&amp;Password Mode</string>
+        </property>
+        <property name="shortcut">
+         <string>Alt+P</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Close</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>resultbox</tabstop>
+  <tabstop>errors</tabstop>
+  <tabstop>input</tabstop>
+  <tabstop>passwordCheckBox</tabstop>
+  <tabstop>sendButton</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricProgressDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2013 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a progress dialog allowing a customized progress bar label.
+"""
+
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QProgressBar, QProgressDialog
+
+
+class EricProgressDialog(QProgressDialog):
+    """
+    Class implementing a progress dialog allowing a customized progress bar
+    label.
+    """
+    def __init__(self, labelText, cancelButtonText, minimum, maximum,
+                 labelFormat=None, parent=None, flags=None):
+        """
+        Constructor
+        
+        @param labelText text of the dialog label (string)
+        @param cancelButtonText text of the cancel button (string)
+        @param minimum minimum value (integer)
+        @param maximum maximum value (integer)
+        @param labelFormat label format of the progress bar (string)
+        @param parent reference to the parent widget (QWidget)
+        @param flags window flags of the dialog (Qt.WindowFlags)
+        """
+        if flags is None:
+            flags = Qt.WindowType(0)
+        super().__init__(
+            labelText, cancelButtonText, minimum, maximum, parent, flags)
+        
+        self.__progressBar = QProgressBar(self)
+        self.__progressBar.setMinimum(minimum)
+        self.__progressBar.setMaximum(maximum)
+        if labelFormat:
+            self.__progressBar.setFormat(labelFormat)
+        
+        self.setBar(self.__progressBar)
+    
+    def format(self):
+        """
+        Public method to get the progress bar format.
+        
+        @return progress bar format (string)
+        """
+        return self.__progressBar.format()
+    
+    def setFormat(self, labelFormat):
+        """
+        Public method to set the progress bar format.
+        
+        @param labelFormat progress bar format (string)
+        """
+        self.__progressBar.setFormat(labelFormat)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricSideBar.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,706 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a sidebar class.
+"""
+
+import enum
+import json
+
+from PyQt6.QtCore import QEvent, QSize, Qt, QTimer
+from PyQt6.QtWidgets import (
+    QTabBar, QWidget, QStackedWidget, QBoxLayout, QToolButton, QSizePolicy
+)
+
+from EricWidgets.EricApplication import ericApp
+
+import UI.PixmapCache
+
+
+class EricSideBarSide(enum.Enum):
+    """
+    Class defining the sidebar sides.
+    """
+    NORTH = 0
+    EAST = 1
+    SOUTH = 2
+    WEST = 3
+
+
+class EricSideBar(QWidget):
+    """
+    Class implementing a sidebar with a widget area, that is hidden or shown,
+    if the current tab is clicked again.
+    """
+    Version = 2
+    
+    def __init__(self, orientation=None, delay=200, parent=None):
+        """
+        Constructor
+        
+        @param orientation orientation of the sidebar widget
+        @type EricSideBarSide
+        @param delay value for the expand/shrink delay in milliseconds
+        @type int
+        @param parent parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        
+        self.__tabBar = QTabBar()
+        self.__tabBar.setDrawBase(True)
+        self.__tabBar.setShape(QTabBar.Shape.RoundedNorth)
+        self.__tabBar.setUsesScrollButtons(True)
+        self.__tabBar.setDrawBase(False)
+        self.__stackedWidget = QStackedWidget(self)
+        self.__stackedWidget.setContentsMargins(0, 0, 0, 0)
+        self.__autoHideButton = QToolButton()
+        self.__autoHideButton.setCheckable(True)
+        self.__autoHideButton.setIcon(
+            UI.PixmapCache.getIcon("autoHideOff"))
+        self.__autoHideButton.setChecked(True)
+        self.__autoHideButton.setToolTip(
+            self.tr("Deselect to activate automatic collapsing"))
+        self.barLayout = QBoxLayout(QBoxLayout.Direction.LeftToRight)
+        self.barLayout.setContentsMargins(0, 0, 0, 0)
+        self.layout = QBoxLayout(QBoxLayout.Direction.TopToBottom)
+        self.layout.setContentsMargins(0, 0, 0, 0)
+        self.layout.setSpacing(0)
+        self.barLayout.addWidget(self.__autoHideButton)
+        self.barLayout.addWidget(self.__tabBar)
+        self.layout.addLayout(self.barLayout)
+        self.layout.addWidget(self.__stackedWidget)
+        self.setLayout(self.layout)
+        
+        # initialize the delay timer
+        self.__actionMethod = None
+        self.__delayTimer = QTimer(self)
+        self.__delayTimer.setSingleShot(True)
+        self.__delayTimer.setInterval(delay)
+        self.__delayTimer.timeout.connect(self.__delayedAction)
+        
+        self.__minimized = False
+        self.__minSize = 0
+        self.__maxSize = 0
+        self.__bigSize = QSize()
+        
+        self.splitter = None
+        self.splitterSizes = []
+        
+        self.__hasFocus = False
+        # flag storing if this widget or any child has the focus
+        self.__autoHide = False
+        
+        self.__tabBar.installEventFilter(self)
+        
+        self.__orientation = EricSideBarSide.NORTH
+        if orientation is None:
+            orientation = EricSideBarSide.NORTH
+        self.setOrientation(orientation)
+        
+        self.__tabBar.currentChanged[int].connect(
+            self.__stackedWidget.setCurrentIndex)
+        ericApp().focusChanged.connect(self.__appFocusChanged)
+        self.__autoHideButton.toggled[bool].connect(self.__autoHideToggled)
+    
+    def setSplitter(self, splitter):
+        """
+        Public method to set the splitter managing the sidebar.
+        
+        @param splitter reference to the splitter (QSplitter)
+        """
+        self.splitter = splitter
+        self.splitter.splitterMoved.connect(self.__splitterMoved)
+        self.splitter.setChildrenCollapsible(False)
+        index = self.splitter.indexOf(self)
+        self.splitter.setCollapsible(index, False)
+    
+    def __splitterMoved(self, pos, index):
+        """
+        Private slot to react on splitter moves.
+        
+        @param pos new position of the splitter handle (integer)
+        @param index index of the splitter handle (integer)
+        """
+        if self.splitter:
+            self.splitterSizes = self.splitter.sizes()
+    
+    def __delayedAction(self):
+        """
+        Private slot to handle the firing of the delay timer.
+        """
+        if self.__actionMethod is not None:
+            self.__actionMethod()
+    
+    def setDelay(self, delay):
+        """
+        Public method to set the delay value for the expand/shrink delay in
+        milliseconds.
+        
+        @param delay value for the expand/shrink delay in milliseconds
+            (integer)
+        """
+        self.__delayTimer.setInterval(delay)
+    
+    def delay(self):
+        """
+        Public method to get the delay value for the expand/shrink delay in
+        milliseconds.
+        
+        @return value for the expand/shrink delay in milliseconds (integer)
+        """
+        return self.__delayTimer.interval()
+    
+    def __cancelDelayTimer(self):
+        """
+        Private method to cancel the current delay timer.
+        """
+        self.__delayTimer.stop()
+        self.__actionMethod = None
+    
+    def shrink(self):
+        """
+        Public method to record a shrink request.
+        """
+        self.__delayTimer.stop()
+        self.__actionMethod = self.__shrinkIt
+        self.__delayTimer.start()
+   
+    def __shrinkIt(self):
+        """
+        Private method to shrink the sidebar.
+        """
+        self.__minimized = True
+        self.__bigSize = self.size()
+        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
+            self.__minSize = self.minimumSizeHint().height()
+            self.__maxSize = self.maximumHeight()
+        else:
+            self.__minSize = self.minimumSizeHint().width()
+            self.__maxSize = self.maximumWidth()
+        if self.splitter:
+            self.splitterSizes = self.splitter.sizes()
+        
+        self.__stackedWidget.hide()
+        
+        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
+            self.setFixedHeight(self.__tabBar.minimumSizeHint().height())
+        else:
+            self.setFixedWidth(self.__tabBar.minimumSizeHint().width())
+        
+        self.__actionMethod = None
+    
+    def expand(self):
+        """
+        Public method to record a expand request.
+        """
+        self.__delayTimer.stop()
+        self.__actionMethod = self.__expandIt
+        self.__delayTimer.start()
+    
+    def __expandIt(self):
+        """
+        Private method to expand the sidebar.
+        """
+        self.__minimized = False
+        self.__stackedWidget.show()
+        self.resize(self.__bigSize)
+        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
+            minSize = max(self.__minSize, self.minimumSizeHint().height())
+            self.setMinimumHeight(minSize)
+            self.setMaximumHeight(self.__maxSize)
+        else:
+            minSize = max(self.__minSize, self.minimumSizeHint().width())
+            self.setMinimumWidth(minSize)
+            self.setMaximumWidth(self.__maxSize)
+        if self.splitter:
+            self.splitter.setSizes(self.splitterSizes)
+        
+        self.__actionMethod = None
+    
+    def isMinimized(self):
+        """
+        Public method to check the minimized state.
+        
+        @return flag indicating the minimized state (boolean)
+        """
+        return self.__minimized
+    
+    def isAutoHiding(self):
+        """
+        Public method to check, if the auto hide function is active.
+        
+        @return flag indicating the state of auto hiding (boolean)
+        """
+        return self.__autoHide
+    
+    def eventFilter(self, obj, evt):
+        """
+        Public method to handle some events for the tabbar.
+        
+        @param obj reference to the object (QObject)
+        @param evt reference to the event object (QEvent)
+        @return flag indicating, if the event was handled (boolean)
+        """
+        if obj == self.__tabBar:
+            if evt.type() == QEvent.Type.MouseButtonPress:
+                pos = evt.position().toPoint()
+                for i in range(self.__tabBar.count()):
+                    if self.__tabBar.tabRect(i).contains(pos):
+                        break
+                
+                if i == self.__tabBar.currentIndex():
+                    if self.isMinimized():
+                        self.expand()
+                    else:
+                        self.shrink()
+                    return True
+                elif self.isMinimized():
+                    self.expand()
+            elif evt.type() == QEvent.Type.Wheel:
+                delta = evt.angleDelta().y()
+                if delta > 0:
+                    self.prevTab()
+                else:
+                    self.nextTab()
+                return True
+        
+        return QWidget.eventFilter(self, obj, evt)
+    
+    def addTab(self, widget, iconOrLabel, label=None):
+        """
+        Public method to add a tab to the sidebar.
+        
+        @param widget reference to the widget to add (QWidget)
+        @param iconOrLabel reference to the icon or the label text of the tab
+            (QIcon, string)
+        @param label the labeltext of the tab (string) (only to be
+            used, if the second parameter is a QIcon)
+        """
+        if label:
+            index = self.__tabBar.addTab(iconOrLabel, label)
+            self.__tabBar.setTabToolTip(index, label)
+        else:
+            index = self.__tabBar.addTab(iconOrLabel)
+            self.__tabBar.setTabToolTip(index, iconOrLabel)
+        self.__stackedWidget.addWidget(widget)
+        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
+            self.__minSize = self.minimumSizeHint().height()
+        else:
+            self.__minSize = self.minimumSizeHint().width()
+    
+    def insertTab(self, index, widget, iconOrLabel, label=None):
+        """
+        Public method to insert a tab into the sidebar.
+        
+        @param index the index to insert the tab at (integer)
+        @param widget reference to the widget to insert (QWidget)
+        @param iconOrLabel reference to the icon or the labeltext of the tab
+            (QIcon, string)
+        @param label the labeltext of the tab (string) (only to be
+            used, if the second parameter is a QIcon)
+        """
+        if label:
+            index = self.__tabBar.insertTab(index, iconOrLabel, label)
+            self.__tabBar.setTabToolTip(index, label)
+        else:
+            index = self.__tabBar.insertTab(index, iconOrLabel)
+            self.__tabBar.setTabToolTip(index, iconOrLabel)
+        self.__stackedWidget.insertWidget(index, widget)
+        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
+            self.__minSize = self.minimumSizeHint().height()
+        else:
+            self.__minSize = self.minimumSizeHint().width()
+    
+    def removeTab(self, index):
+        """
+        Public method to remove a tab.
+        
+        @param index the index of the tab to remove (integer)
+        """
+        self.__stackedWidget.removeWidget(self.__stackedWidget.widget(index))
+        self.__tabBar.removeTab(index)
+        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
+            self.__minSize = self.minimumSizeHint().height()
+        else:
+            self.__minSize = self.minimumSizeHint().width()
+    
+    def clear(self):
+        """
+        Public method to remove all tabs.
+        """
+        while self.count() > 0:
+            self.removeTab(0)
+    
+    def prevTab(self):
+        """
+        Public slot used to show the previous tab.
+        """
+        ind = self.currentIndex() - 1
+        if ind == -1:
+            ind = self.count() - 1
+            
+        self.setCurrentIndex(ind)
+        self.currentWidget().setFocus()
+    
+    def nextTab(self):
+        """
+        Public slot used to show the next tab.
+        """
+        ind = self.currentIndex() + 1
+        if ind == self.count():
+            ind = 0
+            
+        self.setCurrentIndex(ind)
+        self.currentWidget().setFocus()
+    
+    def count(self):
+        """
+        Public method to get the number of tabs.
+        
+        @return number of tabs in the sidebar (integer)
+        """
+        return self.__tabBar.count()
+    
+    def currentIndex(self):
+        """
+        Public method to get the index of the current tab.
+        
+        @return index of the current tab (integer)
+        """
+        return self.__stackedWidget.currentIndex()
+    
+    def setCurrentIndex(self, index):
+        """
+        Public slot to set the current index.
+        
+        @param index the index to set as the current index (integer)
+        """
+        self.__tabBar.setCurrentIndex(index)
+        self.__stackedWidget.setCurrentIndex(index)
+        if self.isMinimized():
+            self.expand()
+    
+    def currentWidget(self):
+        """
+        Public method to get a reference to the current widget.
+        
+        @return reference to the current widget (QWidget)
+        """
+        return self.__stackedWidget.currentWidget()
+    
+    def setCurrentWidget(self, widget):
+        """
+        Public slot to set the current widget.
+        
+        @param widget reference to the widget to become the current widget
+            (QWidget)
+        """
+        self.__stackedWidget.setCurrentWidget(widget)
+        self.__tabBar.setCurrentIndex(self.__stackedWidget.currentIndex())
+        if self.isMinimized():
+            self.expand()
+    
+    def indexOf(self, widget):
+        """
+        Public method to get the index of the given widget.
+        
+        @param widget reference to the widget to get the index of (QWidget)
+        @return index of the given widget (integer)
+        """
+        return self.__stackedWidget.indexOf(widget)
+    
+    def isTabEnabled(self, index):
+        """
+        Public method to check, if a tab is enabled.
+        
+        @param index index of the tab to check (integer)
+        @return flag indicating the enabled state (boolean)
+        """
+        return self.__tabBar.isTabEnabled(index)
+    
+    def setTabEnabled(self, index, enabled):
+        """
+        Public method to set the enabled state of a tab.
+        
+        @param index index of the tab to set (integer)
+        @param enabled enabled state to set (boolean)
+        """
+        self.__tabBar.setTabEnabled(index, enabled)
+    
+    def orientation(self):
+        """
+        Public method to get the orientation of the sidebar.
+        
+        @return orientation of the sidebar
+        @rtype EricSideBarSide
+        """
+        return self.__orientation
+    
+    def setOrientation(self, orient):
+        """
+        Public method to set the orientation of the sidebar.
+
+        @param orient orientation of the sidebar
+        @type EricSideBarSide
+        """
+        if orient == EricSideBarSide.NORTH:
+            self.__tabBar.setShape(QTabBar.Shape.RoundedNorth)
+            self.__tabBar.setSizePolicy(
+                QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
+            self.barLayout.setDirection(QBoxLayout.Direction.LeftToRight)
+            self.layout.setDirection(QBoxLayout.Direction.TopToBottom)
+            self.layout.setAlignment(self.barLayout,
+                                     Qt.AlignmentFlag.AlignLeft)
+        elif orient == EricSideBarSide.EAST:
+            self.__tabBar.setShape(QTabBar.Shape.RoundedEast)
+            self.__tabBar.setSizePolicy(
+                QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding)
+            self.barLayout.setDirection(QBoxLayout.Direction.TopToBottom)
+            self.layout.setDirection(QBoxLayout.Direction.RightToLeft)
+            self.layout.setAlignment(self.barLayout, Qt.AlignmentFlag.AlignTop)
+        elif orient == EricSideBarSide.SOUTH:
+            self.__tabBar.setShape(QTabBar.Shape.RoundedSouth)
+            self.__tabBar.setSizePolicy(
+                QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
+            self.barLayout.setDirection(QBoxLayout.Direction.LeftToRight)
+            self.layout.setDirection(QBoxLayout.Direction.BottomToTop)
+            self.layout.setAlignment(self.barLayout,
+                                     Qt.AlignmentFlag.AlignLeft)
+        elif orient == EricSideBarSide.WEST:
+            self.__tabBar.setShape(QTabBar.Shape.RoundedWest)
+            self.__tabBar.setSizePolicy(
+                QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding)
+            self.barLayout.setDirection(QBoxLayout.Direction.TopToBottom)
+            self.layout.setDirection(QBoxLayout.Direction.LeftToRight)
+            self.layout.setAlignment(self.barLayout, Qt.AlignmentFlag.AlignTop)
+        self.__orientation = orient
+    
+    def tabIcon(self, index):
+        """
+        Public method to get the icon of a tab.
+        
+        @param index index of the tab (integer)
+        @return icon of the tab (QIcon)
+        """
+        return self.__tabBar.tabIcon(index)
+    
+    def setTabIcon(self, index, icon):
+        """
+        Public method to set the icon of a tab.
+        
+        @param index index of the tab (integer)
+        @param icon icon to be set (QIcon)
+        """
+        self.__tabBar.setTabIcon(index, icon)
+    
+    def tabText(self, index):
+        """
+        Public method to get the text of a tab.
+        
+        @param index index of the tab (integer)
+        @return text of the tab (string)
+        """
+        return self.__tabBar.tabText(index)
+    
+    def setTabText(self, index, text):
+        """
+        Public method to set the text of a tab.
+        
+        @param index index of the tab (integer)
+        @param text text to set (string)
+        """
+        self.__tabBar.setTabText(index, text)
+    
+    def tabToolTip(self, index):
+        """
+        Public method to get the tooltip text of a tab.
+        
+        @param index index of the tab (integer)
+        @return tooltip text of the tab (string)
+        """
+        return self.__tabBar.tabToolTip(index)
+    
+    def setTabToolTip(self, index, tip):
+        """
+        Public method to set the tooltip text of a tab.
+        
+        @param index index of the tab (integer)
+        @param tip tooltip text to set (string)
+        """
+        self.__tabBar.setTabToolTip(index, tip)
+    
+    def tabWhatsThis(self, index):
+        """
+        Public method to get the WhatsThis text of a tab.
+        
+        @param index index of the tab (integer)
+        @return WhatsThis text of the tab (string)
+        """
+        return self.__tabBar.tabWhatsThis(index)
+    
+    def setTabWhatsThis(self, index, text):
+        """
+        Public method to set the WhatsThis text of a tab.
+        
+        @param index index of the tab (integer)
+        @param text WhatsThis text to set (string)
+        """
+        self.__tabBar.setTabWhatsThis(index, text)
+    
+    def widget(self, index):
+        """
+        Public method to get a reference to the widget associated with a tab.
+        
+        @param index index of the tab (integer)
+        @return reference to the widget (QWidget)
+        """
+        return self.__stackedWidget.widget(index)
+    
+    def saveState(self):
+        """
+        Public method to save the state of the sidebar.
+        
+        @return saved state as a byte array (QByteArray)
+        """
+        if len(self.splitterSizes) == 0:
+            if self.splitter:
+                self.splitterSizes = self.splitter.sizes()
+            self.__bigSize = self.size()
+            if self.__orientation in (
+                EricSideBarSide.NORTH, EricSideBarSide.SOUTH
+            ):
+                self.__minSize = self.minimumSizeHint().height()
+                self.__maxSize = self.maximumHeight()
+            else:
+                self.__minSize = self.minimumSizeHint().width()
+                self.__maxSize = self.maximumWidth()
+        
+        dataDict = {
+            "version": self.Version,
+            "minimized": self.__minimized,
+            "big_size": [self.__bigSize.width(), self.__bigSize.height()],
+            "min_size": self.__minSize,
+            "max_size": self.__maxSize,
+            "splitter_sizes": self.splitterSizes,
+            "auto_hide": self.__autoHide
+        }
+        data = json.dumps(dataDict)
+        
+        return data
+    
+    def restoreState(self, state):
+        """
+        Public method to restore the state of the sidebar.
+        
+        @param state byte array containing the saved state (QByteArray)
+        @return flag indicating success (boolean)
+        """
+        if not isinstance(state, str) or state == "":
+            return False
+        
+        try:
+            stateDict = json.loads(state)
+        except json.JSONDecodeError:
+            return False
+        
+        if not stateDict:
+            return False
+        
+        if self.__orientation in (EricSideBarSide.NORTH, EricSideBarSide.SOUTH):
+            minSize = self.layout.minimumSize().height()
+            maxSize = self.maximumHeight()
+        else:
+            minSize = self.layout.minimumSize().width()
+            maxSize = self.maximumWidth()
+        
+        if stateDict["version"] == 2:
+            if stateDict["minimized"] and not self.__minimized:
+                self.shrink()
+            
+            self.__bigSize = QSize(*stateDict["big_size"])
+            self.__minSize = max(stateDict["min_size"], minSize)
+            self.__maxSize = max(stateDict["max_size"], maxSize)
+            self.splitterSizes = stateDict["splitter_sizes"]
+            
+            self.__autoHide = stateDict["auto_hide"]
+            self.__autoHideButton.setChecked(not self.__autoHide)
+            
+            if not stateDict["minimized"]:
+                self.expand()
+            
+            return True
+        
+        return False
+    
+    #######################################################################
+    ## methods below implement the autohide functionality
+    #######################################################################
+    
+    def __autoHideToggled(self, checked):
+        """
+        Private slot to handle the toggling of the autohide button.
+        
+        @param checked flag indicating the checked state of the button
+            (boolean)
+        """
+        self.__autoHide = not checked
+        if self.__autoHide:
+            self.__autoHideButton.setIcon(
+                UI.PixmapCache.getIcon("autoHideOn"))
+        else:
+            self.__autoHideButton.setIcon(
+                UI.PixmapCache.getIcon("autoHideOff"))
+    
+    def __appFocusChanged(self, old, now):
+        """
+        Private slot to handle a change of the focus.
+        
+        @param old reference to the widget, that lost focus (QWidget or None)
+        @param now reference to the widget having the focus (QWidget or None)
+        """
+        if isinstance(now, QWidget):
+            self.__hasFocus = self.isAncestorOf(now)
+            if (
+                self.__autoHide and
+                not self.__hasFocus and
+                not self.isMinimized()
+            ):
+                self.shrink()
+            elif self.__autoHide and self.__hasFocus and self.isMinimized():
+                self.expand()
+    
+    def enterEvent(self, event):
+        """
+        Protected method to handle the mouse entering this widget.
+        
+        @param event reference to the event (QEvent)
+        """
+        if self.__autoHide and self.isMinimized():
+            self.expand()
+        else:
+            self.__cancelDelayTimer()
+    
+    def leaveEvent(self, event):
+        """
+        Protected method to handle the mouse leaving this widget.
+        
+        @param event reference to the event (QEvent)
+        """
+        if self.__autoHide and not self.__hasFocus and not self.isMinimized():
+            self.shrink()
+        else:
+            self.__cancelDelayTimer()
+    
+    def shutdown(self):
+        """
+        Public method to shut down the object.
+        
+        This method does some preparations so the object can be deleted
+        properly. It disconnects from the focusChanged signal in order to
+        avoid trouble later on.
+        """
+        ericApp().focusChanged.disconnect(self.__appFocusChanged)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricSimpleHelpDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to show some help text.
+"""
+
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QDialog
+
+from .Ui_EricSimpleHelpDialog import Ui_EricSimpleHelpDialog
+
+
+class EricSimpleHelpDialog(QDialog, Ui_EricSimpleHelpDialog):
+    """
+    Class implementing a dialog to show some help text.
+    """
+    def __init__(self, title="", label="", helpStr="", parent=None):
+        """
+        Constructor
+        
+        @param title title of the window
+        @type str
+        @param label label for the help
+        @type str
+        @param helpStr HTML help text
+        @type str
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        self.setWindowFlags(Qt.WindowType.Window)
+        
+        self.setWindowTitle(title)
+        if label:
+            self.helpLabel.setText(label)
+        else:
+            self.helpLabel.hide()
+        self.helpEdit.setHtml(helpStr)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricSimpleHelpDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EricSimpleHelpDialog</class>
+ <widget class="QDialog" name="EricSimpleHelpDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>500</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QLabel" name="helpLabel"/>
+   </item>
+   <item>
+    <widget class="QTextBrowser" name="helpEdit">
+     <property name="tabChangesFocus">
+      <bool>true</bool>
+     </property>
+     <property name="readOnly">
+      <bool>true</bool>
+     </property>
+     <property name="textInteractionFlags">
+      <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
+     </property>
+     <property name="openExternalLinks">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Close</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>EricSimpleHelpDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>EricSimpleHelpDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricSingleApplication.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,186 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2004 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the single application server and client.
+"""
+
+import os
+
+from EricWidgets.EricApplication import ericApp
+
+from Toolbox.SingleApplication import (
+    SingleApplicationClient, SingleApplicationServer
+)
+
+import Utilities
+
+###########################################################################
+## define some module global stuff
+###########################################################################
+
+SAFile = "eric7"
+
+# define the protocol tokens
+SAOpenFile = 'OpenFile'
+SAOpenProject = 'OpenProject'
+SAOpenMultiProject = 'OpenMultiProject'
+SAArguments = 'Arguments'
+
+
+class EricSingleApplicationServer(SingleApplicationServer):
+    """
+    Class implementing the single application server embedded within the IDE.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        SingleApplicationServer.__init__(self, SAFile)
+
+    def handleCommand(self, command, arguments):
+        """
+        Public slot to handle the command sent by the client.
+        
+        @param command command sent by the client
+        @type str
+        @param arguments list of command arguments
+        @type list of str
+        """
+        if command == SAOpenFile:
+            self.__saOpenFile(arguments[0])
+            return
+
+        if command == SAOpenProject:
+            self.__saOpenProject(arguments[0])
+            return
+
+        if command == SAOpenMultiProject:
+            self.__saOpenMultiProject(arguments[0])
+            return
+
+        if command == SAArguments:
+            self.__saArguments(arguments[0])
+            return
+
+    def __saOpenFile(self, fname):
+        """
+        Private method used to handle the "Open File" command.
+        
+        @param fname filename to be opened (string)
+        """
+        ericApp().getObject("ViewManager").openSourceFile(fname)
+        
+    def __saOpenProject(self, pfname):
+        """
+        Private method used to handle the "Open Project" command.
+        
+        @param pfname filename of the project to be opened (string)
+        """
+        ericApp().getObject("Project").openProject(pfname)
+        
+    def __saOpenMultiProject(self, pfname):
+        """
+        Private method used to handle the "Open Multi-Project" command.
+        
+        @param pfname filename of the multi project to be opened (string)
+        """
+        ericApp().getObject("MultiProject").openMultiProject(pfname)
+        
+    def __saArguments(self, argsStr):
+        """
+        Private method used to handle the "Arguments" command.
+        
+        @param argsStr space delimited list of command args(string)
+        """
+        ericApp().getObject("DebugUI").setArgvHistory(argsStr)
+
+
+class EricSingleApplicationClient(SingleApplicationClient):
+    """
+    Class implementing the single application client of the IDE.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        SingleApplicationClient.__init__(self, SAFile)
+        
+    def processArgs(self, args):
+        """
+        Public method to process the command line args passed to the UI.
+        
+        @param args list of files to open
+        """
+        # no args, return
+        if args is None:
+            return
+        
+        # holds space delimited list of command args, if any
+        argsStr = None
+        # flag indicating '--' options was found
+        ddseen = False
+        
+        argChars = ['-', '/'] if Utilities.isWindowsPlatform() else ['-']
+        
+        for arg in args:
+            if arg == '--' and not ddseen:
+                ddseen = True
+                continue
+                
+            if arg[0] in argChars or ddseen:
+                if argsStr is None:
+                    argsStr = arg
+                else:
+                    argsStr = "{0} {1}".format(argsStr, arg)
+                continue
+            
+            ext = os.path.splitext(arg)[1]
+            ext = os.path.normcase(ext)
+            
+            if ext in ('.epj', '.e4p'):
+                self.__openProject(arg)
+            elif ext in ('.emj', '.e4m', '.e5m'):
+                self.__openMultiProject(arg)
+            else:
+                self.__openFile(arg)
+        
+        # send any args we had
+        if argsStr is not None:
+            self.__sendArguments(argsStr)
+        
+        self.disconnect()
+        
+    def __openFile(self, fname):
+        """
+        Private method to open a file in the application server.
+        
+        @param fname name of file to be opened (string)
+        """
+        self.sendCommand(SAOpenFile, [os.path.abspath(fname)])
+        
+    def __openProject(self, pfname):
+        """
+        Private method to open a project in the application server.
+        
+        @param pfname name of the projectfile to be opened (string)
+        """
+        self.sendCommand(SAOpenProject, [os.path.abspath(pfname)])
+        
+    def __openMultiProject(self, pfname):
+        """
+        Private method to open a project in the application server.
+        
+        @param pfname name of the projectfile to be opened (string)
+        """
+        self.sendCommand(SAOpenMultiProject, [os.path.abspath(pfname)])
+        
+    def __sendArguments(self, argsStr):
+        """
+        Private method to set the command arguments in the application server.
+        
+        @param argsStr space delimited list of command args (string)
+        """
+        self.sendCommand(SAArguments, [argsStr])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricSqueezeLabels.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,138 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing labels that squeeze their contents to fit the size of the
+label.
+"""
+
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QLabel
+
+from Utilities import compactPath
+
+
+class EricSqueezeLabel(QLabel):
+    """
+    Class implementing a label that squeezes its contents to fit its size.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent Widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        self.__text = ''
+        self.__elided = ''
+    
+    def paintEvent(self, event):
+        """
+        Protected method called when some painting is required.
+        
+        @param event reference to the paint event (QPaintEvent)
+        """
+        fm = self.fontMetrics()
+        try:
+            pixelLength = fm.horizontalAdvance(self.__text)
+        except AttributeError:
+            pixelLength = fm.width(self.__text)
+        if pixelLength > self.contentsRect().width():
+            self.__elided = fm.elidedText(
+                self.text(), Qt.TextElideMode.ElideMiddle, self.width())
+            super().setText(self.__elided)
+        else:
+            super().setText(self.__text)
+        super().paintEvent(event)
+    
+    def setText(self, txt):
+        """
+        Public method to set the label's text.
+        
+        @param txt the text to be shown (string)
+        """
+        self.__text = txt
+        super().setText(self.__text)
+
+
+class EricSqueezeLabelPath(QLabel):
+    """
+    Class implementing a label showing a file path compacted to fit its size.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent Widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        self.__path = ''
+        self.__surrounding = "{0}"
+    
+    def setSurrounding(self, surrounding):
+        """
+        Public method to set the surrounding of the path string.
+        
+        @param surrounding the a string containg placeholders for the path
+            (string)
+        """
+        self.__surrounding = surrounding
+        super().setText(
+            self.__surrounding.format(self.__path))
+    
+    def setPath(self, path):
+        """
+        Public method to set the path of the label.
+        
+        @param path path to be shown (string)
+        """
+        self.__path = path
+        super().setText(
+            self.__surrounding.format(self.__path))
+    
+    def setTextPath(self, surrounding, path):
+        """
+        Public method to set the surrounding and the path of the label.
+        
+        @param surrounding the a string containg placeholders for the path
+            (string)
+        @param path path to be shown (string)
+        """
+        self.__surrounding = surrounding
+        self.__path = path
+        super().setText(
+            self.__surrounding.format(self.__path))
+    
+    def paintEvent(self, event):
+        """
+        Protected method called when some painting is required.
+        
+        @param event reference to the paint event (QPaintEvent)
+        """
+        if self.length(self.__path) > self.contentsRect().width():
+            super().setText(
+                self.__surrounding.format(compactPath(self.__path,
+                                          self.contentsRect().width(),
+                                          self.length))
+            )
+        else:
+            super().setText(
+                self.__surrounding.format(self.__path))
+        super().paintEvent(event)
+    
+    def length(self, txt):
+        """
+        Public method to return the length of a text in pixels.
+        
+        @param txt text to calculate the length for after wrapped (string)
+        @return length of the wrapped text in pixels (integer)
+        """
+        fm = self.fontMetrics()
+        try:
+            return fm.horizontalAdvance(self.__surrounding.format(txt))
+        except AttributeError:
+            return fm.width(self.__surrounding.format(txt))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricStringListEditWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2015 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to edit a list of strings.
+"""
+
+from PyQt6.QtCore import (
+    pyqtSlot, pyqtSignal, Qt, QSortFilterProxyModel, QStringListModel
+)
+from PyQt6.QtWidgets import QWidget, QInputDialog, QLineEdit
+
+from .Ui_EricStringListEditWidget import Ui_EricStringListEditWidget
+
+
+class EricStringListEditWidget(QWidget, Ui_EricStringListEditWidget):
+    """
+    Class implementing a dialog to edit a list of strings.
+    
+    @signal setToDefault() emitted to request the default list of values
+    """
+    setToDefault = pyqtSignal()
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        self.__model = QStringListModel(self)
+        self.__proxyModel = QSortFilterProxyModel(self)
+        self.__proxyModel.setFilterCaseSensitivity(
+            Qt.CaseSensitivity.CaseInsensitive)
+        self.__proxyModel.setSourceModel(self.__model)
+        self.stringList.setModel(self.__proxyModel)
+        
+        self.defaultButton.hide()
+        
+        self.searchEdit.textChanged.connect(
+            self.__proxyModel.setFilterFixedString)
+        
+        self.removeButton.clicked.connect(self.stringList.removeSelected)
+        self.removeAllButton.clicked.connect(self.stringList.removeAll)
+        self.defaultButton.clicked.connect(self.setToDefault)
+    
+    def setList(self, stringList):
+        """
+        Public method to set the list of strings to be edited.
+        
+        @param stringList list of strings to be edited (list of string)
+        """
+        self.__model.setStringList(stringList)
+        self.__model.sort(0)
+    
+    def getList(self):
+        """
+        Public method to get the edited list of strings.
+        
+        @return edited list of string (list of string)
+        """
+        return self.__model.stringList()[:]
+    
+    def setListWhatsThis(self, txt):
+        """
+        Public method to set a what's that help text for the string list.
+        
+        @param txt help text to be set (string)
+        """
+        self.stringList.setWhatsThis(txt)
+    
+    def setDefaultVisible(self, visible):
+        """
+        Public method to show or hide the default button.
+        
+        @param visible flag indicating the visibility of the default button
+        @type bool
+        """
+        self.defaultButton.setVisible(visible)
+    
+    def setAddVisible(self, visible):
+        """
+        Public method to show or hide the add button.
+        
+        @param visible flag indicating the visibility of the add button
+        @type bool
+        """
+        self.addButton.setVisible(visible)
+        self.addLine.setVisible(visible)
+    
+    @pyqtSlot()
+    def on_addButton_clicked(self):
+        """
+        Private slot to add an entry to the list.
+        """
+        entry, ok = QInputDialog.getText(
+            self,
+            self.tr("Add Entry"),
+            self.tr("Enter the entry to add to the list:"),
+            QLineEdit.EchoMode.Normal)
+        if ok and entry != "" and entry not in self.__model.stringList():
+            self.__model.insertRow(self.__model.rowCount())
+            self.__model.setData(
+                self.__model.index(self.__model.rowCount() - 1), entry)
+            self.__model.sort(0)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricStringListEditWidget.ui	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EricStringListEditWidget</class>
+ <widget class="QWidget" name="EricStringListEditWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>500</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <layout class="QGridLayout" name="gridLayout_4">
+     <property name="horizontalSpacing">
+      <number>0</number>
+     </property>
+     <item row="0" column="1">
+      <widget class="QLineEdit" name="searchEdit">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>300</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="toolTip">
+        <string>Enter search term for strings</string>
+       </property>
+       <property name="clearButtonEnabled">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="0">
+      <spacer name="horizontalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0" rowspan="6">
+      <widget class="EricListView" name="stringList">
+       <property name="alternatingRowColors">
+        <bool>true</bool>
+       </property>
+       <property name="selectionMode">
+        <enum>QAbstractItemView::ExtendedSelection</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="1">
+      <widget class="QPushButton" name="addButton">
+       <property name="toolTip">
+        <string>Press to add an entry</string>
+       </property>
+       <property name="text">
+        <string>&amp;Add...</string>
+       </property>
+       <property name="autoDefault">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="Line" name="addLine">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <widget class="QPushButton" name="removeButton">
+       <property name="toolTip">
+        <string>Press to remove the selected entries</string>
+       </property>
+       <property name="text">
+        <string>&amp;Remove</string>
+       </property>
+       <property name="autoDefault">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="1">
+      <widget class="QPushButton" name="removeAllButton">
+       <property name="toolTip">
+        <string>Press to remove all entries</string>
+       </property>
+       <property name="text">
+        <string>R&amp;emove All</string>
+       </property>
+       <property name="autoDefault">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="4" column="1">
+      <spacer name="verticalSpacer_3">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="5" column="1">
+      <widget class="QPushButton" name="defaultButton">
+       <property name="toolTip">
+        <string>Press to set the default list of values</string>
+       </property>
+       <property name="text">
+        <string>&amp;Default</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>EricListView</class>
+   <extends>QListView</extends>
+   <header>EricWidgets/EricListView.h</header>
+  </customwidget>
+ </customwidgets>
+ <tabstops>
+  <tabstop>stringList</tabstop>
+  <tabstop>searchEdit</tabstop>
+  <tabstop>addButton</tabstop>
+  <tabstop>removeButton</tabstop>
+  <tabstop>removeAllButton</tabstop>
+  <tabstop>defaultButton</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricTabWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,358 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2005 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a TabWidget class substituting QTabWidget.
+"""
+
+import contextlib
+
+from PyQt6.QtCore import pyqtSignal, Qt, QPoint, QMimeData
+from PyQt6.QtGui import QDrag
+from PyQt6.QtWidgets import QTabWidget, QTabBar, QApplication, QStyle
+
+from EricWidgets.EricAnimatedLabel import EricAnimatedLabel
+
+
+class EricWheelTabBar(QTabBar):
+    """
+    Class implementing a tab bar class substituting QTabBar to support wheel
+    events.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        self._tabWidget = parent
+    
+    def wheelEvent(self, event):
+        """
+        Protected slot to support wheel events.
+        
+        @param event reference to the wheel event (QWheelEvent)
+        """
+        with contextlib.suppress(AttributeError):
+            delta = event.angleDelta().y()
+            if delta > 0:
+                self._tabWidget.prevTab()
+            elif delta < 0:
+                self._tabWidget.nextTab()
+            
+            event.accept()
+
+
+class EricDnDTabBar(EricWheelTabBar):
+    """
+    Class implementing a tab bar class substituting QTabBar.
+    
+    @signal tabMoveRequested(int, int) emitted to signal a tab move request
+        giving the old and new index position
+    """
+    tabMoveRequested = pyqtSignal(int, int)
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        EricWheelTabBar.__init__(self, parent)
+        self.setAcceptDrops(True)
+        
+        self.__dragStartPos = QPoint()
+    
+    def mousePressEvent(self, event):
+        """
+        Protected method to handle mouse press events.
+        
+        @param event reference to the mouse press event (QMouseEvent)
+        """
+        if event.button() == Qt.MouseButton.LeftButton:
+            self.__dragStartPos = QPoint(event.position().toPoint())
+        EricWheelTabBar.mousePressEvent(self, event)
+    
+    def mouseMoveEvent(self, event):
+        """
+        Protected method to handle mouse move events.
+        
+        @param event reference to the mouse move event (QMouseEvent)
+        """
+        if (
+            event.buttons() == Qt.MouseButton.LeftButton and
+            (event.position().toPoint() - self.__dragStartPos)
+            .manhattanLength() > QApplication.startDragDistance()
+        ):
+            drag = QDrag(self)
+            mimeData = QMimeData()
+            index = self.tabAt(event.position().toPoint())
+            mimeData.setText(self.tabText(index))
+            mimeData.setData("action", b"tab-reordering")
+            mimeData.setData("tabbar-id", str(id(self)).encode("utf-8"))
+            drag.setMimeData(mimeData)
+            drag.exec()
+        EricWheelTabBar.mouseMoveEvent(self, event)
+    
+    def dragEnterEvent(self, event):
+        """
+        Protected method to handle drag enter events.
+        
+        @param event reference to the drag enter event (QDragEnterEvent)
+        """
+        mimeData = event.mimeData()
+        formats = mimeData.formats()
+        if (
+            "action" in formats and
+            mimeData.data("action") == b"tab-reordering" and
+            "tabbar-id" in formats and
+            int(mimeData.data("tabbar-id")) == id(self)
+        ):
+            event.acceptProposedAction()
+        EricWheelTabBar.dragEnterEvent(self, event)
+    
+    def dropEvent(self, event):
+        """
+        Protected method to handle drop events.
+        
+        @param event reference to the drop event (QDropEvent)
+        """
+        fromIndex = self.tabAt(self.__dragStartPos)
+        toIndex = self.tabAt(event.position().toPoint())
+        if fromIndex != toIndex:
+            self.tabMoveRequested.emit(fromIndex, toIndex)
+            event.acceptProposedAction()
+        EricWheelTabBar.dropEvent(self, event)
+
+
+class EricTabWidget(QTabWidget):
+    """
+    Class implementing a tab widget class substituting QTabWidget.
+    
+    It provides slots to show the previous and next tab and give
+    them the input focus and it allows to have a context menu for the tabs.
+    
+    @signal customTabContextMenuRequested(const QPoint & point, int index)
+        emitted when a context menu for a tab is requested
+    """
+    customTabContextMenuRequested = pyqtSignal(QPoint, int)
+    
+    def __init__(self, parent=None, dnd=False):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        @param dnd flag indicating the support for Drag & Drop (boolean)
+        """
+        super().__init__(parent)
+        
+        if dnd:
+            if not hasattr(self, 'setMovable'):
+                self.__tabBar = EricDnDTabBar(self)
+                self.__tabBar.tabMoveRequested.connect(self.moveTab)
+                self.setTabBar(self.__tabBar)
+            else:
+                self.__tabBar = EricWheelTabBar(self)
+                self.setTabBar(self.__tabBar)
+                self.setMovable(True)
+        else:
+            self.__tabBar = EricWheelTabBar(self)
+            self.setTabBar(self.__tabBar)
+        
+        self.__lastCurrentIndex = -1
+        self.__currentIndex = -1
+        self.currentChanged.connect(self.__currentChanged)
+    
+    def setCustomTabBar(self, dnd, tabBar):
+        """
+        Public method to set a custom tab bar.
+        
+        @param dnd flag indicating the support for Drag & Drop (boolean)
+        @param tabBar reference to the tab bar to set (QTabBar)
+        """
+        self.__tabBar = tabBar
+        self.setTabBar(self.__tabBar)
+        if dnd:
+            if isinstance(tabBar, EricDnDTabBar):
+                self.__tabBar.tabMoveRequested.connect(self.moveTab)
+            else:
+                self.setMovable(True)
+    
+    def __currentChanged(self, index):
+        """
+        Private slot to handle the currentChanged signal.
+        
+        @param index index of the current tab
+        """
+        if index == -1:
+            self.__lastCurrentIndex = -1
+        else:
+            self.__lastCurrentIndex = self.__currentIndex
+        self.__currentIndex = index
+        
+    def switchTab(self):
+        """
+        Public slot used to switch between the current and the previous
+        current tab.
+        """
+        if self.__lastCurrentIndex == -1 or self.__currentIndex == -1:
+            return
+        
+        self.setCurrentIndex(self.__lastCurrentIndex)
+        self.currentWidget().setFocus()
+        
+    def nextTab(self):
+        """
+        Public slot used to show the next tab.
+        """
+        ind = self.currentIndex() + 1
+        if ind == self.count():
+            ind = 0
+            
+        self.setCurrentIndex(ind)
+        self.currentWidget().setFocus()
+
+    def prevTab(self):
+        """
+        Public slot used to show the previous tab.
+        """
+        ind = self.currentIndex() - 1
+        if ind == -1:
+            ind = self.count() - 1
+            
+        self.setCurrentIndex(ind)
+        self.currentWidget().setFocus()
+
+    def setTabContextMenuPolicy(self, policy):
+        """
+        Public method to set the context menu policy of the tab.
+        
+        @param policy context menu policy to set (Qt.ContextMenuPolicy)
+        """
+        self.tabBar().setContextMenuPolicy(policy)
+        if policy == Qt.ContextMenuPolicy.CustomContextMenu:
+            self.tabBar().customContextMenuRequested.connect(
+                self.__handleTabCustomContextMenuRequested)
+        else:
+            self.tabBar().customContextMenuRequested.disconnect(
+                self.__handleTabCustomContextMenuRequested)
+
+    def __handleTabCustomContextMenuRequested(self, point):
+        """
+        Private slot to handle the context menu request for the tabbar.
+        
+        @param point point the context menu was requested (QPoint)
+        """
+        _tabbar = self.tabBar()
+        for index in range(_tabbar.count()):
+            rect = _tabbar.tabRect(index)
+            if rect.contains(point):
+                self.customTabContextMenuRequested.emit(
+                    _tabbar.mapToParent(point), index)
+                return
+        
+        self.customTabContextMenuRequested.emit(_tabbar.mapToParent(point), -1)
+    
+    def selectTab(self, pos):
+        """
+        Public method to get the index of a tab given a position.
+        
+        @param pos position determining the tab index (QPoint)
+        @return index of the tab (integer)
+        """
+        _tabbar = self.tabBar()
+        for index in range(_tabbar.count()):
+            rect = _tabbar.tabRect(index)
+            if rect.contains(pos):
+                return index
+        
+        return -1
+
+    def moveTab(self, curIndex, newIndex):
+        """
+        Public method to move a tab to a new index.
+        
+        @param curIndex index of tab to be moved (integer)
+        @param newIndex index the tab should be moved to (integer)
+        """
+        # step 1: save the tab data of tab to be moved
+        toolTip = self.tabToolTip(curIndex)
+        text = self.tabText(curIndex)
+        icon = self.tabIcon(curIndex)
+        whatsThis = self.tabWhatsThis(curIndex)
+        widget = self.widget(curIndex)
+        curWidget = self.currentWidget()
+        
+        # step 2: move the tab
+        self.removeTab(curIndex)
+        self.insertTab(newIndex, widget, icon, text)
+        
+        # step 3: set the tab data again
+        self.setTabToolTip(newIndex, toolTip)
+        self.setTabWhatsThis(newIndex, whatsThis)
+        
+        # step 4: set current widget
+        self.setCurrentWidget(curWidget)
+    
+    def __freeSide(self):
+        """
+        Private method to determine the free side of a tab.
+        
+        @return free side (QTabBar.ButtonPosition)
+        """
+        side = self.__tabBar.style().styleHint(
+            QStyle.StyleHint.SH_TabBar_CloseButtonPosition,
+            None, None, None)
+        side = (
+            QTabBar.ButtonPosition.RightSide
+            if side == QTabBar.ButtonPosition.LeftSide else
+            QTabBar.ButtonPosition.LeftSide
+        )
+        return side
+    
+    def animationLabel(self, index, animationFile, interval=100):
+        """
+        Public slot to set an animated icon.
+        
+        @param index tab index
+        @type int
+        @param animationFile name of the file containing the animation
+        @type str
+        @param interval interval in milliseconds between animation frames
+        @type int
+        @return reference to the created label
+        @rtype EricAnimatedLabel
+        """
+        if index == -1:
+            return None
+        
+        if hasattr(self.__tabBar, 'setTabButton'):
+            side = self.__freeSide()
+            animation = EricAnimatedLabel(
+                self, animationFile=animationFile, interval=interval)
+            self.__tabBar.setTabButton(index, side, None)
+            self.__tabBar.setTabButton(index, side, animation)
+            animation.start()
+            return animation
+        else:
+            return None
+    
+    def resetAnimation(self, index):
+        """
+        Public slot to reset an animated icon.
+        
+        @param index tab index (integer)
+        """
+        if index == -1:
+            return
+        
+        if hasattr(self.__tabBar, 'tabButton'):
+            side = self.__freeSide()
+            animation = self.__tabBar.tabButton(index, side)
+            if animation is not None:
+                animation.stop()
+                self.__tabBar.setTabButton(index, side, None)
+                del animation
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricTableView.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing specialized table views.
+"""
+
+from PyQt6.QtCore import Qt, QItemSelectionModel
+from PyQt6.QtWidgets import QTableView
+
+
+class EricTableView(QTableView):
+    """
+    Class implementing a table view supporting removal of entries.
+    """
+    def keyPressEvent(self, evt):
+        """
+        Protected method implementing special key handling.
+        
+        @param evt reference to the event (QKeyEvent)
+        """
+        if (
+            evt.key() in [Qt.Key.Key_Delete, Qt.Key.Key_Backspace] and
+            self.model() is not None
+        ):
+            self.removeSelected()
+            evt.setAccepted(True)
+        else:
+            super().keyPressEvent(evt)
+    
+    def removeSelected(self):
+        """
+        Public method to remove the selected entries.
+        """
+        if self.model() is None or self.selectionModel() is None:
+            # no models available
+            return
+        
+        row = 0
+        selectedRows = self.selectionModel().selectedRows()
+        for selectedRow in reversed(selectedRows):
+            row = selectedRow.row()
+            self.model().removeRow(row, self.rootIndex())
+        
+        idx = self.model().index(row, 0, self.rootIndex())
+        if not idx.isValid():
+            idx = self.model().index(row - 1, 0, self.rootIndex())
+        self.selectionModel().select(
+            idx,
+            QItemSelectionModel.SelectionFlag.SelectCurrent |
+            QItemSelectionModel.SelectionFlag.Rows)
+        self.setCurrentIndex(idx)
+    
+    def removeAll(self):
+        """
+        Public method to clear the view.
+        """
+        if self.model() is not None:
+            self.model().removeRows(0, self.model().rowCount(self.rootIndex()),
+                                    self.rootIndex())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricTextEditSearchWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,378 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a horizontal search widget for QTextEdit.
+"""
+
+import enum
+
+from PyQt6.QtCore import pyqtSlot, Qt, QMetaObject, QSize
+from PyQt6.QtGui import QPalette, QBrush, QColor, QTextDocument, QTextCursor
+from PyQt6.QtWidgets import (
+    QWidget, QVBoxLayout, QHBoxLayout, QLabel, QComboBox, QCheckBox,
+    QToolButton, QSizePolicy
+)
+
+import UI.PixmapCache
+
+
+class EricTextEditType(enum.Enum):
+    """
+    Class defining the supported text edit types.
+    """
+    UNKNOWN = 0
+    QTEXTEDIT = 1
+    QTEXTBROWSER = 2
+    QWEBENGINEVIEW = 3
+
+
+class EricTextEditSearchWidget(QWidget):
+    """
+    Class implementing a horizontal search widget for QTextEdit.
+    """
+    def __init__(self, parent=None, widthForHeight=True):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        @param widthForHeight flag indicating to prefer width for height.
+            If this parameter is False, some widgets are shown in a third
+            line.
+        @type bool
+        """
+        super().__init__(parent)
+        self.__setupUi(widthForHeight)
+        
+        self.__textedit = None
+        self.__texteditType = EricTextEditType.UNKNOWN
+        self.__findBackwards = True
+        
+        self.__defaultBaseColor = (
+            self.findtextCombo.lineEdit().palette().color(
+                QPalette.ColorRole.Base)
+        )
+        self.__defaultTextColor = (
+            self.findtextCombo.lineEdit().palette().color(
+                QPalette.ColorRole.Text)
+        )
+        
+        self.findHistory = []
+        
+        self.findtextCombo.setCompleter(None)
+        self.findtextCombo.lineEdit().returnPressed.connect(
+            self.__findByReturnPressed)
+        
+        self.__setSearchButtons(False)
+        self.infoLabel.hide()
+        
+        self.setFocusProxy(self.findtextCombo)
+    
+    def __setupUi(self, widthForHeight):
+        """
+        Private method to generate the UI.
+        
+        @param widthForHeight flag indicating to prefer width for height
+        @type bool
+        """
+        self.setObjectName("EricTextEditSearchWidget")
+        
+        self.verticalLayout = QVBoxLayout(self)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
+        
+        # row 1 of widgets
+        self.horizontalLayout1 = QHBoxLayout()
+        self.horizontalLayout1.setObjectName("horizontalLayout1")
+        
+        self.label = QLabel(self)
+        self.label.setObjectName("label")
+        self.label.setText(self.tr("Find:"))
+        self.horizontalLayout1.addWidget(self.label)
+        
+        self.findtextCombo = QComboBox(self)
+        self.findtextCombo.setEditable(True)
+        self.findtextCombo.lineEdit().setClearButtonEnabled(True)
+        sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding,
+                                 QSizePolicy.Policy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(
+            self.findtextCombo.sizePolicy().hasHeightForWidth())
+        self.findtextCombo.setSizePolicy(sizePolicy)
+        self.findtextCombo.setMinimumSize(QSize(100, 0))
+        self.findtextCombo.setEditable(True)
+        self.findtextCombo.setInsertPolicy(QComboBox.InsertPolicy.InsertAtTop)
+        self.findtextCombo.setDuplicatesEnabled(False)
+        self.findtextCombo.setObjectName("findtextCombo")
+        self.horizontalLayout1.addWidget(self.findtextCombo)
+        
+        # row 2 (maybe) of widgets
+        self.horizontalLayout2 = QHBoxLayout()
+        self.horizontalLayout2.setObjectName("horizontalLayout2")
+        
+        self.caseCheckBox = QCheckBox(self)
+        self.caseCheckBox.setObjectName("caseCheckBox")
+        self.caseCheckBox.setText(self.tr("Match case"))
+        self.horizontalLayout2.addWidget(self.caseCheckBox)
+        
+        self.wordCheckBox = QCheckBox(self)
+        self.wordCheckBox.setObjectName("wordCheckBox")
+        self.wordCheckBox.setText(self.tr("Whole word"))
+        self.horizontalLayout2.addWidget(self.wordCheckBox)
+        
+        # layout for the navigation buttons
+        self.horizontalLayout3 = QHBoxLayout()
+        self.horizontalLayout3.setSpacing(0)
+        self.horizontalLayout3.setObjectName("horizontalLayout3")
+        
+        self.findPrevButton = QToolButton(self)
+        self.findPrevButton.setObjectName("findPrevButton")
+        self.findPrevButton.setToolTip(self.tr(
+            "Press to find the previous occurrence"))
+        self.findPrevButton.setIcon(UI.PixmapCache.getIcon("1leftarrow"))
+        self.horizontalLayout3.addWidget(self.findPrevButton)
+        
+        self.findNextButton = QToolButton(self)
+        self.findNextButton.setObjectName("findNextButton")
+        self.findNextButton.setToolTip(self.tr(
+            "Press to find the next occurrence"))
+        self.findNextButton.setIcon(UI.PixmapCache.getIcon("1rightarrow"))
+        self.horizontalLayout3.addWidget(self.findNextButton)
+        
+        self.horizontalLayout2.addLayout(self.horizontalLayout3)
+        
+        # info label (in row 2 or 3)
+        self.infoLabel = QLabel(self)
+        self.infoLabel.setText("")
+        self.infoLabel.setObjectName("infoLabel")
+        
+        # place everything together
+        self.verticalLayout.addLayout(self.horizontalLayout1)
+        self.__addWidthForHeightLayout(widthForHeight)
+        self.verticalLayout.addWidget(self.infoLabel)
+        
+        QMetaObject.connectSlotsByName(self)
+        
+        self.setTabOrder(self.findtextCombo, self.caseCheckBox)
+        self.setTabOrder(self.caseCheckBox, self.wordCheckBox)
+        self.setTabOrder(self.wordCheckBox, self.findPrevButton)
+        self.setTabOrder(self.findPrevButton, self.findNextButton)
+    
+    def setWidthForHeight(self, widthForHeight):
+        """
+        Public method to set the 'width for height'.
+        
+        @param widthForHeight flag indicating to prefer width
+        @type bool
+        """
+        if self.__widthForHeight:
+            self.horizontalLayout1.takeAt(self.__widthForHeightLayoutIndex)
+        else:
+            self.verticalLayout.takeAt(self.__widthForHeightLayoutIndex)
+        self.__addWidthForHeightLayout(widthForHeight)
+    
+    def __addWidthForHeightLayout(self, widthForHeight):
+        """
+        Private method to set the middle part of the layout.
+        
+        @param widthForHeight flag indicating to prefer width
+        @type bool
+        """
+        if widthForHeight:
+            self.horizontalLayout1.addLayout(self.horizontalLayout2)
+            self.__widthForHeightLayoutIndex = 2
+        else:
+            self.verticalLayout.insertLayout(1, self.horizontalLayout2)
+            self.__widthForHeightLayoutIndex = 1
+        
+        self.__widthForHeight = widthForHeight
+    
+    def attachTextEdit(self, textedit, editType=EricTextEditType.QTEXTEDIT):
+        """
+        Public method to attach a QTextEdit widget.
+        
+        @param textedit reference to the edit widget to be attached
+        @type QTextEdit, QWebEngineView or QWebView
+        @param editType type of the attached edit widget
+        @type EricTextEditType
+        """
+        self.__textedit = textedit
+        self.__texteditType = editType
+        
+        self.wordCheckBox.setVisible(editType == "QTextEdit")
+    
+    def keyPressEvent(self, event):
+        """
+        Protected slot to handle key press events.
+        
+        @param event reference to the key press event (QKeyEvent)
+        """
+        if self.__textedit and event.key() == Qt.Key.Key_Escape:
+            self.__textedit.setFocus(Qt.FocusReason.ActiveWindowFocusReason)
+            event.accept()
+    
+    @pyqtSlot(str)
+    def on_findtextCombo_editTextChanged(self, txt):
+        """
+        Private slot to enable/disable the find buttons.
+        
+        @param txt text of the combobox (string)
+        """
+        self.__setSearchButtons(txt != "")
+        
+        self.infoLabel.hide()
+        self.__setFindtextComboBackground(False)
+    
+    def __setSearchButtons(self, enabled):
+        """
+        Private slot to set the state of the search buttons.
+        
+        @param enabled flag indicating the state (boolean)
+        """
+        self.findPrevButton.setEnabled(enabled)
+        self.findNextButton.setEnabled(enabled)
+    
+    def __findByReturnPressed(self):
+        """
+        Private slot to handle the returnPressed signal of the findtext
+        combobox.
+        """
+        self.__find(self.__findBackwards)
+    
+    @pyqtSlot()
+    def on_findPrevButton_clicked(self):
+        """
+        Private slot to find the previous occurrence.
+        """
+        self.__find(True)
+    
+    @pyqtSlot()
+    def on_findNextButton_clicked(self):
+        """
+        Private slot to find the next occurrence.
+        """
+        self.__find(False)
+    
+    def __find(self, backwards):
+        """
+        Private method to search the associated text edit.
+        
+        @param backwards flag indicating a backwards search (boolean)
+        """
+        if not self.__textedit:
+            return
+        
+        self.infoLabel.clear()
+        self.infoLabel.hide()
+        self.__setFindtextComboBackground(False)
+        
+        txt = self.findtextCombo.currentText()
+        if not txt:
+            return
+        self.__findBackwards = backwards
+        
+        # This moves any previous occurrence of this statement to the head
+        # of the list and updates the combobox
+        if txt in self.findHistory:
+            self.findHistory.remove(txt)
+        self.findHistory.insert(0, txt)
+        self.findtextCombo.clear()
+        self.findtextCombo.addItems(self.findHistory)
+        
+        if self.__texteditType in (
+            EricTextEditType.QTEXTBROWSER, EricTextEditType.QTEXTEDIT
+        ):
+            ok = self.__findPrevNextQTextEdit(backwards)
+            self.__findNextPrevCallback(ok)
+        elif self.__texteditType == EricTextEditType.QWEBENGINEVIEW:
+            self.__findPrevNextQWebEngineView(backwards)
+    
+    def __findPrevNextQTextEdit(self, backwards):
+        """
+        Private method to to search the associated edit widget of
+        type QTextEdit.
+        
+        @param backwards flag indicating a backwards search
+        @type bool
+        @return flag indicating the search result
+        @rtype bool
+        """
+        flags = (
+            QTextDocument.FindFlag.FindBackward
+            if backwards else
+            QTextDocument.FindFlag(0)
+        )
+        if self.caseCheckBox.isChecked():
+            flags |= QTextDocument.FindFlag.FindCaseSensitively
+        if self.wordCheckBox.isChecked():
+            flags |= QTextDocument.FindFlag.FindWholeWords
+        
+        ok = self.__textedit.find(self.findtextCombo.currentText(), flags)
+        if not ok:
+            # wrap around once
+            cursor = self.__textedit.textCursor()
+            if backwards:
+                moveOp = QTextCursor.MoveOperation.End
+                # move to end of document
+            else:
+                moveOp = QTextCursor.MoveOperation.Start
+                # move to start of document
+            cursor.movePosition(moveOp)
+            self.__textedit.setTextCursor(cursor)
+            ok = self.__textedit.find(self.findtextCombo.currentText(), flags)
+        
+        return ok
+    
+    def __findPrevNextQWebEngineView(self, backwards):
+        """
+        Private method to to search the associated edit widget of
+        type QWebEngineView.
+        
+        @param backwards flag indicating a backwards search
+        @type bool
+        """
+        from PyQt6.QtWebEngineWidgets import QWebEnginePage
+        
+        findFlags = QWebEnginePage.FindFlag(0)
+        if self.caseCheckBox.isChecked():
+            findFlags |= QWebEnginePage.FindFlag.FindCaseSensitively
+        if backwards:
+            findFlags |= QWebEnginePage.FindFlag.FindBackward
+        self.__textedit.findText(self.findtextCombo.currentText(),
+                                 findFlags, self.__findNextPrevCallback)
+    
+    def __findNextPrevCallback(self, found):
+        """
+        Private method to process the result of the last search.
+        
+        @param found flag indicating if the last search succeeded
+        @type bool
+        """
+        if not found:
+            txt = self.findtextCombo.currentText()
+            self.infoLabel.setText(
+                self.tr("'{0}' was not found.").format(txt))
+            self.infoLabel.show()
+            self.__setFindtextComboBackground(True)
+    
+    def __setFindtextComboBackground(self, error):
+        """
+        Private slot to change the findtext combo background to indicate
+        errors.
+        
+        @param error flag indicating an error condition (boolean)
+        """
+        le = self.findtextCombo.lineEdit()
+        p = le.palette()
+        if error:
+            p.setBrush(QPalette.ColorRole.Base, QBrush(QColor("#FF6666")))
+            p.setBrush(QPalette.ColorRole.Text, QBrush(QColor("#000000")))
+        else:
+            p.setBrush(QPalette.ColorRole.Base, self.__defaultBaseColor)
+            p.setBrush(QPalette.ColorRole.Text, self.__defaultTextColor)
+        le.setPalette(p)
+        le.update()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricTextInputDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,141 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2018 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to enter some text.
+"""
+
+from PyQt6.QtWidgets import (
+    QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QLineEdit
+)
+
+
+class EricTextInputDialog(QDialog):
+    """
+    Class implementing a dialog to enter some text.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        
+        self.setMaximumWidth(600)
+        
+        self.__layout = QVBoxLayout(self)
+        
+        self.__label = QLabel(self)
+        self.__layout.addWidget(self.__label)
+        
+        self.__lineEdit = QLineEdit(self)
+        self.__lineEdit.setClearButtonEnabled(True)
+        self.__layout.addWidget(self.__lineEdit)
+        
+        self.__buttonBox = QDialogButtonBox(
+            QDialogButtonBox.StandardButton.Ok |
+            QDialogButtonBox.StandardButton.Cancel, self)
+        self.__layout.addWidget(self.__buttonBox)
+        
+        self.__buttonBox.accepted.connect(self.accept)
+        self.__buttonBox.rejected.connect(self.reject)
+        
+        msh = self.minimumSizeHint()
+        self.resize(max(self.width(), msh.width()), msh.height())
+    
+    def setTextEchoMode(self, echoMode):
+        """
+        Public method to set the echo mode of the line edit.
+        
+        @param echoMode echo mode of the line edit
+        @type QLineEdit.EchoMode
+        """
+        self.__lineEdit.setEchoMode(echoMode)
+    
+    def textEchoMode(self):
+        """
+        Public method to get the current echo mode of the line edit.
+        
+        @return echo mode of the line edit
+        @rtype QLineEdit.EchoMode
+        """
+        return self.__lineEdit.echoMode()
+    
+    def setTextValue(self, text):
+        """
+        Public method to set the text of the line edit.
+        
+        @param text text for the line edit
+        @type str
+        """
+        self.__lineEdit.setText(text)
+    
+    def textValue(self):
+        """
+        Public method to get the text of the line edit.
+        
+        @return text of the line edit
+        @rtype str
+        """
+        return self.__lineEdit.text()
+    
+    def setLabelText(self, text):
+        """
+        Public method to set the label text.
+        
+        @param text label text
+        @type str
+        """
+        self.__label.setText(text)
+        
+        msh = self.minimumSizeHint()
+        labelSizeHint = self.__label.sizeHint()
+        self.resize(max(self.width(), msh.width(), labelSizeHint.width()),
+                    msh.height())
+    
+    def labelText(self):
+        """
+        Public method to get the current label text.
+        
+        @return current label text
+        @rtype str
+        """
+        return self.label.text()
+
+
+def getText(parent, title, label, mode=QLineEdit.EchoMode.Normal, text="",
+            minimumWidth=300):
+    """
+    Function to get create a dialog to enter some text and return it.
+    
+    @param parent reference to the parent widget
+    @type QWidget
+    @param title title of the dialog
+    @type str
+    @param label label of the dialog
+    @type str
+    @param mode echo mode of the line edit
+    @type QLineEdit.EchoMode
+    @param text initial text of the line edit
+    @type str
+    @param minimumWidth minimum width of the dialog
+    @type int
+    @return tuple containing a flag indicating the dialog was accepted and the
+        entered text
+    @rtype tuple of (bool, str)
+    """
+    dlg = EricTextInputDialog(parent)
+    dlg.setWindowTitle(title)
+    dlg.setLabelText(label)
+    dlg.setTextEchoMode(mode)
+    dlg.setTextValue(text)
+    dlg.setMinimumWidth(minimumWidth)
+    
+    if dlg.exec() == QDialog.DialogCode.Accepted:
+        return True, dlg.textValue()
+    else:
+        return False, ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricTextSpinBox.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a spinbox with textual entries.
+"""
+
+from PyQt6.QtWidgets import QSpinBox
+
+
+class EricTextSpinBox(QSpinBox):
+    """
+    Class implementing a spinbox with textual entries.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        self.__items = []
+        
+        self.setMinimum(0)
+        self.setMaximum(0)
+    
+    def addItem(self, txt, data=None):
+        """
+        Public method to add an item with item data.
+        
+        @param txt text to be shown (string)
+        @param data associated data
+        """
+        self.__items.append((txt, data))
+        self.setMaximum(len(self.__items) - 1)
+    
+    def itemData(self, index):
+        """
+        Public method to retrieve the data associated with an item.
+        
+        @param index index of the item (integer)
+        @return associated data
+        """
+        try:
+            return self.__items[index][1]
+        except IndexError:
+            return None
+    
+    def currentIndex(self):
+        """
+        Public method to retrieve the current index.
+        
+        @return current index (integer)
+        """
+        return self.value()
+    
+    def textFromValue(self, value):
+        """
+        Public method to convert a value to text.
+        
+        @param value value to be converted (integer)
+        @return text for the given value (string)
+        """
+        try:
+            return self.__items[value][0]
+        except IndexError:
+            return ""
+    
+    def valueFromText(self, txt):
+        """
+        Public method to convert a text to a value.
+        
+        @param txt text to be converted (string)
+        @return value for the given text (integer)
+        """
+        for index in range(len(self.__items)):
+            if self.__items[index][0] == txt:
+                return index
+        
+        return self.minimum()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricToolBarDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,525 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a toolbar configuration dialog.
+"""
+
+from PyQt6.QtCore import pyqtSlot, Qt
+from PyQt6.QtGui import QColor
+from PyQt6.QtWidgets import (
+    QDialog, QDialogButtonBox, QTreeWidgetItem, QInputDialog, QLineEdit,
+    QListWidgetItem, QAbstractButton
+)
+
+from EricWidgets import EricMessageBox
+
+from .Ui_EricToolBarDialog import Ui_EricToolBarDialog
+
+import UI.PixmapCache
+
+
+class EricToolBarItem:
+    """
+    Class storing data belonging to a toolbar entry of the toolbar dialog.
+    """
+    def __init__(self, toolBarId, actionIDs, default):
+        """
+        Constructor
+        
+        @param toolBarId id of the toolbar object (integer)
+        @param actionIDs list of action IDs belonging to the toolbar
+            (list of integer)
+        @param default flag indicating a default toolbar (boolean)
+        """
+        self.toolBarId = toolBarId
+        self.actionIDs = actionIDs[:]
+        self.isDefault = default
+        self.title = ""
+        self.isChanged = False
+    
+
+class EricToolBarDialog(QDialog, Ui_EricToolBarDialog):
+    """
+    Class implementing a toolbar configuration dialog.
+    """
+    ActionIdRole = Qt.ItemDataRole.UserRole
+    WidgetActionRole = Qt.ItemDataRole.UserRole + 1
+    
+    def __init__(self, toolBarManager, parent=None):
+        """
+        Constructor
+        
+        @param toolBarManager reference to a toolbar manager object
+            (EricToolBarManager)
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        self.__manager = toolBarManager
+        self.__toolbarItems = {}
+        # maps toolbar item IDs to toolbar items
+        self.__currentToolBarItem = None
+        self.__removedToolBarIDs = []
+        # remember custom toolbars to be deleted
+        
+        self.__widgetActionToToolBarItemID = {}
+        # maps widget action IDs to toolbar item IDs
+        self.__toolBarItemToWidgetActionID = {}
+        # maps toolbar item IDs to widget action IDs
+        
+        self.upButton.setIcon(UI.PixmapCache.getIcon("1uparrow"))
+        self.downButton.setIcon(UI.PixmapCache.getIcon("1downarrow"))
+        self.leftButton.setIcon(UI.PixmapCache.getIcon("1leftarrow"))
+        self.rightButton.setIcon(UI.PixmapCache.getIcon("1rightarrow"))
+        
+        self.__restoreDefaultsButton = self.buttonBox.button(
+            QDialogButtonBox.StandardButton.RestoreDefaults)
+        self.__resetButton = self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Reset)
+        
+        self.actionsTree.header().hide()
+        self.__separatorText = self.tr("--Separator--")
+        itm = QTreeWidgetItem(self.actionsTree, [self.__separatorText])
+        self.actionsTree.setCurrentItem(itm)
+        
+        for category in sorted(self.__manager.categories()):
+            categoryItem = QTreeWidgetItem(self.actionsTree, [category])
+            for action in self.__manager.categoryActions(category):
+                item = QTreeWidgetItem(categoryItem)
+                item.setText(0, action.text())
+                item.setIcon(0, action.icon())
+                item.setTextAlignment(
+                    0,
+                    Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter
+                )
+                item.setData(0, EricToolBarDialog.ActionIdRole, int(id(action)))
+                item.setData(0, EricToolBarDialog.WidgetActionRole, False)
+                if self.__manager.isWidgetAction(action):
+                    item.setData(0, EricToolBarDialog.WidgetActionRole, True)
+                    item.setData(0, Qt.ItemDataRole.ForegroundRole,
+                                 QColor(Qt.GlobalColor.blue))
+                    self.__widgetActionToToolBarItemID[id(action)] = None
+            categoryItem.setExpanded(True)
+        
+        for tbID, actions in list(self.__manager.toolBarsActions().items()):
+            tb = self.__manager.toolBarById(tbID)
+            default = self.__manager.isDefaultToolBar(tb)
+            tbItem = EricToolBarItem(tbID, [], default)
+            self.__toolbarItems[id(tbItem)] = tbItem
+            self.__toolBarItemToWidgetActionID[id(tbItem)] = []
+            actionIDs = []
+            for action in actions:
+                if action is None:
+                    actionIDs.append(None)
+                else:
+                    aID = id(action)
+                    actionIDs.append(aID)
+                    if aID in self.__widgetActionToToolBarItemID:
+                        self.__widgetActionToToolBarItemID[aID] = id(tbItem)
+                        self.__toolBarItemToWidgetActionID[id(tbItem)].append(
+                            aID)
+            tbItem.actionIDs = actionIDs
+            self.toolbarComboBox.addItem(tb.windowTitle(), int(id(tbItem)))
+            if default:
+                self.toolbarComboBox.setItemData(
+                    self.toolbarComboBox.count() - 1,
+                    QColor(Qt.GlobalColor.darkGreen),
+                    Qt.ItemDataRole.ForegroundRole)
+        self.toolbarComboBox.model().sort(0)
+        
+        self.toolbarComboBox.currentIndexChanged[int].connect(
+            self.__toolbarComboBox_currentIndexChanged)
+        self.toolbarComboBox.setCurrentIndex(0)
+    
+    @pyqtSlot()
+    def on_newButton_clicked(self):
+        """
+        Private slot to create a new toolbar.
+        """
+        name, ok = QInputDialog.getText(
+            self,
+            self.tr("New Toolbar"),
+            self.tr("Toolbar Name:"),
+            QLineEdit.EchoMode.Normal)
+        if ok and name:
+            if self.toolbarComboBox.findText(name) != -1:
+                # toolbar with this name already exists
+                EricMessageBox.critical(
+                    self,
+                    self.tr("New Toolbar"),
+                    self.tr(
+                        """A toolbar with the name <b>{0}</b> already"""
+                        """ exists.""")
+                    .format(name))
+                return
+            
+            tbItem = EricToolBarItem(None, [], False)
+            tbItem.title = name
+            tbItem.isChanged = True
+            self.__toolbarItems[id(tbItem)] = tbItem
+            self.__toolBarItemToWidgetActionID[id(tbItem)] = []
+            self.toolbarComboBox.addItem(name, int(id(tbItem)))
+            self.toolbarComboBox.model().sort(0)
+            self.toolbarComboBox.setCurrentIndex(
+                self.toolbarComboBox.findText(name))
+    
+    @pyqtSlot()
+    def on_removeButton_clicked(self):
+        """
+        Private slot to remove a custom toolbar.
+        """
+        name = self.toolbarComboBox.currentText()
+        res = EricMessageBox.yesNo(
+            self,
+            self.tr("Remove Toolbar"),
+            self.tr(
+                """Should the toolbar <b>{0}</b> really be removed?""")
+            .format(name))
+        if res:
+            index = self.toolbarComboBox.currentIndex()
+            tbItemID = self.toolbarComboBox.itemData(index)
+            tbItem = self.__toolbarItems[tbItemID]
+            if (
+                tbItem.toolBarId is not None and
+                tbItem.toolBarId not in self.__removedToolBarIDs
+            ):
+                self.__removedToolBarIDs.append(tbItem.toolBarId)
+            del self.__toolbarItems[tbItemID]
+            for widgetActionID in self.__toolBarItemToWidgetActionID[tbItemID]:
+                self.__widgetActionToToolBarItemID[widgetActionID] = None
+            del self.__toolBarItemToWidgetActionID[tbItemID]
+            self.toolbarComboBox.removeItem(index)
+    
+    @pyqtSlot()
+    def on_renameButton_clicked(self):
+        """
+        Private slot to rename a custom toolbar.
+        """
+        oldName = self.toolbarComboBox.currentText()
+        newName, ok = QInputDialog.getText(
+            self,
+            self.tr("Rename Toolbar"),
+            self.tr("New Toolbar Name:"),
+            QLineEdit.EchoMode.Normal,
+            oldName)
+        if ok and newName:
+            if oldName == newName:
+                return
+            if self.toolbarComboBox.findText(newName) != -1:
+                # toolbar with this name already exists
+                EricMessageBox.critical(
+                    self,
+                    self.tr("Rename Toolbar"),
+                    self.tr(
+                        """A toolbar with the name <b>{0}</b> already"""
+                        """ exists.""")
+                    .format(newName))
+                return
+            index = self.toolbarComboBox.currentIndex()
+            self.toolbarComboBox.setItemText(index, newName)
+            tbItem = self.__toolbarItems[self.toolbarComboBox.itemData(index)]
+            tbItem.title = newName
+            tbItem.isChanged = True
+    
+    def __setupButtons(self):
+        """
+        Private slot to set the buttons state.
+        """
+        index = self.toolbarComboBox.currentIndex()
+        if index > -1:
+            itemID = self.toolbarComboBox.itemData(index)
+            self.__currentToolBarItem = self.__toolbarItems[itemID]
+            self.renameButton.setEnabled(
+                not self.__currentToolBarItem.isDefault)
+            self.removeButton.setEnabled(
+                not self.__currentToolBarItem.isDefault)
+            self.__restoreDefaultsButton.setEnabled(
+                self.__currentToolBarItem.isDefault)
+            self.__resetButton.setEnabled(
+                self.__currentToolBarItem.toolBarId is not None)
+        
+        row = self.toolbarActionsList.currentRow()
+        self.upButton.setEnabled(row > 0)
+        self.downButton.setEnabled(row < self.toolbarActionsList.count() - 1)
+        self.leftButton.setEnabled(self.toolbarActionsList.count() > 0)
+        rightEnable = (
+            self.actionsTree.currentItem().parent() is not None or
+            self.actionsTree.currentItem().text(0) == self.__separatorText
+        )
+        self.rightButton.setEnabled(rightEnable)
+    
+    @pyqtSlot(int)
+    def __toolbarComboBox_currentIndexChanged(self, index):
+        """
+        Private slot called upon a selection of the current toolbar.
+        
+        @param index index of the new current toolbar (integer)
+        """
+        itemID = self.toolbarComboBox.itemData(index)
+        self.__currentToolBarItem = self.__toolbarItems[itemID]
+        self.toolbarActionsList.clear()
+        for actionID in self.__currentToolBarItem.actionIDs:
+            item = QListWidgetItem(self.toolbarActionsList)
+            if actionID is None:
+                item.setText(self.__separatorText)
+            else:
+                action = self.__manager.actionById(actionID)
+                item.setText(action.text())
+                item.setIcon(action.icon())
+                item.setTextAlignment(Qt.AlignmentFlag.AlignLeft |
+                                      Qt.AlignmentFlag.AlignVCenter)
+                item.setData(EricToolBarDialog.ActionIdRole, int(id(action)))
+                item.setData(EricToolBarDialog.WidgetActionRole, False)
+                if self.__manager.isWidgetAction(action):
+                    item.setData(EricToolBarDialog.WidgetActionRole, True)
+                    item.setData(Qt.ItemDataRole.ForegroundRole,
+                                 QColor(Qt.GlobalColor.blue))
+        self.toolbarActionsList.setCurrentRow(0)
+        
+        self.__setupButtons()
+    
+    @pyqtSlot(QTreeWidgetItem, QTreeWidgetItem)
+    def on_actionsTree_currentItemChanged(self, current, previous):
+        """
+        Private slot called, when the currently selected action changes.
+        
+        @param current reference to the current item (QTreeWidgetItem)
+        @param previous reference to the previous current item
+            (QTreeWidgetItem)
+        """
+        self.__setupButtons()
+    
+    @pyqtSlot(QListWidgetItem, QListWidgetItem)
+    def on_toolbarActionsList_currentItemChanged(self, current, previous):
+        """
+        Private slot to handle a change of the current item.
+        
+        @param current reference to the current item (QListWidgetItem)
+        @param previous reference to the previous current item
+            (QListWidgetItem)
+        """
+        self.__setupButtons()
+    
+    @pyqtSlot()
+    def on_upButton_clicked(self):
+        """
+        Private slot used to move an action up in the list.
+        """
+        row = self.toolbarActionsList.currentRow()
+        if row == 0:
+            # we're already at the top
+            return
+        
+        actionID = self.__currentToolBarItem.actionIDs.pop(row)
+        self.__currentToolBarItem.actionIDs.insert(row - 1, actionID)
+        self.__currentToolBarItem.isChanged = True
+        itm = self.toolbarActionsList.takeItem(row)
+        self.toolbarActionsList.insertItem(row - 1, itm)
+        self.toolbarActionsList.setCurrentItem(itm)
+        self.__setupButtons()
+    
+    @pyqtSlot()
+    def on_downButton_clicked(self):
+        """
+        Private slot used to move an action down in the list.
+        """
+        row = self.toolbarActionsList.currentRow()
+        if row == self.toolbarActionsList.count() - 1:
+            # we're already at the end
+            return
+        
+        actionID = self.__currentToolBarItem.actionIDs.pop(row)
+        self.__currentToolBarItem.actionIDs.insert(row + 1, actionID)
+        self.__currentToolBarItem.isChanged = True
+        itm = self.toolbarActionsList.takeItem(row)
+        self.toolbarActionsList.insertItem(row + 1, itm)
+        self.toolbarActionsList.setCurrentItem(itm)
+        self.__setupButtons()
+    
+    @pyqtSlot()
+    def on_leftButton_clicked(self):
+        """
+        Private slot to delete an action from the list.
+        """
+        row = self.toolbarActionsList.currentRow()
+        actionID = self.__currentToolBarItem.actionIDs.pop(row)
+        self.__currentToolBarItem.isChanged = True
+        if actionID in self.__widgetActionToToolBarItemID:
+            self.__widgetActionToToolBarItemID[actionID] = None
+            self.__toolBarItemToWidgetActionID[
+                id(self.__currentToolBarItem)].remove(actionID)
+        itm = self.toolbarActionsList.takeItem(row)
+        del itm
+        self.toolbarActionsList.setCurrentRow(row)
+        self.__setupButtons()
+    
+    @pyqtSlot()
+    def on_rightButton_clicked(self):
+        """
+        Private slot to add an action to the list.
+        """
+        row = self.toolbarActionsList.currentRow() + 1
+            
+        item = QListWidgetItem()
+        if self.actionsTree.currentItem().text(0) == self.__separatorText:
+            item.setText(self.__separatorText)
+            actionID = None
+        else:
+            actionID = self.actionsTree.currentItem().data(
+                0, EricToolBarDialog.ActionIdRole)
+            action = self.__manager.actionById(actionID)
+            item.setText(action.text())
+            item.setIcon(action.icon())
+            item.setTextAlignment(Qt.AlignmentFlag.AlignLeft |
+                                  Qt.AlignmentFlag.AlignVCenter)
+            item.setData(EricToolBarDialog.ActionIdRole, int(id(action)))
+            item.setData(EricToolBarDialog.WidgetActionRole, False)
+            if self.__manager.isWidgetAction(action):
+                item.setData(EricToolBarDialog.WidgetActionRole, True)
+                item.setData(Qt.ItemDataRole.ForegroundRole,
+                             QColor(Qt.GlobalColor.blue))
+                oldTbItemID = self.__widgetActionToToolBarItemID[actionID]
+                if oldTbItemID is not None:
+                    self.__toolbarItems[oldTbItemID].actionIDs.remove(actionID)
+                    self.__toolbarItems[oldTbItemID].isChanged = True
+                    self.__toolBarItemToWidgetActionID[oldTbItemID].remove(
+                        actionID)
+                self.__widgetActionToToolBarItemID[actionID] = id(
+                    self.__currentToolBarItem)
+                self.__toolBarItemToWidgetActionID[
+                    id(self.__currentToolBarItem)].append(actionID)
+        self.toolbarActionsList.insertItem(row, item)
+        self.__currentToolBarItem.actionIDs.insert(row, actionID)
+        self.__currentToolBarItem.isChanged = True
+        self.toolbarActionsList.setCurrentRow(row)
+        self.__setupButtons()
+    
+    @pyqtSlot(QAbstractButton)
+    def on_buttonBox_clicked(self, button):
+        """
+        Private slot called, when a button of the button box was clicked.
+        
+        @param button reference to the button clicked (QAbstractButton)
+        """
+        if button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Cancel
+        ):
+            self.reject()
+        elif button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Apply
+        ):
+            self.__saveToolBars()
+            self.__setupButtons()
+        elif button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Ok
+        ):
+            self.__saveToolBars()
+            self.accept()
+        elif button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.Reset
+        ):
+            self.__resetCurrentToolbar()
+            self.__setupButtons()
+        elif button == self.buttonBox.button(
+            QDialogButtonBox.StandardButton.RestoreDefaults
+        ):
+            self.__restoreCurrentToolbarToDefault()
+            self.__setupButtons()
+    
+    def __saveToolBars(self):
+        """
+        Private method to save the configured toolbars.
+        
+        @exception RuntimeError raised to indicate an invalid action
+        """
+        # step 1: remove toolbars marked for deletion
+        for tbID in self.__removedToolBarIDs:
+            tb = self.__manager.toolBarById(tbID)
+            self.__manager.deleteToolBar(tb)
+        self.__removedToolBarIDs = []
+        
+        # step 2: save configured toolbars
+        for tbItem in list(self.__toolbarItems.values()):
+            if not tbItem.isChanged:
+                continue
+            
+            if tbItem.toolBarId is None:
+                # new custom toolbar
+                tb = self.__manager.createToolBar(tbItem.title)
+                tbItem.toolBarId = id(tb)
+            else:
+                tb = self.__manager.toolBarById(tbItem.toolBarId)
+                if not tbItem.isDefault and tbItem.title:
+                    self.__manager.renameToolBar(tb, tbItem.title)
+            
+            actions = []
+            for actionID in tbItem.actionIDs:
+                if actionID is None:
+                    actions.append(None)
+                else:
+                    action = self.__manager.actionById(actionID)
+                    if action is None:
+                        raise RuntimeError(
+                            "No such action, id: 0x{0:x}".format(actionID))
+                    actions.append(action)
+            self.__manager.setToolBar(tb, actions)
+            tbItem.isChanged = False
+    
+    def __restoreCurrentToolbar(self, actions):
+        """
+        Private methdo to restore the current toolbar to the given list of
+        actions.
+        
+        @param actions list of actions to set for the current toolbar
+        (list of QAction)
+        """
+        tbItemID = id(self.__currentToolBarItem)
+        for widgetActionID in self.__toolBarItemToWidgetActionID[tbItemID]:
+            self.__widgetActionToToolBarItemID[widgetActionID] = None
+        self.__toolBarItemToWidgetActionID[tbItemID] = []
+        self.__currentToolBarItem.actionIDs = []
+        
+        for action in actions:
+            if action is None:
+                self.__currentToolBarItem.actionIDs.append(None)
+            else:
+                actionID = id(action)
+                self.__currentToolBarItem.actionIDs.append(actionID)
+                if actionID in self.__widgetActionToToolBarItemID:
+                    oldTbItemID = self.__widgetActionToToolBarItemID[actionID]
+                    if oldTbItemID is not None:
+                        self.__toolbarItems[oldTbItemID].actionIDs.remove(
+                            actionID)
+                        self.__toolbarItems[oldTbItemID].isChanged = True
+                        self.__toolBarItemToWidgetActionID[oldTbItemID].remove(
+                            actionID)
+                    self.__widgetActionToToolBarItemID[actionID] = tbItemID
+                    self.__toolBarItemToWidgetActionID[tbItemID].append(
+                        actionID)
+        self.__toolbarComboBox_currentIndexChanged(
+            self.toolbarComboBox.currentIndex())
+    
+    def __resetCurrentToolbar(self):
+        """
+        Private method to revert all changes made to the current toolbar.
+        """
+        tbID = self.__currentToolBarItem.toolBarId
+        actions = self.__manager.toolBarActions(tbID)
+        self.__restoreCurrentToolbar(actions)
+        self.__currentToolBarItem.isChanged = False
+    
+    def __restoreCurrentToolbarToDefault(self):
+        """
+        Private method to set the current toolbar to its default configuration.
+        """
+        if not self.__currentToolBarItem.isDefault:
+            return
+        
+        tbID = self.__currentToolBarItem.toolBarId
+        actions = self.__manager.defaultToolBarActions(tbID)
+        self.__restoreCurrentToolbar(actions)
+        self.__currentToolBarItem.isChanged = True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricToolBarDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EricToolBarDialog</class>
+ <widget class="QDialog" name="EricToolBarDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>600</width>
+    <height>500</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Configure Toolbars</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout">
+   <item>
+    <layout class="QHBoxLayout">
+     <item>
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>&amp;Toolbar:</string>
+       </property>
+       <property name="buddy">
+        <cstring>toolbarComboBox</cstring>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QComboBox" name="toolbarComboBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="toolTip">
+        <string>Select the toolbar to configure</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="newButton">
+       <property name="toolTip">
+        <string>Press to create a new toolbar</string>
+       </property>
+       <property name="text">
+        <string>&amp;New</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="removeButton">
+       <property name="toolTip">
+        <string>Press to remove the selected toolbar</string>
+       </property>
+       <property name="text">
+        <string>&amp;Remove</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="renameButton">
+       <property name="toolTip">
+        <string>Press to rename the selected toolbar</string>
+       </property>
+       <property name="text">
+        <string>R&amp;ename</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="Line" name="line">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QGridLayout">
+     <item row="0" column="0">
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Actions:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="0" column="2">
+      <widget class="QLabel" name="label_3">
+       <property name="text">
+        <string>Current Toolbar Actions:</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="0" rowspan="3">
+      <widget class="QTreeWidget" name="actionsTree">
+       <property name="toolTip">
+        <string>Select the action to add to the current toolbar</string>
+       </property>
+       <property name="alternatingRowColors">
+        <bool>true</bool>
+       </property>
+       <property name="rootIsDecorated">
+        <bool>false</bool>
+       </property>
+       <column>
+        <property name="text">
+         <string/>
+        </property>
+       </column>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <spacer>
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="1" column="2" rowspan="3">
+      <widget class="QListWidget" name="toolbarActionsList">
+       <property name="toolTip">
+        <string>Select the action to work on</string>
+       </property>
+       <property name="whatsThis">
+        <string>&lt;b&gt;Current Toolbar Actions&lt;/b&gt;&lt;p&gt;This list shows the actions of the selected toolbar. Select an action and use the up or down button to change the order of actions or the left button to delete it. To add an action to the toolbar, select it in the list of available actions and press the right button.&lt;/p&gt;</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <layout class="QGridLayout">
+       <property name="spacing">
+        <number>0</number>
+       </property>
+       <item row="0" column="1">
+        <widget class="QToolButton" name="upButton">
+         <property name="toolTip">
+          <string>Press to move the selected action up.</string>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QToolButton" name="leftButton">
+         <property name="toolTip">
+          <string>Press to delete the selected action from the toolbar</string>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="2">
+        <widget class="QToolButton" name="rightButton">
+         <property name="toolTip">
+          <string>Press to add the selected action to the toolbar</string>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1">
+        <widget class="QToolButton" name="downButton">
+         <property name="toolTip">
+          <string>Press to move the selected action down.</string>
+         </property>
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item row="3" column="1">
+      <spacer>
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>toolbarComboBox</tabstop>
+  <tabstop>newButton</tabstop>
+  <tabstop>removeButton</tabstop>
+  <tabstop>renameButton</tabstop>
+  <tabstop>actionsTree</tabstop>
+  <tabstop>toolbarActionsList</tabstop>
+  <tabstop>upButton</tabstop>
+  <tabstop>downButton</tabstop>
+  <tabstop>rightButton</tabstop>
+  <tabstop>leftButton</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricToolBarManager.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,728 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a toolbar manager class.
+"""
+
+from PyQt6.QtCore import QObject, QByteArray, QDataStream, QIODevice
+from PyQt6.QtWidgets import QToolBar
+
+import Utilities
+
+
+class EricToolBarManager(QObject):
+    """
+    Class implementing a toolbar manager.
+    """
+    VersionMarker = 0xffff
+    ToolBarMarker = 0xfefe
+    CustomToolBarMarker = 0xfdfd
+    
+    def __init__(self, ui=None, parent=None):
+        """
+        Constructor
+        
+        @param ui reference to the user interface object (UI.UserInterface)
+        @param parent reference to the parent object (QObject)
+        """
+        super().__init__(parent)
+        
+        self.__mainWindow = None
+        self.__ui = ui
+        
+        self.__toolBars = {}
+        # maps toolbar IDs to actions
+        self.__toolBarsWithSeparators = {}
+        # maps toolbar IDs to actions incl. separators
+        self.__defaultToolBars = {}
+        # maps default toolbar IDs to actions
+        self.__customToolBars = []
+        # list of custom toolbars
+        self.__allToolBars = {}
+        # maps toolbar IDs to toolbars
+        
+        self.__categoryToActions = {}
+        # maps categories to actions
+        self.__actionToCategory = {}
+        # maps action IDs to categories
+        self.__allActions = {}
+        # maps action IDs to actions
+        self.__actionToToolBars = {}
+        # maps action IDs to toolbars
+        
+        self.__widgetActions = {}
+        # maps widget action IDs to toolbars
+        self.__allWidgetActions = {}
+        # maps widget action IDs to widget actions
+    
+    ######################################################
+    ## Private methods
+    ######################################################
+    
+    def __toolBarByName(self, name):
+        """
+        Private slot to get a toolbar by its object name.
+        
+        @param name object name of the toolbar (string)
+        @return reference to the toolbar (QToolBar)
+        """
+        for toolBar in list(self.__allToolBars.values()):
+            if toolBar.objectName() == name:
+                return toolBar
+        return None
+    
+    def __findAction(self, name):
+        """
+        Private method to find an action by name.
+        
+        @param name name of the action to search for (string)
+        @return reference to the action (QAction)
+        """
+        # check objectName() first
+        for action in list(self.__allActions.values()):
+            if action.objectName() == name:
+                return action
+        
+        # check text() next
+        for action in list(self.__allActions.values()):
+            if action.text() == name:
+                return action
+        
+        return None
+    
+    def __findDefaultToolBar(self, name):
+        """
+        Private method to find a default toolbar by name.
+        
+        @param name name of the default toolbar to search for (string)
+        @return reference to the default toolbar (QToolBar)
+        """
+        # check objectName() first
+        for tbID in self.__defaultToolBars:
+            tb = self.__allToolBars[tbID]
+            if tb.objectName() == name:
+                return tb
+        
+        # check windowTitle() next
+        for tbID in self.__defaultToolBars:
+            tb = self.__allToolBars[tbID]
+            if tb.windowTitle() == name:
+                return tb
+        
+        return None
+    
+    ######################################################
+    ## Public methods
+    ######################################################
+    
+    def setMainWindow(self, mainWindow):
+        """
+        Public method to set the reference to the main window.
+        
+        @param mainWindow reference to the main window (QMainWindow)
+        """
+        self.__mainWindow = mainWindow
+    
+    def mainWindow(self):
+        """
+        Public method to get the reference to the main window.
+        
+        @return reference to the main window (QMainWindow)
+        """
+        return self.__mainWindow
+    
+    def addToolBar(self, toolBar, category):
+        """
+        Public method to add a toolbar to be managed.
+        
+        @param toolBar reference to the toolbar to be managed (QToolBar)
+        @param category category for the toolbar (string)
+        """
+        if toolBar is None:
+            return
+        
+        newActions = []
+        newActionsWithSeparators = []
+        actions = toolBar.actions()
+        for action in actions:
+            actID = id(action)
+            self.addAction(action, category)
+            if actID in self.__widgetActions:
+                self.__widgetActions[actID] = toolBar
+            newActionsWithSeparators.append(action)
+            if action.isSeparator():
+                action = None
+            else:
+                if toolBar not in self.__actionToToolBars[actID]:
+                    self.__actionToToolBars[actID].append(toolBar)
+            newActions.append(action)
+        tbID = id(toolBar)
+        self.__defaultToolBars[tbID] = newActions
+        self.__toolBars[tbID] = newActions
+        self.__toolBarsWithSeparators[tbID] = newActionsWithSeparators
+        self.__allToolBars[tbID] = toolBar
+    
+    def removeToolBar(self, toolBar):
+        """
+        Public method to remove a toolbar added with addToolBar().
+        
+        @param toolBar reference to the toolbar to be removed (QToolBar)
+        """
+        if toolBar is None:
+            return
+        
+        tbID = id(toolBar)
+        
+        if tbID not in self.__defaultToolBars:
+            return
+        
+        defaultActions = self.__defaultToolBars[tbID][:]
+        self.setToolBar(toolBar, [])
+        for action in defaultActions:
+            self.removeAction(action)
+        
+        del self.__defaultToolBars[tbID]
+        del self.__toolBars[tbID]
+        del self.__toolBarsWithSeparators[tbID]
+        del self.__allToolBars[tbID]
+        
+        for action in defaultActions:
+            if action is None:
+                toolBar.addSeparator()
+            else:
+                toolBar.addAction(action)
+    
+    def setToolBars(self, toolBars):
+        """
+        Public method to set the actions of several toolbars.
+        
+        @param toolBars dictionary with toolbar id as key and
+            a list of actions as value
+        """
+        for key, actions in list(toolBars.items()):
+            tb = self.__allToolBars[key]
+            self.setToolBar(tb, actions)
+    
+    def setToolBar(self, toolBar, actions):
+        """
+        Public method to set the actions of a toolbar.
+        
+        @param toolBar reference to the toolbar to configure (QToolBar)
+        @param actions list of actions to be set (list of QAction)
+        """
+        if toolBar is None:
+            return
+        
+        tbID = id(toolBar)
+        if tbID not in self.__toolBars:
+            return
+        if self.__toolBars[tbID] == actions:
+            return
+        
+        # step 1: check list of actions
+        toRemove = {}
+        newActions = []
+        for action in actions:
+            if (
+                action is None or
+                (action not in newActions and
+                 id(action) in self.__allActions)
+            ):
+                newActions.append(action)
+            oldTB = self.toolBarWidgetAction(action)
+            if oldTB is not None and oldTB != toolBar:
+                if id(oldTB) not in toRemove:
+                    toRemove[id(oldTB)] = []
+                toRemove[id(oldTB)].append(action)
+        self.removeWidgetActions(toRemove)
+        
+        # step 2: remove all toolbar actions
+        for action in self.__toolBarsWithSeparators[tbID]:
+            if self.toolBarWidgetAction(action) == tbID:
+                self.__widgetActions[id(action)] = None
+            toolBar.removeAction(action)
+            if action.isSeparator():
+                del action
+            else:
+                self.__actionToToolBars[id(action)].remove(toolBar)
+        
+        # step 3: set the actions as requested
+        newActionsWithSeparators = []
+        for action in newActions:
+            newAction = None
+            if action is None:
+                newAction = toolBar.addSeparator()
+            elif id(action) in self.__allActions:
+                toolBar.addAction(action)
+                newAction = action
+                self.__actionToToolBars[id(action)].append(toolBar)
+                if id(action) in self.__widgetActions:
+                    self.__widgetActions[id(action)] = toolBar
+            else:
+                continue
+            newActionsWithSeparators.append(newAction)
+        
+        if toolBar.isVisible():
+            toolBar.hide()
+            toolBar.show()
+        self.__toolBars[tbID] = newActions
+        self.__toolBarsWithSeparators[tbID] = newActionsWithSeparators
+    
+    def resetToolBar(self, toolBar):
+        """
+        Public method to reset a toolbar to its default state.
+        
+        @param toolBar reference to the toolbar to configure (QToolBar)
+        """
+        if not self.isDefaultToolBar():
+            return
+        self.setToolBar(toolBar, self.__defaultToolBars[id(toolBar)])
+    
+    def resetAllToolBars(self):
+        """
+        Public method to reset all toolbars to their default state.
+        """
+        self.setToolBars(self.__defaultToolBars)
+        for toolBar in self.__customToolBars[:]:
+            self.deleteToolBar(toolBar)
+        
+    def defaultToolBars(self):
+        """
+        Public method to get all toolbars added with addToolBar().
+        
+        @return list of all default toolbars (list of QToolBar)
+        """
+        return list(self.__defaultToolBars.values())
+    
+    def isDefaultToolBar(self, toolBar):
+        """
+        Public method to check, if a toolbar was added with addToolBar().
+        
+        @param toolBar reference to the toolbar to be checked (QToolBar)
+        @return flag indicating an added toolbar (boolean)
+        """
+        return (
+            toolBar is not None and
+            id(toolBar) in self.__defaultToolBars
+        )
+    
+    def createToolBar(self, title, name=""):
+        """
+        Public method to create a custom toolbar.
+        
+        @param title title to be used for the toolbar (string)
+        @param name optional name for the new toolbar (string)
+        @return reference to the created toolbar (QToolBar)
+        """
+        if self.__mainWindow is None:
+            return None
+        
+        toolBar = QToolBar(title, self.__mainWindow)
+        toolBar.setToolTip(title)
+        if not name:
+            index = 1
+            customPrefix = "__CustomPrefix__"
+            name = "{0}{1:d}".format(customPrefix, index)
+            while self.__toolBarByName(name) is not None:
+                index += 1
+                name = "{0}{1:d}".format(customPrefix, index)
+        toolBar.setObjectName(name)
+        self.__mainWindow.addToolBar(toolBar)
+        
+        tbID = id(toolBar)
+        self.__customToolBars.append(toolBar)
+        self.__allToolBars[tbID] = toolBar
+        self.__toolBars[tbID] = []
+        self.__toolBarsWithSeparators[tbID] = []
+        
+        if self.__ui is not None:
+            toolBar.setIconSize(self.__ui.getToolBarIconSize())
+            self.__ui.registerToolbar(name, title, toolBar)
+        
+        return toolBar
+    
+    def deleteToolBar(self, toolBar):
+        """
+        Public method to remove a custom toolbar created with createToolBar().
+        
+        @param toolBar reference to the toolbar to be managed (QToolBar)
+        """
+        if toolBar is None:
+            return
+        
+        tbID = id(toolBar)
+        if tbID not in self.__toolBars:
+            return
+        if tbID in self.__defaultToolBars:
+            return
+        
+        if self.__ui is not None:
+            self.__ui.unregisterToolbar(toolBar.objectName())
+        
+        self.setToolBar(toolBar, [])
+        
+        del self.__allToolBars[tbID]
+        del self.__toolBars[tbID]
+        del self.__toolBarsWithSeparators[tbID]
+        self.__customToolBars.remove(toolBar)
+        self.__mainWindow.removeToolBar(toolBar)
+        del toolBar
+    
+    def renameToolBar(self, toolBar, title):
+        """
+        Public method to give a toolbar a new title.
+        
+        @param toolBar reference to the toolbar to be managed (QToolBar)
+        @param title title to be used for the toolbar (string)
+        """
+        if toolBar is None:
+            return
+        
+        toolBar.setWindowTitle(title)
+        
+        if self.__ui is not None:
+            self.__ui.reregisterToolbar(toolBar.objectName(), title)
+    
+    def toolBars(self):
+        """
+        Public method to get all toolbars.
+        
+        @return list of all toolbars (list of QToolBar)
+        """
+        return list(self.__allToolBars.values())
+    
+    def addAction(self, action, category):
+        """
+        Public method to add an action to be managed.
+        
+        @param action reference to the action to be managed (QAction)
+        @param category category for the toolbar (string)
+        """
+        if action is None:
+            return
+        if action.isSeparator():
+            return
+        if id(action) in self.__allActions:
+            return
+        
+        if action.metaObject().className() == "QWidgetAction":
+            self.__widgetActions[id(action)] = None
+            self.__allWidgetActions[id(action)] = action
+        self.__allActions[id(action)] = action
+        if category not in self.__categoryToActions:
+            self.__categoryToActions[category] = []
+        self.__categoryToActions[category].append(action)
+        self.__actionToCategory[id(action)] = category
+        self.__actionToToolBars[id(action)] = []
+    
+    def addActions(self, actions, category):
+        """
+        Public method to add actions to be managed.
+        
+        @param actions list of actions to be managed
+        @type list of QAction
+        @param category category for the toolbar
+        @type str
+        """
+        for action in actions:
+            self.addAction(action, category)
+    
+    def removeAction(self, action):
+        """
+        Public method to remove an action from the manager.
+        
+        @param action reference to the action to be removed (QAction)
+        """
+        aID = id(action)
+        
+        if aID not in self.__allActions:
+            return
+        
+        toolBars = self.__actionToToolBars[aID]
+        for toolBar in toolBars:
+            tbID = id(toolBar)
+            self.__toolBars[tbID].remove(action)
+            self.__toolBarsWithSeparators[tbID].remove(action)
+            toolBar.removeAction(action)
+            if toolBar.isVisible():
+                toolBar.hide()
+                toolBar.show()
+        
+        for tbID in self.__defaultToolBars:
+            if action in self.__defaultToolBars[tbID]:
+                self.__defaultToolBars[tbID].remove(action)
+        
+        del self.__allActions[aID]
+        if aID in self.__widgetActions:
+            del self.__widgetActions[aID]
+            del self.__allWidgetActions[aID]
+        del self.__actionToCategory[aID]
+        del self.__actionToToolBars[aID]
+        
+        for category in self.__categoryToActions:
+            if action in self.__categoryToActions[category]:
+                self.__categoryToActions[category].remove(action)
+    
+    def removeCategoryActions(self, category):
+        """
+        Public method to remove the actions belonging to a category.
+        
+        @param category category for the actions (string)
+        """
+        for action in self.categoryActions(category):
+            self.removeAction(action)
+    
+    def saveState(self, version=0):
+        """
+        Public method to save the state of the toolbar manager.
+        
+        @param version version number stored with the data (integer)
+        @return saved state as a byte array (QByteArray)
+        """
+        data = QByteArray()
+        stream = QDataStream(data, QIODevice.OpenModeFlag.WriteOnly)
+        stream.setVersion(QDataStream.Version.Qt_4_6)
+        stream.writeUInt16(EricToolBarManager.VersionMarker)
+        stream.writeUInt16(version)
+        
+        # save default toolbars
+        stream.writeUInt16(EricToolBarManager.ToolBarMarker)
+        stream.writeUInt16(len(self.__defaultToolBars))
+        for tbID in self.__defaultToolBars:
+            tb = self.__allToolBars[tbID]
+            if tb.objectName():
+                stream.writeString(tb.objectName().encode("utf-8"))
+            else:
+                stream.writeString(tb.windowTitle().encode("utf-8"))
+            stream.writeUInt16(len(self.__toolBars[tbID]))
+            for action in self.__toolBars[tbID]:
+                if action is not None:
+                    if action.objectName():
+                        stream.writeString(action.objectName().encode("utf-8"))
+                    else:
+                        stream.writeString(action.text().encode("utf-8"))
+                else:
+                    stream.writeString("".encode("utf-8"))
+        
+        # save the custom toolbars
+        stream.writeUInt16(EricToolBarManager.CustomToolBarMarker)
+        stream.writeUInt16(len(self.__toolBars) - len(self.__defaultToolBars))
+        for tbID in self.__toolBars:
+            if tbID not in self.__defaultToolBars:
+                tb = self.__allToolBars[tbID]
+                stream.writeString(tb.objectName().encode("utf-8"))
+                stream.writeString(tb.windowTitle().encode("utf-8"))
+                stream.writeUInt16(len(self.__toolBars[tbID]))
+                for action in self.__toolBars[tbID]:
+                    if action is not None:
+                        if action.objectName():
+                            stream.writeString(action.objectName()
+                                               .encode("utf-8"))
+                        else:
+                            stream.writeString(action.text().encode("utf-8"))
+                    else:
+                        stream.writeString("".encode("utf-8"))
+        
+        return data
+    
+    def restoreState(self, state, version=0):
+        """
+        Public method to restore the state of the toolbar manager.
+        
+        @param state byte array containing the saved state (QByteArray)
+        @param version version number stored with the data (integer)
+        @return flag indicating success (boolean)
+        """
+        if state.isEmpty():
+            return False
+        
+        data = QByteArray(state)
+        stream = QDataStream(data, QIODevice.OpenModeFlag.ReadOnly)
+        stream.setVersion(QDataStream.Version.Qt_4_6)
+        marker = stream.readUInt16()
+        vers = stream.readUInt16()
+        if marker != EricToolBarManager.VersionMarker or vers != version:
+            return False
+        
+        tmarker = stream.readUInt16()
+        if tmarker != EricToolBarManager.ToolBarMarker:
+            return False
+        
+        toolBarCount = stream.readUInt16()
+        for _i in range(toolBarCount):
+            objectName = Utilities.readStringFromStream(stream)
+            actionCount = stream.readUInt16()
+            actions = []
+            for _j in range(actionCount):
+                actionName = Utilities.readStringFromStream(stream)
+                if actionName:
+                    action = self.__findAction(actionName)
+                    if action is not None:
+                        actions.append(action)
+                else:
+                    actions.append(None)
+            toolBar = self.__findDefaultToolBar(objectName)
+            if toolBar is not None:
+                self.setToolBar(toolBar, actions)
+        
+        cmarker = stream.readUInt16()
+        if cmarker != EricToolBarManager.CustomToolBarMarker:
+            return False
+        
+        oldCustomToolBars = self.__customToolBars[:]
+        
+        toolBarCount = stream.readUInt16()
+        for _i in range(toolBarCount):
+            objectName = Utilities.readStringFromStream(stream)
+            toolBarTitle = Utilities.readStringFromStream(stream)
+            actionCount = stream.readUInt16()
+            actions = []
+            for _j in range(actionCount):
+                actionName = Utilities.readStringFromStream(stream)
+                if actionName:
+                    action = self.__findAction(actionName)
+                    if action is not None:
+                        actions.append(action)
+                else:
+                    actions.append(None)
+            toolBar = self.__toolBarByName(objectName)
+            if toolBar is not None:
+                toolBar.setWindowTitle(toolBarTitle)
+                oldCustomToolBars.remove(toolBar)
+            else:
+                toolBar = self.createToolBar(toolBarTitle, objectName)
+            if toolBar is not None:
+                toolBar.setObjectName(objectName)
+                self.setToolBar(toolBar, actions)
+        
+        for tb in oldCustomToolBars:
+            self.deleteToolBar(tb)
+        
+        return True
+    
+    def toolBarWidgetAction(self, action):
+        """
+        Public method to get the toolbar for a widget action.
+        
+        @param action widget action to check for (QAction)
+        @return reference to the toolbar containing action (QToolBar)
+        """
+        aID = id(action)
+        if aID in self.__widgetActions:
+            return self.__widgetActions[aID]
+        return None
+    
+    def removeWidgetActions(self, actions):
+        """
+        Public method to remove widget actions.
+        
+        @param actions dictionary with toolbar id as key and
+            a list of widget actions as value
+        """
+        for tbID in list(actions.keys())[:]:
+            toolBar = self.__allToolBars[tbID]
+            newActions = self.__toolBars[tbID][:]
+            newActionsWithSeparators = self.__toolBarsWithSeparators[tbID][:]
+            
+            removedActions = []
+            for action in actions[tbID]:
+                if (
+                    action in newActions and
+                    self.toolBarWidgetAction(action) == toolBar
+                ):
+                    newActions.remove(action)
+                    newActionsWithSeparators.remove(action)
+                    removedActions.append(action)
+            
+            self.__toolBars[tbID] = newActions
+            self.__toolBarsWithSeparators[tbID] = newActionsWithSeparators
+            
+            for action in removedActions:
+                self.__widgetActions[id(action)] = None
+                self.__actionToToolBars[id(action)].remove(toolBar)
+                toolBar.removeAction(action)
+    
+    def isWidgetAction(self, action):
+        """
+        Public method to check, if action is a widget action.
+        
+        @param action reference to the action to be checked (QAction)
+        @return flag indicating a widget action (boolean)
+        """
+        return id(action) in self.__allWidgetActions
+    
+    def categories(self):
+        """
+        Public method to get the list of categories.
+        
+        @return list of categories (list of string)
+        """
+        return list(self.__categoryToActions.keys())
+    
+    def categoryActions(self, category):
+        """
+        Public method to get the actions belonging to a category.
+        
+        @param category category for the actions (string)
+        @return list of actions (list of QAction)
+        """
+        if category not in self.__categoryToActions:
+            return []
+        
+        return self.__categoryToActions[category][:]
+    
+    def actionById(self, aID):
+        """
+        Public method to get an action given its id.
+        
+        @param aID id of the action object (integer)
+        @return reference to the action (QAction)
+        """
+        if aID not in self.__allActions:
+            return None
+        return self.__allActions[aID]
+    
+    def toolBarById(self, tbID):
+        """
+        Public method to get a toolbar given its id.
+        
+        @param tbID id of the toolbar object (integer)
+        @return reference to the toolbar (QToolBar)
+        """
+        if tbID not in self.__allToolBars:
+            return None
+        return self.__allToolBars[tbID]
+    
+    def toolBarActions(self, tbID):
+        """
+        Public method to get a toolbar's actions given its id.
+        
+        @param tbID id of the toolbar object (integer)
+        @return list of actions (list of QAction)
+        """
+        if tbID not in self.__toolBars:
+            return []
+        return self.__toolBars[tbID][:]
+    
+    def toolBarsActions(self):
+        """
+        Public method to get all toolbars and their actions.
+        
+        @return reference to dictionary of toolbar IDs as key and list
+            of actions as values
+        """
+        return self.__toolBars
+    
+    def defaultToolBarActions(self, tbID):
+        """
+        Public method to get a default toolbar's actions given its id.
+        
+        @param tbID id of the default toolbar object (integer)
+        @return list of actions (list of QAction)
+        """
+        if tbID not in self.__defaultToolBars:
+            return []
+        return self.__defaultToolBars[tbID][:]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricToolBox.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,94 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2008 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a horizontal and a vertical toolbox class.
+"""
+
+from PyQt6.QtWidgets import QToolBox, QTabWidget
+
+from .EricTabWidget import EricTabWidget
+
+
+class EricVerticalToolBox(QToolBox):
+    """
+    Class implementing a ToolBox class substituting QToolBox to support wheel
+    events.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+
+
+class EricHorizontalToolBox(EricTabWidget):
+    """
+    Class implementing a vertical QToolBox like widget.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        EricTabWidget.__init__(self, parent)
+        self.setTabPosition(QTabWidget.TabPosition.West)
+        self.setUsesScrollButtons(True)
+    
+    def addItem(self, widget, icon, text):
+        """
+        Public method to add a widget to the toolbox.
+        
+        @param widget reference to the widget to be added (QWidget)
+        @param icon the icon to be shown (QIcon)
+        @param text the text to be shown (string)
+        @return index of the added widget (integer)
+        """
+        index = self.addTab(widget, icon, "")
+        self.setTabToolTip(index, text)
+        return index
+    
+    def insertItem(self, index, widget, icon, text):
+        """
+        Public method to add a widget to the toolbox.
+        
+        @param index position at which the widget should be inserted (integer)
+        @param widget reference to the widget to be added (QWidget)
+        @param icon the icon to be shown (QIcon)
+        @param text the text to be shown (string)
+        @return index of the added widget (integer)
+        """
+        index = self.insertTab(index, widget, icon, "")
+        self.setTabToolTip(index, text)
+        return index
+    
+    def removeItem(self, index):
+        """
+        Public method to remove a widget from the toolbox.
+        
+        @param index index of the widget to remove (integer)
+        """
+        self.removeTab(index)
+    
+    def setItemToolTip(self, index, toolTip):
+        """
+        Public method to set the tooltip of an item.
+        
+        @param index index of the item (integer)
+        @param toolTip tooltip text to be set (string)
+        """
+        self.setTabToolTip(index, toolTip)
+    
+    def setItemEnabled(self, index, enabled):
+        """
+        Public method to set the enabled state of an item.
+        
+        @param index index of the item (integer)
+        @param enabled flag indicating the enabled state (boolean)
+        """
+        self.setTabEnabled(index, enabled)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricToolButton.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,302 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a specialized tool button subclass.
+"""
+
+import enum
+
+from PyQt6.QtCore import pyqtSlot, pyqtSignal, Qt, QTimer, QSize
+from PyQt6.QtWidgets import (
+    QToolButton, QStyle, QStyleOptionToolButton, QStyleOption, QApplication,
+    QLabel
+)
+
+
+class EricToolButtonOptions(enum.IntEnum):
+    """
+    Class defining the tool button options.
+    """
+    DEFAULT = 0
+    SHOW_MENU_INSIDE = 1
+    TOOLBAR_LOOKUP = 2
+
+
+class EricToolButton(QToolButton):
+    """
+    Class implementing a specialized tool button subclass.
+    
+    @signal aboutToShowMenu() emitted before the tool button menu is shown
+    @signal aboutToHideMenu() emitted before the tool button menu is hidden
+    @signal middleClicked() emitted when the middle mouse button was clicked
+    @signal controlClicked() emitted when the left mouse button was
+        clicked while pressing the Ctrl key
+    @signal doubleClicked() emitted when the left mouse button was
+        double clicked
+    """
+    aboutToShowMenu = pyqtSignal()
+    aboutToHideMenu = pyqtSignal()
+    middleClicked = pyqtSignal()
+    controlClicked = pyqtSignal()
+    doubleClicked = pyqtSignal()
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super().__init__(parent)
+        
+        self.setMinimumWidth(16)
+        
+        self.__menu = None
+        self.__options = EricToolButtonOptions.DEFAULT
+        
+        self.__badgeLabel = QLabel(self)
+        font = self.__badgeLabel.font()
+        font.setPixelSize(self.__badgeLabel.height() / 2.5)
+        self.__badgeLabel.setFont(font)
+        self.__badgeLabel.hide()
+        
+        opt = QStyleOptionToolButton()
+        self.initStyleOption(opt)
+        
+        self.__pressTimer = QTimer()
+        self.__pressTimer.setSingleShot(True)
+        self.__pressTimer.setInterval(
+            QApplication.style().styleHint(
+                QStyle.StyleHint.SH_ToolButton_PopupDelay, opt, self))
+        self.__pressTimer.timeout.connect(self.__showMenu)
+    
+    ##################################################################
+    ## Menu handling methods below.
+    ##
+    ## The menu is handled in EricToolButton and is not passed to
+    ## QToolButton. No menu indicator will be shown in the button.
+    ##################################################################
+    
+    def menu(self):
+        """
+        Public method to get a reference to the tool button menu.
+        
+        @return reference to the tool button menu
+        @rtype QMenu
+        """
+        return self.__menu
+    
+    def setMenu(self, menu):
+        """
+        Public method to set the tool button menu.
+        
+        @param menu reference to the tool button menu
+        @type QMenu
+        """
+        if menu is not None:
+            if self.__menu:
+                self.__menu.aboutToHide.disconnect(self.__menuAboutToHide)
+            
+            self.__menu = menu
+            self.__menu.aboutToHide.connect(self.__menuAboutToHide)
+    
+    def showMenuInside(self):
+        """
+        Public method to check, if the menu edge shall be aligned with
+        the button.
+        
+        @return flag indicating that the menu edge shall be aligned
+        @rtype bool
+        """
+        return bool(self.__options & EricToolButtonOptions.SHOW_MENU_INSIDE)
+    
+    def setShowMenuInside(self, enable):
+        """
+        Public method to set a flag to show the menu edge aligned with
+        the button.
+        
+        @param enable flag indicating to align the menu edge to the button
+        @type bool
+        """
+        if enable:
+            self.__options |= EricToolButtonOptions.SHOW_MENU_INSIDE
+        else:
+            self.__options &= ~EricToolButtonOptions.SHOW_MENU_INSIDE
+    
+    @pyqtSlot()
+    def __showMenu(self):
+        """
+        Private slot to show the tool button menu.
+        """
+        if self.__menu is None or self.__menu.isVisible():
+            return
+        
+        self.aboutToShowMenu.emit()
+        
+        if self.__options & EricToolButtonOptions.SHOW_MENU_INSIDE:
+            pos = self.mapToGlobal(self.rect().bottomRight())
+            if (
+                QApplication.layoutDirection() ==
+                Qt.LayoutDirection.RightToLeft
+            ):
+                pos.setX(pos.x() - self.rect().width())
+            else:
+                pos.setX(pos.x() - self.__menu.sizeHint().width())
+        else:
+            pos = self.mapToGlobal(self.rect().bottomLeft())
+        
+        self.__menu.popup(pos)
+    
+    @pyqtSlot()
+    def __menuAboutToHide(self):
+        """
+        Private slot to handle the tool button menu about to be hidden.
+        """
+        self.setDown(False)
+        self.aboutToHideMenu.emit()
+    
+    ##################################################################
+    ## Methods to handle the tool button look
+    ##################################################################
+    
+    def toolbarButtonLook(self):
+        """
+        Public method to check, if the button has the toolbar look.
+        
+        @return flag indicating toolbar look
+        @rtype bool
+        """
+        return bool(self.__options & EricToolButtonOptions.TOOLBAR_LOOKUP)
+    
+    def setToolbarButtonLook(self, enable):
+        """
+        Public method to set the toolbar look state.
+        
+        @param enable flag indicating toolbar look
+        @type bool
+        """
+        if enable:
+            self.__options |= EricToolButtonOptions.TOOLBAR_LOOKUP
+            
+            opt = QStyleOption()
+            opt.initFrom(self)
+            size = self.style().pixelMetric(
+                QStyle.PixelMetric.PM_ToolBarIconSize, opt, self)
+            self.setIconSize(QSize(size, size))
+        else:
+            self.__options &= ~EricToolButtonOptions.TOOLBAR_LOOKUP
+        
+        self.setProperty("toolbar-look", enable)
+        self.style().unpolish(self)
+        self.style().polish(self)
+    
+    ##################################################################
+    ## Methods to handle some event types
+    ##################################################################
+    
+    def mousePressEvent(self, evt):
+        """
+        Protected method to handle mouse press events.
+        
+        @param evt reference to the mouse event
+        @type QMouseEvent
+        """
+        if self.popupMode() == QToolButton.ToolButtonPopupMode.DelayedPopup:
+            self.__pressTimer.start()
+        
+        if (
+            (evt.buttons() == Qt.MouseButton.LeftButton and
+             self.__menu is not None and
+             (self.popupMode() ==
+              QToolButton.ToolButtonPopupMode.InstantPopup)) or
+            (evt.buttons() == Qt.MouseButton.RightButton and
+             self.__menu is not None)
+        ):
+            self.setDown(True)
+            self.__showMenu()
+        else:
+            super().mousePressEvent(evt)
+    
+    def mouseReleaseEvent(self, evt):
+        """
+        Protected method to handle mouse release events.
+        
+        @param evt reference to the mouse event
+        @type QMouseEvent
+        """
+        self.__pressTimer.stop()
+        
+        if (
+            evt.button() == Qt.MouseButton.MiddleButton and
+            self.rect().contains(evt.position().toPoint())
+        ):
+            self.middleClicked.emit()
+            self.setDown(False)
+        elif (
+            evt.button() == Qt.MouseButton.LeftButton and
+            self.rect().contains(evt.position().toPoint()) and
+            evt.modifiers() == Qt.KeyboardModifier.ControlModifier
+        ):
+            self.controlClicked.emit()
+            self.setDown(False)
+        else:
+            super().mouseReleaseEvent(evt)
+    
+    def mouseDoubleClickEvent(self, evt):
+        """
+        Protected method to handle mouse double click events.
+        
+        @param evt reference to the mouse event
+        @type QMouseEvent
+        """
+        super().mouseDoubleClickEvent(evt)
+        
+        self.__pressTimer.stop()
+        
+        if evt.buttons() == Qt.MouseButton.LeftButton:
+            self.doubleClicked.emit()
+    
+    def contextMenuEvent(self, evt):
+        """
+        Protected method to handle context menu events.
+        
+        @param evt reference to the context menu event
+        @type QContextMenuEvent
+        """
+        # block to prevent showing the context menu and the tool button menu
+        if self.__menu is not None:
+            return
+        
+        super().contextMenuEvent(evt)
+    
+    ##################################################################
+    ## Methods to handle the tool button badge
+    ##################################################################
+    
+    def setBadgeText(self, text):
+        """
+        Public method to set the badge text.
+        
+        @param text badge text to be set
+        @type str
+        """
+        if text:
+            self.__badgeLabel.setText(text)
+            self.__badgeLabel.resize(self.__badgeLabel.sizeHint())
+            self.__badgeLabel.move(self.width() - self.__badgeLabel.width(), 0)
+            self.__badgeLabel.show()
+        else:
+            self.__badgeLabel.clear()
+            self.__badgeLabel.hide()
+    
+    def badgeText(self):
+        """
+        Public method to get the badge text.
+        
+        @return badge text
+        @rtype str
+        """
+        return self.__badgeLabel.text()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricTreeView.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing specialized tree views.
+"""
+
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QTreeView
+
+
+class EricTreeView(QTreeView):
+    """
+    Class implementing a tree view supporting removal of entries.
+    """
+    def keyPressEvent(self, evt):
+        """
+        Protected method implementing special key handling.
+        
+        @param evt reference to the event (QKeyEvent)
+        """
+        if (
+            evt.key() in [Qt.Key.Key_Delete, Qt.Key.Key_Backspace] and
+            self.model() is not None
+        ):
+            self.removeSelected()
+            evt.setAccepted(True)
+        else:
+            super().keyPressEvent(evt)
+    
+    def removeSelected(self):
+        """
+        Public method to remove the selected entries.
+        """
+        if (
+            self.model() is None or
+            self.selectionModel() is None or
+            not self.selectionModel().hasSelection()
+        ):
+            # no models available or nothing selected
+            return
+        
+        selectedRows = self.selectionModel().selectedRows()
+        for idx in reversed(sorted(selectedRows)):
+            self.model().removeRow(idx.row(), idx.parent())
+    
+    def removeAll(self):
+        """
+        Public method to clear the view.
+        """
+        if self.model() is not None:
+            self.model().removeRows(0, self.model().rowCount(self.rootIndex()),
+                                    self.rootIndex())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricTreeWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,283 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing specialized tree views.
+"""
+
+import enum
+
+from PyQt6.QtCore import pyqtSignal, Qt
+from PyQt6.QtWidgets import QTreeWidget, QTreeWidgetItem, QAbstractItemView
+
+
+class EricTreeWidgetItemsState(enum.Enum):
+    """
+    Class defining the items expansion state.
+    """
+    COLLAPSED = 0
+    EXPANDED = 1
+
+
+class EricTreeWidget(QTreeWidget):
+    """
+    Class implementing an extended tree widget.
+    
+    @signal itemControlClicked(QTreeWidgetItem) emitted after a Ctrl-Click
+            on an item
+    @signal itemMiddleButtonClicked(QTreeWidgetItem) emitted after a click
+            of the middle button on an item
+    """
+    itemControlClicked = pyqtSignal(QTreeWidgetItem)
+    itemMiddleButtonClicked = pyqtSignal(QTreeWidgetItem)
+    
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        
+        self.__refreshAllItemsNeeded = True
+        self.__allTreeItems = []
+        self.__showMode = EricTreeWidgetItemsState.COLLAPSED
+        
+        self.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel)
+        
+        self.itemChanged.connect(self.__scheduleRefresh)
+    
+    def setDefaultItemShowMode(self, mode):
+        """
+        Public method to set the default item show mode.
+        
+        @param mode default mode
+        @type EricTreeWidgetItemsState
+        """
+        self.__showMode = mode
+    
+    def allItems(self):
+        """
+        Public method to get a list of all items.
+        
+        @return list of all items (list of QTreeWidgetItem)
+        """
+        if self.__refreshAllItemsNeeded:
+            self.__allTreeItems = []
+            self.__iterateAllItems(None)
+            self.__refreshAllItemsNeeded = False
+        
+        return self.__allTreeItems
+    
+    def appendToParentItem(self, parent, item):
+        """
+        Public method to append an item to a parent item.
+        
+        @param parent text of the parent item (string) or
+            the parent item (QTreeWidgetItem)
+        @param item item to be appended (QTreeWidgetItem)
+        @return flag indicating success (boolean)
+        @exception RuntimeError raised to indicate an illegal type for
+            the parent
+        """
+        if not isinstance(parent, (QTreeWidgetItem, str)):
+            raise RuntimeError("illegal type for parent")
+        
+        if isinstance(parent, QTreeWidgetItem):
+            if parent is None or parent.treeWidget() != self:
+                return False
+            parentItem = parent
+        else:
+            lst = self.findItems(parent, Qt.MatchFlag.MatchExactly)
+            if not lst:
+                return False
+            parentItem = lst[0]
+            if parentItem is None:
+                return False
+        
+        self.__allTreeItems.append(item)
+        parentItem.addChild(item)
+        return True
+    
+    def prependToParentItem(self, parent, item):
+        """
+        Public method to prepend an item to a parent item.
+        
+        @param parent text of the parent item (string) or
+            the parent item (QTreeWidgetItem)
+        @param item item to be prepended (QTreeWidgetItem)
+        @return flag indicating success (boolean)
+        @exception RuntimeError raised to indicate an illegal type for
+            the parent
+        """
+        if not isinstance(parent, (QTreeWidgetItem, str)):
+            raise RuntimeError("illegal type for parent")
+        
+        if isinstance(parent, QTreeWidgetItem):
+            if parent is None or parent.treeWidget() != self:
+                return False
+            parentItem = parent
+        else:
+            lst = self.findItems(parent, Qt.MatchFlag.MatchExactly)
+            if not lst:
+                return False
+            parentItem = lst[0]
+            if parentItem is None:
+                return False
+        
+        self.__allTreeItems.append(item)
+        parentItem.insertChild(0, item)
+        return True
+    
+    def addTopLevelItem(self, item):
+        """
+        Public method to add a top level item.
+        
+        @param item item to be added as a top level item (QTreeWidgetItem)
+        """
+        self.__allTreeItems.append(item)
+        super().addTopLevelItem(item)
+    
+    def addTopLevelItems(self, items):
+        """
+        Public method to add a list of top level items.
+        
+        @param items items to be added as top level items
+            (list of QTreeWidgetItem)
+        """
+        self.__allTreeItems.extend(items)
+        super().addTopLevelItems(items)
+    
+    def insertTopLevelItem(self, index, item):
+        """
+        Public method to insert a top level item.
+        
+        @param index index for the insertion (integer)
+        @param item item to be inserted as a top level item (QTreeWidgetItem)
+        """
+        self.__allTreeItems.append(item)
+        super().insertTopLevelItem(index, item)
+    
+    def insertTopLevelItems(self, index, items):
+        """
+        Public method to insert a list of top level items.
+        
+        @param index index for the insertion (integer)
+        @param items items to be inserted as top level items
+            (list of QTreeWidgetItem)
+        """
+        self.__allTreeItems.extend(items)
+        super().insertTopLevelItems(index, items)
+    
+    def deleteItem(self, item):
+        """
+        Public method to delete an item.
+        
+        @param item item to be deleted (QTreeWidgetItem)
+        """
+        if item in self.__allTreeItems:
+            self.__allTreeItems.remove(item)
+        
+        self.__refreshAllItemsNeeded = True
+        
+        del item
+    
+    def deleteItems(self, items):
+        """
+        Public method to delete a list of items.
+        
+        @param items items to be deleted (list of QTreeWidgetItem)
+        """
+        for item in items:
+            self.deleteItem(item)
+    
+    def filterString(self, filterStr):
+        """
+        Public slot to set a new filter.
+        
+        @param filterStr filter to be set (string)
+        """
+        self.expandAll()
+        allItems = self.allItems()
+        
+        if filterStr:
+            lFilter = filterStr.lower()
+            for itm in allItems:
+                itm.setHidden(lFilter not in itm.text(0).lower())
+                itm.setExpanded(True)
+            for index in range(self.topLevelItemCount()):
+                self.topLevelItem(index).setHidden(False)
+            
+            firstItm = self.topLevelItem(0)
+            belowItm = self.itemBelow(firstItm)
+            topLvlIndex = 0
+            while firstItm:
+                if lFilter in firstItm.text(0).lower():
+                    firstItm.setHidden(False)
+                elif (
+                    not firstItm.parent() and
+                    (not belowItm or not belowItm.parent())
+                ):
+                    firstItm.setHidden(True)
+                elif not belowItm:
+                    break
+                
+                topLvlIndex += 1
+                firstItm = self.topLevelItem(topLvlIndex)
+                belowItm = self.itemBelow(firstItm)
+        else:
+            for itm in allItems:
+                itm.setHidden(False)
+            for index in range(self.topLevelItemCount()):
+                self.topLevelItem(index).setHidden(False)
+            if self.__showMode == EricTreeWidgetItemsState.COLLAPSED:
+                self.collapseAll()
+    
+    def clear(self):
+        """
+        Public slot to clear the tree.
+        """
+        self.__allTreeItems = []
+        super().clear()
+    
+    def __scheduleRefresh(self):
+        """
+        Private slot to schedule a refresh of the tree.
+        """
+        self.__refreshAllItemsNeeded = True
+    
+    def mousePressEvent(self, evt):
+        """
+        Protected method handling mouse press events.
+        
+        @param evt mouse press event (QMouseEvent)
+        """
+        if (
+            evt.modifiers() == Qt.KeyboardModifier.ControlModifier and
+            evt.buttons() == Qt.MouseButton.LeftButton
+        ):
+            self.itemControlClicked.emit(self.itemAt(evt.position().toPoint()))
+            return
+        elif evt.buttons() == Qt.MouseButton.MiddleButton:
+            self.itemMiddleButtonClicked.emit(self.itemAt(evt.position().toPoint()))
+            return
+        else:
+            super().mousePressEvent(evt)
+    
+    def __iterateAllItems(self, parent):
+        """
+        Private method to iterate over the child items of the parent.
+        
+        @param parent parent item to iterate (QTreeWidgetItem)
+        """
+        count = parent.childCount() if parent else self.topLevelItemCount()
+        
+        for index in range(count):
+            itm = parent.child(index) if parent else self.topLevelItem(index)
+            
+            if itm.childCount() == 0:
+                self.__allTreeItems.append(itm)
+            
+            self.__iterateAllItems(itm)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricZoomWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,314 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2013 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a zoom widget for the status bar.
+"""
+
+from PyQt6.QtCore import pyqtSlot, pyqtSignal
+from PyQt6.QtWidgets import QWidget
+
+from .Ui_EricZoomWidget import Ui_EricZoomWidget
+
+
+class EricZoomWidget(QWidget, Ui_EricZoomWidget):
+    """
+    Class implementing a zoom widget for the status bar.
+    
+    @signal valueChanged(value) emitted to indicate the new zoom value (int)
+    """
+    valueChanged = pyqtSignal(int)
+    
+    def __init__(self, outPix, inPix, resetPix, parent=None):
+        """
+        Constructor
+        
+        @param outPix pixmap for the zoom out button (QPixmap)
+        @param inPix pixmap for the zoom in button (QPixmap)
+        @param resetPix pixmap for the zoom reset button (QPixmap)
+        @param parent reference to the parent widget (QWidget)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+        
+        self.zoomOutLabel.setPixmap(outPix.scaled(16, 16))
+        self.zoomInLabel.setPixmap(inPix.scaled(16, 16))
+        self.zoomResetLabel.setPixmap(resetPix.scaled(16, 16))
+        
+        self.zoomOutLabel.clicked.connect(self.__zoomOut)
+        self.zoomInLabel.clicked.connect(self.__zoomIn)
+        self.zoomResetLabel.clicked.connect(self.__zoomReset)
+        
+        self.slider.valueChanged.connect(self._sliderValueChanged)
+        
+        self.__default = 0
+        self.__percent = False
+        
+        # mapped slider
+        self.__mapped = False
+        self.__mapping = []
+        
+        self.__setValueLabelWidth()
+    
+    @pyqtSlot(int)
+    def on_slider_sliderMoved(self, value):
+        """
+        Private slot to handle changes of the zoom value.
+        
+        @param value value of the slider (integer)
+        """
+        if self.__mapped:
+            self.valueChanged.emit(self.__mapping[value])
+        else:
+            self.valueChanged.emit(value)
+    
+    def setValue(self, value):
+        """
+        Public slot to set the value.
+        
+        @param value new zoom value (integer)
+        """
+        self.slider.setValue(self.__indexForValue(value))
+    
+    def value(self):
+        """
+        Public method to get the current value.
+        
+        @return current zoom value (integer)
+        """
+        if self.__mapped:
+            return self.__mapping[self.slider.value()]
+        else:
+            return self.slider.value()
+    
+    def setMinimum(self, minimum):
+        """
+        Public method to set the minimum value.
+        
+        @param minimum new minimum value (integer)
+        """
+        if not self.__mapped:
+            self.slider.setMinimum(minimum)
+            self.__setValueLabelWidth()
+    
+    def minimum(self):
+        """
+        Public method to get the minimum value.
+        
+        @return minimum value (integer)
+        """
+        if self.__mapped:
+            return self.__mapping[0]
+        else:
+            return self.slider.minimum()
+    
+    def setMaximum(self, maximum):
+        """
+        Public method to set the maximum value.
+        
+        @param maximum new maximum value (integer)
+        """
+        if not self.__mapped:
+            self.slider.setMaximum(maximum)
+            self.__setValueLabelWidth()
+    
+    def maximum(self):
+        """
+        Public method to get the maximum value.
+        
+        @return maximum value (integer)
+        """
+        if self.__mapped:
+            return self.__mapping[-1]
+        else:
+            return self.slider.maximum()
+    
+    def setSingleStep(self, value):
+        """
+        Public method to set the single step value.
+        
+        @param value value for the single step (integer)
+        """
+        self.slider.setSingleStep(value)
+    
+    def singleStep(self):
+        """
+        Public method to get the single step value.
+        
+        @return single step value (integer)
+        """
+        return self.slider.singleStep()
+    
+    def setPageStep(self, value):
+        """
+        Public method to set the page step value.
+        
+        @param value page step value (integer)
+        """
+        self.slider.setPageStep(value)
+    
+    def pageStep(self):
+        """
+        Public method to get the page step value.
+        
+        @return page step value (integer)
+        """
+        return self.slider.pageStep()
+    
+    def setDefault(self, value):
+        """
+        Public method to set the default zoom value.
+        
+        @param value default zoom value (integer)
+        """
+        self.__default = self.__indexForValue(value)
+    
+    def default(self):
+        """
+        Public method to get the default zoom value.
+        
+        @return default zoom value (integer)
+        """
+        if self.__mapped:
+            return self.__mapping[self.__default]
+        else:
+            return self.__default
+    
+    def setPercent(self, on):
+        """
+        Public method to set the percent mode of the widget.
+        
+        @param on flag indicating percent mode (boolean)
+        """
+        self.__percent = on
+        self.__setValueLabelWidth()
+    
+    def isPercent(self):
+        """
+        Public method to get the percent mode.
+        
+        @return flag indicating percent mode (boolean)
+        """
+        return self.__percent
+    
+    def setMapping(self, mapping, default, percent=True):
+        """
+        Public method to set a zoom level mapping.
+        
+        When zoom level mapping is activated, the slider covers
+        values from 0 to the max. index of the mapping list. The
+        default value is the value of the default zoom level. If
+        percent is given, the zoom level is shown as a percent value.
+        
+        @param mapping list of mapping values (list of integer)
+        @param default index of the default value (integer)
+        @param percent flag indicating to show zoom value in percent
+            (boolean)
+        """
+        if mapping:
+            self.__mapping = mapping[:]
+            self.__mapped = True
+            self.slider.setMinimum(0)
+            self.slider.setMaximum(len(self.__mapping) - 1)
+            self.__default = self.__indexForValue(default)
+            self.__percent = percent
+            self.slider.setValue(self.__default)
+        else:
+            # switch back to default values
+            self.__mapping = []
+            self.__mapped = False
+            self.slider.setMinimum(-10)
+            self.slider.setMaximum(20)
+            self.__default = 0
+            self.__percent = False
+            self.slider.setValue(0)
+        self.__setValueLabelWidth()
+    
+    def mapping(self):
+        """
+        Public method to get the current mapping.
+        
+        @return tuple of the mapping and the default index
+            (list of integer, integer)
+        """
+        return self.__mapping[:], self.__default
+    
+    def isMapped(self):
+        """
+        Public method to check for a mapped zoom widget.
+        
+        @return flag indicating a mapped zoom widget (boolean)
+        """
+        return self.__mapped
+    
+    def __zoomReset(self):
+        """
+        Private slot to reset the value.
+        """
+        self.slider.setValue(self.__default)
+        self.valueChanged.emit(self.value())
+    
+    def __zoomOut(self):
+        """
+        Private slot to zoom out one step.
+        """
+        self.slider.setValue(self.slider.value() - self.slider.singleStep())
+        self.valueChanged.emit(self.value())
+    
+    def __zoomIn(self):
+        """
+        Private slot to zoom in one step.
+        """
+        self.slider.setValue(self.slider.value() + self.slider.singleStep())
+        self.valueChanged.emit(self.value())
+    
+    def _sliderValueChanged(self, value):
+        """
+        Protected slot to handle changes of the slider value.
+        
+        @param value slider value (integer)
+        """
+        val = self.__mapping[value] if self.__mapped else value
+        fmtStr = "{0}%" if self.__percent else "{0}"
+        self.valueLabel.setText(fmtStr.format(val))
+        self.valueChanged.emit(val)
+    
+    def __setValueLabelWidth(self):
+        """
+        Private slot to determine the width of the zoom value label.
+        """
+        labelLen = (
+            max(len(str(v)) for v in self.__mapping)
+            if self.__mapped else
+            max(len(str(self.slider.maximum())),
+                len(str(self.slider.minimum())))
+        )
+        fmtStr = "{0}%" if self.__percent else "{0}"
+        label = fmtStr.format("0" * labelLen)
+        try:
+            width = self.valueLabel.fontMetrics().horizontalAdvance(label)
+        except AttributeError:
+            width = self.valueLabel.fontMetrics().width(label)
+        self.valueLabel.setMinimumWidth(width)
+        self.valueLabel.setMaximumWidth(width)
+    
+    def __indexForValue(self, value):
+        """
+        Private method to get the nearest index for a given value.
+        
+        @param value value to get the index for (integer)
+        @return index into the mapping list or the unchanged value,
+            if mapping is not set (integer)
+        """
+        if self.__mapped:
+            try:
+                index = self.__mapping.index(value)
+            except ValueError:
+                for index in range(len(self.__mapping)):
+                    if value <= self.__mapping[index]:
+                        break
+        else:
+            index = value
+        return index
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/EricZoomWidget.ui	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EricZoomWidget</class>
+ <widget class="QWidget" name="EricZoomWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>242</width>
+    <height>21</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <widget class="QLabel" name="valueLabel">
+     <property name="minimumSize">
+      <size>
+       <width>0</width>
+       <height>16</height>
+      </size>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>16777215</width>
+       <height>16</height>
+      </size>
+     </property>
+     <property name="text">
+      <string notr="true">0</string>
+     </property>
+     <property name="alignment">
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="EricClickableLabel" name="zoomOutLabel">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>16</width>
+       <height>16</height>
+      </size>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>16</width>
+       <height>16</height>
+      </size>
+     </property>
+     <property name="toolTip">
+      <string>Zoom out</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QSlider" name="slider">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>160</width>
+       <height>16</height>
+      </size>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>160</width>
+       <height>16</height>
+      </size>
+     </property>
+     <property name="focusPolicy">
+      <enum>Qt::NoFocus</enum>
+     </property>
+     <property name="toolTip">
+      <string>Drag to zoom</string>
+     </property>
+     <property name="minimum">
+      <number>-10</number>
+     </property>
+     <property name="maximum">
+      <number>20</number>
+     </property>
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="tickPosition">
+      <enum>QSlider::NoTicks</enum>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="EricClickableLabel" name="zoomInLabel">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>16</width>
+       <height>16</height>
+      </size>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>16</width>
+       <height>16</height>
+      </size>
+     </property>
+     <property name="toolTip">
+      <string>Zoom in</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="EricClickableLabel" name="zoomResetLabel">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>16</width>
+       <height>16</height>
+      </size>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>16</width>
+       <height>16</height>
+      </size>
+     </property>
+     <property name="toolTip">
+      <string>Zoom reset</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>EricClickableLabel</class>
+   <extends>QLabel</extends>
+   <header>EricWidgets/EricClickableLabel.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/EricWidgets/__init__.py	Sat May 22 19:58:24 2021 +0200
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2006 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package implementing some special widgets.
+
+They extend or amend the standard widgets as found in QtWidgets.
+"""
--- a/eric7/EricXML/SessionReader.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/EricXML/SessionReader.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing a class for reading an XML session file.
 """
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from .Config import sessionFileFormatVersion
 from .XMLStreamReaderBase import XMLStreamReaderBase
--- a/eric7/EricXML/TasksReader.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/EricXML/TasksReader.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 import time
 import contextlib
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from .Config import tasksFileFormatVersion
 from .XMLStreamReaderBase import XMLStreamReaderBase
--- a/eric7/EricXML/XMLStreamReaderBase.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/EricXML/XMLStreamReaderBase.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 
 from PyQt6.QtCore import QXmlStreamReader, QCoreApplication
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 
 class XMLStreamReaderBase(QXmlStreamReader):
--- a/eric7/Graphics/ApplicationDiagramBuilder.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Graphics/ApplicationDiagramBuilder.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 
 from PyQt6.QtWidgets import QApplication, QInputDialog
 
-from E5Gui import EricMessageBox
-from E5Gui.EricProgressDialog import EricProgressDialog
+from EricWidgets import EricMessageBox
+from EricWidgets.EricProgressDialog import EricProgressDialog
 
 from .UMLDiagramBuilder import UMLDiagramBuilder
 
--- a/eric7/Graphics/ImportsDiagramBuilder.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Graphics/ImportsDiagramBuilder.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 
 from PyQt6.QtWidgets import QApplication, QGraphicsTextItem
 
-from E5Gui.EricProgressDialog import EricProgressDialog
+from EricWidgets.EricProgressDialog import EricProgressDialog
 
 from .UMLDiagramBuilder import UMLDiagramBuilder
 
--- a/eric7/Graphics/PackageDiagramBuilder.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Graphics/PackageDiagramBuilder.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 
 from PyQt6.QtWidgets import QApplication, QGraphicsTextItem
 
-from E5Gui.EricProgressDialog import EricProgressDialog
+from EricWidgets.EricProgressDialog import EricProgressDialog
 
 from .UMLDiagramBuilder import UMLDiagramBuilder
 
--- a/eric7/Graphics/PixmapDiagram.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Graphics/PixmapDiagram.py	Sat May 22 19:58:24 2021 +0200
@@ -16,9 +16,9 @@
 )
 from PyQt6.QtPrintSupport import QPrinter, QPrintDialog
 
-from E5Gui import EricMessageBox
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricZoomWidget import EricZoomWidget
+from EricWidgets import EricMessageBox
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricZoomWidget import EricZoomWidget
 
 import UI.Config
 
--- a/eric7/Graphics/SvgDiagram.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Graphics/SvgDiagram.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
 from PyQt6.QtPrintSupport import QPrinter, QPrintDialog
 from PyQt6.QtSvgWidgets import QSvgWidget
 
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricZoomWidget import EricZoomWidget
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricZoomWidget import EricZoomWidget
 
 import UI.Config
 
--- a/eric7/Graphics/UMLDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Graphics/UMLDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
 from PyQt6.QtGui import QAction
 from PyQt6.QtWidgets import QToolBar, QGraphicsScene
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricMainWindow import EricMainWindow
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricMainWindow import EricMainWindow
 
 import UI.Config
 import UI.PixmapCache
--- a/eric7/Graphics/UMLGraphicsView.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Graphics/UMLGraphicsView.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
 
 from EricGraphics.EricGraphicsView import EricGraphicsView
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricZoomWidget import EricZoomWidget
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricZoomWidget import EricZoomWidget
 
 from .UMLItem import UMLItem
 
--- a/eric7/HexEdit/HexEditMainWindow.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/HexEdit/HexEditMainWindow.py	Sat May 22 19:58:24 2021 +0200
@@ -18,10 +18,10 @@
     QWhatsThis, QLabel, QWidget, QVBoxLayout, QDialog, QFrame, QMenu
 )
 
-from E5Gui.EricAction import EricAction
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui import EricFileDialog, EricMessageBox
-from E5Gui.EricClickableLabel import EricClickableLabel
+from EricGui.EricAction import EricAction
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets import EricFileDialog, EricMessageBox
+from EricWidgets.EricClickableLabel import EricClickableLabel
 
 from Globals import strGroup, recentNameHexFiles
 
--- a/eric7/HexEdit/HexEditSearchReplaceWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/HexEdit/HexEditSearchReplaceWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -11,8 +11,8 @@
 from PyQt6.QtGui import QRegularExpressionValidator
 from PyQt6.QtWidgets import QWidget
 
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.PixmapCache
 
--- a/eric7/IconEditor/IconEditorGrid.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/IconEditor/IconEditorGrid.py	Sat May 22 19:58:24 2021 +0200
@@ -17,7 +17,7 @@
 )
 from PyQt6.QtWidgets import QWidget, QSizePolicy, QApplication, QDialog
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 
 class IconEditCommand(QUndoCommand):
--- a/eric7/IconEditor/IconEditorWindow.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/IconEditor/IconEditorWindow.py	Sat May 22 19:58:24 2021 +0200
@@ -18,10 +18,10 @@
 )
 from PyQt6.QtWidgets import QScrollArea, QLabel, QDockWidget, QWhatsThis
 
-from E5Gui.EricAction import EricAction, createActionGroup
-from E5Gui import EricFileDialog, EricMessageBox
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricZoomWidget import EricZoomWidget
+from EricGui.EricAction import EricAction, createActionGroup
+from EricWidgets import EricFileDialog, EricMessageBox
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricZoomWidget import EricZoomWidget
 
 from .IconEditorGrid import IconEditorGrid, IconEditorTool
 
--- a/eric7/MicroPython/CircuitPythonDevices.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/CircuitPythonDevices.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 
 from PyQt6.QtCore import pyqtSlot
 
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from .MicroPythonDevices import MicroPythonDevice
 from .MicroPythonWidget import HAS_QTCHART
--- a/eric7/MicroPython/EspBackupRestoreFirmwareDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/EspBackupRestoreFirmwareDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_EspBackupRestoreFirmwareDialog import (
     Ui_EspBackupRestoreFirmwareDialog
--- a/eric7/MicroPython/EspBackupRestoreFirmwareDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/EspBackupRestoreFirmwareDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -112,7 +112,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/MicroPython/EspDevices.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/EspDevices.py	Sat May 22 19:58:24 2021 +0200
@@ -13,9 +13,9 @@
 from PyQt6.QtCore import pyqtSlot, QProcess
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui import EricMessageBox
-from E5Gui.EricProcessDialog import EricProcessDialog
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricProcessDialog import EricProcessDialog
+from EricWidgets.EricApplication import ericApp
 
 from .MicroPythonDevices import MicroPythonDevice
 from .MicroPythonWidget import HAS_QTCHART
--- a/eric7/MicroPython/EspFirmwareSelectionDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/EspFirmwareSelectionDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtGui import QRegularExpressionValidator
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_EspFirmwareSelectionDialog import Ui_EspFirmwareSelectionDialog
 
--- a/eric7/MicroPython/EspFirmwareSelectionDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/EspFirmwareSelectionDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -155,7 +155,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/MicroPython/GenericMicroPythonDevices.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/GenericMicroPythonDevices.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 
 import os
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .MicroPythonDevices import MicroPythonDevice
 from .MicroPythonWidget import HAS_QTCHART
--- a/eric7/MicroPython/IgnoredDevicesDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/IgnoredDevicesDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -36,7 +36,7 @@
   <customwidget>
    <class>EricStringListEditWidget</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricStringListEditWidget.h</header>
+   <header>EricWidgets/EricStringListEditWidget.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/MicroPython/MicroPythonDevices.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/MicroPythonDevices.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtCore import pyqtSlot, QObject, QCoreApplication
 from PyQt6.QtWidgets import QInputDialog
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import UI.PixmapCache
 import Preferences
--- a/eric7/MicroPython/MicroPythonFileManagerWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/MicroPythonFileManagerWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -16,10 +16,10 @@
     QDialog
 )
 
-from E5Gui import EricMessageBox, EricPathPickerDialog
-from E5Gui.EricPathPicker import EricPathPickerModes
-from E5Gui.EricFileSaveConfirmDialog import confirmOverwrite
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricPathPickerDialog
+from EricWidgets.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricFileSaveConfirmDialog import confirmOverwrite
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_MicroPythonFileManagerWidget import Ui_MicroPythonFileManagerWidget
 
--- a/eric7/MicroPython/MicroPythonFileManagerWidget.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/MicroPythonFileManagerWidget.ui	Sat May 22 19:58:24 2021 +0200
@@ -269,7 +269,7 @@
   <customwidget>
    <class>EricLed</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricLed.h</header>
+   <header>EricWidgets/EricLed.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/MicroPython/MicroPythonGraphWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/MicroPythonGraphWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -22,8 +22,8 @@
 )
 from PyQt6.QtCharts import QChartView, QChart, QLineSeries, QValueAxis
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 import UI.PixmapCache
 import Preferences
--- a/eric7/MicroPython/MicroPythonWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/MicroPythonWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -19,11 +19,11 @@
     QTextEdit, QToolButton, QDialog
 )
 
-from E5Gui.EricZoomWidget import EricZoomWidget
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricProcessDialog import EricProcessDialog
-from E5Gui.EricOverrideCursor import EricOverrideCursor, EricOverridenCursor
+from EricWidgets.EricZoomWidget import EricZoomWidget
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricProcessDialog import EricProcessDialog
+from EricGui.EricOverrideCursor import EricOverrideCursor, EricOverridenCursor
 
 from .Ui_MicroPythonWidget import Ui_MicroPythonWidget
 
@@ -1783,7 +1783,7 @@
         from .AddEditDevicesDialog import AddEditDevicesDialog
         
         if len(devices) > 1:
-            from E5Gui.EricListSelectionDialog import EricListSelectionDialog
+            from EricWidgets.EricListSelectionDialog import EricListSelectionDialog
             sdlg = EricListSelectionDialog(
                 [d[2] for d in devices],
                 title=self.tr("Add Unknown Devices"),
--- a/eric7/MicroPython/MicroPythonWidget.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/MicroPythonWidget.ui	Sat May 22 19:58:24 2021 +0200
@@ -181,12 +181,12 @@
   <customwidget>
    <class>EricToolButton</class>
    <extends>QToolButton</extends>
-   <header>E5Gui/EricToolButton.h</header>
+   <header>EricWidgets/EricToolButton.h</header>
   </customwidget>
   <customwidget>
    <class>EricLed</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricLed.h</header>
+   <header>EricWidgets/EricLed.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/MicroPython/MicrobitDevices.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/MicrobitDevices.py	Sat May 22 19:58:24 2021 +0200
@@ -17,8 +17,8 @@
 from .MicroPythonDevices import MicroPythonDevice
 from .MicroPythonWidget import HAS_QTCHART
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
 
 import Utilities
 import Preferences
--- a/eric7/MicroPython/PyBoardDevices.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/PyBoardDevices.py	Sat May 22 19:58:24 2021 +0200
@@ -11,9 +11,9 @@
 
 from PyQt6.QtCore import pyqtSlot, QStandardPaths
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricProcessDialog import EricProcessDialog
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricProcessDialog import EricProcessDialog
 
 from .MicroPythonDevices import MicroPythonDevice
 from .MicroPythonWidget import HAS_QTCHART
--- a/eric7/MicroPython/UF2FlashDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/UF2FlashDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtCore import pyqtSlot, Qt, QCoreApplication, QThread, QEventLoop
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_UF2FlashDialog import Ui_UF2FlashDialog
 
--- a/eric7/MicroPython/UF2FlashDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/UF2FlashDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -159,7 +159,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/MicroPython/UnknownDevicesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MicroPython/UnknownDevicesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtGui import QDesktopServices
 from PyQt6.QtWidgets import QDialog, QListWidgetItem
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_UnknownDevicesDialog import Ui_UnknownDevicesDialog
 
--- a/eric7/MultiProject/AddProjectDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MultiProject/AddProjectDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_AddProjectDialog import Ui_AddProjectDialog
 
--- a/eric7/MultiProject/AddProjectDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MultiProject/AddProjectDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -132,7 +132,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/MultiProject/MultiProject.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MultiProject/MultiProject.py	Sat May 22 19:58:24 2021 +0200
@@ -18,10 +18,10 @@
 
 from Globals import recentNameMultiProject
 
-from E5Gui.EricAction import EricAction, createActionGroup
-from E5Gui import EricFileDialog, EricMessageBox, EricPathPickerDialog
-from E5Gui.EricPathPickerDialog import EricPathPickerModes
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricGui.EricAction import EricAction, createActionGroup
+from EricWidgets import EricFileDialog, EricMessageBox, EricPathPickerDialog
+from EricWidgets.EricPathPickerDialog import EricPathPickerModes
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 import UI.PixmapCache
 
--- a/eric7/MultiProject/MultiProjectBrowser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MultiProject/MultiProjectBrowser.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
 from PyQt6.QtCore import Qt
 from PyQt6.QtWidgets import QTreeWidget, QTreeWidgetItem, QDialog, QMenu
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 import UI.PixmapCache
 
--- a/eric7/MultiProject/MultiProjectFile.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/MultiProject/MultiProjectFile.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
 
 from PyQt6.QtCore import QObject
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverridenCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverridenCursor
 
 import Preferences
 
--- a/eric7/Network/IRC/IrcChannelWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Network/IRC/IrcChannelWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -20,8 +20,8 @@
     QWidget, QListWidgetItem, QMenu, QApplication, QInputDialog, QLineEdit
 )
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_IrcChannelWidget import Ui_IrcChannelWidget
 
@@ -1483,7 +1483,7 @@
         """
         Private slot to send a private message to a specific user.
         """
-        from E5Gui import EricTextInputDialog
+        from EricWidgets import EricTextInputDialog
         
         user = self.usersList.selectedItems()[0].text()
         ok, message = EricTextInputDialog.getText(
@@ -1497,7 +1497,7 @@
         """
         Private slot to send a query message to a specific user.
         """
-        from E5Gui import EricTextInputDialog
+        from EricWidgets import EricTextInputDialog
         
         user = self.usersList.selectedItems()[0].text()
         ok, message = EricTextInputDialog.getText(
@@ -1511,7 +1511,7 @@
         """
         Private slot to send a notice message to a specific user.
         """
-        from E5Gui import EricTextInputDialog
+        from EricWidgets import EricTextInputDialog
         
         user = self.usersList.selectedItems()[0].text()
         ok, message = EricTextInputDialog.getText(
--- a/eric7/Network/IRC/IrcIdentitiesEditDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Network/IRC/IrcIdentitiesEditDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot, Qt, QEvent, QItemSelectionModel
 from PyQt6.QtWidgets import QDialog, QInputDialog, QLineEdit
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_IrcIdentitiesEditDialog import Ui_IrcIdentitiesEditDialog
 
--- a/eric7/Network/IRC/IrcNetworkEditDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Network/IRC/IrcNetworkEditDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_IrcNetworkEditDialog import Ui_IrcNetworkEditDialog
 
--- a/eric7/Network/IRC/IrcNetworkListDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Network/IRC/IrcNetworkListDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QTreeWidgetItem
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_IrcNetworkListDialog import Ui_IrcNetworkListDialog
 
--- a/eric7/Network/IRC/IrcNetworkWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Network/IRC/IrcNetworkWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtGui import QDesktopServices
 from PyQt6.QtWidgets import QWidget, QApplication, QMenu
 
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from .Ui_IrcNetworkWidget import Ui_IrcNetworkWidget
 
--- a/eric7/Network/IRC/IrcWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Network/IRC/IrcWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -22,7 +22,7 @@
 except ImportError:
     SSL_AVAILABLE = False
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_IrcWidget import Ui_IrcWidget
 
--- a/eric7/PipInterface/Pip.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PipInterface/Pip.py	Sat May 22 19:58:24 2021 +0200
@@ -18,8 +18,8 @@
     QNetworkAccessManager, QNetworkRequest, QNetworkReply
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 from EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired
 try:
--- a/eric7/PipInterface/PipDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PipInterface/PipDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 )
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QAbstractButton
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_PipDialog import Ui_PipDialog
 
--- a/eric7/PipInterface/PipFileSelectionDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PipInterface/PipFileSelectionDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_PipFileSelectionDialog import Ui_PipFileSelectionDialog
 
--- a/eric7/PipInterface/PipFileSelectionDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PipInterface/PipFileSelectionDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -57,7 +57,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/PipInterface/PipFreezeDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PipInterface/PipFreezeDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,10 +14,10 @@
     QDialog, QDialogButtonBox, QAbstractButton, QApplication
 )
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricPathPicker import EricPathPickerModes
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .Ui_PipFreezeDialog import Ui_PipFreezeDialog
 
--- a/eric7/PipInterface/PipFreezeDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PipInterface/PipFreezeDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -154,7 +154,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/PipInterface/PipPackagesWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PipInterface/PipPackagesWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -19,9 +19,9 @@
     QMenu, QDialog
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .Ui_PipPackagesWidget import Ui_PipPackagesWidget
 
--- a/eric7/PipInterface/PipPackagesWidget.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PipInterface/PipPackagesWidget.ui	Sat May 22 19:58:24 2021 +0200
@@ -461,7 +461,7 @@
   <customwidget>
    <class>EricToolButton</class>
    <extends>QToolButton</extends>
-   <header>E5Gui/EricToolButton.h</header>
+   <header>EricWidgets/EricToolButton.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/PluginManager/PluginInstallDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PluginManager/PluginInstallDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -22,8 +22,8 @@
     QVBoxLayout
 )
 
-from E5Gui import EricFileDialog
-from E5Gui.EricMainWindow import EricMainWindow
+from EricWidgets import EricFileDialog
+from EricWidgets.EricMainWindow import EricMainWindow
 
 from .Ui_PluginInstallDialog import Ui_PluginInstallDialog
 
--- a/eric7/PluginManager/PluginManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PluginManager/PluginManager.py	Sat May 22 19:58:24 2021 +0200
@@ -22,8 +22,8 @@
     QNetworkAccessManager, QNetworkRequest, QNetworkReply
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 from EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired
 try:
--- a/eric7/PluginManager/PluginRepositoryDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PluginManager/PluginRepositoryDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -27,9 +27,9 @@
 
 from .Ui_PluginRepositoryDialog import Ui_PluginRepositoryDialog
 
-from E5Gui import EricMessageBox
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricApplication import ericApp
 
 from EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired
 try:
--- a/eric7/PluginManager/PluginUninstallDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PluginManager/PluginUninstallDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,9 +16,9 @@
 from PyQt6.QtCore import pyqtSlot, pyqtSignal
 from PyQt6.QtWidgets import QWidget, QDialog, QDialogButtonBox, QVBoxLayout
 
-from E5Gui import EricMessageBox
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_PluginUninstallDialog import Ui_PluginUninstallDialog
 
--- a/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -20,7 +20,7 @@
     QHeaderView, QListWidgetItem, QInputDialog, QLineEdit
 )
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_CodeStyleCheckerDialog import Ui_CodeStyleCheckerDialog
 
--- a/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -1605,7 +1605,7 @@
   <customwidget>
    <class>EricSqueezeLabelPath</class>
    <extends>QLabel</extends>
-   <header>E5Gui/EricSqueezeLabels.h</header>
+   <header>EricWidgets/EricSqueezeLabels.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 
 from PyQt6.QtCore import QObject, pyqtSignal
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 from Utilities import determinePythonVersion
 
 
--- a/eric7/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,7 +15,7 @@
     QDialog, QDialogButtonBox, QTreeWidgetItem, QApplication, QHeaderView
 )
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_SyntaxCheckerDialog import Ui_SyntaxCheckerDialog
 
--- a/eric7/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckerDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -160,7 +160,7 @@
   <customwidget>
    <class>EricSqueezeLabelPath</class>
    <extends>QLabel</extends>
-   <header>E5Gui/EricSqueezeLabels.h</header>
+   <header>EricWidgets/EricSqueezeLabels.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtCore import pyqtSlot, Qt
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_EricapiConfigDialog import Ui_EricapiConfigDialog
 import Utilities
--- a/eric7/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/DocumentationPlugins/Ericapi/EricapiConfigDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -247,7 +247,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/DocumentationPlugins/Ericapi/EricapiExecDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import QProcess, QTimer
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_EricapiExecDialog import Ui_EricapiExecDialog
 
--- a/eric7/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,7 +15,7 @@
 from PyQt6.QtGui import QColor
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QColorDialog
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_EricdocConfigDialog import Ui_EricdocConfigDialog
 from DocumentationTools.Config import (
--- a/eric7/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/DocumentationPlugins/Ericdoc/EricdocConfigDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -527,7 +527,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/DocumentationPlugins/Ericdoc/EricdocExecDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import QProcess, QTimer
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_EricdocExecDialog import Ui_EricdocExecDialog
 
--- a/eric7/Plugins/PluginAbout.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginAbout.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
 import UI.Info
 import UI.PixmapCache
 
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 # Start-Of-Header
 name = "About Plugin"
--- a/eric7/Plugins/PluginCodeStyleChecker.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginCodeStyleChecker.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
 
 from PyQt6.QtCore import QObject, pyqtSignal, QCoreApplication
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
 from Project.ProjectBrowserModel import ProjectBrowserFileItem
 from Utilities import determinePythonVersion
 
--- a/eric7/Plugins/PluginEricapi.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginEricapi.py	Sat May 22 19:58:24 2021 +0200
@@ -12,9 +12,9 @@
 from PyQt6.QtCore import QObject, QCoreApplication
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
-from E5Gui.EricAction import EricAction
+from EricGui.EricAction import EricAction
 
 import Utilities
 import UI.Info
--- a/eric7/Plugins/PluginEricdoc.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginEricdoc.py	Sat May 22 19:58:24 2021 +0200
@@ -12,9 +12,9 @@
 from PyQt6.QtCore import QObject, QCoreApplication
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
-from E5Gui.EricAction import EricAction
+from EricGui.EricAction import EricAction
 
 import Utilities
 import UI.Info
--- a/eric7/Plugins/PluginSyntaxChecker.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginSyntaxChecker.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 
 from PyQt6.QtCore import QObject
 
-from E5Gui.EricAction import EricAction
-from E5Gui.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets.EricApplication import ericApp
 from eric7config import getConfig
 
 from Project.ProjectBrowserModel import ProjectBrowserFileItem
--- a/eric7/Plugins/PluginTranslator.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginTranslator.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 
 from PyQt6.QtCore import pyqtSignal, QObject, QCoreApplication, QDateTime, Qt
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- a/eric7/Plugins/PluginVcsGit.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginVcsGit.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 
 from PyQt6.QtCore import QObject, QCoreApplication, QByteArray
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 from Preferences.Shortcuts import readShortcuts
--- a/eric7/Plugins/PluginVcsMercurial.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginVcsMercurial.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 
 from PyQt6.QtCore import QObject, QCoreApplication, QByteArray
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 from Preferences.Shortcuts import readShortcuts
--- a/eric7/Plugins/PluginVcsPySvn.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginVcsPySvn.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 
 from PyQt6.QtCore import QObject, QCoreApplication
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 from Preferences.Shortcuts import readShortcuts
--- a/eric7/Plugins/PluginVcsSubversion.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginVcsSubversion.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 
 from PyQt6.QtCore import QObject, QCoreApplication
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 from Preferences.Shortcuts import readShortcuts
--- a/eric7/Plugins/PluginWizardDotDesktop.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginWizardDotDesktop.py	Sat May 22 19:58:24 2021 +0200
@@ -10,9 +10,9 @@
 from PyQt6.QtCore import QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.Info
 
--- a/eric7/Plugins/PluginWizardE5MessageBox.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginWizardE5MessageBox.py	Sat May 22 19:58:24 2021 +0200
@@ -10,9 +10,9 @@
 from PyQt6.QtCore import QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.Info
 
--- a/eric7/Plugins/PluginWizardEricPlugin.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginWizardEricPlugin.py	Sat May 22 19:58:24 2021 +0200
@@ -12,9 +12,9 @@
 from PyQt6.QtCore import QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.Info
 
--- a/eric7/Plugins/PluginWizardPyRegExp.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginWizardPyRegExp.py	Sat May 22 19:58:24 2021 +0200
@@ -10,9 +10,9 @@
 from PyQt6.QtCore import QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.Info
 
--- a/eric7/Plugins/PluginWizardQColorDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginWizardQColorDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,9 +10,9 @@
 from PyQt6.QtCore import QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.Info
 
--- a/eric7/Plugins/PluginWizardQFileDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginWizardQFileDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,9 +12,9 @@
 from PyQt6.QtCore import QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.Info
 
--- a/eric7/Plugins/PluginWizardQFontDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginWizardQFontDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,9 +10,9 @@
 from PyQt6.QtCore import QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.Info
 
--- a/eric7/Plugins/PluginWizardQInputDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginWizardQInputDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,9 +10,9 @@
 from PyQt6.QtCore import QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.Info
 
--- a/eric7/Plugins/PluginWizardQMessageBox.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginWizardQMessageBox.py	Sat May 22 19:58:24 2021 +0200
@@ -10,9 +10,9 @@
 from PyQt6.QtCore import QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.Info
 
--- a/eric7/Plugins/PluginWizardQRegularExpression.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginWizardQRegularExpression.py	Sat May 22 19:58:24 2021 +0200
@@ -10,9 +10,9 @@
 from PyQt6.QtCore import QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.Info
 
--- a/eric7/Plugins/PluginWizardSetup.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/PluginWizardSetup.py	Sat May 22 19:58:24 2021 +0200
@@ -10,9 +10,9 @@
 from PyQt6.QtCore import QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import UI.Info
 
--- a/eric7/Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/UiExtensionPlugins/Translator/ConfigurationPage/TranslatorPage.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot, Qt
 from PyQt6.QtWidgets import QListWidgetItem
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from Preferences.ConfigurationPages.ConfigurationPageBase import (
     ConfigurationPageBase
--- a/eric7/Plugins/UiExtensionPlugins/Translator/Translator.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/UiExtensionPlugins/Translator/Translator.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import Qt, QObject
 from PyQt6.QtGui import QKeySequence
 
-from E5Gui.EricAction import EricAction
+from EricGui.EricAction import EricAction
 
 import UI.PixmapCache
 
--- a/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/IbmWatsonEngine.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/IbmWatsonEngine.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
     QNetworkAccessManager, QNetworkRequest, QNetworkReply
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired
 
--- a/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/__init__.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import QCoreApplication
 from PyQt6.QtGui import QIcon
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import UI.PixmapCache
 
--- a/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
 except ImportError:
     MULTIMEDIA_AVAILABLE = False
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_TranslatorWidget import Ui_TranslatorWidget
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitArchiveDataDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitArchiveDataDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui import EricFileDialog
+from EricWidgets import EricFileDialog
 
 from .Ui_GitArchiveDataDialog import Ui_GitArchiveDataDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitBisectLogBrowserDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitBisectLogBrowserDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
     QLineEdit
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursorProcess
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursorProcess
 
 from .Ui_GitBisectLogBrowserDialog import Ui_GitBisectLogBrowserDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitBlameDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitBlameDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,7 +15,7 @@
     QDialog, QDialogButtonBox, QHeaderView, QLineEdit, QTreeWidgetItem
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_GitBlameDialog import Ui_GitBlameDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitCopyDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitCopyDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricCompleters import EricFileCompleter, EricDirCompleter
-from E5Gui import EricFileDialog
+from EricWidgets.EricCompleters import EricFileCompleter, EricDirCompleter
+from EricWidgets import EricFileDialog
 
 from .Ui_GitCopyDialog import Ui_GitCopyDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitDescribeDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitDescribeDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
     QDialog, QDialogButtonBox, QHeaderView, QTreeWidgetItem, QLineEdit
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_GitDescribeDialog import Ui_GitDescribeDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 )
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QLineEdit
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_GitDialog import Ui_GitDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitDiffDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitDiffDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
 from PyQt6.QtGui import QTextCursor
 from PyQt6.QtWidgets import QWidget, QDialogButtonBox
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_GitDiffDialog import Ui_GitDiffDialog
 
@@ -53,7 +53,7 @@
         
         try:
             # insert the search widget if it is available
-            from E5Gui.EricTextEditSearchWidget import EricTextEditSearchWidget
+            from EricWidgets.EricTextEditSearchWidget import EricTextEditSearchWidget
             self.searchWidget = EricTextEditSearchWidget(self.contentsGroup)
             self.searchWidget.setFocusPolicy(Qt.FocusPolicy.WheelFocus)
             self.searchWidget.setObjectName("searchWidget")
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitDiffGenerator.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitDiffGenerator.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 
 from PyQt6.QtCore import pyqtSignal, QProcess, QTimer, QObject
 
-from E5Gui.EricOverrideCursor import EricOverrideCursorProcess
+from EricGui.EricOverrideCursor import EricOverrideCursorProcess
 
 import Preferences
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitDiffHighlighter.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitDiffHighlighter.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtGui import QColor
 
-from E5Gui.EricGenericDiffHighlighter import TERMINAL, EricGenericDiffHighlighter
+from EricGui.EricGenericDiffHighlighter import TERMINAL, EricGenericDiffHighlighter
 
 
 class GitDiffHighlighter(EricGenericDiffHighlighter):
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitLogBrowserDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitLogBrowserDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -23,9 +23,9 @@
     QLineEdit, QMenu, QInputDialog
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricOverrideCursor import EricOverrideCursorProcess
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricGui.EricOverrideCursor import EricOverrideCursorProcess
 
 from Globals import strToQByteArray
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitNewProjectOptionsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitNewProjectOptionsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,8 +11,8 @@
 from PyQt6.QtCore import pyqtSlot, QUrl
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricCompleters import EricDirCompleter
-from E5Gui import EricFileDialog
+from EricWidgets.EricCompleters import EricDirCompleter
+from EricWidgets import EricFileDialog
 
 from .Ui_GitNewProjectOptionsDialog import Ui_GitNewProjectOptionsDialog
 from .Config import ConfigGitSchemes
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitPatchFilesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitPatchFilesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui import EricFileDialog
+from EricWidgets import EricFileDialog
 
 from .Ui_GitPatchFilesDialog import Ui_GitPatchFilesDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitPatchStatisticsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitPatchStatisticsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import Qt, QProcess
 from PyQt6.QtWidgets import QDialog, QTreeWidgetItem, QHeaderView
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_GitPatchStatisticsDialog import Ui_GitPatchStatisticsDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitReflogBrowserDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitReflogBrowserDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
     QLineEdit
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursorProcess
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursorProcess
 
 from .Ui_GitReflogBrowserDialog import Ui_GitReflogBrowserDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitRemoteRepositoriesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitRemoteRepositoriesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
     QWidget, QHeaderView, QTreeWidgetItem, QDialogButtonBox, QLineEdit
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_GitRemoteRepositoriesDialog import Ui_GitRemoteRepositoriesDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitStashBrowserDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitStashBrowserDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
     QHeaderView, QApplication, QLineEdit
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursorProcess
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursorProcess
 
 from .Ui_GitStashBrowserDialog import Ui_GitStashBrowserDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitStatusDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitStatusDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -19,8 +19,8 @@
     QInputDialog
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from Globals import strToQByteArray
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitSubmoduleAddDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitSubmoduleAddDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,8 +10,8 @@
 from PyQt6.QtCore import pyqtSlot, QUrl
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricCompleters import EricDirCompleter
-from E5Gui import EricFileDialog
+from EricWidgets.EricCompleters import EricDirCompleter
+from EricWidgets import EricFileDialog
 
 from .Ui_GitSubmoduleAddDialog import Ui_GitSubmoduleAddDialog
 from .Config import ConfigGitSchemes
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitTagBranchListDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitTagBranchListDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
     QDialog, QDialogButtonBox, QHeaderView, QTreeWidgetItem, QLineEdit
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_GitTagBranchListDialog import Ui_GitTagBranchListDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/ProjectBrowserHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 
 from PyQt6.QtWidgets import QMenu, QDialog
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from Project.ProjectBrowserModel import ProjectBrowserFileItem
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -12,12 +12,12 @@
 from PyQt6.QtCore import QFileInfo
 from PyQt6.QtWidgets import QMenu, QInputDialog, QToolBar
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 from VCS.ProjectHelper import VcsProjectHelper
 
-from E5Gui.EricAction import EricAction
+from EricGui.EricAction import EricAction
 
 import UI.PixmapCache
 
--- a/eric7/Plugins/VcsPlugins/vcsGit/git.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/git.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
 from PyQt6.QtCore import QProcess, pyqtSignal, QFileInfo
 from PyQt6.QtWidgets import QApplication, QDialog, QInputDialog, QLineEdit
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from QScintilla.MiniEditor import MiniEditor
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/CloseheadExtension/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricAction import EricAction
+from EricGui.EricAction import EricAction
 
 from ..HgExtensionProjectHelper import HgExtensionProjectHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/GpgExtension/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/GpgExtension/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricAction import EricAction
+from EricGui.EricAction import EricAction
 
 from ..HgExtensionProjectHelper import HgExtensionProjectHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgAddSubrepositoryDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgAddSubrepositoryDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui import EricMessageBox
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets import EricMessageBox
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 import Utilities
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgAddSubrepositoryDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgAddSubrepositoryDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -110,7 +110,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_HgArchiveDialog import Ui_HgArchiveDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -94,7 +94,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgBookmarksListDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
     QInputDialog
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from .Ui_HgBookmarksListDialog import Ui_HgBookmarksListDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgConflictsListDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgConflictsListDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
     QApplication, QWidget
 )
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_HgConflictsListDialog import Ui_HgConflictsListDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_HgCopyDialog import Ui_HgCopyDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgCopyDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -92,7 +92,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,8 +11,8 @@
 from PyQt6.QtGui import QTextCursor
 from PyQt6.QtWidgets import QWidget, QDialogButtonBox
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_HgDiffDialog import Ui_HgDiffDialog
 from .HgDiffHighlighter import HgDiffHighlighter
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -96,7 +96,7 @@
   <customwidget>
    <class>EricTextEditSearchWidget</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricTextEditSearchWidget.h</header>
+   <header>EricWidgets/EricTextEditSearchWidget.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffGenerator.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 
 from PyQt6.QtCore import pyqtSignal, QObject
 
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 
 class HgDiffGenerator(QObject):
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffHighlighter.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgDiffHighlighter.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing a syntax highlighter for unified and context diff outputs.
 """
 
-from E5Gui.EricGenericDiffHighlighter import TERMINAL, EricGenericDiffHighlighter
+from EricGui.EricGenericDiffHighlighter import TERMINAL, EricGenericDiffHighlighter
 
 
 class HgDiffHighlighter(EricGenericDiffHighlighter):
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgExportDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgExportDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot, QDir
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_HgExportDialog import Ui_HgExportDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgExportDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgExportDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -171,7 +171,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgImportDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgImportDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot, QDateTime
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_HgImportDialog import Ui_HgImportDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgImportDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgImportDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -215,7 +215,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -21,9 +21,9 @@
     QLineEdit, QMenu, QInputDialog
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .Ui_HgLogBrowserDialog import Ui_HgLogBrowserDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtCore import pyqtSlot, QUrl
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QComboBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_HgNewProjectOptionsDialog import Ui_HgNewProjectOptionsDialog
 from .Config import ConfigHgSchemes
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgNewProjectOptionsDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -140,13 +140,13 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
   <customwidget>
    <class>EricComboPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgServeDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgServeDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,9 +15,9 @@
     QToolBar, QPlainTextEdit, QSpinBox, QComboBox
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
-from E5Gui.EricMainWindow import EricMainWindow
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricMainWindow import EricMainWindow
 
 import UI.PixmapCache
 import Preferences
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
     QWidget, QDialogButtonBox, QMenu, QHeaderView, QTreeWidgetItem
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from .Ui_HgStatusDialog import Ui_HgStatusDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgTagBranchListDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
     QAbstractItemView
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from .Ui_HgTagBranchListDialog import Ui_HgTagBranchListDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
 from PyQt6.QtCore import pyqtSlot, Qt, QEvent
 from PyQt6.QtWidgets import QDialog, QTreeWidgetItem
 
-from E5Gui.EricPathPicker import EricPathPickerModes
-from E5Gui import EricMessageBox
+from EricWidgets.EricPathPicker import EricPathPickerModes
+from EricWidgets import EricMessageBox
 
 import Globals
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgUserConfigDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -680,7 +680,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditCommitEditor.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditCommitEditor.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot, QCoreApplication
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from Ui_HgHisteditCommitEditor import Ui_HgHisteditCommitEditor
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditPlanEditor.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditPlanEditor.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot, QCoreApplication
 from PyQt6.QtWidgets import QDialog, QTreeWidgetItem, QComboBox
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from Ui_HgHisteditPlanEditor import Ui_HgHisteditPlanEditor
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -9,8 +9,8 @@
 
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 from ..HgExtensionProjectHelper import HgExtensionProjectHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/LfConvertDataDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/LfConvertDataDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_LfConvertDataDialog import Ui_LfConvertDataDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/LfConvertDataDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/LfConvertDataDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -112,13 +112,13 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
   <customwidget>
    <class>EricSqueezeLabelPath</class>
    <extends>QLabel</extends>
-   <header>E5Gui/EricSqueezeLabels.h</header>
+   <header>EricWidgets/EricSqueezeLabels.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricAction import EricAction
+from EricGui.EricAction import EricAction
 
 from ..HgExtensionProjectHelper import HgExtensionProjectHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/largefiles.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/LargefilesExtension/largefiles.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import QTimer
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from ..HgExtension import HgExtension
 from ..HgDialog import HgDialog
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 
 from PyQt6.QtWidgets import QMenu, QDialog
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from Project.ProjectBrowserModel import ProjectBrowserFileItem
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -11,12 +11,12 @@
 
 from PyQt6.QtWidgets import QMenu, QToolBar
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 from VCS.ProjectHelper import VcsProjectHelper
 
-from E5Gui.EricAction import EricAction
+from EricGui.EricAction import EricAction
 
 import UI.PixmapCache
 import Preferences
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/PurgeExtension/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/PurgeExtension/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricAction import EricAction
+from EricGui.EricAction import EricAction
 
 from ..HgExtensionProjectHelper import HgExtensionProjectHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesDefineGuardsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesDefineGuardsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
     QDialog, QDialogButtonBox, QAbstractButton, QListWidgetItem
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_HgQueuesDefineGuardsDialog import Ui_HgQueuesDefineGuardsDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -9,8 +9,8 @@
 
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 from ..HgExtensionProjectHelper import HgExtensionProjectHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QDialog, QApplication, QInputDialog
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from ..HgExtension import HgExtension
 from ..HgDialog import HgDialog
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/RebaseExtension/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -9,8 +9,8 @@
 
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 from ..HgExtensionProjectHelper import HgExtensionProjectHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveBrowserDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/HgShelveBrowserDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
     QHeaderView, QApplication
 )
 
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .Ui_HgShelveBrowserDialog import Ui_HgShelveBrowserDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/ProjectBrowserHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/ProjectBrowserHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from ..HgExtensionProjectBrowserHelper import HgExtensionProjectBrowserHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -9,8 +9,8 @@
 
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 from ..HgExtensionProjectHelper import HgExtensionProjectHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/shelve.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/shelve.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from ..HgExtension import HgExtension
 from ..HgDialog import HgDialog
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/StripExtension/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/StripExtension/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -9,8 +9,8 @@
 
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 from ..HgExtensionProjectHelper import HgExtensionProjectHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/hg.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/hg.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
 )
 from PyQt6.QtWidgets import QApplication, QDialog, QInputDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from QScintilla.MiniEditor import MiniEditor
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from VCS.ProjectBrowserHelper import VcsProjectBrowserHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
 
 from VCS.ProjectHelper import VcsProjectHelper
 
-from E5Gui.EricAction import EricAction
-from E5Gui.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets.EricApplication import ericApp
 
 import UI.PixmapCache
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnChangeListsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtCore import pyqtSlot, Qt
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QListWidgetItem
 
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from EricUtilities.EricMutexLocker import EricMutexLocker
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SvnCommandDialog import Ui_SvnCommandDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnCommandDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -128,7 +128,7 @@
   <customwidget>
    <class>EricComboPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SvnCopyDialog import Ui_SvnCopyDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnCopyDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -92,7 +92,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnDialogMixin.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnDialogMixin.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 
 from PyQt6.QtWidgets import QApplication, QDialog, QWidget
 
-from E5Gui.EricOverrideCursor import EricOverridenCursor
+from EricGui.EricOverrideCursor import EricOverridenCursor
 
 
 class SvnDialogMixin:
@@ -86,7 +86,7 @@
             acceptedFailures should indicate the accepted certificate failures
             and save should be True, if subversion should save the certificate.
         """
-        from E5Gui import EricMessageBox
+        from EricWidgets import EricMessageBox
 
         with EricOverridenCursor():
             parent = isinstance(self, QWidget) and self or None
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,9 +16,9 @@
 from PyQt6.QtGui import QTextCursor
 from PyQt6.QtWidgets import QWidget, QDialogButtonBox
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from EricUtilities.EricMutexLocker import EricMutexLocker
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -96,7 +96,7 @@
   <customwidget>
    <class>EricTextEditSearchWidget</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricTextEditSearchWidget.h</header>
+   <header>EricWidgets/EricTextEditSearchWidget.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnDiffHighlighter.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnDiffHighlighter.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing a syntax highlighter for unified and context diff outputs.
 """
 
-from E5Gui.EricGenericDiffHighlighter import TERMINAL, EricGenericDiffHighlighter
+from EricGui.EricGenericDiffHighlighter import TERMINAL, EricGenericDiffHighlighter
 
 
 class SvnDiffHighlighter(EricGenericDiffHighlighter):
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -17,8 +17,8 @@
     QHeaderView, QWidget, QApplication, QDialogButtonBox, QTreeWidgetItem
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from EricUtilities.EricMutexLocker import EricMutexLocker
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import QDir, pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SvnNewProjectOptionsDialog import Ui_SvnNewProjectOptionsDialog
 from .Config import ConfigSvnProtocols
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnNewProjectOptionsDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -153,7 +153,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import QDir, pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SvnOptionsDialog import Ui_SvnOptionsDialog
 from .Config import ConfigSvnProtocols
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnOptionsDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -125,7 +125,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnRepoBrowserDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
     QHeaderView, QDialog, QApplication, QDialogButtonBox, QTreeWidgetItem
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from EricUtilities.EricMutexLocker import EricMutexLocker
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -18,9 +18,9 @@
     QTreeWidgetItem
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from EricUtilities.EricMutexLocker import EricMutexLocker
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnTagBranchListDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -18,7 +18,7 @@
     QDialogButtonBox, QTreeWidgetItem
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from EricUtilities.EricMutexLocker import EricMutexLocker
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnUrlSelectionDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 import pysvn
 
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/subversion.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/subversion.py	Sat May 22 19:58:24 2021 +0200
@@ -17,8 +17,8 @@
 from PyQt6.QtCore import pyqtSignal, Qt, QDateTime, QCoreApplication
 from PyQt6.QtWidgets import QLineEdit, QDialog, QInputDialog, QApplication
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from EricUtilities.EricMutexLocker import EricMutexLocker
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 import os
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from VCS.ProjectBrowserHelper import VcsProjectBrowserHelper
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
 
 from VCS.ProjectHelper import VcsProjectHelper
 
-from E5Gui.EricAction import EricAction
-from E5Gui.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets.EricApplication import ericApp
 
 import UI.PixmapCache
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnBlameDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
     QHeaderView, QLineEdit, QDialog, QDialogButtonBox, QTreeWidgetItem
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_SvnBlameDialog import Ui_SvnBlameDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnChangeListsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,7 +15,7 @@
     QDialog, QDialogButtonBox, QListWidgetItem, QLineEdit
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_SvnChangeListsDialog import Ui_SvnChangeListsDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SvnCommandDialog import Ui_SvnCommandDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnCommandDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -128,7 +128,7 @@
   <customwidget>
    <class>EricComboPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SvnCopyDialog import Ui_SvnCopyDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnCopyDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -92,7 +92,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import QTimer, QProcess, pyqtSlot, Qt, QProcessEnvironment
 from PyQt6.QtWidgets import QLineEdit, QDialog, QDialogButtonBox
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_SvnDialog import Ui_SvnDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
 from PyQt6.QtGui import QTextCursor
 from PyQt6.QtWidgets import QWidget, QLineEdit, QDialogButtonBox
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from .Ui_SvnDiffDialog import Ui_SvnDiffDialog
 from .SvnDiffHighlighter import SvnDiffHighlighter
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnDiffDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -154,7 +154,7 @@
   <customwidget>
    <class>EricTextEditSearchWidget</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricTextEditSearchWidget.h</header>
+   <header>EricWidgets/EricTextEditSearchWidget.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnDiffHighlighter.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnDiffHighlighter.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing a syntax highlighter for unified and context diff outputs.
 """
 
-from E5Gui.EricGenericDiffHighlighter import TERMINAL, EricGenericDiffHighlighter
+from EricGui.EricGenericDiffHighlighter import TERMINAL, EricGenericDiffHighlighter
 
 
 class SvnDiffHighlighter(EricGenericDiffHighlighter):
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
     QTreeWidgetItem
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursorProcess
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursorProcess
 
 from .Ui_SvnLogBrowserDialog import Ui_SvnLogBrowserDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import QDir, pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SvnNewProjectOptionsDialog import Ui_SvnNewProjectOptionsDialog
 from .Config import ConfigSvnProtocols
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnNewProjectOptionsDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -153,7 +153,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import QDir, pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SvnOptionsDialog import Ui_SvnOptionsDialog
 from .Config import ConfigSvnProtocols
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnOptionsDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -125,7 +125,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnPropListDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,7 +15,7 @@
     QWidget, QHeaderView, QDialogButtonBox, QTreeWidgetItem
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_SvnPropListDialog import Ui_SvnPropListDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SvnPropSetDialog import Ui_SvnPropSetDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnPropSetDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -113,7 +113,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnRepoBrowserDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
     QHeaderView, QLineEdit, QDialog, QDialogButtonBox, QTreeWidgetItem
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursorProcess
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursorProcess
 
 from .Ui_SvnRepoBrowserDialog import Ui_SvnRepoBrowserDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -17,8 +17,8 @@
     QTreeWidgetItem
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from .Ui_SvnStatusDialog import Ui_SvnStatusDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnTagBranchListDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,7 +16,7 @@
     QTreeWidgetItem
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_SvnTagBranchListDialog import Ui_SvnTagBranchListDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnUrlSelectionDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from .Ui_SvnUrlSelectionDialog import Ui_SvnUrlSelectionDialog
 
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/subversion.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/subversion.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
 from PyQt6.QtCore import pyqtSignal, QProcess, QCoreApplication
 from PyQt6.QtWidgets import QLineEdit, QDialog, QInputDialog, QApplication
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from VCS.VersionControl import VersionControl
 
--- a/eric7/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Sat May 22 19:58:24 2021 +0200
@@ -19,7 +19,7 @@
     QMenu, QLabel
 )
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from ViewManager.ViewManager import ViewManager
 
@@ -29,8 +29,8 @@
 
 import UI.PixmapCache
 
-from E5Gui.EricTabWidget import EricTabWidget, EricWheelTabBar
-from E5Gui.EricLed import EricLed
+from EricWidgets.EricTabWidget import EricTabWidget, EricWheelTabBar
+from EricWidgets.EricLed import EricLed
 
 import Preferences
 from Globals import isMacPlatform
--- a/eric7/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/WizardPlugins/ColorDialogWizard/ColorDialogWizardDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtGui import QColor
 from PyQt6.QtWidgets import QColorDialog, QDialog, QDialogButtonBox
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_ColorDialogWizardDialog import Ui_ColorDialogWizardDialog
 
--- a/eric7/Plugins/WizardPlugins/DotDesktopWizard/DotDesktopWizardDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/WizardPlugins/DotDesktopWizard/DotDesktopWizardDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from .Ui_DotDesktopWizardDialog import Ui_DotDesktopWizardDialog
 
--- a/eric7/Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/WizardPlugins/E5MessageBoxWizard/E5MessageBoxWizardDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QAbstractButton
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_E5MessageBoxWizardDialog import Ui_E5MessageBoxWizardDialog
 
--- a/eric7/Plugins/WizardPlugins/EricPluginWizard/PluginWizardDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/WizardPlugins/EricPluginWizard/PluginWizardDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot, QDate
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_PluginWizardDialog import Ui_PluginWizardDialog
 
--- a/eric7/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/WizardPlugins/FileDialogWizard/FileDialogWizardDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
     QDialog, QDialogButtonBox, QFileDialog, QButtonGroup
 )
 
-from E5Gui.EricCompleters import EricFileCompleter, EricDirCompleter
+from EricWidgets.EricCompleters import EricFileCompleter, EricDirCompleter
 
 from .Ui_FileDialogWizardDialog import Ui_FileDialogWizardDialog
 
--- a/eric7/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -17,8 +17,8 @@
     QVBoxLayout, QTableWidgetItem
 )
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricMainWindow import EricMainWindow
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricMainWindow import EricMainWindow
 
 from .Ui_PyRegExpWizardDialog import Ui_PyRegExpWizardDialog
 
--- a/eric7/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -19,8 +19,8 @@
     QVBoxLayout, QTableWidgetItem
 )
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricMainWindow import EricMainWindow
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricMainWindow import EricMainWindow
 
 from .Ui_QRegularExpressionWizardDialog import (
     Ui_QRegularExpressionWizardDialog
--- a/eric7/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Plugins/WizardPlugins/SetupWizard/SetupWizardDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,10 +16,10 @@
 )
 from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricCompleters import EricDirCompleter
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricCompleters import EricDirCompleter
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .Ui_SetupWizardDialog import Ui_SetupWizardDialog
 
--- a/eric7/Preferences/ConfigurationDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -20,9 +20,9 @@
     QVBoxLayout, QTreeWidgetItem, QLabel, QAbstractScrollArea, QLineEdit
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
-from E5Gui.EricMainWindow import EricMainWindow
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricMainWindow import EricMainWindow
 
 from Globals import isMacPlatform, getWebBrowserSupport
 
--- a/eric7/Preferences/ConfigurationPages/CondaPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/CondaPage.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing the conda configuration page.
 """
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_CondaPage import Ui_CondaPage
--- a/eric7/Preferences/ConfigurationPages/CondaPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/CondaPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -76,7 +76,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/CorbaPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/CorbaPage.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing the Corba configuration page.
 """
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_CorbaPage import Ui_CorbaPage
--- a/eric7/Preferences/ConfigurationPages/CorbaPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/CorbaPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -76,7 +76,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/DebuggerGeneralPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/DebuggerGeneralPage.py	Sat May 22 19:58:24 2021 +0200
@@ -15,9 +15,9 @@
 from PyQt6.QtWidgets import QLineEdit, QInputDialog
 from PyQt6.QtNetwork import QNetworkInterface, QAbstractSocket, QHostAddress
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricCompleters import EricFileCompleter, EricDirCompleter
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricCompleters import EricFileCompleter, EricDirCompleter
+from EricWidgets import EricMessageBox
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_DebuggerGeneralPage import Ui_DebuggerGeneralPage
--- a/eric7/Preferences/ConfigurationPages/DebuggerPython3Page.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/DebuggerPython3Page.py	Sat May 22 19:58:24 2021 +0200
@@ -9,8 +9,8 @@
 
 from PyQt6.QtCore import pyqtSlot
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_DebuggerPython3Page import Ui_DebuggerPython3Page
--- a/eric7/Preferences/ConfigurationPages/DebuggerPython3Page.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/DebuggerPython3Page.ui	Sat May 22 19:58:24 2021 +0200
@@ -204,7 +204,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/EditorAPIsPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/EditorAPIsPage.py	Sat May 22 19:58:24 2021 +0200
@@ -10,9 +10,9 @@
 from PyQt6.QtCore import QDir, pyqtSlot, QFileInfo
 from PyQt6.QtWidgets import QInputDialog
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_EditorAPIsPage import Ui_EditorAPIsPage
--- a/eric7/Preferences/ConfigurationPages/EditorAPIsPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/EditorAPIsPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -196,7 +196,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/EditorDocViewerPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/EditorDocViewerPage.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_EditorDocViewerPage import Ui_EditorDocViewerPage
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- a/eric7/Preferences/ConfigurationPages/EditorFilePage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/EditorFilePage.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
 from PyQt6.QtWidgets import QListWidgetItem, QInputDialog, QLineEdit
 from PyQt6.Qsci import QsciScintilla
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_EditorFilePage import Ui_EditorFilePage
--- a/eric7/Preferences/ConfigurationPages/EditorGeneralPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/EditorGeneralPage.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtWidgets import QTreeWidgetItem, QHeaderView, QDialog
 from PyQt6.Qsci import QsciScintillaBase
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_EditorGeneralPage import Ui_EditorGeneralPage
--- a/eric7/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py	Sat May 22 19:58:24 2021 +0200
@@ -19,7 +19,7 @@
 from .Ui_EditorHighlightingStylesPage import Ui_EditorHighlightingStylesPage
 from ..SubstyleDefinitionDialog import SubstyleDefinitionDialog
 
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets import EricMessageBox, EricFileDialog
 
 import UI.PixmapCache
 
--- a/eric7/Preferences/ConfigurationPages/EditorKeywordsPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/EditorKeywordsPage.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtCore import pyqtSlot
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_EditorKeywordsPage import Ui_EditorKeywordsPage
--- a/eric7/Preferences/ConfigurationPages/EditorSpellCheckingPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/EditorSpellCheckingPage.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing the Editor Spellchecking configuration page.
 """
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_EditorSpellCheckingPage import Ui_EditorSpellCheckingPage
--- a/eric7/Preferences/ConfigurationPages/EditorSpellCheckingPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/EditorSpellCheckingPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -401,7 +401,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/EmailPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/EmailPage.py	Sat May 22 19:58:24 2021 +0200
@@ -13,9 +13,9 @@
 
 from PyQt6.QtCore import pyqtSlot
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from EricNetwork.EricGoogleMailHelpers import getInstallCommand, RequiredPackages
 
@@ -251,7 +251,7 @@
                     " Use <code>{0}</code> to install it.</p>"
                 ).format(getInstallCommand())
             
-            from E5Gui.EricSimpleHelpDialog import EricSimpleHelpDialog
+            from EricWidgets.EricSimpleHelpDialog import EricSimpleHelpDialog
             self.__helpDialog = EricSimpleHelpDialog(
                 title=self.tr("Gmail API Help"),
                 helpStr=helpStr, parent=self)
--- a/eric7/Preferences/ConfigurationPages/HelpDocumentationPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/HelpDocumentationPage.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing the Help Documentation configuration page.
 """
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_HelpDocumentationPage import Ui_HelpDocumentationPage
--- a/eric7/Preferences/ConfigurationPages/HelpDocumentationPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/HelpDocumentationPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -330,7 +330,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/HelpViewersPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/HelpViewersPage.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 
 from Globals import getWebBrowserSupport
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_HelpViewersPage import Ui_HelpViewersPage
--- a/eric7/Preferences/ConfigurationPages/HelpViewersPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/HelpViewersPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -121,7 +121,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/IconsPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/IconsPage.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QListWidgetItem
 
-from E5Gui.EricPathPicker import EricPathPickerModes
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricApplication import ericApp
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_IconsPage import Ui_IconsPage
--- a/eric7/Preferences/ConfigurationPages/IconsPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/IconsPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -268,7 +268,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/InterfacePage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/InterfacePage.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import pyqtSlot, QTranslator
 from PyQt6.QtWidgets import QStyleFactory
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_InterfacePage import Ui_InterfacePage
--- a/eric7/Preferences/ConfigurationPages/InterfacePage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/InterfacePage.ui	Sat May 22 19:58:24 2021 +0200
@@ -506,7 +506,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/LogViewerPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/LogViewerPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -131,7 +131,7 @@
   <customwidget>
    <class>EricStringListEditWidget</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricStringListEditWidget.h</header>
+   <header>EricWidgets/EricStringListEditWidget.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/MasterPasswordEntryDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/MasterPasswordEntryDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -128,7 +128,7 @@
   <customwidget>
    <class>EricPasswordMeter</class>
    <extends>QProgressBar</extends>
-   <header>E5Gui/EricPasswordMeter</header>
+   <header>EricWidgets/EricPasswordMeter</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/Preferences/ConfigurationPages/MicroPythonPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/MicroPythonPage.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing the MicroPython configuration page.
 """
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_MicroPythonPage import Ui_MicroPythonPage
--- a/eric7/Preferences/ConfigurationPages/MicroPythonPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/MicroPythonPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -523,7 +523,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/MimeTypesPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/MimeTypesPage.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtCore import pyqtSlot
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_MimeTypesPage import Ui_MimeTypesPage
--- a/eric7/Preferences/ConfigurationPages/MimeTypesPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/MimeTypesPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -70,7 +70,7 @@
   <customwidget>
    <class>EricStringListEditWidget</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricStringListEditWidget.h</header>
+   <header>EricWidgets/EricStringListEditWidget.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/MultiProjectPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/MultiProjectPage.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_MultiProjectPage import Ui_MultiProjectPage
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 import Preferences
 import Utilities
--- a/eric7/Preferences/ConfigurationPages/MultiProjectPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/MultiProjectPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -162,7 +162,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/NetworkPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/NetworkPage.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtCore import pyqtSlot
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from EricNetwork.EricFtp import EricFtpProxyType
 
--- a/eric7/Preferences/ConfigurationPages/NetworkPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/NetworkPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -477,7 +477,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/PluginManagerPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/PluginManagerPage.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtCore import pyqtSlot
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_PluginManagerPage import Ui_PluginManagerPage
--- a/eric7/Preferences/ConfigurationPages/PluginManagerPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/PluginManagerPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -263,7 +263,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/ProjectBrowserPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/ProjectBrowserPage.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtCore import pyqtSlot
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_ProjectBrowserPage import Ui_ProjectBrowserPage
--- a/eric7/Preferences/ConfigurationPages/ProtobufPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/ProtobufPage.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing the protobuf configuration page.
 """
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_ProtobufPage import Ui_ProtobufPage
--- a/eric7/Preferences/ConfigurationPages/ProtobufPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/ProtobufPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -102,7 +102,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/QtPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/QtPage.py	Sat May 22 19:58:24 2021 +0200
@@ -9,8 +9,8 @@
 
 from PyQt6.QtCore import pyqtSlot
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_QtPage import Ui_QtPage
--- a/eric7/Preferences/ConfigurationPages/QtPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/QtPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -646,7 +646,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/ViewmanagerPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/ViewmanagerPage.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtCore import pyqtSlot
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_ViewmanagerPage import Ui_ViewmanagerPage
--- a/eric7/Preferences/ConfigurationPages/WebBrowserAppearancePage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/WebBrowserAppearancePage.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtGui import QFont
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_WebBrowserAppearancePage import Ui_WebBrowserAppearancePage
--- a/eric7/Preferences/ConfigurationPages/WebBrowserAppearancePage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/WebBrowserAppearancePage.ui	Sat May 22 19:58:24 2021 +0200
@@ -530,7 +530,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ConfigurationPages/WebBrowserInterfacePage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/WebBrowserInterfacePage.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QStyleFactory
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_WebBrowserInterfacePage import Ui_WebBrowserInterfacePage
--- a/eric7/Preferences/ConfigurationPages/WebBrowserInterfacePage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ConfigurationPages/WebBrowserInterfacePage.ui	Sat May 22 19:58:24 2021 +0200
@@ -91,7 +91,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/HighlightingStylesFile.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/HighlightingStylesFile.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 
 from PyQt6.QtCore import QObject
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverridenCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverridenCursor
 
 import Preferences
 
--- a/eric7/Preferences/ProgramsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ProgramsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
     QApplication, QTreeWidgetItem, QHeaderView, QDialog, QDialogButtonBox
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .Ui_ProgramsDialog import Ui_ProgramsDialog
 
--- a/eric7/Preferences/Shortcuts.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/Shortcuts.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import QFile, QIODevice, QCoreApplication
 from PyQt6.QtGui import QKeySequence
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from Preferences import Prefs, syncPreferences
 
--- a/eric7/Preferences/ShortcutsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ShortcutsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
 from PyQt6.QtGui import QKeySequence
 from PyQt6.QtWidgets import QHeaderView, QDialog, QTreeWidgetItem
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from .Ui_ShortcutsDialog import Ui_ShortcutsDialog
 
--- a/eric7/Preferences/ShortcutsFile.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ShortcutsFile.py	Sat May 22 19:58:24 2021 +0200
@@ -13,9 +13,9 @@
 
 from PyQt6.QtCore import QObject
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverridenCursor
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverridenCursor
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- a/eric7/Preferences/SubstyleDefinitionDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/SubstyleDefinitionDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_SubstyleDefinitionDialog import Ui_SubstyleDefinitionDialog
 
--- a/eric7/Preferences/ToolConfigurationDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ToolConfigurationDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import Qt, pyqtSlot
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui import EricMessageBox
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets import EricMessageBox
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_ToolConfigurationDialog import Ui_ToolConfigurationDialog
 
--- a/eric7/Preferences/ToolConfigurationDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ToolConfigurationDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -321,7 +321,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Preferences/ToolGroupConfigurationDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/ToolGroupConfigurationDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import Qt, pyqtSlot
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_ToolGroupConfigurationDialog import Ui_ToolGroupConfigurationDialog
 
--- a/eric7/Preferences/__init__.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Preferences/__init__.py	Sat May 22 19:58:24 2021 +0200
@@ -36,7 +36,7 @@
     QWebEngineSettings = None
 from PyQt6.Qsci import QsciScintilla, QsciLexerPython
 
-from E5Gui import EricFileDialog
+from EricWidgets import EricFileDialog
 
 from EricNetwork.EricFtp import EricFtpProxyType
 
@@ -1593,7 +1593,7 @@
     """
     Module function to initialize the central configuration store.
     """
-    from E5Gui.EricApplication import ericApp
+    from EricWidgets.EricApplication import ericApp
     Prefs.settings = QSettings(
         QSettings.Format.IniFormat, QSettings.Scope.UserScope,
         Globals.settingsNameOrganization, Globals.settingsNameGlobal,
@@ -1751,7 +1751,7 @@
             "Debugger/" + newKey, prefClass.debuggerDefaults[newKey])
         if venvName:
             try:
-                from E5Gui.EricApplication import ericApp
+                from EricWidgets.EricApplication import ericApp
                 virtualenvManager = ericApp().getObject("VirtualEnvManager")
             except KeyError:
                 from VirtualEnv.VirtualenvManager import VirtualenvManager
--- a/eric7/Project/AddDirectoryDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/AddDirectoryDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_AddDirectoryDialog import Ui_AddDirectoryDialog
 
--- a/eric7/Project/AddDirectoryDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/AddDirectoryDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -126,7 +126,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Project/AddFileDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/AddFileDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_AddFileDialog import Ui_AddFileDialog
 
--- a/eric7/Project/AddFileDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/AddFileDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -118,7 +118,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Project/CreateDialogCodeDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/CreateDialogCodeDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -20,8 +20,8 @@
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from .Ui_CreateDialogCodeDialog import Ui_CreateDialogCodeDialog
 from .NewDialogClassDialog import NewDialogClassDialog
--- a/eric7/Project/DebuggerPropertiesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/DebuggerPropertiesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,9 +12,9 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QComboBox
 
-from E5Gui.EricCompleters import EricDirCompleter
-from E5Gui.EricPathPicker import EricPathPickerModes
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricCompleters import EricDirCompleter
+from EricWidgets.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_DebuggerPropertiesDialog import Ui_DebuggerPropertiesDialog
 
--- a/eric7/Project/DebuggerPropertiesDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/DebuggerPropertiesDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -267,7 +267,7 @@
   <customwidget>
    <class>EricComboPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Project/DebuggerPropertiesFile.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/DebuggerPropertiesFile.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
 
 from PyQt6.QtCore import QObject
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverridenCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverridenCursor
 
 import Preferences
 
--- a/eric7/Project/IdlCompilerOptionsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/IdlCompilerOptionsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
 
 import UI.PixmapCache
 
-from E5Gui import EricPathPickerDialog
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets import EricPathPickerDialog
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .IdlCompilerDefineNameDialog import IdlCompilerDefineNameDialog
 
--- a/eric7/Project/MakePropertiesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/MakePropertiesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_MakePropertiesDialog import Ui_MakePropertiesDialog
 
--- a/eric7/Project/MakePropertiesDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/MakePropertiesDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -126,7 +126,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Project/NewDialogClassDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/NewDialogClassDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_NewDialogClassDialog import Ui_NewDialogClassDialog
 
--- a/eric7/Project/NewDialogClassDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/NewDialogClassDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -97,7 +97,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Project/Project.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/Project.py	Sat May 22 19:58:24 2021 +0200
@@ -26,10 +26,10 @@
 )
 from PyQt6.Qsci import QsciScintilla
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricFileDialog, EricMessageBox
-from E5Gui.EricListSelectionDialog import EricListSelectionDialog
-from E5Gui.EricProgressDialog import EricProgressDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricFileDialog, EricMessageBox
+from EricWidgets.EricListSelectionDialog import EricListSelectionDialog
+from EricWidgets.EricProgressDialog import EricProgressDialog
 from EricGui.EricOverrideCursor import EricOverrideCursor, EricOverridenCursor
 
 from Globals import recentNameProject
--- a/eric7/Project/ProjectBaseBrowser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/ProjectBaseBrowser.py	Sat May 22 19:58:24 2021 +0200
@@ -18,9 +18,9 @@
     QTreeView, QApplication, QMenu, QDialog, QAbstractItemView
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from UI.Browser import Browser
 from UI.BrowserModel import BrowserDirectoryItem, BrowserFileItem
--- a/eric7/Project/ProjectBrowser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/ProjectBrowser.py	Sat May 22 19:58:24 2021 +0200
@@ -11,8 +11,8 @@
 from PyQt6.QtGui import QColor
 from PyQt6.QtWidgets import QApplication
 
-from E5Gui.EricTabWidget import EricTabWidget
-from E5Gui.EricLed import EricClickableLed
+from EricWidgets.EricTabWidget import EricTabWidget
+from EricWidgets.EricLed import EricClickableLed
 
 import UI.PixmapCache
 import Preferences
--- a/eric7/Project/ProjectFile.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/ProjectFile.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
 
 from PyQt6.QtCore import QObject
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverridenCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverridenCursor
 
 import Preferences
 import Utilities
--- a/eric7/Project/ProjectFormsBrowser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/ProjectFormsBrowser.py	Sat May 22 19:58:24 2021 +0200
@@ -15,9 +15,9 @@
 from PyQt6.QtCore import QThread, QFileInfo, pyqtSignal, QProcess
 from PyQt6.QtWidgets import QDialog, QInputDialog, QApplication, QMenu
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricProgressDialog import EricProgressDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricProgressDialog import EricProgressDialog
 
 from .ProjectBrowserModel import (
     ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem,
--- a/eric7/Project/ProjectInterfacesBrowser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/ProjectInterfacesBrowser.py	Sat May 22 19:58:24 2021 +0200
@@ -15,9 +15,9 @@
 from PyQt6.QtCore import QThread, pyqtSignal, QProcess
 from PyQt6.QtWidgets import QDialog, QApplication, QMenu
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
-from E5Gui.EricProgressDialog import EricProgressDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricProgressDialog import EricProgressDialog
 
 from .ProjectBrowserModel import (
     ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem,
--- a/eric7/Project/ProjectOthersBrowser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/ProjectOthersBrowser.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtGui import QDesktopServices
 from PyQt6.QtWidgets import QDialog, QMenu
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .ProjectBrowserModel import (
     ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem,
--- a/eric7/Project/ProjectProtocolsBrowser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/ProjectProtocolsBrowser.py	Sat May 22 19:58:24 2021 +0200
@@ -16,9 +16,9 @@
 from PyQt6.QtCore import QThread, pyqtSignal, QProcess
 from PyQt6.QtWidgets import QDialog, QApplication, QMenu
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
-from E5Gui.EricProgressDialog import EricProgressDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricProgressDialog import EricProgressDialog
 
 from .ProjectBrowserModel import (
     ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem,
--- a/eric7/Project/ProjectResourcesBrowser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/ProjectResourcesBrowser.py	Sat May 22 19:58:24 2021 +0200
@@ -13,9 +13,9 @@
 from PyQt6.QtCore import QThread, QFileInfo, pyqtSignal, QProcess
 from PyQt6.QtWidgets import QDialog, QApplication, QMenu
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricProgressDialog import EricProgressDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricProgressDialog import EricProgressDialog
 
 from .ProjectBrowserModel import (
     ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem,
--- a/eric7/Project/ProjectSourcesBrowser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/ProjectSourcesBrowser.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import pyqtSignal
 from PyQt6.QtWidgets import QDialog, QInputDialog, QMenu
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from UI.BrowserModel import (
     BrowserFileItem, BrowserClassItem, BrowserMethodItem,
--- a/eric7/Project/ProjectTranslationsBrowser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/ProjectTranslationsBrowser.py	Sat May 22 19:58:24 2021 +0200
@@ -17,8 +17,8 @@
 from PyQt6.QtCore import pyqtSignal, QProcess
 from PyQt6.QtWidgets import QDialog, QMenu
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 from .ProjectBrowserModel import (
     ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem,
--- a/eric7/Project/PropertiesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/PropertiesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import QDir, pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_PropertiesDialog import Ui_PropertiesDialog
 
--- a/eric7/Project/PropertiesDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/PropertiesDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -423,7 +423,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Project/SpellingPropertiesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/SpellingPropertiesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SpellingPropertiesDialog import Ui_SpellingPropertiesDialog
 
--- a/eric7/Project/SpellingPropertiesDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/SpellingPropertiesDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -102,7 +102,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Project/TranslationPropertiesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/TranslationPropertiesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,9 +12,9 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QListWidgetItem, QDialog, QDialogButtonBox
 
-from E5Gui.EricCompleters import EricFileCompleter
-from E5Gui import EricFileDialog
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricCompleters import EricFileCompleter
+from EricWidgets import EricFileDialog
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_TranslationPropertiesDialog import Ui_TranslationPropertiesDialog
 
--- a/eric7/Project/TranslationPropertiesDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/TranslationPropertiesDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -172,7 +172,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Project/UserProjectFile.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/UserProjectFile.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
 
 from PyQt6.QtCore import QObject
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverridenCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverridenCursor
 
 import Preferences
 
--- a/eric7/Project/UserPropertiesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Project/UserPropertiesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- a/eric7/PyUnit/UnittestDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PyUnit/UnittestDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -21,10 +21,10 @@
     QComboBox, QTreeWidgetItem
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_UnittestDialog import Ui_UnittestDialog
 
--- a/eric7/PyUnit/UnittestDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/PyUnit/UnittestDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -549,13 +549,13 @@
   <customwidget>
    <class>EricComboPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
   <customwidget>
    <class>EricLed</class>
    <extends>QFrame</extends>
-   <header>E5Gui/EricLed.h</header>
+   <header>EricWidgets/EricLed.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/QScintilla/DocstringGenerator/BaseDocstringGenerator.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/DocstringGenerator/BaseDocstringGenerator.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import Qt
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- a/eric7/QScintilla/Editor.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/Editor.py	Sat May 22 19:58:24 2021 +0200
@@ -25,9 +25,9 @@
 from PyQt6.QtPrintSupport import QPrinter, QPrintDialog, QAbstractPrintDialog
 from PyQt6.Qsci import QsciScintilla, QsciMacro, QsciStyledText
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricFileDialog, EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricFileDialog, EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from EricUtilities.EricCache import EricCache
 
--- a/eric7/QScintilla/EditorAssembly.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/EditorAssembly.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import QTimer
 from PyQt6.QtWidgets import QWidget, QGridLayout, QComboBox
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import UI.PixmapCache
 import Preferences
--- a/eric7/QScintilla/EditorMarkerMap.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/EditorMarkerMap.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing a class for showing an editor marker map.
 """
 
-from E5Gui.EricMapWidget import EricMapWidget
+from EricWidgets.EricMapWidget import EricMapWidget
 
 import Preferences
 
--- a/eric7/QScintilla/Exporters/ExporterBase.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/Exporters/ExporterBase.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtCore import QFileInfo, QObject, QCoreApplication
 
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets import EricMessageBox, EricFileDialog
 
 import Utilities
 
--- a/eric7/QScintilla/Exporters/ExporterHTML.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/Exporters/ExporterHTML.py	Sat May 22 19:58:24 2021 +0200
@@ -19,8 +19,8 @@
 from PyQt6.QtWidgets import QInputDialog
 from PyQt6.Qsci import QsciScintilla
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .ExporterBase import ExporterBase
 
--- a/eric7/QScintilla/Exporters/ExporterODT.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/Exporters/ExporterODT.py	Sat May 22 19:58:24 2021 +0200
@@ -9,8 +9,8 @@
 
 from PyQt6.QtGui import QTextDocument, QTextDocumentWriter
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .ExporterBase import ExporterBase
 from .ExporterHTML import HTMLGenerator
--- a/eric7/QScintilla/Exporters/ExporterPDF.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/Exporters/ExporterPDF.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
 from PyQt6.QtGui import QFontInfo
 from PyQt6.Qsci import QsciScintilla
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .ExporterBase import ExporterBase
 
--- a/eric7/QScintilla/Exporters/ExporterRTF.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/Exporters/ExporterRTF.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
 from PyQt6.QtGui import QFontInfo
 from PyQt6.Qsci import QsciScintilla
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .ExporterBase import ExporterBase
 
--- a/eric7/QScintilla/Exporters/ExporterTEX.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/Exporters/ExporterTEX.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
 
 from PyQt6.Qsci import QsciScintilla
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .ExporterBase import ExporterBase
 
--- a/eric7/QScintilla/MarkupProviders/ImageMarkupDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/MarkupProviders/ImageMarkupDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtGui import QImage, QImageReader
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_ImageMarkupDialog import Ui_ImageMarkupDialog
 
--- a/eric7/QScintilla/MarkupProviders/ImageMarkupDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/MarkupProviders/ImageMarkupDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -154,7 +154,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/QScintilla/MiniEditor.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/MiniEditor.py	Sat May 22 19:58:24 2021 +0200
@@ -25,12 +25,12 @@
 from PyQt6.QtPrintSupport import QPrinter, QPrintDialog, QAbstractPrintDialog
 from PyQt6.Qsci import QsciScintilla
 
-from E5Gui.EricAction import EricAction, createActionGroup
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricClickableLabel import EricClickableLabel
-from E5Gui.EricZoomWidget import EricZoomWidget
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricGui.EricAction import EricAction, createActionGroup
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricClickableLabel import EricClickableLabel
+from EricWidgets.EricZoomWidget import EricZoomWidget
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .QsciScintillaCompat import QsciScintillaCompat
 
--- a/eric7/QScintilla/SearchReplaceWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/SearchReplaceWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -18,8 +18,8 @@
 
 from .Editor import Editor
 
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
 
 import Preferences
 
--- a/eric7/QScintilla/Shell.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/Shell.py	Sat May 22 19:58:24 2021 +0200
@@ -20,8 +20,8 @@
 )
 from PyQt6.Qsci import QsciScintilla
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from .QsciScintillaCompat import QsciScintillaCompat
 
--- a/eric7/QScintilla/ShellWindow.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/ShellWindow.py	Sat May 22 19:58:24 2021 +0200
@@ -19,11 +19,11 @@
 )
 from PyQt6.Qsci import QsciScintilla
 
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricAction import EricAction, createActionGroup
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricZoomWidget import EricZoomWidget
-from E5Gui import EricMessageBox
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricGui.EricAction import EricAction, createActionGroup
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricZoomWidget import EricZoomWidget
+from EricWidgets import EricMessageBox
 
 import UI.Config
 import UI.PixmapCache
--- a/eric7/QScintilla/SpellingDictionaryEditDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/QScintilla/SpellingDictionaryEditDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -165,7 +165,7 @@
   <customwidget>
    <class>EricListView</class>
    <extends>QListView</extends>
-   <header>E5Gui/EricListView.h</header>
+   <header>EricWidgets/EricListView.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/Sessions/SessionFile.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Sessions/SessionFile.py	Sat May 22 19:58:24 2021 +0200
@@ -12,9 +12,9 @@
 
 from PyQt6.QtCore import Qt, QObject
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverridenCursor
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverridenCursor
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- a/eric7/Snapshot/SnapWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Snapshot/SnapWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -22,7 +22,7 @@
 from PyQt6.QtGui import QImageWriter, QPixmap, QDrag, QKeySequence, QShortcut
 from PyQt6.QtWidgets import QWidget, QApplication
 
-from E5Gui import EricFileDialog, EricMessageBox
+from EricWidgets import EricFileDialog, EricMessageBox
 
 from .Ui_SnapWidget import Ui_SnapWidget
 
--- a/eric7/Snapshot/SnapshotWaylandGrabber.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Snapshot/SnapshotWaylandGrabber.py	Sat May 22 19:58:24 2021 +0200
@@ -21,7 +21,7 @@
 except ImportError:
     DBusAvailable = False
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .SnapshotModes import SnapshotModes
 
--- a/eric7/SqlBrowser/SqlBrowser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/SqlBrowser/SqlBrowser.py	Sat May 22 19:58:24 2021 +0200
@@ -11,10 +11,10 @@
 from PyQt6.QtGui import QKeySequence
 from PyQt6.QtSql import QSqlError, QSqlDatabase
 
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricApplication import ericApp
 
 import UI.PixmapCache
 import UI.Config
--- a/eric7/SqlBrowser/SqlBrowserWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/SqlBrowser/SqlBrowserWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
     QSqlDatabase, QSqlError, QSqlTableModel, QSqlQueryModel, QSqlQuery
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_SqlBrowserWidget import Ui_SqlBrowserWidget
 
--- a/eric7/SqlBrowser/SqlConnectionDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/SqlBrowser/SqlConnectionDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 from PyQt6.QtSql import QSqlDatabase
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SqlConnectionDialog import Ui_SqlConnectionDialog
 
--- a/eric7/SqlBrowser/SqlConnectionDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/SqlBrowser/SqlConnectionDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -153,7 +153,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/Tasks/TaskPropertiesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Tasks/TaskPropertiesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricCompleters import EricFileCompleter
+from EricWidgets.EricCompleters import EricFileCompleter
 
 from .Ui_TaskPropertiesDialog import Ui_TaskPropertiesDialog
 
--- a/eric7/Tasks/TaskViewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Tasks/TaskViewer.py	Sat May 22 19:58:24 2021 +0200
@@ -21,9 +21,9 @@
     QMenu, QAbstractItemView, QTreeWidgetItem
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
-from E5Gui.EricProgressDialog import EricProgressDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricProgressDialog import EricProgressDialog
 
 from .Task import Task, TaskType, TaskPriority
 
--- a/eric7/Tasks/TasksFile.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Tasks/TasksFile.py	Sat May 22 19:58:24 2021 +0200
@@ -12,9 +12,9 @@
 
 from PyQt6.QtCore import QObject
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverridenCursor
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverridenCursor
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- a/eric7/Templates/TemplatePropertiesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Templates/TemplatePropertiesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 
 from .Ui_TemplatePropertiesDialog import Ui_TemplatePropertiesDialog
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 import Preferences
 
@@ -111,7 +111,7 @@
         Private slot to show some help.
         """
         if self.__helpDialog is None:
-            from E5Gui.EricSimpleHelpDialog import EricSimpleHelpDialog
+            from EricWidgets.EricSimpleHelpDialog import EricSimpleHelpDialog
             self.__helpDialog = EricSimpleHelpDialog(
                 title=self.tr("Template Help"),
                 label=self.tr("<b>Template Help</b>"),
--- a/eric7/Templates/TemplateViewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Templates/TemplateViewer.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
     QTreeWidget, QDialog, QApplication, QMenu, QTreeWidgetItem
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
 
 import Preferences
 
--- a/eric7/Templates/TemplatesFile.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Templates/TemplatesFile.py	Sat May 22 19:58:24 2021 +0200
@@ -13,8 +13,8 @@
 
 from PyQt6.QtCore import QObject
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverridenCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverridenCursor
 
 
 TemplateViewer = typing.TypeVar("TemplateViewer")
--- a/eric7/Toolbox/SingleApplication.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Toolbox/SingleApplication.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import QByteArray
 from PyQt6.QtNetwork import QLocalServer, QLocalSocket
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 import Utilities
 
--- a/eric7/Toolbox/Startup.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Toolbox/Startup.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import QTranslator, QLocale, QLibraryInfo, QDir
 from PyQt6.QtWidgets import QApplication
 
-from E5Gui.EricApplication import EricApplication
+from EricWidgets.EricApplication import EricApplication
 
 import Globals
 
@@ -282,7 +282,7 @@
     
     if installErrorHandler:
         # generate a graphical error handler
-        from E5Gui import EricErrorMessage
+        from EricWidgets import EricErrorMessage
         eMsg = EricErrorMessage.qtHandler()
         eMsg.setMinimumSize(600, 400)
     
--- a/eric7/Tools/TRPreviewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Tools/TRPreviewer.py	Sat May 22 19:58:24 2021 +0200
@@ -22,9 +22,9 @@
 from PyQt6 import uic
 
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricApplication import ericApp
 
 import UI.PixmapCache
 import UI.Config
--- a/eric7/Tools/TrayStarter.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Tools/TrayStarter.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
 from PyQt6.QtGui import QCursor
 from PyQt6.QtWidgets import QSystemTrayIcon, QMenu, QDialog, QApplication
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 import Globals
 import UI.PixmapCache
--- a/eric7/Tools/UIPreviewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Tools/UIPreviewer.py	Sat May 22 19:58:24 2021 +0200
@@ -20,10 +20,10 @@
 from PyQt6 import uic
 
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 import Preferences
 import UI.PixmapCache
--- a/eric7/UI/Browser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/Browser.py	Sat May 22 19:58:24 2021 +0200
@@ -20,8 +20,8 @@
     QLineEdit, QDialog
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricFileDialog, EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricFileDialog, EricMessageBox
 
 from Project.ProjectBrowserModel import ProjectBrowserSimpleDirectoryItem
 from .BrowserModel import (
--- a/eric7/UI/CodeDocumentationViewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/CodeDocumentationViewer.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
     QLineEdit, QTextBrowser, QToolTip
 )
 
-from E5Gui.EricTextEditSearchWidget import EricTextEditSearchWidget, EricTextEditType
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricTextEditSearchWidget import EricTextEditSearchWidget, EricTextEditType
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- a/eric7/UI/CodeDocumentationViewerTemplate.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/CodeDocumentationViewerTemplate.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 
 from PyQt6.QtCore import QCoreApplication
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import Utilities
 
--- a/eric7/UI/CompareDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/CompareDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,9 +15,9 @@
 from PyQt6.QtGui import QFontMetrics, QBrush, QTextCursor
 from PyQt6.QtWidgets import QWidget, QApplication, QDialogButtonBox
 
-from E5Gui import EricMessageBox
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets import EricMessageBox
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 import UI.PixmapCache
 
--- a/eric7/UI/CompareDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/CompareDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -289,7 +289,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/UI/DiffDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/DiffDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,9 +16,9 @@
 from PyQt6.QtGui import QTextCursor
 from PyQt6.QtWidgets import QWidget, QApplication, QDialogButtonBox
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_DiffDialog import Ui_DiffDialog
 from .DiffHighlighter import DiffHighlighter
--- a/eric7/UI/DiffDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/DiffDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -164,13 +164,13 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
   <customwidget>
    <class>EricTextEditSearchWidget</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricTextEditSearchWidget.h</header>
+   <header>EricWidgets/EricTextEditSearchWidget.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/UI/DiffHighlighter.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/DiffHighlighter.py	Sat May 22 19:58:24 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing a syntax highlighter for unified and context diff outputs.
 """
 
-from E5Gui.EricGenericDiffHighlighter import TERMINAL, EricGenericDiffHighlighter
+from EricGui.EricGenericDiffHighlighter import TERMINAL, EricGenericDiffHighlighter
 
 
 class DiffHighlighter(EricGenericDiffHighlighter):
--- a/eric7/UI/EmailDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/EmailDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -19,8 +19,8 @@
     QTreeWidgetItem
 )
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .Ui_EmailDialog import Ui_EmailDialog
 
@@ -155,7 +155,7 @@
                     " Use <code>{0}</code> to install it.</p>"
                 ).format(getInstallCommand())
             
-            from E5Gui.EricSimpleHelpDialog import EricSimpleHelpDialog
+            from EricWidgets.EricSimpleHelpDialog import EricSimpleHelpDialog
             self.__helpDialog = EricSimpleHelpDialog(
                 title=self.tr("Gmail API Help"),
                 helpStr=helpStr, parent=self)
--- a/eric7/UI/FindFileDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/FindFileDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,9 +16,9 @@
     QDialog, QApplication, QMenu, QDialogButtonBox, QTreeWidgetItem, QComboBox
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_FindFileDialog import Ui_FindFileDialog
 
--- a/eric7/UI/FindFileDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/FindFileDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -418,12 +418,12 @@
   <customwidget>
    <class>EricSqueezeLabelPath</class>
    <extends>QLabel</extends>
-   <header>E5Gui/EricSqueezeLabels.h</header>
+   <header>EricWidgets/EricSqueezeLabels.h</header>
   </customwidget>
   <customwidget>
    <class>EricComboPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/UI/FindFileNameDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/FindFileNameDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,7 +15,7 @@
     QWidget, QHeaderView, QApplication, QDialogButtonBox, QTreeWidgetItem
 )
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_FindFileNameDialog import Ui_FindFileNameDialog
 
--- a/eric7/UI/FindFileNameDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/FindFileNameDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -157,7 +157,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/UI/InstallInfoDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/InstallInfoDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_InstallInfoDialog import Ui_InstallInfoDialog
 
@@ -251,7 +251,7 @@
                 )
             )
         
-        from E5Gui.EricPlainTextDialog import EricPlainTextDialog
+        from EricWidgets.EricPlainTextDialog import EricPlainTextDialog
         dlg = EricPlainTextDialog(
             title=self.tr("Upgrade Instructions"),
             text="\n".join(updateTextList))
--- a/eric7/UI/LogView.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/LogView.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
     QTextEdit, QApplication, QMenu, QWidget, QHBoxLayout, QSizePolicy
 )
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import UI.PixmapCache
 import Preferences
--- a/eric7/UI/NumbersWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/NumbersWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot, pyqtSignal, Qt, QAbstractTableModel
 from PyQt6.QtWidgets import QWidget, QHeaderView
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_NumbersWidget import Ui_NumbersWidget
 
--- a/eric7/UI/NumbersWidget.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/NumbersWidget.ui	Sat May 22 19:58:24 2021 +0200
@@ -314,7 +314,7 @@
   <customwidget>
    <class>EricTextSpinBox</class>
    <extends>QSpinBox</extends>
-   <header>E5Gui/EricTextSpinBox.h</header>
+   <header>EricWidgets/EricTextSpinBox.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/UI/Previewers/PreviewerHTML.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/Previewers/PreviewerHTML.py	Sat May 22 19:58:24 2021 +0200
@@ -22,7 +22,7 @@
     QWidget, QVBoxLayout, QLabel, QCheckBox, QSizePolicy, QToolTip
 )
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 import Utilities
 import Preferences
--- a/eric7/UI/PythonAstViewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/PythonAstViewer.py	Sat May 22 19:58:24 2021 +0200
@@ -18,7 +18,7 @@
 
 from asttokens import ASTTokens
 
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 import Preferences
 
--- a/eric7/UI/PythonDisViewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/PythonDisViewer.py	Sat May 22 19:58:24 2021 +0200
@@ -20,8 +20,8 @@
     QTreeWidgetItem, QAbstractItemView, QWidget, QMenu
 )
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 import Preferences
 
--- a/eric7/UI/UserInterface.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/UI/UserInterface.py	Sat May 22 19:58:24 2021 +0200
@@ -36,15 +36,15 @@
 from . import Config
 from .NotificationWidget import NotificationTypes
 
-from E5Gui.EricSingleApplication import EricSingleApplicationServer
-from E5Gui.EricAction import EricAction, createActionGroup
-from E5Gui.EricToolBarManager import EricToolBarManager
-from E5Gui import EricMessageBox, EricFileDialog, EricErrorMessage
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricZoomWidget import EricZoomWidget
-from E5Gui.EricProgressDialog import EricProgressDialog
-from E5Gui.EricClickableLabel import EricClickableLabel
+from EricWidgets.EricSingleApplication import EricSingleApplicationServer
+from EricGui.EricAction import EricAction, createActionGroup
+from EricWidgets.EricToolBarManager import EricToolBarManager
+from EricWidgets import EricMessageBox, EricFileDialog, EricErrorMessage
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricZoomWidget import EricZoomWidget
+from EricWidgets.EricProgressDialog import EricProgressDialog
+from EricWidgets.EricClickableLabel import EricClickableLabel
 
 import Preferences
 import Utilities
@@ -823,7 +823,7 @@
         
         @param debugServer reference to the debug server object
         """
-        from E5Gui.EricToolBox import EricVerticalToolBox, EricHorizontalToolBox
+        from EricWidgets.EricToolBox import EricVerticalToolBox, EricHorizontalToolBox
         
         logging.debug("Creating Toolboxes Layout...")
         
@@ -1030,7 +1030,7 @@
         
         @param debugServer reference to the debug server object
         """
-        from E5Gui.EricSideBar import EricSideBar, EricSideBarSide
+        from EricWidgets.EricSideBar import EricSideBar, EricSideBarSide
         
         logging.debug("Creating Sidebars Layout...")
         
@@ -6283,7 +6283,7 @@
         """
         Private slot to configure the various toolbars.
         """
-        from E5Gui.EricToolBarDialog import EricToolBarDialog
+        from EricWidgets.EricToolBarDialog import EricToolBarDialog
         dlg = EricToolBarDialog(self.toolbarManager)
         if dlg.exec() == QDialog.DialogCode.Accepted:
             Preferences.setUI(
--- a/eric7/Utilities/BackgroundService.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Utilities/BackgroundService.py	Sat May 22 19:58:24 2021 +0200
@@ -19,8 +19,8 @@
 from PyQt6.QtWidgets import QApplication
 from PyQt6.QtNetwork import QTcpServer, QHostAddress
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 import Preferences
 import Utilities
 import Globals
--- a/eric7/Utilities/__init__.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Utilities/__init__.py	Sat May 22 19:58:24 2021 +0200
@@ -56,7 +56,7 @@
     getPyQt5ModulesDirectory, getQtBinariesPath, getPyQtToolsPath,
     qVersionTuple)
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from UI.Info import Program, Version
 
--- a/eric7/Utilities/crypto/__init__.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/Utilities/crypto/__init__.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import QCoreApplication
 from PyQt6.QtWidgets import QLineEdit, QInputDialog
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 import Preferences
 
--- a/eric7/VCS/ProjectBrowserHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VCS/ProjectBrowserHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtCore import QObject, QCoreApplication
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog
 
--- a/eric7/VCS/ProjectHelper.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VCS/ProjectHelper.py	Sat May 22 19:58:24 2021 +0200
@@ -14,9 +14,9 @@
 from PyQt6.QtCore import pyqtSlot, QDir, QFileInfo, QObject, QCoreApplication
 from PyQt6.QtWidgets import QDialog, QInputDialog, QToolBar
 
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 import UI.PixmapCache
--- a/eric7/VCS/StatusMonitorLed.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VCS/StatusMonitorLed.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtGui import QColor
 from PyQt6.QtWidgets import QWidget, QInputDialog, QMenu, QHBoxLayout, QLabel
 
-from E5Gui.EricLed import EricClickableLed, EricLedType
+from EricWidgets.EricLed import EricClickableLed, EricLedType
 
 import Preferences
 
--- a/eric7/VCS/VersionControl.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VCS/VersionControl.py	Sat May 22 19:58:24 2021 +0200
@@ -16,7 +16,7 @@
 )
 from PyQt6.QtWidgets import QApplication
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 import Preferences
 
--- a/eric7/VCS/__init__.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VCS/__init__.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 interfaces have to be subclasses of this base class.
 """
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 ######################################################################
 ## Below is the factory function to instantiate the appropriate
--- a/eric7/ViewManager/BookmarkedFilesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/ViewManager/BookmarkedFilesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtGui import QColor
 from PyQt6.QtWidgets import QListWidgetItem, QDialog
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_BookmarkedFilesDialog import Ui_BookmarkedFilesDialog
 
--- a/eric7/ViewManager/BookmarkedFilesDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/ViewManager/BookmarkedFilesDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -191,7 +191,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/ViewManager/ViewManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/ViewManager/ViewManager.py	Sat May 22 19:58:24 2021 +0200
@@ -21,8 +21,8 @@
 )
 from PyQt6.Qsci import QsciScintilla
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricFileDialog, EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricFileDialog, EricMessageBox
 
 from Globals import recentNameFiles, isMacPlatform
 
@@ -35,7 +35,7 @@
 import UI.PixmapCache
 import UI.Config
 
-from E5Gui.EricAction import EricAction, createActionGroup
+from EricGui.EricAction import EricAction, createActionGroup
 
 
 class ViewManager(QWidget):
--- a/eric7/VirtualEnv/VirtualenvAddEditDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VirtualEnv/VirtualenvAddEditDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import pyqtSlot, Qt
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_VirtualenvAddEditDialog import Ui_VirtualenvAddEditDialog
 
--- a/eric7/VirtualEnv/VirtualenvAddEditDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VirtualEnv/VirtualenvAddEditDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -158,7 +158,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/VirtualEnv/VirtualenvConfigurationDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VirtualEnv/VirtualenvConfigurationDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -15,7 +15,7 @@
 from PyQt6.QtCore import pyqtSlot, QProcess, QTimer
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_VirtualenvConfigurationDialog import Ui_VirtualenvConfigurationDialog
 
--- a/eric7/VirtualEnv/VirtualenvConfigurationDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VirtualEnv/VirtualenvConfigurationDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -745,7 +745,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/VirtualEnv/VirtualenvInterpreterSelectionDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VirtualEnv/VirtualenvInterpreterSelectionDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import pyqtSlot
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_VirtualenvInterpreterSelectionDialog import (
     Ui_VirtualenvInterpreterSelectionDialog
--- a/eric7/VirtualEnv/VirtualenvInterpreterSelectionDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VirtualEnv/VirtualenvInterpreterSelectionDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -74,7 +74,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/VirtualEnv/VirtualenvManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VirtualEnv/VirtualenvManager.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
 from PyQt6.QtCore import pyqtSlot, pyqtSignal, QObject
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 import Preferences
 
--- a/eric7/VirtualEnv/VirtualenvManagerDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VirtualEnv/VirtualenvManagerDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtCore import pyqtSlot, Qt
 from PyQt6.QtWidgets import QDialog, QTreeWidgetItem, QHeaderView
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_VirtualenvManagerDialog import Ui_VirtualenvManagerDialog
 
--- a/eric7/VirtualEnv/VirtualenvManagerDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/VirtualEnv/VirtualenvManagerDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -223,7 +223,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/WebBrowser/AdBlock/AdBlockDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/AdBlock/AdBlockDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot, Qt, QTimer, QCoreApplication
 from PyQt6.QtWidgets import QDialog, QMenu, QToolButton
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_AdBlockDialog import Ui_AdBlockDialog
 
--- a/eric7/WebBrowser/AdBlock/AdBlockIcon.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/AdBlock/AdBlockIcon.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import Qt
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricClickableLabel import EricClickableLabel
+from EricWidgets.EricClickableLabel import EricClickableLabel
 
 import UI.PixmapCache
 
--- a/eric7/WebBrowser/AdBlock/AdBlockManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/AdBlock/AdBlockManager.py	Sat May 22 19:58:24 2021 +0200
@@ -15,7 +15,7 @@
 )
 from PyQt6.QtWebEngineCore import QWebEngineUrlRequestInfo
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from EricUtilities.EricMutexLocker import EricMutexLocker
 
--- a/eric7/WebBrowser/AdBlock/AdBlockSubscription.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/AdBlock/AdBlockSubscription.py	Sat May 22 19:58:24 2021 +0200
@@ -18,7 +18,7 @@
 )
 from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 import Utilities
 import Preferences
--- a/eric7/WebBrowser/AdBlock/AdBlockTreeWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/AdBlock/AdBlockTreeWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -14,8 +14,8 @@
     QApplication
 )
 
-from E5Gui.EricTreeWidget import EricTreeWidget, EricTreeWidgetItemsState
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets.EricTreeWidget import EricTreeWidget, EricTreeWidgetItemsState
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 
 class AdBlockTreeWidget(EricTreeWidget):
--- a/eric7/WebBrowser/Bookmarks/BookmarksDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Bookmarks/BookmarksDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
     QDialog, QMenu, QApplication, QInputDialog, QLineEdit
 )
 
-from E5Gui.EricTreeSortFilterProxyModel import EricTreeSortFilterProxyModel
+from EricCore.EricTreeSortFilterProxyModel import EricTreeSortFilterProxyModel
 
 from .Ui_BookmarksDialog import Ui_BookmarksDialog
 
--- a/eric7/WebBrowser/Bookmarks/BookmarksDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Bookmarks/BookmarksDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -126,7 +126,7 @@
   <customwidget>
    <class>EricTreeView</class>
    <extends>QTreeView</extends>
-   <header>E5Gui/EricTreeView.h</header>
+   <header>EricWidgets/EricTreeView.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/WebBrowser/Bookmarks/BookmarksImportDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Bookmarks/BookmarksImportDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
 from PyQt6.QtCore import pyqtSlot, Qt, QSize
 from PyQt6.QtWidgets import QDialog, QListWidgetItem
 
-from E5Gui import EricMessageBox
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets import EricMessageBox
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_BookmarksImportDialog import Ui_BookmarksImportDialog
 
--- a/eric7/WebBrowser/Bookmarks/BookmarksImportDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Bookmarks/BookmarksImportDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -196,7 +196,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/WebBrowser/Bookmarks/BookmarksManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Bookmarks/BookmarksManager.py	Sat May 22 19:58:24 2021 +0200
@@ -16,7 +16,7 @@
 )
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from .BookmarkNode import BookmarkNode
 
--- a/eric7/WebBrowser/Bookmarks/BookmarksMenu.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Bookmarks/BookmarksMenu.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtGui import QCursor
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricModelMenu import EricModelMenu
+from EricWidgets.EricModelMenu import EricModelMenu
 
 from .BookmarksModel import BookmarksModel
 from .BookmarkNode import BookmarkNode
--- a/eric7/WebBrowser/Bookmarks/BookmarksToolBar.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Bookmarks/BookmarksToolBar.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtWidgets import QMenu
 from PyQt6.QtWebEngineWidgets import QWebEnginePage
 
-from E5Gui.EricModelToolBar import EricModelToolBar
+from EricWidgets.EricModelToolBar import EricModelToolBar
 
 from .BookmarksModel import BookmarksModel
 
--- a/eric7/WebBrowser/CookieJar/CookiesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/CookieJar/CookiesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSlot, Qt, QByteArray
 from PyQt6.QtWidgets import QDialog, QTreeWidgetItem, QHeaderView
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_CookiesDialog import Ui_CookiesDialog
 
--- a/eric7/WebBrowser/CookieJar/CookiesDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/CookieJar/CookiesDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -308,7 +308,7 @@
   <customwidget>
    <class>EricSqueezeLabel</class>
    <extends>QLabel</extends>
-   <header>E5Gui/EricSqueezeLabels.h</header>
+   <header>EricWidgets/EricSqueezeLabels.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/WebBrowser/CookieJar/CookiesExceptionsDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/CookieJar/CookiesExceptionsDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -238,7 +238,7 @@
   <customwidget>
    <class>EricTableView</class>
    <extends>QTableView</extends>
-   <header>E5Gui/EricTableView.h</header>
+   <header>EricWidgets/EricTableView.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/WebBrowser/Download/DownloadItem.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Download/DownloadItem.py	Sat May 22 19:58:24 2021 +0200
@@ -16,7 +16,7 @@
 from PyQt6.QtWidgets import QWidget, QStyle, QDialog
 from PyQt6.QtWebEngineWidgets import QWebEngineDownloadItem
 
-from E5Gui import EricFileDialog
+from EricWidgets import EricFileDialog
 
 from .Ui_DownloadItem import Ui_DownloadItem
 
--- a/eric7/WebBrowser/Download/DownloadManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Download/DownloadManager.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
     QDialog, QStyle, QFileIconProvider, QMenu, QApplication
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_DownloadManager import Ui_DownloadManager
 
--- a/eric7/WebBrowser/Download/DownloadManager.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Download/DownloadManager.ui	Sat May 22 19:58:24 2021 +0200
@@ -93,7 +93,7 @@
   <customwidget>
    <class>EricTableView</class>
    <extends>QTableView</extends>
-   <header>E5Gui/EricTableView.h</header>
+   <header>EricWidgets/EricTableView.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/WebBrowser/Download/DownloadManagerButton.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Download/DownloadManagerButton.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtCore import pyqtSlot, Qt
 
-from E5Gui.EricToolButton import EricToolButton
+from EricWidgets.EricToolButton import EricToolButton
 
 import UI.PixmapCache
 
--- a/eric7/WebBrowser/FeaturePermissions/FeaturePermissionBar.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/FeaturePermissions/FeaturePermissionBar.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtWidgets import QLabel, QHBoxLayout, QPushButton
 from PyQt6.QtWebEngineWidgets import QWebEnginePage
 
-from E5Gui.EricAnimatedWidget import EricAnimatedWidget
+from EricWidgets.EricAnimatedWidget import EricAnimatedWidget
 
 import UI.PixmapCache
 
--- a/eric7/WebBrowser/Feeds/FeedsManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Feeds/FeedsManager.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 from PyQt6.QtWidgets import QDialog, QTreeWidgetItem, QMenu, QApplication
 from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_FeedsManager import Ui_FeedsManager
 
--- a/eric7/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtGui import QDesktopServices
 from PyQt6.QtWidgets import QDialog, QListWidgetItem
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_GreaseMonkeyConfigurationDialog import (
     Ui_GreaseMonkeyConfigurationDialog
--- a/eric7/WebBrowser/GreaseMonkey/GreaseMonkeyManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/GreaseMonkey/GreaseMonkeyManager.py	Sat May 22 19:58:24 2021 +0200
@@ -16,7 +16,7 @@
 )
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 import Utilities
 import Preferences
--- a/eric7/WebBrowser/History/HistoryDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/History/HistoryDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtGui import QFontMetrics, QCursor
 from PyQt6.QtWidgets import QDialog, QMenu, QApplication
 
-from E5Gui.EricTreeSortFilterProxyModel import EricTreeSortFilterProxyModel
+from EricCore.EricTreeSortFilterProxyModel import EricTreeSortFilterProxyModel
 
 from .HistoryModel import HistoryModel
 
--- a/eric7/WebBrowser/History/HistoryDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/History/HistoryDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -126,7 +126,7 @@
   <customwidget>
    <class>EricTreeView</class>
    <extends>QTreeView</extends>
-   <header>E5Gui/EricTreeView.h</header>
+   <header>EricWidgets/EricTreeView.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/WebBrowser/History/HistoryManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/History/HistoryManager.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
     QFile, QIODevice, QByteArray, QDataStream, QTemporaryFile, QObject
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from Utilities.AutoSaver import AutoSaver
 import Utilities
--- a/eric7/WebBrowser/History/HistoryMenu.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/History/HistoryMenu.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
 )
 from PyQt6.QtWidgets import QMenu
 
-from E5Gui.EricModelMenu import EricModelMenu
-from E5Gui import EricMessageBox
+from EricWidgets.EricModelMenu import EricModelMenu
+from EricWidgets import EricMessageBox
 
 from .HistoryModel import HistoryModel
 
--- a/eric7/WebBrowser/Navigation/NavigationBar.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Navigation/NavigationBar.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
     QWidget, QHBoxLayout, QStyle, QToolButton, QSplitter, QSizePolicy, QMenu
 )
 
-from E5Gui.EricToolButton import EricToolButton
+from EricWidgets.EricToolButton import EricToolButton
 
 from WebBrowser.WebBrowserWindow import WebBrowserWindow
 from WebBrowser.Download.DownloadManagerButton import DownloadManagerButton
--- a/eric7/WebBrowser/Navigation/ReloadStopButton.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Navigation/ReloadStopButton.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtCore import pyqtSlot, pyqtSignal, Qt
 
-from E5Gui.EricToolButton import EricToolButton
+from EricWidgets.EricToolButton import EricToolButton
 
 import UI.PixmapCache
 
--- a/eric7/WebBrowser/Network/EricSchemeHandler.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Network/EricSchemeHandler.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtCore import pyqtSignal, QBuffer, QIODevice, QUrlQuery, QMutex
 from PyQt6.QtWebEngineCore import QWebEngineUrlSchemeHandler
 
-from E5Gui.EricApplication import ericApp
+from EricWidgets.EricApplication import ericApp
 
 from EricUtilities.EricMutexLocker import EricMutexLocker
 
--- a/eric7/WebBrowser/Network/NetworkManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Network/NetworkManager.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
     QNetworkAccessManager, QNetworkProxy, QNetworkProxyFactory, QNetworkRequest
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
 
 from EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired
 try:
--- a/eric7/WebBrowser/Network/SendRefererWhitelistDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Network/SendRefererWhitelistDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -148,7 +148,7 @@
   <customwidget>
    <class>EricListView</class>
    <extends>QListView</extends>
-   <header>E5Gui/EricListView.h</header>
+   <header>EricWidgets/EricListView.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/WebBrowser/OpenSearch/OpenSearchDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/OpenSearch/OpenSearchDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -10,7 +10,7 @@
 from PyQt6.QtWidgets import QDialog
 from PyQt6.QtCore import pyqtSlot
 
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from .OpenSearchEngineModel import OpenSearchEngineModel
 
--- a/eric7/WebBrowser/OpenSearch/OpenSearchDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/OpenSearch/OpenSearchDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -115,7 +115,7 @@
   <customwidget>
    <class>EricTableView</class>
    <extends>QTableView</extends>
-   <header>E5Gui/EricTableView.h</header>
+   <header>EricWidgets/EricTableView.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/WebBrowser/OpenSearch/OpenSearchManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/OpenSearch/OpenSearchManager.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
 from PyQt6.QtWidgets import QLineEdit, QInputDialog
 from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply
 
-from E5Gui.EricApplication import ericApp
-from E5Gui import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
 
 from Utilities.AutoSaver import AutoSaver
 import Utilities
--- a/eric7/WebBrowser/PageScreenDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/PageScreenDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtGui import QImage, QPainter, QPixmap
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QAbstractButton
 
-from E5Gui import EricFileDialog, EricMessageBox
+from EricWidgets import EricFileDialog, EricMessageBox
 
 from .Ui_PageScreenDialog import Ui_PageScreenDialog
 
--- a/eric7/WebBrowser/Passwords/PasswordManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Passwords/PasswordManager.py	Sat May 22 19:58:24 2021 +0200
@@ -15,8 +15,8 @@
 from PyQt6.QtWidgets import QApplication
 from PyQt6.QtWebEngineWidgets import QWebEngineScript
 
-from E5Gui import EricMessageBox
-from E5Gui.EricProgressDialog import EricProgressDialog
+from EricWidgets import EricMessageBox
+from EricWidgets.EricProgressDialog import EricProgressDialog
 
 from Utilities.AutoSaver import AutoSaver
 import Utilities
--- a/eric7/WebBrowser/Passwords/PasswordsDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Passwords/PasswordsDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 from PyQt6.QtGui import QFont, QFontMetrics
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_PasswordsDialog import Ui_PasswordsDialog
 
--- a/eric7/WebBrowser/Passwords/PasswordsDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Passwords/PasswordsDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -151,7 +151,7 @@
   <customwidget>
    <class>EricTableView</class>
    <extends>QTableView</extends>
-   <header>E5Gui/EricTableView.h</header>
+   <header>EricWidgets/EricTableView.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/WebBrowser/QtHelp/QtHelpDocumentationDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/QtHelp/QtHelpDocumentationDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
 )
 from PyQt6.QtHelp import QHelpEngineCore
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
 
 from .Ui_QtHelpDocumentationDialog import Ui_QtHelpDocumentationDialog
 
--- a/eric7/WebBrowser/QtHelp/QtHelpDocumentationSelectionDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/QtHelp/QtHelpDocumentationSelectionDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtCore import pyqtSlot, Qt
 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QTreeWidgetItem
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_QtHelpDocumentationSelectionDialog import (
     Ui_QtHelpDocumentationSelectionDialog
--- a/eric7/WebBrowser/SafeBrowsing/SafeBrowsingDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/SafeBrowsing/SafeBrowsingDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -12,8 +12,8 @@
     QDialog, QDialogButtonBox, QAbstractButton
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .Ui_SafeBrowsingDialog import Ui_SafeBrowsingDialog
 
@@ -82,7 +82,7 @@
         browsing API key.".
         """
         if self.__gsbHelpDialog is None:
-            from E5Gui.EricSimpleHelpDialog import EricSimpleHelpDialog
+            from EricWidgets.EricSimpleHelpDialog import EricSimpleHelpDialog
             from . import SafeBrowsingHelp
             
             helpStr = SafeBrowsingHelp()
--- a/eric7/WebBrowser/Session/SessionManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Session/SessionManager.py	Sat May 22 19:58:24 2021 +0200
@@ -22,8 +22,8 @@
     QComboBox, QVBoxLayout
 )
 
-from E5Gui import EricMessageBox
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets import EricMessageBox
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 import Utilities
 import Preferences
--- a/eric7/WebBrowser/SiteInfo/SiteInfoDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/SiteInfo/SiteInfoDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -20,7 +20,7 @@
 except ImportError:
     SSL = False
 
-from E5Gui import EricMessageBox, EricFileDialog
+from EricWidgets import EricMessageBox, EricFileDialog
 
 from .Ui_SiteInfoDialog import Ui_SiteInfoDialog
 
--- a/eric7/WebBrowser/SpeedDial/SpeedDial.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/SpeedDial/SpeedDial.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
     qWarning
 )
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from ..Tools.WebBrowserTools import pixmapFileToDataUrl
 
--- a/eric7/WebBrowser/SpellCheck/ManageDictionariesDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/SpellCheck/ManageDictionariesDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -20,7 +20,7 @@
 )
 from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from .Ui_ManageDictionariesDialog import Ui_ManageDictionariesDialog
 
--- a/eric7/WebBrowser/StatusBar/StatusBarIcon.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/StatusBar/StatusBarIcon.py	Sat May 22 19:58:24 2021 +0200
@@ -12,7 +12,7 @@
 # Copyright (C) 2014  David Rosca <nowrep@gmail.com>
 #
 
-from E5Gui.EricClickableLabel import EricClickableLabel
+from EricWidgets.EricClickableLabel import EricClickableLabel
 
 
 class StatusBarIcon(EricClickableLabel):
--- a/eric7/WebBrowser/Sync/SyncCheckPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Sync/SyncCheckPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -216,7 +216,7 @@
   <customwidget>
    <class>EricAnimatedLabel</class>
    <extends>QLabel</extends>
-   <header>E5Gui/EricAnimatedLabel.h</header>
+   <header>EricWidgets/EricAnimatedLabel.h</header>
   </customwidget>
  </customwidgets>
  <resources/>
--- a/eric7/WebBrowser/Sync/SyncDirectorySettingsPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Sync/SyncDirectorySettingsPage.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtWidgets import QWizardPage
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_SyncDirectorySettingsPage import Ui_SyncDirectorySettingsPage
 
--- a/eric7/WebBrowser/Sync/SyncDirectorySettingsPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Sync/SyncDirectorySettingsPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -71,7 +71,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/WebBrowser/Sync/SyncEncryptionPage.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Sync/SyncEncryptionPage.ui	Sat May 22 19:58:24 2021 +0200
@@ -163,7 +163,7 @@
   <customwidget>
    <class>EricPasswordMeter</class>
    <extends>QProgressBar</extends>
-   <header>E5Gui/EricPasswordMeter</header>
+   <header>EricWidgets/EricPasswordMeter</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/WebBrowser/TabManager/TabManagerWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/TabManager/TabManagerWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -24,8 +24,8 @@
 import EricNetwork
 from EricNetwork import EricTldExtractor
 
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricClickableLabel import EricClickableLabel
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricClickableLabel import EricClickableLabel
 
 import Utilities
 import UI.PixmapCache
--- a/eric7/WebBrowser/Tools/PrintToPdfDialog.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Tools/PrintToPdfDialog.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtPrintSupport import QPrinter, QPageSetupDialog
 from PyQt6.QtWidgets import QDialog
 
-from E5Gui.EricPathPicker import EricPathPickerModes
+from EricWidgets.EricPathPicker import EricPathPickerModes
 
 from .Ui_PrintToPdfDialog import Ui_PrintToPdfDialog
 
--- a/eric7/WebBrowser/Tools/PrintToPdfDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/Tools/PrintToPdfDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -88,7 +88,7 @@
   <customwidget>
    <class>EricPathPicker</class>
    <extends>QWidget</extends>
-   <header>E5Gui/EricPathPicker.h</header>
+   <header>EricWidgets/EricPathPicker.h</header>
    <container>1</container>
   </customwidget>
  </customwidgets>
--- a/eric7/WebBrowser/UrlBar/SslLabel.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/UrlBar/SslLabel.py	Sat May 22 19:58:24 2021 +0200
@@ -9,7 +9,7 @@
 
 from PyQt6.QtCore import Qt
 
-from E5Gui.EricClickableLabel import EricClickableLabel
+from EricWidgets.EricClickableLabel import EricClickableLabel
 
 
 class SslLabel(EricClickableLabel):
--- a/eric7/WebBrowser/UrlBar/UrlBar.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/UrlBar/UrlBar.py	Sat May 22 19:58:24 2021 +0200
@@ -16,8 +16,8 @@
 except ImportError:
     QSslCertificate = None      # __IGNORE_WARNING__
 
-from E5Gui.EricLineEdit import EricLineEdit, EricLineEditSide
-from E5Gui.EricLineEditButton import EricLineEditButton
+from EricWidgets.EricLineEdit import EricLineEdit, EricLineEditSide
+from EricWidgets.EricLineEditButton import EricLineEditButton
 
 from WebBrowser.WebBrowserWindow import WebBrowserWindow
 
--- a/eric7/WebBrowser/UserAgent/UserAgentManager.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/UserAgent/UserAgentManager.py	Sat May 22 19:58:24 2021 +0200
@@ -11,7 +11,7 @@
 
 from PyQt6.QtCore import pyqtSignal, QObject, QXmlStreamReader
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from Utilities.AutoSaver import AutoSaver
 import Utilities
--- a/eric7/WebBrowser/UserAgent/UserAgentMenu.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/UserAgent/UserAgentMenu.py	Sat May 22 19:58:24 2021 +0200
@@ -14,7 +14,7 @@
 from PyQt6.QtGui import QAction, QActionGroup
 from PyQt6.QtWidgets import QMenu, QInputDialog, QLineEdit
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 
 class UserAgentMenu(QMenu):
--- a/eric7/WebBrowser/UserAgent/UserAgentsDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/UserAgent/UserAgentsDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -129,7 +129,7 @@
   <customwidget>
    <class>EricTableView</class>
    <extends>QTableView</extends>
-   <header>E5Gui/EricTableView.h</header>
+   <header>EricWidgets/EricTableView.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/WebBrowser/VirusTotal/VirusTotalApi.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/VirusTotal/VirusTotalApi.py	Sat May 22 19:58:24 2021 +0200
@@ -13,7 +13,7 @@
 from PyQt6.QtCore import pyqtSignal, QObject, QUrl, QUrlQuery, QByteArray
 from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 import Preferences
 
--- a/eric7/WebBrowser/WebBrowserPage.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/WebBrowserPage.py	Sat May 22 19:58:24 2021 +0200
@@ -29,7 +29,7 @@
 except ImportError:
     SSL_AVAILABLE = False
 
-from E5Gui import EricMessageBox
+from EricWidgets import EricMessageBox
 
 from WebBrowser.WebBrowserWindow import WebBrowserWindow
 
--- a/eric7/WebBrowser/WebBrowserTabBar.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/WebBrowserTabBar.py	Sat May 22 19:58:24 2021 +0200
@@ -10,8 +10,8 @@
 from PyQt6.QtCore import Qt, QPoint, QTimer, QEvent
 from PyQt6.QtWidgets import QLabel
 
-from E5Gui.EricTabWidget import EricWheelTabBar
-from E5Gui.EricPassivePopup import EricPassivePopup, EricPassivePopupStyle
+from EricWidgets.EricTabWidget import EricWheelTabBar
+from EricWidgets.EricPassivePopup import EricPassivePopup, EricPassivePopupStyle
 
 import Preferences
 
--- a/eric7/WebBrowser/WebBrowserTabWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/WebBrowserTabWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -16,10 +16,10 @@
 )
 from PyQt6.QtPrintSupport import QPrinter, QPrintDialog, QAbstractPrintDialog
 
-from E5Gui.EricTabWidget import EricTabWidget
-from E5Gui import EricMessageBox
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricWidgets.EricTabWidget import EricTabWidget
+from EricWidgets import EricMessageBox
+from EricWidgets.EricApplication import ericApp
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 from .WebBrowserView import WebBrowserView
 from .WebBrowserPage import WebBrowserPage
--- a/eric7/WebBrowser/WebBrowserView.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/WebBrowserView.py	Sat May 22 19:58:24 2021 +0200
@@ -24,8 +24,8 @@
     QWebEngineView, QWebEnginePage, QWebEngineDownloadItem
 )
 
-from E5Gui import EricMessageBox, EricFileDialog
-from E5Gui.EricApplication import ericApp
+from EricWidgets import EricMessageBox, EricFileDialog
+from EricWidgets.EricApplication import ericApp
 
 from WebBrowser.WebBrowserWindow import WebBrowserWindow
 from .WebBrowserPage import WebBrowserPage
--- a/eric7/WebBrowser/WebBrowserWebSearchWidget.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/WebBrowserWebSearchWidget.py	Sat May 22 19:58:24 2021 +0200
@@ -18,7 +18,7 @@
 
 import Preferences
 
-from E5Gui.EricLineEdit import EricClearableLineEdit, EricLineEditSide
+from EricWidgets.EricLineEdit import EricClearableLineEdit, EricLineEditSide
 
 from .WebBrowserPage import WebBrowserPage
 
@@ -42,7 +42,7 @@
         """
         super().__init__(parent)
         
-        from E5Gui.EricLineEditButton import EricLineEditButton
+        from EricWidgets.EricLineEditButton import EricLineEditButton
         from .OpenSearch.OpenSearchManager import OpenSearchManager
 
         self.__mw = mainWindow
--- a/eric7/WebBrowser/WebBrowserWindow.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/WebBrowserWindow.py	Sat May 22 19:58:24 2021 +0200
@@ -34,12 +34,12 @@
 except ImportError:
     QTHELP_AVAILABLE = False
 
-from E5Gui.EricAction import EricAction
-from E5Gui import EricMessageBox, EricFileDialog, EricErrorMessage
-from E5Gui.EricMainWindow import EricMainWindow
-from E5Gui.EricApplication import ericApp
-from E5Gui.EricZoomWidget import EricZoomWidget
-from E5Gui.EricOverrideCursor import EricOverrideCursor
+from EricGui.EricAction import EricAction
+from EricWidgets import EricMessageBox, EricFileDialog, EricErrorMessage
+from EricWidgets.EricMainWindow import EricMainWindow
+from EricWidgets.EricApplication import ericApp
+from EricWidgets.EricZoomWidget import EricZoomWidget
+from EricGui.EricOverrideCursor import EricOverrideCursor
 
 import Preferences
 from Preferences import Shortcuts
--- a/eric7/WebBrowser/ZoomManager/ZoomValuesDialog.ui	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/WebBrowser/ZoomManager/ZoomValuesDialog.ui	Sat May 22 19:58:24 2021 +0200
@@ -141,7 +141,7 @@
   <customwidget>
    <class>EricTableView</class>
    <extends>QTableView</extends>
-   <header>E5Gui/EricTableView.h</header>
+   <header>EricWidgets/EricTableView.h</header>
   </customwidget>
  </customwidgets>
  <tabstops>
--- a/eric7/eric7.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/eric7.py	Sat May 22 19:58:24 2021 +0200
@@ -79,7 +79,7 @@
 sys.path.insert(2, os.path.join(os.path.dirname(__file__),
                                 "DebugClients", "Python"))
 
-from E5Gui.EricApplication import EricApplication
+from EricWidgets.EricApplication import EricApplication
 
 
 def handleSingleApplication(ddindex):
@@ -88,7 +88,7 @@
     
     @param ddindex index of a '--' option in the options list
     """
-    from E5Gui.EricSingleApplication import EricSingleApplicationClient
+    from EricWidgets.EricSingleApplication import EricSingleApplicationClient
     
     client = EricSingleApplicationClient()
     res = client.connect()
@@ -401,7 +401,7 @@
     QTimer.singleShot(0, uiStartUp)
     
     # generate a graphical error handler
-    from E5Gui import EricErrorMessage
+    from EricWidgets import EricErrorMessage
     eMsg = EricErrorMessage.qtHandler()
     eMsg.setMinimumSize(600, 400)
     
--- a/eric7/eric7_browser.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/eric7_browser.py	Sat May 22 19:58:24 2021 +0200
@@ -41,7 +41,7 @@
     if "--quiet" not in sys.argv:
         from PyQt6.QtCore import QTimer
         from PyQt6.QtWidgets import QApplication
-        from E5Gui import EricMessageBox          # __IGNORE_WARNING__
+        from EricWidgets import EricMessageBox          # __IGNORE_WARNING__
         app = QApplication([])
         QTimer.singleShot(0, lambda: EricMessageBox.critical(
             None,
@@ -56,7 +56,7 @@
 import Globals
 from Globals import AppInfo
 
-from E5Gui.EricApplication import EricApplication
+from EricWidgets.EricApplication import EricApplication
 
 from Toolbox import Startup
 
--- a/eric7/eric7_trpreviewer.py	Sat May 22 19:52:34 2021 +0200
+++ b/eric7/eric7_trpreviewer.py	Sat May 22 19:58:24 2021 +0200
@@ -32,7 +32,7 @@
             QSettings.Format.IniFormat, QSettings.Scope.UserScope, settingsDir)
         sys.argv.remove(arg)
 
-from E5Gui.EricApplication import EricApplication
+from EricWidgets.EricApplication import EricApplication
 
 from Tools.TRSingleApplication import TRSingleApplicationClient
 from Globals import AppInfo

eric ide

mercurial