Started refactoring of the project browser related code in order to extract some as plugins later on. eric7

Tue, 15 Nov 2022 11:06:27 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 15 Nov 2022 11:06:27 +0100
branch
eric7
changeset 9512
6e29913ba7b6
parent 9511
263a664d55dc
child 9513
6e260b424396

Started refactoring of the project browser related code in order to extract some as plugins later on.

src/eric7/Preferences/ConfigurationPages/ProjectBrowserPage.py file | annotate | diff | comparison | revisions
src/eric7/Project/Project.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectBrowserFlags.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectFormsBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectInterfacesBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectOthersBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectProtocolsBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectResourcesBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectSourcesBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectTranslationsBrowser.py file | annotate | diff | comparison | revisions
src/eric7/UI/UserInterface.py file | annotate | diff | comparison | revisions
--- a/src/eric7/Preferences/ConfigurationPages/ProjectBrowserPage.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/Preferences/ConfigurationPages/ProjectBrowserPage.py	Tue Nov 15 11:06:27 2022 +0100
@@ -16,6 +16,7 @@
 from .Ui_ProjectBrowserPage import Ui_ProjectBrowserPage
 
 
+# TODO: change project browser configuration to use a QListWidget
 class ProjectBrowserPage(ConfigurationPageBase, Ui_ProjectBrowserPage):
     """
     Class implementing the Project Browser configuration page.
--- a/src/eric7/Project/Project.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/Project/Project.py	Tue Nov 15 11:06:27 2022 +0100
@@ -4060,10 +4060,11 @@
             newfn = newfn.lower()
             if any(entry.lower() == newfn for entry in self.pdata[group]):
                 return True
-        elif group == "OTHERS" and any(
-            newfn.startswith(entry.lower()) for entry in self.pdata[group]
-        ):
-            return True
+
+            elif group == "OTHERS" and any(
+                newfn.startswith(entry.lower()) for entry in self.pdata[group]
+            ):
+                return True
 
         return False
 
--- a/src/eric7/Project/ProjectBrowser.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/Project/ProjectBrowser.py	Tue Nov 15 11:06:27 2022 +0100
@@ -7,7 +7,7 @@
 Module implementing the project browser part of the eric UI.
 """
 
-from PyQt6.QtCore import Qt
+from PyQt6.QtCore import Qt, pyqtSignal
 from PyQt6.QtGui import QColor
 from PyQt6.QtWidgets import QApplication
 
@@ -45,8 +45,57 @@
     the project interfaces (IDL) browser and a browser for stuff,
     that doesn't fit these categories. Optionally it contains an additional
     tab with the file system browser.
+
+    Note: The following signals are defined here to proxy the individual browser
+    signals.
+
+    @signal appendStderr(str) emitted after something was received from
+        a QProcess on stderr
+    @signal appendStdout(str) emitted after something was received from
+        a QProcess on stdout
+    @signal binaryFile(filename) emitted to open a file as binary (str)
+    @signal closeSourceWindow(str) emitted to close a source file
+    @signal designerFile(filename) emitted to open a Qt-Designer file (str)
+    @signal linguistFile(filename) emitted to open a Qt-Linguist (*.ts)
+        file (str)
+    @signal pixmapEditFile(filename) emitted to edit a pixmap file (str)
+    @signal pixmapFile(filename) emitted to open a pixmap file (str)
+    @signal preferencesChanged() emitted when the preferences have been changed
+    @signal sourceFile(filename) emitted to open a Python file at a line (str)
+    @signal sourceFile(filename, lineno) emitted to open a Python file at a
+        line (str, int)
+    @signal sourceFile(filename, lineno, type) emitted to open a Python file
+        at a line giving an explicit file type (str, int, str)
+    @signal sourceFile(filename, linenos) emitted to open a Python file giving
+        a list of lines(str, list)
+    @signal svgFile(filename) emitted to open a SVG file (str)
+    @signal testFile(filename) emitted to open a Python file for a
+        unit test (str)
+    @signal trpreview(filenames) emitted to preview Qt-Linguist (*.qm)
+        files (list of str)
+    @signal trpreview(filenames, ignore) emitted to preview Qt-Linguist (*.qm)
+        files indicating whether non-existent files shall be ignored
+        (list of str, bool)
+    @signal uipreview(str) emitted to preview a forms file
+    @signal umlFile(filename) emitted to open an eric UML file (str)
     """
 
+    appendStderr = pyqtSignal(str)
+    appendStdout = pyqtSignal(str)
+    binaryFile = pyqtSignal(str)
+    closeSourceWindow = pyqtSignal(str)
+    designerFile = pyqtSignal(str)
+    linguistFile = pyqtSignal(str)
+    pixmapEditFile = pyqtSignal(str)
+    pixmapFile = pyqtSignal(str)
+    preferencesChanged = pyqtSignal()
+    sourceFile = pyqtSignal((str,), (str, int), (str, list), (str, int, str))
+    svgFile = pyqtSignal(str)
+    testFile = pyqtSignal(str)
+    trpreview = pyqtSignal((list,), (list, bool))
+    uipreview = pyqtSignal(str)
+    umlFile = pyqtSignal(str)
+
     def __init__(self, project, parent=None):
         """
         Constructor
