src/eric7/UI/FindFileWidget.py

branch
eric7
changeset 9517
d73c3a1e432b
parent 9516
0f023e61a9b5
child 9559
34fc53e6159d
--- 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
 

eric ide

mercurial