diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index f31c4fda04..3738825d26 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -397,7 +397,7 @@ class ContainerManager(QObject): @pyqtSlot(str, str, QUrl, result = "QVariantMap") def exportContainer(self, container_id: str, file_type: str, file_url_or_string: Union[QUrl, str]) -> Dict[str, str]: if not container_id or not file_type or not file_url_or_string: - return { "status": "error", "message": "Invalid arguments"} + return {"status": "error", "message": "Invalid arguments"} if isinstance(file_url_or_string, QUrl): file_url = file_url_or_string.toLocalFile() @@ -405,20 +405,20 @@ class ContainerManager(QObject): file_url = file_url_or_string if not file_url: - return { "status": "error", "message": "Invalid path"} + return {"status": "error", "message": "Invalid path"} mime_type = None - if not file_type in self._container_name_filters: + if file_type not in self._container_name_filters: try: mime_type = MimeTypeDatabase.getMimeTypeForFile(file_url) except MimeTypeNotFoundError: - return { "status": "error", "message": "Unknown File Type" } + return {"status": "error", "message": "Unknown File Type"} else: mime_type = self._container_name_filters[file_type]["mime"] containers = self._container_registry.findContainers(id = container_id) if not containers: - return { "status": "error", "message": "Container not found"} + return {"status": "error", "message": "Container not found"} container = containers[0] if Platform.isOSX() and "." in file_url: @@ -435,12 +435,12 @@ class ContainerManager(QObject): result = QMessageBox.question(None, catalog.i18nc("@title:window", "File Already Exists"), catalog.i18nc("@label Don't translate the XML tag !", "The file {0} already exists. Are you sure you want to overwrite it?").format(file_url)) if result == QMessageBox.No: - return { "status": "cancelled", "message": "User cancelled"} + return {"status": "cancelled", "message": "User cancelled"} try: contents = container.serialize() except NotImplementedError: - return { "status": "error", "message": "Unable to serialize container"} + return {"status": "error", "message": "Unable to serialize container"} if contents is None: return {"status": "error", "message": "Serialization returned None. Unable to write to file"} @@ -448,7 +448,7 @@ class ContainerManager(QObject): with SaveFile(file_url, "w") as f: f.write(contents) - return { "status": "success", "message": "Succesfully exported container", "path": file_url} + return {"status": "success", "message": "Successfully exported container", "path": file_url} ## Imports a profile from a file # diff --git a/resources/qml/Preferences/MaterialsPage.qml b/resources/qml/Preferences/MaterialsPage.qml index 4a8bc9e3c9..5592e97150 100644 --- a/resources/qml/Preferences/MaterialsPage.qml +++ b/resources/qml/Preferences/MaterialsPage.qml @@ -119,8 +119,8 @@ Item text: catalog.i18nc("@action:button", "Export") iconName: "document-export" onClicked: { - forceActiveFocus() - // TODO + forceActiveFocus(); + exportMaterialDialog.open(); } enabled: currentItem != null } @@ -144,6 +144,37 @@ Item } } + FileDialog + { + id: exportMaterialDialog + title: catalog.i18nc("@title:window", "Export Material") + selectExisting: false + nameFilters: Cura.ContainerManager.getContainerNameFilters("material") + folder: CuraApplication.getDefaultPath("dialog_material_path") + onAccepted: + { + var result = Cura.ContainerManager.exportContainer(base.currentItem.root_material_id, selectedNameFilter, fileUrl); + + messageDialog.title = catalog.i18nc("@title:window", "Export Material"); + if (result.status == "error") { + messageDialog.icon = StandardIcon.Critical; + messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tags and !", "Failed to export material to %1: %2").arg(fileUrl).arg(result.message); + messageDialog.open(); + } + else if (result.status == "success") { + messageDialog.icon = StandardIcon.Information; + messageDialog.text = catalog.i18nc("@info:status Don't translate the XML tag !", "Successfully exported material to %1").arg(result.path); + messageDialog.open(); + } + CuraApplication.setDefaultPath("dialog_material_path", folder); + } + } + + MessageDialog + { + id: messageDialog + } + Item { id: contentsItem