@@ -83,71 +132,23 @@
         }
         self.__vcsStateChanged(" ")
 
-        # step 1: create all the individual browsers
-        # sources browser
-        self.psBrowser = ProjectSourcesBrowser(self.project)
-        # forms browser
-        self.pfBrowser = ProjectFormsBrowser(self.project)
-        # resources browser
-        self.prBrowser = ProjectResourcesBrowser(self.project)
-        # translations browser
-        self.ptBrowser = ProjectTranslationsBrowser(self.project)
-        # interfaces (IDL) browser
-        self.piBrowser = ProjectInterfacesBrowser(self.project)
-        # protocols (protobuf) browser
-        self.ppBrowser = ProjectProtocolsBrowser(self.project)
-        # others browser
-        self.poBrowser = ProjectOthersBrowser(self.project)
-
-        # step 2: connect all the browsers
-        # connect the sources browser
-        self.project.projectClosed.connect(self.psBrowser._projectClosed)
-        self.project.projectOpened.connect(self.psBrowser._projectOpened)
-        self.project.newProject.connect(self.psBrowser._newProject)
-        self.project.reinitVCS.connect(self.psBrowser._initMenusAndVcs)
-        self.project.projectPropertiesChanged.connect(self.psBrowser._initMenusAndVcs)
-
-        # connect the forms browser
-        self.project.projectClosed.connect(self.pfBrowser._projectClosed)
-        self.project.projectOpened.connect(self.pfBrowser._projectOpened)
-        self.project.newProject.connect(self.pfBrowser._newProject)
-        self.project.reinitVCS.connect(self.pfBrowser._initMenusAndVcs)
-        self.project.projectPropertiesChanged.connect(self.pfBrowser._initMenusAndVcs)
-
-        # connect the resources browser
-        self.project.projectClosed.connect(self.prBrowser._projectClosed)
-        self.project.projectOpened.connect(self.prBrowser._projectOpened)
-        self.project.newProject.connect(self.prBrowser._newProject)
-        self.project.reinitVCS.connect(self.prBrowser._initMenusAndVcs)
-        self.project.projectPropertiesChanged.connect(self.prBrowser._initMenusAndVcs)
-
-        # connect the translations browser
-        self.project.projectClosed.connect(self.ptBrowser._projectClosed)
-        self.project.projectOpened.connect(self.ptBrowser._projectOpened)
-        self.project.newProject.connect(self.ptBrowser._newProject)
-        self.project.reinitVCS.connect(self.ptBrowser._initMenusAndVcs)
-        self.project.projectPropertiesChanged.connect(self.ptBrowser._initMenusAndVcs)
-
-        # connect the interfaces (IDL)  browser
-        self.project.projectClosed.connect(self.piBrowser._projectClosed)
-        self.project.projectOpened.connect(self.piBrowser._projectOpened)
-        self.project.newProject.connect(self.piBrowser._newProject)
-        self.project.reinitVCS.connect(self.piBrowser._initMenusAndVcs)
-        self.project.projectPropertiesChanged.connect(self.piBrowser._initMenusAndVcs)
-
-        # connect the protocols (protobuf)  browser
-        self.project.projectClosed.connect(self.ppBrowser._projectClosed)
-        self.project.projectOpened.connect(self.ppBrowser._projectOpened)
-        self.project.newProject.connect(self.ppBrowser._newProject)
-        self.project.reinitVCS.connect(self.ppBrowser._initMenusAndVcs)
-        self.project.projectPropertiesChanged.connect(self.ppBrowser._initMenusAndVcs)
-
-        # connect the others browser
-        self.project.projectClosed.connect(self.poBrowser._projectClosed)
-        self.project.projectOpened.connect(self.poBrowser._projectOpened)
-        self.project.newProject.connect(self.poBrowser._newProject)
-        self.project.reinitVCS.connect(self.poBrowser._initMenusAndVcs)
-        self.project.projectPropertiesChanged.connect(self.poBrowser._initMenusAndVcs)
+        # create all the individual browsers
+        self.__browsers = {
+            # sources browser
+            "sources": ProjectSourcesBrowser(self.project, self),
+            # forms browser
+            "forms": ProjectFormsBrowser(self.project, self),
+            # resources browser
+            "resources": ProjectResourcesBrowser(self.project, self),
+            # translations browser
+            "translations": ProjectTranslationsBrowser(self.project, self),
+            # others browser
+            "others": ProjectOthersBrowser(self.project, self),
+            # interfaces (IDL) browser
+            "interfaces": ProjectInterfacesBrowser(self.project, self),
+            # protocols (protobuf) browser
+            "protocols": ProjectProtocolsBrowser(self.project, self),
+        }
 
         # add signal connection to ourselves
         self.project.projectOpened.connect(self.__projectOpened)
