diff -r 0f023e61a9b5 -r d73c3a1e432b src/eric7/UI/FindFileWidget.py --- a/src/eric7/UI/FindFileWidget.py Wed Nov 16 18:11:52 2022 +0100 +++ b/src/eric7/UI/FindFileWidget.py Thu Nov 17 18:11:42 2022 +0100 @@ -18,6 +18,7 @@ QComboBox, QDialog, QDialogButtonBox, + QListWidgetItem, QMenu, QTreeWidgetItem, QVBoxLayout, @@ -145,12 +146,30 @@ ) ) + self.__project = project + + # populate the file type list + for fileCategory in [ + c + for c in self.__project.getFileCategories() + if c not in ("TRANSLATIONS", "OTHERS") + ]: + itm = QListWidgetItem( + self.__project.getFileCategoryType(fileCategory), self.fileTypeList + ) + itm.setData(Qt.ItemDataRole.UserRole, fileCategory) + itm.setFlags(itm.flags() | Qt.ItemFlag.ItemIsUserCheckable) + itm.setCheckState( + Qt.CheckState.Checked + if fileCategory == "SOURCES" + else Qt.CheckState.Unchecked + ) + # ensure the file type tab is the current one self.fileOptionsWidget.setCurrentWidget(self.fileTypeTab) - self.project = project - self.project.projectOpened.connect(self.__projectOpened) - self.project.projectClosed.connect(self.__projectClosed) + self.__project.projectOpened.connect(self.__projectOpened) + self.__project.projectClosed.connect(self.__projectClosed) self.__standardListFont = self.findList.font() self.findList.headerItem().setText(self.findList.columnCount(), "") @@ -158,23 +177,6 @@ self.__section0Size = self.findList.header().sectionSize(0) self.findList.setExpandsOnDoubleClick(False) - # TODO: move these to a project browser file category repository - # Qt Designer form files - self.filterForms = r".*\.ui$" - self.formsExt = ["*.ui"] - - # Corba interface files - self.filterInterfaces = r".*\.idl$" - self.interfacesExt = ["*.idl"] - - # Protobuf protocol files - self.filterProtocols = r".*\.proto$" - self.protocolsExt = ["*.proto"] - - # Qt resources files - self.filterResources = r".*\.qrc$" - self.resourcesExt = ["*.qrc"] - self.__cancelSearch = False self.__lastFileItem = None self.__populating = False @@ -245,7 +247,7 @@ (defaults to False) @type bool (optional) """ - if self.project.isOpen(): + if self.__project.isOpen(): self.projectButton.setEnabled(True) self.projectButton.setChecked(True) else: @@ -442,113 +444,72 @@ if self.projectButton.isChecked(): if self.filterCheckBox.isChecked(): files = [ - self.project.getRelativePath(file) + self.__project.getRelativePath(file) for file in self.__getFileList( - self.project.getProjectPath(), + self.__project.getProjectPath(), filterRe, excludeHiddenDirs=self.excludeHiddenCheckBox.isChecked(), ) ] else: files = [] - # TODO: make this more generic (using fileCategory) - if self.sourcesCheckBox.isChecked(): - files += self.project.getProjectData(dataKey="SOURCES") - if self.formsCheckBox.isChecked(): - files += self.project.getProjectData("FORMS") - if self.interfacesCheckBox.isChecked(): - files += self.project.getProjectData("INTERFACES") - if self.protocolsCheckBox.isChecked(): - files += self.project.getProjectData("PROTOCOLS") - if self.resourcesCheckBox.isChecked(): - files += self.project.getProjectData("RESOURCES") + for row in range(self.fileTypeList.count()): + itm = self.fileTypeList.item(row) + if itm.checkState() == Qt.CheckState.Checked: + files += self.__project.getProjectData( + dataKey=itm.data(Qt.ItemDataRole.UserRole) + ) elif self.dirButton.isChecked(): if not self.filterCheckBox.isChecked(): filters = [] - if self.project.isOpen() and os.path.abspath( + if self.__project.isOpen() and os.path.abspath( self.dirPicker.currentText() - ).startswith(self.project.getProjectPath()): - if self.sourcesCheckBox.isChecked(): - filters.extend( - [ - "^{0}$".format( - assoc.replace(".", r"\.").replace("*", ".*") - ) - for assoc in self.project.getFiletypeAssociations( - "SOURCES" - ) - ] - ) - if self.formsCheckBox.isChecked(): - filters.extend( - [ - "^{0}$".format( - assoc.replace(".", r"\.").replace("*", ".*") - ) - for assoc in self.project.getFiletypeAssociations( - "FORMS" - ) - ] - ) - if self.interfacesCheckBox.isChecked(): - filters.extend( - [ - "^{0}$".format( - assoc.replace(".", r"\.").replace("*", ".*") - ) - for assoc in self.project.getFiletypeAssociations( - "INTERFACES" - ) - ] - ) - if self.protocolsCheckBox.isChecked(): - filters.extend( - [ - "^{0}$".format( - assoc.replace(".", r"\.").replace("*", ".*") + ).startswith(self.__project.getProjectPath()): + for row in range(self.fileTypeList.count()): + itm = self.fileTypeList.item(row) + if itm.checkState() == Qt.CheckState.Checked: + filters.extend( + [ + "^{0}$".format( + assoc.replace(".", r"\.").replace("*", ".*") + ) + for assoc in self.__project.getFiletypeAssociations( + itm.data(Qt.ItemDataRole.UserRole) + ) + ] + ) + else: + for row in range(self.fileTypeList.count()): + itm = self.fileTypeList.item(row) + if itm.checkState() == Qt.CheckState.Checked: + fileType = itm.data(Qt.ItemDataRole.UserRole) + if fileType == "SOURCES": + filters.extend( + [ + "^{0}$".format( + assoc.replace(".", r"\.").replace("*", ".*") + ) + for assoc in list( + Preferences.getEditorLexerAssocs().keys() + ) + if assoc + not in self.__project.getFileCategoryExtension( + fileType, reverse=True + ) + ] ) - for assoc in self.project.getFiletypeAssociations( - "PROTOCOLS" - ) - ] - ) - if self.resourcesCheckBox.isChecked(): - filters.extend( - [ - "^{0}$".format( - assoc.replace(".", r"\.").replace("*", ".*") - ) - for assoc in self.project.getFiletypeAssociations( - "RESOURCES" + else: + filters.extend( + [ + "^{0}$".format( + ext.replace(".", r"\.").replace("*", ".*") + ) + for ext in self.__project.getFileCategoryExtension( + # __IGNORE_WARNING__ + fileType + ) + ] ) - ] - ) - else: - # TODO: make this more generic (use project browser type repository - if self.sourcesCheckBox.isChecked(): - filters.extend( - [ - "^{0}$".format( - assoc.replace(".", r"\.").replace("*", ".*") - ) - for assoc in list( - Preferences.getEditorLexerAssocs().keys() - ) - if assoc - not in self.formsExt - + self.interfacesExt - + self.protocolsExt - + self.resourcesExt - ] - ) - if self.formsCheckBox.isChecked(): - filters.append(self.filterForms) - if self.interfacesCheckBox.isChecked(): - filters.append(self.filterInterfaces) - if self.protocolsCheckBox.isChecked(): - filters.append(self.filterProtocols) - if self.resourcesCheckBox.isChecked(): - filters.append(self.filterResources) filterString = "|".join(filters) filterRe = re.compile(filterString) files = self.__getFileList( @@ -644,7 +605,7 @@ break fn = ( - os.path.join(self.project.getProjectPath(), file) + os.path.join(self.__project.getProjectPath(), file) if self.projectButton.isChecked() else file ) @@ -750,8 +711,8 @@ end = 0 fileName = ( - os.path.join(self.project.getProjectPath(), file) - if self.project.isOpen() + os.path.join(self.__project.getProjectPath(), file) + if self.__project.isOpen() else file ) fileExt = os.path.splitext(fileName)[1] @@ -846,7 +807,7 @@ origHash = itm.data(0, self.md5Role) if self.projectButton.isChecked(): - fn = os.path.join(self.project.getProjectPath(), file) + fn = os.path.join(self.__project.getProjectPath(), file) else: fn = file