Browse Source

WIP: Make material export work

Lipu Fei 7 years ago
parent
commit
0b859bb308
2 changed files with 41 additions and 10 deletions
  1. 8 8
      cura/Settings/ContainerManager.py
  2. 33 2
      resources/qml/Preferences/MaterialsPage.qml

+ 8 - 8
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 <filename>!", "The file <filename>{0}</filename> 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
     #

+ 33 - 2
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 <filename> and <message>!", "Failed to export material to <filename>%1</filename>: <message>%2</message>").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 <filename>!", "Successfully exported material to <filename>%1</filename>").arg(result.path);
+                messageDialog.open();
+            }
+            CuraApplication.setDefaultPath("dialog_material_path", folder);
+        }
+    }
+
+    MessageDialog
+    {
+        id: messageDialog
+    }
+
 
     Item {
         id: contentsItem