@@ -174,43 +175,53 @@
         # step 2: add browsers
         if browserFlags & SourcesBrowserFlag:
             index = self.addTab(
-                self.psBrowser, EricPixmapCache.getIcon("projectSources"), ""
+                self.__browsers["sources"],
+                EricPixmapCache.getIcon("projectSources"),
+                "",
             )
-            self.setTabToolTip(index, self.psBrowser.windowTitle())
+            self.setTabToolTip(index, self.__browsers["sources"].windowTitle())
 
         if browserFlags & FormsBrowserFlag:
             index = self.addTab(
-                self.pfBrowser, EricPixmapCache.getIcon("projectForms"), ""
+                self.__browsers["forms"], EricPixmapCache.getIcon("projectForms"), ""
             )
-            self.setTabToolTip(index, self.pfBrowser.windowTitle())
+            self.setTabToolTip(index, self.__browsers["forms"].windowTitle())
 
         if browserFlags & ResourcesBrowserFlag:
             index = self.addTab(
-                self.prBrowser, EricPixmapCache.getIcon("projectResources"), ""
+                self.__browsers["resources"],
+                EricPixmapCache.getIcon("projectResources"),
+                "",
             )
-            self.setTabToolTip(index, self.prBrowser.windowTitle())
+            self.setTabToolTip(index, self.__browsers["resources"].windowTitle())
 
         if browserFlags & TranslationsBrowserFlag:
             index = self.addTab(
-                self.ptBrowser, EricPixmapCache.getIcon("projectTranslations"), ""
+                self.__browsers["translations"],
+                EricPixmapCache.getIcon("projectTranslations"),
+                "",
             )
-            self.setTabToolTip(index, self.ptBrowser.windowTitle())
+            self.setTabToolTip(index, self.__browsers["translations"].windowTitle())
 
         if browserFlags & InterfacesBrowserFlag:
             index = self.addTab(
-                self.piBrowser, EricPixmapCache.getIcon("projectInterfaces"), ""
+                self.__browsers["interfaces"],
+                EricPixmapCache.getIcon("projectInterfaces"),
+                "",
             )
-            self.setTabToolTip(index, self.piBrowser.windowTitle())
+            self.setTabToolTip(index, self.__browsers["interfaces"].windowTitle())
 
         if browserFlags & ProtocolsBrowserFlag:
-            index = self.addTab(self.ppBrowser, EricPixmapCache.getIcon("protobuf"), "")
-            self.setTabToolTip(index, self.ppBrowser.windowTitle())
+            index = self.addTab(
+                self.__browsers["protocols"], EricPixmapCache.getIcon("protobuf"), ""
+            )
+            self.setTabToolTip(index, self.__browsers["protocols"].windowTitle())
 
         if browserFlags & OthersBrowserFlag:
             index = self.addTab(
-                self.poBrowser, EricPixmapCache.getIcon("projectOthers"), ""
+                self.__browsers["others"], EricPixmapCache.getIcon("projectOthers"), ""
             )
-            self.setTabToolTip(index, self.poBrowser.windowTitle())
+            self.setTabToolTip(index, self.__browsers["others"].windowTitle())
 
         QApplication.processEvents()
 
@@ -292,7 +303,7 @@
                 icon = EricPixmapCache.getIcon("projectSourcesJavaScript")
             else:
                 icon = EricPixmapCache.getIcon("projectSources")
-        self.setTabIcon(self.indexOf(self.psBrowser), icon)
+        self.setTabIcon(self.indexOf(self.__browsers["sources"]), icon)
 
     def handleEditorChanged(self, fn):
         """
@@ -302,15 +313,15 @@
         """
         if Preferences.getProject("FollowEditor"):
             if self.project.isProjectSource(fn):
-                self.psBrowser.selectFile(fn)
+                self.__browsers["sources"].selectFile(fn)
             elif self.project.isProjectForm(fn):
-                self.pfBrowser.selectFile(fn)
+                self.__browsers["forms"].selectFile(fn)
             elif self.project.isProjectResource(fn):
-                self.prBrowser.selectFile(fn)
+                self.__browsers["resources"].selectFile(fn)
             elif self.project.isProjectInterface(fn):
-                self.piBrowser.selectFile(fn)
+                self.__browsers["interfaces"].selectFile(fn)
             elif self.project.isProjectProtocol(fn):
