--- 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")