src/eric7/Preferences/ConfigurationPages/ProjectBrowserPage.py

branch
eric7
changeset 9525
477545eef9f4
parent 9512
6e29913ba7b6
child 9527
8601253e7633
equal deleted inserted replaced
9524:6a730f4d0080 9525:477545eef9f4
5 5
6 """ 6 """
7 Module implementing the Project Browser configuration page. 7 Module implementing the Project Browser configuration page.
8 """ 8 """
9 9
10 from PyQt6.QtCore import pyqtSlot 10 import contextlib
11
12 from PyQt6.QtCore import pyqtSlot, Qt
13 from PyQt6.QtWidgets import QListWidgetItem
11 14
12 from eric7 import Preferences 15 from eric7 import Preferences
13 from eric7.EricWidgets.EricApplication import ericApp 16 from eric7.EricWidgets.EricApplication import ericApp
14 17
15 from .ConfigurationPageBase import ConfigurationPageBase 18 from .ConfigurationPageBase import ConfigurationPageBase
16 from .Ui_ProjectBrowserPage import Ui_ProjectBrowserPage 19 from .Ui_ProjectBrowserPage import Ui_ProjectBrowserPage
17 20
18 21
19 # TODO: change project browser configuration to use a QListWidget
20 class ProjectBrowserPage(ConfigurationPageBase, Ui_ProjectBrowserPage): 22 class ProjectBrowserPage(ConfigurationPageBase, Ui_ProjectBrowserPage):
21 """ 23 """
22 Class implementing the Project Browser configuration page. 24 Class implementing the Project Browser configuration page.
23 """ 25 """
24 26
30 self.setupUi(self) 32 self.setupUi(self)
31 self.setObjectName("ProjectBrowserPage") 33 self.setObjectName("ProjectBrowserPage")
32 34
33 self.__currentProjectTypeIndex = 0 35 self.__currentProjectTypeIndex = 0
34 36
37 # populate the project browser type list
38 self.__populateProjectBrowserList()
39
35 # set initial values 40 # set initial values
36 self.projectTypeCombo.addItem("", "") 41 self.projectTypeCombo.addItem("", "")
37 self.__projectBrowserFlags = {"": 0} 42 self.__projectBrowsersLists = {"": []}
38 try: 43 try:
39 projectTypes = ericApp().getObject("Project").getProjectTypes() 44 projectTypes = ericApp().getObject("Project").getProjectTypes()
40 for projectType in sorted(projectTypes.keys()): 45 for projectType in sorted(projectTypes.keys()):
41 self.projectTypeCombo.addItem(projectTypes[projectType], projectType) 46 self.projectTypeCombo.addItem(projectTypes[projectType], projectType)
42 self.__projectBrowserFlags[ 47 self.__projectBrowsersLists[
43 projectType 48 projectType
44 ] = Preferences.getProjectBrowserFlags(projectType) 49 ] = Preferences.getProjectBrowsers(projectType)
45 except KeyError: 50 except KeyError:
46 self.pbGroup.setEnabled(False) 51 self.pbGroup.setEnabled(False)
52 self.pbGroup.setVisible(False)
47 53
48 self.initColour( 54 self.initColour(
49 "Highlighted", self.pbHighlightedButton, Preferences.getProjectBrowserColour 55 "Highlighted", self.pbHighlightedButton, Preferences.getProjectBrowserColour
50 ) 56 )
51 57
82 Preferences.setProject( 88 Preferences.setProject(
83 "BrowsersListHiddenFiles", self.showHiddenCheckBox.isChecked() 89 "BrowsersListHiddenFiles", self.showHiddenCheckBox.isChecked()
84 ) 90 )
85 91
86 if self.pbGroup.isEnabled(): 92 if self.pbGroup.isEnabled():
87 self.__storeProjectBrowserFlags( 93 self.__storeProjectBrowsersList(
88 self.projectTypeCombo.itemData(self.__currentProjectTypeIndex) 94 self.projectTypeCombo.itemData(self.__currentProjectTypeIndex)
89 ) 95 )
90 for projectType, flags in list(self.__projectBrowserFlags.items()): 96 for projectType, browsersList in self.__projectBrowsersLists.items():
91 if projectType != "": 97 if bool(projectType):
92 Preferences.setProjectBrowserFlags(projectType, flags) 98 Preferences.setProjectBrowsers(projectType, browsersList)
93 99
94 def __storeProjectBrowserFlags(self, projectType): 100 def __populateProjectBrowserList(self):
95 """ 101 """
96 Private method to store the flags for the selected project type. 102 Private method to populate the project browsers list.
97 103 """
98 @param projectType type of the selected project (string) 104 with contextlib.suppress(KeyError):
99 """ 105 projectBrowser = ericApp().getObject("ProjectBrowser")
100 from eric7.Project.ProjectBrowserFlags import ( 106 for (
101 FormsBrowserFlag, 107 browserType,
102 InterfacesBrowserFlag, 108 userString,
103 OthersBrowserFlag, 109 ) in projectBrowser.getProjectBrowserUserStrings().items():
104 ProtocolsBrowserFlag, 110 itm = QListWidgetItem(userString, self.projectBrowserListWidget)
105 ResourcesBrowserFlag, 111 itm.setData(Qt.ItemDataRole.UserRole, browserType)
106 SourcesBrowserFlag, 112 itm.setFlags(itm.flags() | Qt.ItemFlag.ItemIsUserCheckable)
107 TranslationsBrowserFlag, 113 itm.setCheckState(Qt.CheckState.Unchecked)
108 ) 114
109 115 def __storeProjectBrowsersList(self, projectType):
110 flags = 0 116 """
111 if self.sourcesBrowserCheckBox.isChecked(): 117 Private method to store the list of enabled browsers for the selected project
112 flags |= SourcesBrowserFlag
113 if self.formsBrowserCheckBox.isChecked():
114 flags |= FormsBrowserFlag
115 if self.resourcesBrowserCheckBox.isChecked() and projectType not in (
116 "PyQt6",
117 "PyQt6C",
118 ):
119 flags |= ResourcesBrowserFlag
120 if self.translationsBrowserCheckBox.isChecked():
121 flags |= TranslationsBrowserFlag
122 if self.interfacesBrowserCheckBox.isChecked():
123 flags |= InterfacesBrowserFlag
124 if self.othersBrowserCheckBox.isChecked():
125 flags |= OthersBrowserFlag
126 if self.protocolsBrowserCheckBox.isChecked():
127 flags |= ProtocolsBrowserFlag
128
129 self.__projectBrowserFlags[projectType] = flags
130
131 def __setProjectBrowsersCheckBoxes(self, projectType):
132 """
133 Private method to set the checkboxes according to the selected project
134 type. 118 type.
135 119
136 @param projectType type of the selected project (string) 120 @param projectType type of the selected project
137 """ 121 @type str
138 from eric7.Project.ProjectBrowserFlags import ( 122 """
139 FormsBrowserFlag, 123 browsersList = []
140 InterfacesBrowserFlag, 124 for row in range(self.projectBrowserListWidget.count()):
141 OthersBrowserFlag, 125 itm = self.projectBrowserListWidget.item(row)
142 ProtocolsBrowserFlag, 126 if itm.checkState() == Qt.CheckState.Checked:
143 ResourcesBrowserFlag, 127 browsersList.append(itm.data(Qt.ItemDataRole.UserRole))
144 SourcesBrowserFlag, 128 self.__projectBrowsersLists[projectType] = browsersList
145 TranslationsBrowserFlag, 129
146 ) 130 def __setProjectBrowsersList(self, projectType):
147 131 """
148 flags = self.__projectBrowserFlags[projectType] 132 Private method to check the project browser entries according to the selected
149 133 project type.
150 self.sourcesBrowserCheckBox.setChecked(flags & SourcesBrowserFlag) 134
151 self.formsBrowserCheckBox.setChecked(flags & FormsBrowserFlag) 135 @param projectType selected project type
152 self.resourcesBrowserCheckBox.setEnabled( 136 @type str
153 projectType not in ("PyQt6", "PyQt6C", "E7Plugin") 137 """
154 ) 138 browsersList = self.__projectBrowsersLists[projectType]
155 if projectType in ("PyQt6", "PyQt6C", "E7Plugin"): 139 for row in range(self.projectBrowserListWidget.count()):
156 self.resourcesBrowserCheckBox.setChecked(False) 140 itm = self.projectBrowserListWidget.item(row)
157 else: 141 if (
158 self.resourcesBrowserCheckBox.setChecked(flags & ResourcesBrowserFlag) 142 projectType in ("PyQt6", "PyQt6C", "E7Plugin")
159 self.translationsBrowserCheckBox.setChecked(flags & TranslationsBrowserFlag) 143 and itm.data(Qt.ItemDataRole.UserRole) == "resources"
160 self.interfacesBrowserCheckBox.setChecked(flags & InterfacesBrowserFlag) 144 ):
161 self.othersBrowserCheckBox.setChecked(flags & OthersBrowserFlag) 145 itm.setFlags(itm.flags() & ~Qt.ItemFlag.ItemIsEnabled)
162 self.protocolsBrowserCheckBox.setChecked(flags & ProtocolsBrowserFlag) 146 else:
147 itm.setFlags(itm.flags() | Qt.ItemFlag.ItemIsEnabled)
148 itm.setCheckState(
149 Qt.CheckState.Checked
150 if itm.data(Qt.ItemDataRole.UserRole) in browsersList
151 else Qt.CheckState.Unchecked
152 )
163 153
164 @pyqtSlot(int) 154 @pyqtSlot(int)
165 def on_projectTypeCombo_activated(self, index): 155 def on_projectTypeCombo_activated(self, index):
166 """ 156 """
167 Private slot to set the browser checkboxes according to the selected 157 Private slot to set the browser checkboxes according to the selected
170 @param index index of the selected project type (integer) 160 @param index index of the selected project type (integer)
171 """ 161 """
172 if self.__currentProjectTypeIndex == index: 162 if self.__currentProjectTypeIndex == index:
173 return 163 return
174 164
175 self.__storeProjectBrowserFlags( 165 self.__storeProjectBrowsersList(
176 self.projectTypeCombo.itemData(self.__currentProjectTypeIndex) 166 self.projectTypeCombo.itemData(self.__currentProjectTypeIndex)
177 ) 167 )
178 self.__setProjectBrowsersCheckBoxes(self.projectTypeCombo.itemData(index)) 168 self.__setProjectBrowsersList(self.projectTypeCombo.itemData(index))
179 self.__currentProjectTypeIndex = index 169 self.__currentProjectTypeIndex = index
180 170
181 @pyqtSlot(bool) 171 @pyqtSlot(bool)
182 def on_followEditorCheckBox_toggled(self, checked): 172 def on_followEditorCheckBox_toggled(self, checked):
183 """ 173 """

eric ide

mercurial