-                self.ppBrowser.selectFile(fn)
+                self.__browsers["protocols"].selectFile(fn)
 
     def handleEditorLineChanged(self, fn, lineno):
         """
@@ -324,58 +335,36 @@
             and Preferences.getProject("FollowCursorLine")
             and self.project.isProjectSource(fn)
         ):
-            self.psBrowser.selectFileLine(fn, lineno)
+            self.__browsers["sources"].selectFileLine(fn, lineno)
 
     def getProjectBrowsers(self):
         """
         Public method to get references to the individual project browsers.
 
         @return list of references to project browsers
+        @rtype list of ProjectBaseBrowser
         """
-        return [
-            self.psBrowser,
-            self.pfBrowser,
-            self.prBrowser,
-            self.ptBrowser,
-            self.piBrowser,
-            self.ppBrowser,
-            self.poBrowser,
-        ]
+        return list(self.__browsers.items())
 
     def getProjectBrowser(self, name):
         """
         Public method to get a reference to the named project browser.
 
-        @param name name of the requested project browser (string).
-            Valid names are "sources, forms, resources, translations,
-            interfaces, protocols, others".
+        @param name name of the requested project browser.
+        @type str
         @return reference to the requested browser or None
+        @rtype ProjectBaseBrowser or None
         """
-        return {
-            "sources": self.psBrowser,
-            "forms": self.pfBrowser,
-            "resources": self.prBrowser,
-            "translations": self.ptBrowser,
-            "interfaces": self.piBrowser,
-            "protocols": self.ppBrowser,
-            "others": self.poBrowser,
-        }.get(name, None)
+        return self.__browsers.get(name, None)
 
     def getProjectBrowserNames(self):
         """
         Public method to get the names of the various project browsers.
 
-        @return list of project browser names (list of string)
+        @return list of project browser names
+        @rtype list of str
         """
-        return [
-            "sources",
-            "forms",
-            "resources",
-            "translations",
-            "interfaces",
-            "protocols",
-            "others",
-        ]
+        return list(self.__browsers.keys())
 
     def handlePreferencesChanged(self):
         """
@@ -384,6 +373,8 @@
         self.__projectPropertiesChanged()
         self.__vcsStateChanged(self.currentVcsStatus)
 
+        self.preferencesChanged.emit()  # propagate the signal to the browsers
+
     def __vcsStateChanged(self, state):
         """
         Private slot to handle a change in the vcs state.
--- a/src/eric7/Project/ProjectBrowserFlags.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/Project/ProjectBrowserFlags.py	Tue Nov 15 11:06:27 2022 +0100
@@ -7,6 +7,7 @@
 Module defining the project browser flags.
 """
 
+# TODO: replace these by well defined strings
 SourcesBrowserFlag = 1
 FormsBrowserFlag = 2
 ResourcesBrowserFlag = 4
--- a/src/eric7/Project/ProjectFormsBrowser.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/Project/ProjectFormsBrowser.py	Tue Nov 15 11:06:27 2022 +0100
@@ -55,12 +55,16 @@
     Pyuic5IndentDefault = 4
     Pyuic6IndentDefault = 4
 
-    def __init__(self, project, parent=None):
+    def __init__(self, project, projectBrowser, parent=None):
         """
         Constructor
 
         @param project reference to the project object
-        @param parent parent widget of this browser (QWidget)
+        @type Project
+        @param projectBrowser reference to the project browser object
+        @type ProjectBrowser
+        @param parent parent widget of this browser
+        @type QWidget
         """
         ProjectBaseBrowser.__init__(self, project, ProjectBrowserFormType, parent)
 
@@ -128,8 +132,22 @@
         self.compileProc = None
         self.__uicompiler = ""
 
-        self.project.projectClosed.connect(self.__resetUiCompiler)
-        self.project.projectPropertiesChanged.connect(self.__resetUiCompiler)
+        project.projectClosed.connect(self.__resetUiCompiler)
+        project.projectPropertiesChanged.connect(self.__resetUiCompiler)
+        project.projectClosed.connect(self._projectClosed)
+        project.projectOpened.connect(self._projectOpened)
+        project.newProject.connect(self._newProject)
+        project.reinitVCS.connect(self._initMenusAndVcs)
+        project.projectPropertiesChanged.connect(self._initMenusAndVcs)
+
+        projectBrowser.preferencesChanged.connect(self.handlePreferencesChanged)
+
+        self.appendStderr.connect(projectBrowser.appendStderr)
+        self.closeSourceWindow.connect(projectBrowser.closeSourceWindow)
+        self.sourceFile[str].connect(projectBrowser.sourceFile[str])
+        self.designerFile.connect(projectBrowser.designerFile)
+        self.uipreview.connect(projectBrowser.uipreview)
+        self.trpreview[list].connect(projectBrowser.trpreview[list])
 
     def _createPopupMenus(self):
         """
--- a/src/eric7/Project/ProjectInterfacesBrowser.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/Project/ProjectInterfacesBrowser.py	Tue Nov 15 11:06:27 2022 +0100
@@ -54,12 +54,16 @@
     appendStderr = pyqtSignal(str)
     showMenu = pyqtSignal(str, QMenu)
 
-    def __init__(self, project, parent=None):
+    def __init__(self, project, projectBrowser, parent=None):
         """
         Constructor
 
         @param project reference to the project object
