From 92d3bea2290a6b76c33195c0c5a39186621812c4 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 30 Jun 2016 17:31:19 +0200 Subject: [PATCH] Add a setContainerMetaDataEntry to ContainerManager So that we can set metadata from QML Contributes to CURA-342 --- cura/ContainerManager.py | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/cura/ContainerManager.py b/cura/ContainerManager.py index 9639dd1064..b2b8e36770 100644 --- a/cura/ContainerManager.py +++ b/cura/ContainerManager.py @@ -12,15 +12,17 @@ class ContainerManager(QObject): def __init__(self, parent = None): super().__init__(parent) + self._registry = UM.Settings.ContainerRegistry.getInstance() + @pyqtSlot(str) def duplicateContainer(self, container_id): - containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = container_id) + containers = self._registry.findInstanceContainers(id = container_id) if not containers: return - new_name = UM.Settings.ContainerRegistry.getInstance().uniqueName(containers[0].getName()) + new_name = self_registry.uniqueName(containers[0].getName()) new_material = containers[0].duplicate(new_name) - UM.Settings.ContainerRegistry.getInstance().addContainer(new_material) + self._registry.addContainer(new_material) @pyqtSlot(str, str) def renameContainer(self, container_id, new_name): @@ -30,5 +32,31 @@ class ContainerManager(QObject): def removeContainer(self, container_id): pass + @pyqtSlot(str, str, str) + def setContainerMetaDataEntry(self, container_id, entry_name, entry_value): + containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = container_id) + if not containers: + return + + container = containers[0] + + entries = entry_name.split("/") + entry_name = entries.pop() + + if entries: + root_name = entries.pop(0) + root = container.getMetaDataEntry(root_name) + + item = root + for entry in entries: + item = item.get(entries.pop(0), { }) + + item[entry_name] = entry_value + + entry_name = root_name + entry_value = root + + containers[0].setMetaDataEntry(entry_name, entry_value) + def createContainerManager(engine, js_engine): return ContainerManager()