|
@@ -48,150 +48,6 @@ class ContainerManager(QObject):
|
|
|
self._material_manager = self._application._material_manager
|
|
|
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)
|
|
|
def getContainerMetaDataEntry(self, container_id, entry_name):
|
|
|
metadatas = self._container_registry.findContainersMetadata(id = container_id)
|