-        @param parent parent widget of this browser (QWidget)
+        @type Project
+        @param projectBrowser reference to the project browser object
+        @type ProjectBrowser
+        @param parent parent widget of this browser
+        @type QWidget
         """
         self.omniidl = Preferences.getCorba("omniidl")
         if self.omniidl == "":
@@ -87,6 +91,19 @@
 
         project.prepareRepopulateItem.connect(self._prepareRepopulateItem)
         project.completeRepopulateItem.connect(self._completeRepopulateItem)
+        project.projectClosed.connect(self._projectClosed)
+        project.projectOpened.connect(self._projectOpened)
+        project.newProject.connect(self._newProject)
+        project.reinitVCS.connect(self._initMenusAndVcs)
+        project.projectPropertiesChanged.connect(self._initMenusAndVcs)
+
+        projectBrowser.preferencesChanged.connect(self.handlePreferencesChanged)
+
+        self.appendStderr.connect(projectBrowser.appendStderr)
+        self.appendStdout.connect(projectBrowser.appendStdout)
+        self.closeSourceWindow.connect(projectBrowser.closeSourceWindow)
+        self.sourceFile[str].connect(projectBrowser.sourceFile[str])
+        self.sourceFile[str, int].connect(projectBrowser.sourceFile[str, int])
 
     def _createPopupMenus(self):
         """
--- a/src/eric7/Project/ProjectOthersBrowser.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/Project/ProjectOthersBrowser.py	Tue Nov 15 11:06:27 2022 +0100
@@ -40,12 +40,16 @@
 
     showMenu = pyqtSignal(str, QMenu)
 
-    def __init__(self, project, parent=None):
+    def __init__(self, project, projectBrowser, parent=None):
         """
         Constructor
 
         @param project reference to the project object
-        @param parent parent widget of this browser (QWidget)
+        @type Project
+        @param projectBrowser reference to the project browser object
+        @type ProjectBrowser
+        @param parent parent widget of this browser
+        @type QWidget
         """
         ProjectBaseBrowser.__init__(self, project, ProjectBrowserOthersType, parent)
 
@@ -66,6 +70,21 @@
 
         project.prepareRepopulateItem.connect(self._prepareRepopulateItem)
         project.completeRepopulateItem.connect(self._completeRepopulateItem)
+        project.projectClosed.connect(self._projectClosed)
+        project.projectOpened.connect(self._projectOpened)
+        project.newProject.connect(self._newProject)
+        project.reinitVCS.connect(self._initMenusAndVcs)
+        project.projectPropertiesChanged.connect(self._initMenusAndVcs)
+
+        projectBrowser.preferencesChanged.connect(self.handlePreferencesChanged)
+
+        self.closeSourceWindow.connect(projectBrowser.closeSourceWindow)
+        self.sourceFile[str].connect(projectBrowser.sourceFile[str])
+        self.pixmapEditFile.connect(projectBrowser.pixmapEditFile)
+        self.pixmapFile.connect(projectBrowser.pixmapFile)
+        self.svgFile.connect(projectBrowser.svgFile)
+        self.umlFile.connect(projectBrowser.umlFile)
+        self.binaryFile.connect(projectBrowser.binaryFile)
 
     def _createPopupMenus(self):
         """
--- a/src/eric7/Project/ProjectProtocolsBrowser.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/Project/ProjectProtocolsBrowser.py	Tue Nov 15 11:06:27 2022 +0100
@@ -54,12 +54,14 @@
     appendStderr = pyqtSignal(str)
     showMenu = pyqtSignal(str, QMenu)
 
-    def __init__(self, project, parent=None):
+    def __init__(self, project, projectBrowser, parent=None):
         """
         Constructor
 
         @param project reference to the project object
         @type Project
+        @param projectBrowser reference to the project browser object
+        @type ProjectBrowser
         @param parent parent widget of this browser
         @type QWidget
         """
@@ -83,6 +85,19 @@
 
         project.prepareRepopulateItem.connect(self._prepareRepopulateItem)
         project.completeRepopulateItem.connect(self._completeRepopulateItem)
+        project.projectClosed.connect(self._projectClosed)
+        project.projectOpened.connect(self._projectOpened)
+        project.newProject.connect(self._newProject)
+        project.reinitVCS.connect(self._initMenusAndVcs)
+        project.projectPropertiesChanged.connect(self._initMenusAndVcs)
+
+        projectBrowser.preferencesChanged.connect(self.handlePreferencesChanged)
+
+        self.appendStderr.connect(projectBrowser.appendStderr)
+        self.appendStdout.connect(projectBrowser.appendStdout)
+        self.closeSourceWindow.connect(projectBrowser.closeSourceWindow)
+        self.sourceFile[str].connect(projectBrowser.sourceFile[str])
+        self.sourceFile[str, int].connect(projectBrowser.sourceFile[str, int])
 
     def _createPopupMenus(self):
         """
