--- a/src/eric7/MultiProject/AddProjectDialog.py Fri Dec 15 14:07:43 2023 +0100 +++ b/src/eric7/MultiProject/AddProjectDialog.py Fri Dec 15 15:28:54 2023 +0100 @@ -16,6 +16,7 @@ from eric7.EricWidgets.EricPathPicker import EricPathPickerModes from eric7.SystemUtilities import FileSystemUtilities +from .MultiProjectProjectMeta import MultiProjectProjectMeta from .Ui_AddProjectDialog import Ui_AddProjectDialog @@ -34,8 +35,8 @@ @type QWidget @param startdir start directory for the selection dialog @type str - @param project dictionary containing project data - @type dict + @param project dictionary containing project metadata + @type MultiProjectProjectMeta @param categories list of already used categories @type list of str @param category category to be preset @@ -66,42 +67,49 @@ if project is not None: self.setWindowTitle(self.tr("Project Properties")) - self.nameEdit.setText(project["name"]) - self.filenamePicker.setText(project["file"]) - self.descriptionEdit.setPlainText(project["description"]) - self.mainCheckBox.setChecked(project["master"]) - index = self.categoryComboBox.findText(project["category"]) + self.nameEdit.setText(project.name) + self.filenamePicker.setText(project.file) + self.descriptionEdit.setPlainText(project.description) + self.mainCheckBox.setChecked(project.master) + index = self.categoryComboBox.findText(project.category) if index == -1: index = 0 self.categoryComboBox.setCurrentIndex(index) - self.uid = project["uid"] + self.uid = project.uid - def getData(self): + def getProjectMetadata(self): """ - Public slot to retrieve the dialogs data. + Public method to get the entered project metadata. - @return tuple of five values giving the project name, the name of the project - file, a flag telling whether the project shall be the main project, a short - description for the project and the project category - @rtype tuple of (str, str, bool, str, str) + @return project metadata iaw. the entered values + @rtype MultiProjectProjectMeta """ if not self.uid: # new project entry self.uid = QUuid.createUuid().toString() + return MultiProjectProjectMeta( + name=self.nameEdit.text(), + file=self.__getFileName(), + uid=self.uid, + master=self.mainCheckBox.isChecked(), + description=self.descriptionEdit.toPlainText(), + category=self.categoryComboBox.currentText(), + ) + + def __getFileName(self): + """ + Private method to get the file name of the project file. + + @return project file name + @rtype str + """ filename = self.filenamePicker.text() if not os.path.isabs(filename): filename = FileSystemUtilities.toNativeSeparators( os.path.join(self.startdir, filename) ) - return ( - self.nameEdit.text(), - filename, - self.mainCheckBox.isChecked(), - self.descriptionEdit.toPlainText(), - self.categoryComboBox.currentText(), - self.uid, - ) + return filename @pyqtSlot(str) def on_nameEdit_textChanged(self, txt): @@ -128,5 +136,7 @@ Private method to update the dialog. """ self.__okButton.setEnabled( - self.nameEdit.text() != "" and self.filenamePicker.text() != "" + self.nameEdit.text() != "" + and self.filenamePicker.text() != "" + and os.path.exists(self.__getFileName()) )