mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-12 09:17:50 -06:00
Revert CURA-8055 in the 4.10 branch. This should not have been merged in there.
Revert "Change file extension to .umm" This reverts commit56db7f7144
. Revert "Re-enable compression" This reverts commit62bc9be22b
. Revert "Add documentation" This reverts commite9031f1aff
. Revert "Fix writing bytes to string-stream" This reverts commit66b2825a66
. Revert "Hide button entirely if no export is available" This reverts commitec727e1068
. Revert "Basic implementation of exporting all materials in a .zip archive" This reverts commitbdcaef134f
. Revert "Implement default path for exporting all materials" This reverts commite66783664b
. Revert "Implement a sync button and file dialogue to export all materials" This reverts commitabba3bdd10
. Revert "Add notion of whether printers support the material export archive" This reverts commitf436cb8e7b
.
This commit is contained in:
parent
aabbdd2040
commit
4d29de4579
6 changed files with 4 additions and 98 deletions
|
@ -2,10 +2,9 @@
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
import copy # To duplicate materials.
|
import copy # To duplicate materials.
|
||||||
from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl
|
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot # To allow the preference page proxy to be used from the actual preferences page.
|
||||||
from typing import Any, Dict, Optional, TYPE_CHECKING
|
from typing import Any, Dict, Optional, TYPE_CHECKING
|
||||||
import uuid # To generate new GUIDs for new materials.
|
import uuid # To generate new GUIDs for new materials.
|
||||||
import zipfile # To export all materials in a .zip archive.
|
|
||||||
|
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
|
@ -25,11 +24,6 @@ class MaterialManagementModel(QObject):
|
||||||
|
|
||||||
This class handles the actions in that page, such as creating new materials, renaming them, etc.
|
This class handles the actions in that page, such as creating new materials, renaming them, etc.
|
||||||
"""
|
"""
|
||||||
def __init__(self, parent: QObject) -> None:
|
|
||||||
super().__init__(parent)
|
|
||||||
cura_application = cura.CuraApplication.CuraApplication.getInstance()
|
|
||||||
self._preferred_export_all_path = None # type: Optional[QUrl] # Path to export all materials to. None if not yet initialised.
|
|
||||||
cura_application.getOutputDeviceManager().outputDevicesChanged.connect(self._onOutputDevicesChanged)
|
|
||||||
|
|
||||||
favoritesChanged = pyqtSignal(str)
|
favoritesChanged = pyqtSignal(str)
|
||||||
"""Triggered when a favorite is added or removed.
|
"""Triggered when a favorite is added or removed.
|
||||||
|
@ -270,52 +264,3 @@ class MaterialManagementModel(QObject):
|
||||||
self.favoritesChanged.emit(material_base_file)
|
self.favoritesChanged.emit(material_base_file)
|
||||||
except ValueError: # Material was not in the favorites list.
|
except ValueError: # Material was not in the favorites list.
|
||||||
Logger.log("w", "Material {material_base_file} was already not a favorite material.".format(material_base_file = material_base_file))
|
Logger.log("w", "Material {material_base_file} was already not a favorite material.".format(material_base_file = material_base_file))
|
||||||
|
|
||||||
def _onOutputDevicesChanged(self) -> None:
|
|
||||||
"""
|
|
||||||
When the list of output devices changes, we may want to update the
|
|
||||||
preferred export path.
|
|
||||||
"""
|
|
||||||
cura_application = cura.CuraApplication.CuraApplication.getInstance()
|
|
||||||
device_manager = cura_application.getOutputDeviceManager()
|
|
||||||
devices = device_manager.getOutputDevices()
|
|
||||||
for device in devices:
|
|
||||||
if device.__class__.__name__ == "RemovableDriveOutputDevice":
|
|
||||||
self._preferred_export_all_path = QUrl.fromLocalFile(device.getId())
|
|
||||||
break
|
|
||||||
else: # No removable drives? Use local path.
|
|
||||||
self._preferred_export_all_path = cura_application.getDefaultPath("dialog_material_path")
|
|
||||||
self.outputDevicesChanged.emit()
|
|
||||||
|
|
||||||
outputDevicesChanged = pyqtSignal() # Triggered when adding or removing removable drives.
|
|
||||||
@pyqtProperty(QUrl, notify = outputDevicesChanged)
|
|
||||||
def preferredExportAllPath(self) -> QUrl:
|
|
||||||
"""
|
|
||||||
Get the preferred path to export materials to.
|
|
||||||
|
|
||||||
If there is a removable drive, that should be the preferred path. Otherwise it should be the most recent local
|
|
||||||
file path.
|
|
||||||
:return: The preferred path to export all materials to.
|
|
||||||
"""
|
|
||||||
if self._preferred_export_all_path is None: # Not initialised yet. Can happen when output devices changed before class got created.
|
|
||||||
self._onOutputDevicesChanged()
|
|
||||||
return self._preferred_export_all_path
|
|
||||||
|
|
||||||
@pyqtSlot(QUrl)
|
|
||||||
def exportAll(self, file_path: QUrl) -> None:
|
|
||||||
"""
|
|
||||||
Export all materials to a certain file path.
|
|
||||||
:param file_path: The path to export the materials to.
|
|
||||||
"""
|
|
||||||
registry = CuraContainerRegistry.getInstance()
|
|
||||||
|
|
||||||
archive = zipfile.ZipFile(file_path.toLocalFile(), "w", compression = zipfile.ZIP_DEFLATED)
|
|
||||||
for metadata in registry.findInstanceContainersMetadata(type = "material"):
|
|
||||||
if metadata["base_file"] != metadata["id"]: # Only process base files.
|
|
||||||
continue
|
|
||||||
if metadata["id"] == "empty_material": # Don't export the empty material.
|
|
||||||
continue
|
|
||||||
material = registry.findContainers(id = metadata["id"])[0]
|
|
||||||
suffix = registry.getMimeTypeForContainer(type(material)).preferredSuffix
|
|
||||||
filename = metadata["id"] + "." + suffix
|
|
||||||
archive.writestr(filename, material.serialize())
|
|
||||||
|
|
|
@ -86,14 +86,6 @@ class GlobalStack(CuraContainerStack):
|
||||||
def supportsNetworkConnection(self):
|
def supportsNetworkConnection(self):
|
||||||
return self.getMetaDataEntry("supports_network_connection", False)
|
return self.getMetaDataEntry("supports_network_connection", False)
|
||||||
|
|
||||||
@pyqtProperty(bool, constant = True)
|
|
||||||
def supportsMaterialExport(self):
|
|
||||||
"""
|
|
||||||
Whether the printer supports Cura's export format of material profiles.
|
|
||||||
:return: ``True`` if it supports it, or ``False`` if not.
|
|
||||||
"""
|
|
||||||
return self.getMetaDataEntry("supports_material_export", False)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def getLoadingPriority(cls) -> int:
|
def getLoadingPriority(cls) -> int:
|
||||||
return 2
|
return 2
|
||||||
|
|
|
@ -22,8 +22,7 @@
|
||||||
"0": "ultimaker2_plus_connect_extruder_0"
|
"0": "ultimaker2_plus_connect_extruder_0"
|
||||||
},
|
},
|
||||||
"supports_usb_connection": false,
|
"supports_usb_connection": false,
|
||||||
"supports_network_connection": true,
|
"supports_network_connection": true
|
||||||
"supports_material_export": true
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"overrides": {
|
"overrides": {
|
||||||
|
|
|
@ -27,7 +27,6 @@
|
||||||
"first_start_actions": [ "DiscoverUM3Action" ],
|
"first_start_actions": [ "DiscoverUM3Action" ],
|
||||||
"supported_actions": [ "DiscoverUM3Action" ],
|
"supported_actions": [ "DiscoverUM3Action" ],
|
||||||
"supports_usb_connection": false,
|
"supports_usb_connection": false,
|
||||||
"supports_material_export": true,
|
|
||||||
"weight": -1,
|
"weight": -1,
|
||||||
"firmware_update_info": {
|
"firmware_update_info": {
|
||||||
"id": 213482,
|
"id": 213482,
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
"supported_actions": [ "DiscoverUM3Action" ],
|
"supported_actions": [ "DiscoverUM3Action" ],
|
||||||
"supports_usb_connection": false,
|
"supports_usb_connection": false,
|
||||||
"supports_network_connection": true,
|
"supports_network_connection": true,
|
||||||
"supports_material_export": true,
|
|
||||||
"weight": -2,
|
"weight": -2,
|
||||||
"firmware_update_info": {
|
"firmware_update_info": {
|
||||||
"id": 9051,
|
"id": 9051,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// Copyright (c) 2021 Ultimaker B.V.
|
// Copyright (c) 2018 Ultimaker B.V.
|
||||||
// Cura is released under the terms of the LGPLv3 or higher.
|
// Uranium is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
import QtQuick 2.7
|
import QtQuick 2.7
|
||||||
import QtQuick.Controls 1.4
|
import QtQuick.Controls 1.4
|
||||||
|
@ -191,20 +191,6 @@ Item
|
||||||
}
|
}
|
||||||
enabled: base.hasCurrentItem
|
enabled: base.hasCurrentItem
|
||||||
}
|
}
|
||||||
|
|
||||||
//Sync button.
|
|
||||||
Button
|
|
||||||
{
|
|
||||||
id: syncMaterialsButton
|
|
||||||
text: catalog.i18nc("@action:button Sending materials to printers", "Sync with Printers")
|
|
||||||
iconName: "sync-synchronizing"
|
|
||||||
onClicked:
|
|
||||||
{
|
|
||||||
forceActiveFocus();
|
|
||||||
exportAllMaterialsDialog.open();
|
|
||||||
}
|
|
||||||
visible: Cura.MachineManager.activeMachine.supportsMaterialExport
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
@ -382,20 +368,6 @@ Item
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FileDialog
|
|
||||||
{
|
|
||||||
id: exportAllMaterialsDialog
|
|
||||||
title: catalog.i18nc("@title:window", "Export All Materials")
|
|
||||||
selectExisting: false
|
|
||||||
nameFilters: ["Material archives (*.umm)", "All files (*)"]
|
|
||||||
folder: base.materialManagementModel.preferredExportAllPath
|
|
||||||
onAccepted:
|
|
||||||
{
|
|
||||||
base.materialManagementModel.exportAll(fileUrl);
|
|
||||||
CuraApplication.setDefaultPath("dialog_material_path", folder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MessageDialog
|
MessageDialog
|
||||||
{
|
{
|
||||||
id: messageDialog
|
id: messageDialog
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue