src/eric7/Project/PropertiesDialog.py

branch
eric7
changeset 9610
b45bccbdf331
parent 9514
2b104ad132a4
child 9624
b47dfa7a137d
diff -r c2f9c10c47cc -r b45bccbdf331 src/eric7/Project/PropertiesDialog.py
--- a/src/eric7/Project/PropertiesDialog.py	Sun Dec 11 15:49:39 2022 +0100
+++ b/src/eric7/Project/PropertiesDialog.py	Sun Dec 11 17:33:46 2022 +0100
@@ -35,9 +35,14 @@
         Constructor
 
         @param project reference to the project object
+        @type Project
         @param new flag indicating the generation of a new project
-        @param parent parent widget of this dialog (QWidget)
-        @param name name of this dialog (string)
+            (defaults to True)
+        @type bool (optional)
+        @param parent parent widget of this dialog (defaults to None)
+        @type QWidget (optional)
+        @param name name of this dialog (defaults to None)
+        @type str (optional)
         """
         super().__init__(parent)
         if name:
@@ -58,6 +63,7 @@
         self.transPropertiesDlg = None
         self.spellPropertiesDlg = None
         self.makePropertiesDlg = None
+        self.__fileTypesDict = {}
 
         patterns = []
         for pattern, filetype in self.project.getProjectData(
@@ -170,6 +176,14 @@
             if not self.project.vcsSoftwareAvailable():
                 self.vcsCheckBox.hide()
 
+        self.__origProgrammingLanguage = self.languageComboBox.currentText()
+        self.__origMixedFlag = self.mixedLanguageCheckBox.isChecked()
+        self.__origProjectType = self.getProjectType()
+
+        self.languageComboBox.currentTextChanged.connect(self.__initFileTypesDict)
+        self.mixedLanguageCheckBox.stateChanged.connect(self.__initFileTypesDict)
+        self.projectTypeComboBox.currentIndexChanged.connect(self.__initFileTypesDict)
+
         self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
             bool(self.dirPicker.text())
             and self.dirPicker.text() not in self.__initPaths
@@ -334,6 +348,53 @@
         """
         return os.path.abspath(self.dirPicker.text())
 
+    @pyqtSlot()
+    def __initFileTypesDict(self):
+        """
+        Private slot to (re-)initialize the filetype dictionary.
+        """
+        if (
+            self.__origProgrammingLanguage != self.languageComboBox.currentText()
+            or self.__origMixedFlag != self.mixedLanguageCheckBox.isChecked()
+            or self.__origProjectType != self.getProjectType()
+        ):
+            # any of the defining data got changed
+            self.__fileTypesDict = self.project.defaultFileTypes(
+                self.languageComboBox.currentText(),
+                self.mixedLanguageCheckBox.isChecked(),
+                self.getProjectType(),
+            )
+        else:
+            # all of the defining data was changed back to original
+            self.__fileTypesDict = self.project.getProjectData(dataKey="FILETYPES")
+
+    @pyqtSlot()
+    def on_filetypesButton_clicked(self):
+        """
+        Private slot to open a dialog to edit the filetype associations.
+        """
+        from .FiletypeAssociationDialog import FiletypeAssociationDialog
+
+        if not self.__fileTypesDict:
+            self.__fileTypesDict = self.project.getProjectData(dataKey="FILETYPES")
+            if (
+                not self.__fileTypesDict
+                or self.__origProgrammingLanguage != self.languageComboBox.currentText()
+                or self.__origMixedFlag != self.mixedLanguageCheckBox.isChecked()
+                or self.__origProjectType != self.getProjectType()
+            ):
+                # the associations were not defined yet or any of the defining data got
+                # changed
+                self.__fileTypesDict = self.project.defaultFileTypes(
+                    self.languageComboBox.currentText(),
+                    self.mixedLanguageCheckBox.isChecked(),
+                    self.getProjectType(),
+                )
+
+        dlg = FiletypeAssociationDialog(self.project, self.__fileTypesDict)
+        if dlg.exec() == QDialog.DialogCode.Accepted:
+            self.__fileTypesDict = dlg.getData()
+
     def storeData(self):
         """
         Public method to store the entered/modified data.
@@ -400,3 +461,6 @@
         self.project.setProjectData(
             self.embeddedVenvCheckBox.isChecked(), dataKey="EMBEDDED_VENV"
         )
+
+        if self.__fileTypesDict:
+            self.project.setProjectData(self.__fileTypesDict, dataKey="FILETYPES")

eric ide

mercurial