mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-19 12:47:49 -06:00
WIP: Cleanup ContainerManager
This commit is contained in:
parent
850661fbdc
commit
e5cc7efdf2
1 changed files with 0 additions and 144 deletions
|
@ -48,150 +48,6 @@ class ContainerManager(QObject):
|
||||||
self._material_manager = self._application._material_manager
|
self._material_manager = self._application._material_manager
|
||||||
self._container_name_filters = {}
|
self._container_name_filters = {}
|
||||||
|
|
||||||
## Create a duplicate of the specified container
|
|
||||||
#
|
|
||||||
# This will create and add a duplicate of the container corresponding
|
|
||||||
# to the container ID.
|
|
||||||
#
|
|
||||||
# \param container_id \type{str} The ID of the container to duplicate.
|
|
||||||
#
|
|
||||||
# \return The ID of the new container, or an empty string if duplication failed.
|
|
||||||
@pyqtSlot(str, result = str)
|
|
||||||
def duplicateContainer(self, container_id):
|
|
||||||
#TODO: It should be able to duplicate a container of which only the metadata is known.
|
|
||||||
containers = self._container_registry.findContainers(id = container_id)
|
|
||||||
if not containers:
|
|
||||||
Logger.log("w", "Could duplicate container %s because it was not found.", container_id)
|
|
||||||
return ""
|
|
||||||
|
|
||||||
container = containers[0]
|
|
||||||
new_container = self.duplicateContainerInstance(container)
|
|
||||||
return new_container.getId()
|
|
||||||
|
|
||||||
## Create a duplicate of the given container instance
|
|
||||||
#
|
|
||||||
# This will create and add a duplicate of the container that was passed.
|
|
||||||
#
|
|
||||||
# \param container \type{ContainerInterface} The container to duplicate.
|
|
||||||
#
|
|
||||||
# \return The duplicated container, or None if duplication failed.
|
|
||||||
def duplicateContainerInstance(self, container):
|
|
||||||
new_container = None
|
|
||||||
new_name = self._container_registry.uniqueName(container.getName())
|
|
||||||
# Only InstanceContainer has a duplicate method at the moment.
|
|
||||||
# So fall back to serialize/deserialize when no duplicate method exists.
|
|
||||||
if hasattr(container, "duplicate"):
|
|
||||||
new_container = container.duplicate(new_name)
|
|
||||||
else:
|
|
||||||
new_container = container.__class__(new_name)
|
|
||||||
new_container.deserialize(container.serialize())
|
|
||||||
new_container.setName(new_name)
|
|
||||||
|
|
||||||
# TODO: we probably don't want to add it to the registry here!
|
|
||||||
if new_container:
|
|
||||||
self._container_registry.addContainer(new_container)
|
|
||||||
|
|
||||||
return new_container
|
|
||||||
|
|
||||||
## Change the name of a specified container to a new name.
|
|
||||||
#
|
|
||||||
# \param container_id \type{str} The ID of the container to change the name of.
|
|
||||||
# \param new_id \type{str} The new ID of the container.
|
|
||||||
# \param new_name \type{str} The new name of the specified container.
|
|
||||||
#
|
|
||||||
# \return True if successful, False if not.
|
|
||||||
@pyqtSlot(str, str, str, result = bool)
|
|
||||||
def renameContainer(self, container_id, new_id, new_name):
|
|
||||||
containers = self._container_registry.findContainers(id = container_id)
|
|
||||||
if not containers:
|
|
||||||
Logger.log("w", "Could rename container %s because it was not found.", container_id)
|
|
||||||
return False
|
|
||||||
|
|
||||||
container = containers[0]
|
|
||||||
# First, remove the container from the registry. This will clean up any files related to the container.
|
|
||||||
self._container_registry.removeContainer(container_id)
|
|
||||||
|
|
||||||
# Ensure we have a unique name for the container
|
|
||||||
new_name = self._container_registry.uniqueName(new_name)
|
|
||||||
|
|
||||||
# Then, update the name and ID of the container
|
|
||||||
container.setName(new_name)
|
|
||||||
container._id = new_id # TODO: Find a nicer way to set a new, unique ID
|
|
||||||
|
|
||||||
# Finally, re-add the container so it will be properly serialized again.
|
|
||||||
self._container_registry.addContainer(container)
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
## Remove the specified container.
|
|
||||||
#
|
|
||||||
# \param container_id \type{str} The ID of the container to remove.
|
|
||||||
#
|
|
||||||
# \return True if the container was successfully removed, False if not.
|
|
||||||
@pyqtSlot(str, result = bool)
|
|
||||||
def removeContainer(self, container_id):
|
|
||||||
containers = self._container_registry.findContainers(id = container_id)
|
|
||||||
if not containers:
|
|
||||||
Logger.log("w", "Could not remove container %s because it was not found.", container_id)
|
|
||||||
return False
|
|
||||||
|
|
||||||
self._container_registry.removeContainer(containers[0].getId())
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
## Merge a container with another.
|
|
||||||
#
|
|
||||||
# This will try to merge one container into the other, by going through the container
|
|
||||||
# and setting the right properties on the other container.
|
|
||||||
#
|
|
||||||
# \param merge_into_id \type{str} The ID of the container to merge into.
|
|
||||||
# \param merge_id \type{str} The ID of the container to merge.
|
|
||||||
#
|
|
||||||
# \return True if successfully merged, False if not.
|
|
||||||
@pyqtSlot(str, result = bool)
|
|
||||||
def mergeContainers(self, merge_into_id, merge_id):
|
|
||||||
containers = self._container_registry.findContainers(id = merge_into_id)
|
|
||||||
if not containers:
|
|
||||||
Logger.log("w", "Could merge into container %s because it was not found.", merge_into_id)
|
|
||||||
return False
|
|
||||||
|
|
||||||
merge_into = containers[0]
|
|
||||||
|
|
||||||
containers = self._container_registry.findContainers(id = merge_id)
|
|
||||||
if not containers:
|
|
||||||
Logger.log("w", "Could not merge container %s because it was not found", merge_id)
|
|
||||||
return False
|
|
||||||
|
|
||||||
merge = containers[0]
|
|
||||||
|
|
||||||
if not isinstance(merge, type(merge_into)):
|
|
||||||
Logger.log("w", "Cannot merge two containers of different types")
|
|
||||||
return False
|
|
||||||
|
|
||||||
self._performMerge(merge_into, merge)
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
## Clear the contents of a container.
|
|
||||||
#
|
|
||||||
# \param container_id \type{str} The ID of the container to clear.
|
|
||||||
#
|
|
||||||
# \return True if successful, False if not.
|
|
||||||
@pyqtSlot(str, result = bool)
|
|
||||||
def clearContainer(self, container_id):
|
|
||||||
if self._container_registry.isReadOnly(container_id):
|
|
||||||
Logger.log("w", "Cannot clear read-only container %s", container_id)
|
|
||||||
return False
|
|
||||||
|
|
||||||
containers = self._container_registry.findContainers(id = container_id)
|
|
||||||
if not containers:
|
|
||||||
Logger.log("w", "Could clear container %s because it was not found.", container_id)
|
|
||||||
return False
|
|
||||||
|
|
||||||
containers[0].clear()
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
@pyqtSlot(str, str, result=str)
|
@pyqtSlot(str, str, result=str)
|
||||||
def getContainerMetaDataEntry(self, container_id, entry_name):
|
def getContainerMetaDataEntry(self, container_id, entry_name):
|
||||||
metadatas = self._container_registry.findContainersMetadata(id = container_id)
|
metadatas = self._container_registry.findContainersMetadata(id = container_id)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue