diff -r 6a730f4d0080 -r 477545eef9f4 src/eric7/Preferences/ConfigurationPages/ProjectBrowserPage.py --- a/src/eric7/Preferences/ConfigurationPages/ProjectBrowserPage.py Wed Nov 23 16:07:16 2022 +0100 +++ b/src/eric7/Preferences/ConfigurationPages/ProjectBrowserPage.py Thu Nov 24 11:51:40 2022 +0100 @@ -7,7 +7,10 @@ Module implementing the Project Browser configuration page. """ -from PyQt6.QtCore import pyqtSlot +import contextlib + +from PyQt6.QtCore import pyqtSlot, Qt +from PyQt6.QtWidgets import QListWidgetItem from eric7 import Preferences from eric7.EricWidgets.EricApplication import ericApp @@ -16,7 +19,6 @@ 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. @@ -32,18 +34,22 @@ self.__currentProjectTypeIndex = 0 + # populate the project browser type list + self.__populateProjectBrowserList() + # set initial values self.projectTypeCombo.addItem("", "") - self.__projectBrowserFlags = {"": 0} + self.__projectBrowsersLists = {"": []} try: projectTypes = ericApp().getObject("Project").getProjectTypes() for projectType in sorted(projectTypes.keys()): self.projectTypeCombo.addItem(projectTypes[projectType], projectType) - self.__projectBrowserFlags[ + self.__projectBrowsersLists[ projectType - ] = Preferences.getProjectBrowserFlags(projectType) + ] = Preferences.getProjectBrowsers(projectType) except KeyError: self.pbGroup.setEnabled(False) + self.pbGroup.setVisible(False) self.initColour( "Highlighted", self.pbHighlightedButton, Preferences.getProjectBrowserColour @@ -84,82 +90,66 @@ ) if self.pbGroup.isEnabled(): - self.__storeProjectBrowserFlags( + self.__storeProjectBrowsersList( self.projectTypeCombo.itemData(self.__currentProjectTypeIndex) ) - for projectType, flags in list(self.__projectBrowserFlags.items()): - if projectType != "": - Preferences.setProjectBrowserFlags(projectType, flags) - - def __storeProjectBrowserFlags(self, projectType): - """ - Private method to store the flags for the selected project type. - - @param projectType type of the selected project (string) - """ - from eric7.Project.ProjectBrowserFlags import ( - FormsBrowserFlag, - InterfacesBrowserFlag, - OthersBrowserFlag, - ProtocolsBrowserFlag, - ResourcesBrowserFlag, - SourcesBrowserFlag, - TranslationsBrowserFlag, - ) + for projectType, browsersList in self.__projectBrowsersLists.items(): + if bool(projectType): + Preferences.setProjectBrowsers(projectType, browsersList) - flags = 0 - if self.sourcesBrowserCheckBox.isChecked(): - flags |= SourcesBrowserFlag - if self.formsBrowserCheckBox.isChecked(): - flags |= FormsBrowserFlag - if self.resourcesBrowserCheckBox.isChecked() and projectType not in ( - "PyQt6", - "PyQt6C", - ): - flags |= ResourcesBrowserFlag - if self.translationsBrowserCheckBox.isChecked(): - flags |= TranslationsBrowserFlag - if self.interfacesBrowserCheckBox.isChecked(): - flags |= InterfacesBrowserFlag - if self.othersBrowserCheckBox.isChecked(): - flags |= OthersBrowserFlag - if self.protocolsBrowserCheckBox.isChecked(): - flags |= ProtocolsBrowserFlag + def __populateProjectBrowserList(self): + """ + Private method to populate the project browsers list. + """ + with contextlib.suppress(KeyError): + projectBrowser = ericApp().getObject("ProjectBrowser") + for ( + browserType, + userString, + ) in projectBrowser.getProjectBrowserUserStrings().items(): + itm = QListWidgetItem(userString, self.projectBrowserListWidget) + itm.setData(Qt.ItemDataRole.UserRole, browserType) + itm.setFlags(itm.flags() | Qt.ItemFlag.ItemIsUserCheckable) + itm.setCheckState(Qt.CheckState.Unchecked) - self.__projectBrowserFlags[projectType] = flags - - def __setProjectBrowsersCheckBoxes(self, projectType): + def __storeProjectBrowsersList(self, projectType): """ - Private method to set the checkboxes according to the selected project + Private method to store the list of enabled browsers for the selected project type. - @param projectType type of the selected project (string) + @param projectType type of the selected project + @type str """ - from eric7.Project.ProjectBrowserFlags import ( - FormsBrowserFlag, - InterfacesBrowserFlag, - OthersBrowserFlag, - ProtocolsBrowserFlag, - ResourcesBrowserFlag, - SourcesBrowserFlag, - TranslationsBrowserFlag, - ) + browsersList = [] + for row in range(self.projectBrowserListWidget.count()): + itm = self.projectBrowserListWidget.item(row) + if itm.checkState() == Qt.CheckState.Checked: + browsersList.append(itm.data(Qt.ItemDataRole.UserRole)) + self.__projectBrowsersLists[projectType] = browsersList - flags = self.__projectBrowserFlags[projectType] + def __setProjectBrowsersList(self, projectType): + """ + Private method to check the project browser entries according to the selected + project type. - self.sourcesBrowserCheckBox.setChecked(flags & SourcesBrowserFlag) - self.formsBrowserCheckBox.setChecked(flags & FormsBrowserFlag) - self.resourcesBrowserCheckBox.setEnabled( - projectType not in ("PyQt6", "PyQt6C", "E7Plugin") - ) - if projectType in ("PyQt6", "PyQt6C", "E7Plugin"): - self.resourcesBrowserCheckBox.setChecked(False) - else: - self.resourcesBrowserCheckBox.setChecked(flags & ResourcesBrowserFlag) - self.translationsBrowserCheckBox.setChecked(flags & TranslationsBrowserFlag) - self.interfacesBrowserCheckBox.setChecked(flags & InterfacesBrowserFlag) - self.othersBrowserCheckBox.setChecked(flags & OthersBrowserFlag) - self.protocolsBrowserCheckBox.setChecked(flags & ProtocolsBrowserFlag) + @param projectType selected project type + @type str + """ + browsersList = self.__projectBrowsersLists[projectType] + for row in range(self.projectBrowserListWidget.count()): + itm = self.projectBrowserListWidget.item(row) + if ( + projectType in ("PyQt6", "PyQt6C", "E7Plugin") + and itm.data(Qt.ItemDataRole.UserRole) == "resources" + ): + itm.setFlags(itm.flags() & ~Qt.ItemFlag.ItemIsEnabled) + else: + itm.setFlags(itm.flags() | Qt.ItemFlag.ItemIsEnabled) + itm.setCheckState( + Qt.CheckState.Checked + if itm.data(Qt.ItemDataRole.UserRole) in browsersList + else Qt.CheckState.Unchecked + ) @pyqtSlot(int) def on_projectTypeCombo_activated(self, index): @@ -172,10 +162,10 @@ if self.__currentProjectTypeIndex == index: return - self.__storeProjectBrowserFlags( + self.__storeProjectBrowsersList( self.projectTypeCombo.itemData(self.__currentProjectTypeIndex) ) - self.__setProjectBrowsersCheckBoxes(self.projectTypeCombo.itemData(index)) + self.__setProjectBrowsersList(self.projectTypeCombo.itemData(index)) self.__currentProjectTypeIndex = index @pyqtSlot(bool)