--- a/src/eric7/Project/ProjectResourcesBrowser.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/Project/ProjectResourcesBrowser.py	Tue Nov 15 11:06:27 2022 +0100
@@ -47,12 +47,16 @@
     RCFilenameFormatPython = "{0}_rc.py"
     RCFilenameFormatRuby = "{0}_rc.rb"
 
-    def __init__(self, project, parent=None):
+    def __init__(self, project, projectBrowser, parent=None):
         """
         Constructor
 
         @param project reference to the project object
-        @param parent parent widget of this browser (QWidget)
+        @type Project
+        @param projectBrowser reference to the project browser object
+        @type ProjectBrowser
+        @param parent parent widget of this browser
+        @type QWidget
         """
         ProjectBaseBrowser.__init__(self, project, ProjectBrowserResourceType, parent)
 
@@ -74,6 +78,18 @@
 
         self.compileProc = None
 
+        project.projectClosed.connect(self._projectClosed)
+        project.projectOpened.connect(self._projectOpened)
+        project.newProject.connect(self._newProject)
+        project.reinitVCS.connect(self._initMenusAndVcs)
+        project.projectPropertiesChanged.connect(self._initMenusAndVcs)
+
+        projectBrowser.preferencesChanged.connect(self.handlePreferencesChanged)
+
+        self.appendStderr.connect(projectBrowser.appendStderr)
+        self.closeSourceWindow.connect(projectBrowser.closeSourceWindow)
+        self.sourceFile[str].connect(projectBrowser.sourceFile[str])
+
     def _createPopupMenus(self):
         """
         Protected overloaded method to generate the popup menu.
--- a/src/eric7/Project/ProjectSourcesBrowser.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/Project/ProjectSourcesBrowser.py	Tue Nov 15 11:06:27 2022 +0100
@@ -50,12 +50,16 @@
 
     showMenu = pyqtSignal(str, QMenu)
 
-    def __init__(self, project, parent=None):
+    def __init__(self, project, projectBrowser, parent=None):
         """
         Constructor
 
         @param project reference to the project object
-        @param parent parent widget of this browser (QWidget)
+        @type Project
+        @param projectBrowser reference to the project browser object
+        @type ProjectBrowser
+        @param parent parent widget of this browser
+        @type QWidget
         """
         ProjectBaseBrowser.__init__(self, project, ProjectBrowserSourceType, parent)
 
@@ -77,6 +81,20 @@
 
         project.prepareRepopulateItem.connect(self._prepareRepopulateItem)
         project.completeRepopulateItem.connect(self._completeRepopulateItem)
+        project.projectClosed.connect(self._projectClosed)
+        project.projectOpened.connect(self._projectOpened)
+        project.newProject.connect(self._newProject)
+        project.reinitVCS.connect(self._initMenusAndVcs)
+        project.projectPropertiesChanged.connect(self._initMenusAndVcs)
+
+        projectBrowser.preferencesChanged.connect(self.handlePreferencesChanged)
+
+        self.sourceFile[str].connect(projectBrowser.sourceFile[str])
+        self.sourceFile[str, int].connect(projectBrowser.sourceFile[str, int])
+        self.sourceFile[str, list].connect(projectBrowser.sourceFile[str, list])
+        self.sourceFile[str, int, str].connect(projectBrowser.sourceFile[str, int, str])
+        self.closeSourceWindow.connect(projectBrowser.closeSourceWindow)
+        self.testFile.connect(projectBrowser.testFile)
 
         self.codemetrics = None
         self.codecoverage = None
--- a/src/eric7/Project/ProjectTranslationsBrowser.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/Project/ProjectTranslationsBrowser.py	Tue Nov 15 11:06:27 2022 +0100
@@ -51,12 +51,16 @@
     appendStderr = pyqtSignal(str)
     showMenu = pyqtSignal(str, QMenu)
 
-    def __init__(self, project, parent=None):
+    def __init__(self, project, projectBrowser, parent=None):
         """
         Constructor
 
         @param project reference to the project object
-        @param parent parent widget of this browser (QWidget)
+        @type Project
+        @param projectBrowser reference to the project browser object
+        @type ProjectBrowser
+        @param parent parent widget of this browser
+        @type QWidget
         """
         ProjectBaseBrowser.__init__(
             self, project, ProjectBrowserTranslationType, parent
@@ -85,6 +89,22 @@
         self.pylupdateProcRunning = False
         self.__tmpProjects = []
 
+        project.projectClosed.connect(self._projectClosed)
+        project.projectOpened.connect(self._projectOpened)
+        project.newProject.connect(self._newProject)
+        project.reinitVCS.connect(self._initMenusAndVcs)
+        project.projectPropertiesChanged.connect(self._initMenusAndVcs)
+
+        projectBrowser.preferencesChanged.connect(self.handlePreferencesChanged)
+
+        self.appendStderr.connect(projectBrowser.appendStderr)
+        self.appendStdout.connect(projectBrowser.appendStdout)
+        self.closeSourceWindow.connect(projectBrowser.closeSourceWindow)
+        self.sourceFile[str].connect(projectBrowser.sourceFile[str])
+        self.linguistFile.connect(projectBrowser.linguistFile)
+        self.trpreview[list].connect(projectBrowser.trpreview[list])
+        self.trpreview[list, bool].connect(projectBrowser.trpreview[list, bool])
+
     def _createPopupMenus(self):
         """
         Protected overloaded method to generate the popup menu.
--- a/src/eric7/UI/UserInterface.py	Mon Nov 14 11:33:53 2022 +0100
+++ b/src/eric7/UI/UserInterface.py	Tue Nov 15 11:06:27 2022 +0100
@@ -403,89 +403,30 @@
 
         self.taskViewer.displayFile.connect(self.viewmanager.openSourceFile)
 
-        self.projectBrowser.psBrowser.sourceFile[str].connect(
-            self.viewmanager.openSourceFile
-        )
-        self.projectBrowser.psBrowser.sourceFile[str, int].connect(
-            self.viewmanager.openSourceFile
-        )
-        self.projectBrowser.psBrowser.sourceFile[str, list].connect(
-            self.viewmanager.openSourceFile
-        )
-        self.projectBrowser.psBrowser.sourceFile[str, int, str].connect(
+        self.projectBrowser.appendStderr.connect(self.appendToStderr)
+        self.projectBrowser.appendStdout.connect(self.appendToStdout)
+        self.projectBrowser.sourceFile[str].connect(self.viewmanager.openSourceFile)
+        self.projectBrowser.sourceFile[str, int].connect(
             self.viewmanager.openSourceFile
         )
-        self.projectBrowser.psBrowser.closeSourceWindow.connect(
-            self.viewmanager.closeWindow
-        )
-        self.projectBrowser.psBrowser.testFile.connect(self.__startTestScript)
-
-        self.projectBrowser.pfBrowser.designerFile.connect(self.__designer)
-        self.projectBrowser.pfBrowser.sourceFile.connect(
+        self.projectBrowser.sourceFile[str, list].connect(
             self.viewmanager.openSourceFile
         )
-        self.projectBrowser.pfBrowser.uipreview.connect(self.__UIPreviewer)
-        self.projectBrowser.pfBrowser.trpreview.connect(self.__TRPreviewer)
-        self.projectBrowser.pfBrowser.closeSourceWindow.connect(
-            self.viewmanager.closeWindow
-        )
-        self.projectBrowser.pfBrowser.appendStderr.connect(self.appendToStderr)
-
-        self.projectBrowser.prBrowser.sourceFile.connect(
-            self.viewmanager.openSourceFile
-        )
-        self.projectBrowser.prBrowser.closeSourceWindow.connect(
-            self.viewmanager.closeWindow
-        )
-        self.projectBrowser.prBrowser.appendStderr.connect(self.appendToStderr)
-
-        self.projectBrowser.ptBrowser.linguistFile.connect(self.__linguist)
-        self.projectBrowser.ptBrowser.sourceFile.connect(
+        self.projectBrowser.sourceFile[str, int, str].connect(
             self.viewmanager.openSourceFile
         )
-        self.projectBrowser.ptBrowser.trpreview[list].connect(self.__TRPreviewer)
-        self.projectBrowser.ptBrowser.trpreview[list, bool].connect(self.__TRPreviewer)
-        self.projectBrowser.ptBrowser.closeSourceWindow.connect(
-            self.viewmanager.closeWindow
-        )
-        self.projectBrowser.ptBrowser.appendStdout.connect(self.appendToStdout)
-        self.projectBrowser.ptBrowser.appendStderr.connect(self.appendToStderr)
-
-        self.projectBrowser.piBrowser.sourceFile[str].connect(
-            self.viewmanager.openSourceFile
-        )
-        self.projectBrowser.piBrowser.sourceFile[str, int].connect(
-            self.viewmanager.openSourceFile
-        )
-        self.projectBrowser.piBrowser.closeSourceWindow.connect(
-            self.viewmanager.closeWindow
-        )
-        self.projectBrowser.piBrowser.appendStdout.connect(self.appendToStdout)
-        self.projectBrowser.piBrowser.appendStderr.connect(self.appendToStderr)
-
-        self.projectBrowser.ppBrowser.sourceFile[str].connect(
-            self.viewmanager.openSourceFile
-        )
-        self.projectBrowser.ppBrowser.sourceFile[str, int].connect(
-            self.viewmanager.openSourceFile
-        )
-        self.projectBrowser.ppBrowser.closeSourceWindow.connect(
-            self.viewmanager.closeWindow
-        )
-        self.projectBrowser.ppBrowser.appendStdout.connect(self.appendToStdout)
-        self.projectBrowser.ppBrowser.appendStderr.connect(self.appendToStderr)
-
-        self.projectBrowser.poBrowser.sourceFile.connect(
-            self.viewmanager.openSourceFile
-        )
-        self.projectBrowser.poBrowser.closeSourceWindow.connect(
-            self.viewmanager.closeWindow
-        )
-        self.projectBrowser.poBrowser.pixmapEditFile.connect(self.__editPixmap)
-        self.projectBrowser.poBrowser.pixmapFile.connect(self.__showPixmap)
-        self.projectBrowser.poBrowser.svgFile.connect(self.__showSvg)
-        self.projectBrowser.poBrowser.umlFile.connect(self.__showUml)
-        self.projectBrowser.poBrowser.binaryFile.connect(self.__openHexEditor)
+        self.projectBrowser.closeSourceWindow.connect(self.viewmanager.closeWindow)
+        self.projectBrowser.testFile.connect(self.__startTestScript)
+        self.projectBrowser.designerFile.connect(self.__designer)
+        self.projectBrowser.uipreview.connect(self.__UIPreviewer)
+        self.projectBrowser.trpreview[list].connect(self.__TRPreviewer)
+        self.projectBrowser.trpreview[list, bool].connect(self.__TRPreviewer)
+        self.projectBrowser.linguistFile.connect(self.__linguist)
+        self.projectBrowser.pixmapEditFile.connect(self.__editPixmap)
+        self.projectBrowser.pixmapFile.connect(self.__showPixmap)
+        self.projectBrowser.svgFile.connect(self.__showSvg)
+        self.projectBrowser.umlFile.connect(self.__showUml)
+        self.projectBrowser.binaryFile.connect(self.__openHexEditor)
 
         self.project.sourceFile.connect(self.viewmanager.openSourceFile)
         self.project.designerFile.connect(self.__designer)
@@ -517,11 +458,13 @@
         self.debuggerUI.resetUI.connect(self.__debuggingDone)
         self.debuggerUI.debuggingStarted.connect(self.__programChange)
         self.debuggerUI.debuggingStarted.connect(self.__debuggingStarted)
+        # TODO: check how this can be changed
         self.debuggerUI.compileForms.connect(
-            self.projectBrowser.pfBrowser.compileChangedForms
-        )
+            self.projectBrowser.getProjectBrowser("forms").compileChangedForms
+        )
+        # TODO: check how this can be changed
         self.debuggerUI.compileResources.connect(
-            self.projectBrowser.prBrowser.compileChangedResources
+            self.projectBrowser.getProjectBrowser("resources").compileChangedResources
         )
         self.debuggerUI.executeMake.connect(self.project.executeMake)
         self.debuggerUI.appendStdout.connect(self.appendToStdout)
@@ -544,27 +487,6 @@
         self.preferencesChanged.connect(self.shell.handlePreferencesChanged)
         self.preferencesChanged.connect(self.project.handlePreferencesChanged)
         self.preferencesChanged.connect(self.projectBrowser.handlePreferencesChanged)
-        self.preferencesChanged.connect(
-            self.projectBrowser.psBrowser.handlePreferencesChanged
-        )
-        self.preferencesChanged.connect(
-            self.projectBrowser.pfBrowser.handlePreferencesChanged
-        )
-        self.preferencesChanged.connect(
-            self.projectBrowser.prBrowser.handlePreferencesChanged
-        )
-        self.preferencesChanged.connect(
-            self.projectBrowser.ptBrowser.handlePreferencesChanged
-        )
-        self.preferencesChanged.connect(
-            self.projectBrowser.piBrowser.handlePreferencesChanged
-        )
-        self.preferencesChanged.connect(
-            self.projectBrowser.ppBrowser.handlePreferencesChanged
-        )
-        self.preferencesChanged.connect(
-            self.projectBrowser.poBrowser.handlePreferencesChanged
-        )
         self.preferencesChanged.connect(self.taskViewer.handlePreferencesChanged)
         self.preferencesChanged.connect(self.pluginManager.preferencesChanged)
         self.preferencesChanged.connect(self.__debugServer.preferencesChanged)

eric ide

mercurial