From 1bb5b8ff3e77b20938d6eae30938b992fe6f638e Mon Sep 17 00:00:00 2001 From: Guillem Date: Tue, 13 Mar 2018 12:31:03 +0100 Subject: [PATCH 1/5] add Copy all values to all extruders context menu option --- cura/Settings/MachineManager.py | 12 ++++++++++++ resources/qml/Settings/SettingView.qml | 9 +++++++++ 2 files changed, 21 insertions(+) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index eb720000bf..557fd97b43 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -550,6 +550,18 @@ class MachineManager(QObject): if extruder_stack != self._active_container_stack and extruder_stack.getProperty(key, "value") != new_value: extruder_stack.userChanges.setProperty(key, "value", new_value) # TODO: nested property access, should be improved + ## Copy the value of all settings of the current extruder to all other extruders as well as the global container. + @pyqtSlot() + def copyAllValuesToExtruders(self): + for key in self._active_container_stack.getAllKeys(): + new_value = self._active_container_stack.getProperty(key, "value") + extruder_stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] + + # check in which stack the value has to be replaced + for extruder_stack in extruder_stacks: + if extruder_stack != self._active_container_stack and extruder_stack.getProperty(key, "value") != new_value: + extruder_stack.userChanges.setProperty(key, "value", new_value) # TODO: nested property access, should be improved + @pyqtProperty(str, notify = activeVariantChanged) def activeVariantName(self) -> str: if self._active_container_stack: diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 615e66277b..5865ed5182 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -485,6 +485,15 @@ Item onTriggered: Cura.MachineManager.copyValueToExtruders(contextMenu.key) } + MenuItem + { + //: Settings context menu action + text: catalog.i18nc("@action:menu", "Copy all values to all extruders") + visible: machineExtruderCount.properties.value > 1 + enabled: contextMenu.provider != undefined + onTriggered: Cura.MachineManager.copyAllValuesToExtruders() + } + MenuSeparator { visible: machineExtruderCount.properties.value > 1 From 18fba5b52938809632c71a610d97e8d85260f556 Mon Sep 17 00:00:00 2001 From: Guillem Date: Mon, 19 Mar 2018 14:21:45 +0100 Subject: [PATCH 2/5] Avoid replacing machine_settings and not settable_per_extruder settings --- cura/Settings/MachineManager.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 557fd97b43..2550d1da40 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -553,14 +553,15 @@ class MachineManager(QObject): ## Copy the value of all settings of the current extruder to all other extruders as well as the global container. @pyqtSlot() def copyAllValuesToExtruders(self): - for key in self._active_container_stack.getAllKeys(): - new_value = self._active_container_stack.getProperty(key, "value") - extruder_stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] + for key in self._active_container_stack.getAllKeys() - set([machine_setting.key for machine_setting in self._active_container_stack.getProperty("machine_settings", "children")]): + if self._active_container_stack.getProperty(key, "settable_per_extruder"): + new_value = self._active_container_stack.getProperty(key, "value") + extruder_stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] - # check in which stack the value has to be replaced - for extruder_stack in extruder_stacks: - if extruder_stack != self._active_container_stack and extruder_stack.getProperty(key, "value") != new_value: - extruder_stack.userChanges.setProperty(key, "value", new_value) # TODO: nested property access, should be improved + # check in which stack the value has to be replaced + for extruder_stack in extruder_stacks: + if extruder_stack != self._active_container_stack and extruder_stack.getProperty(key, "value") != new_value: + extruder_stack.userChanges.setProperty(key, "value", new_value) # TODO: nested property access, should be improved @pyqtProperty(str, notify = activeVariantChanged) def activeVariantName(self) -> str: From faf8ed3ba654fb72a8ec614d29228890d02fa3d1 Mon Sep 17 00:00:00 2001 From: Guillem Date: Mon, 19 Mar 2018 14:57:31 +0100 Subject: [PATCH 3/5] Replace only user changed values removed machine_settings and settable_per_extruder_check. Not needed. --- cura/Settings/MachineManager.py | 15 +++++++-------- resources/qml/Settings/SettingView.qml | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 2550d1da40..549eeadeb4 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -553,15 +553,14 @@ class MachineManager(QObject): ## Copy the value of all settings of the current extruder to all other extruders as well as the global container. @pyqtSlot() def copyAllValuesToExtruders(self): - for key in self._active_container_stack.getAllKeys() - set([machine_setting.key for machine_setting in self._active_container_stack.getProperty("machine_settings", "children")]): - if self._active_container_stack.getProperty(key, "settable_per_extruder"): - new_value = self._active_container_stack.getProperty(key, "value") - extruder_stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] + for key in self._active_container_stack.userChanges.getAllKeys(): + new_value = self._active_container_stack.getProperty(key, "value") + extruder_stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] - # check in which stack the value has to be replaced - for extruder_stack in extruder_stacks: - if extruder_stack != self._active_container_stack and extruder_stack.getProperty(key, "value") != new_value: - extruder_stack.userChanges.setProperty(key, "value", new_value) # TODO: nested property access, should be improved + # check in which stack the value has to be replaced + for extruder_stack in extruder_stacks: + if extruder_stack != self._active_container_stack and extruder_stack.getProperty(key, "value") != new_value: + extruder_stack.userChanges.setProperty(key, "value", new_value) # TODO: nested property access, should be improved @pyqtProperty(str, notify = activeVariantChanged) def activeVariantName(self) -> str: diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 5865ed5182..67dd7622a3 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -488,7 +488,7 @@ Item MenuItem { //: Settings context menu action - text: catalog.i18nc("@action:menu", "Copy all values to all extruders") + text: catalog.i18nc("@action:menu", "Copy all changed values to all extruders") visible: machineExtruderCount.properties.value > 1 enabled: contextMenu.provider != undefined onTriggered: Cura.MachineManager.copyAllValuesToExtruders() From 01ec20f5ced559283db2637d69a40adceca18ef8 Mon Sep 17 00:00:00 2001 From: Guillem Date: Thu, 22 Mar 2018 11:39:42 +0100 Subject: [PATCH 4/5] Fixed docs, removed todo, changed way to get extruder stacks, slightly faster --- cura/Settings/MachineManager.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 549eeadeb4..ef3a7189a5 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -550,17 +550,18 @@ class MachineManager(QObject): if extruder_stack != self._active_container_stack and extruder_stack.getProperty(key, "value") != new_value: extruder_stack.userChanges.setProperty(key, "value", new_value) # TODO: nested property access, should be improved - ## Copy the value of all settings of the current extruder to all other extruders as well as the global container. + ## Copy the value of all manually changed settings of the current extruder to all other extruders. @pyqtSlot() def copyAllValuesToExtruders(self): - for key in self._active_container_stack.userChanges.getAllKeys(): - new_value = self._active_container_stack.getProperty(key, "value") - extruder_stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] + extruder_stacks = list(self._global_container_stack.extruders.values()) + for extruder_stack in extruder_stacks: + if extruder_stack != self._active_container_stack: + for key in self._active_container_stack.userChanges.getAllKeys(): + new_value = self._active_container_stack.getProperty(key, "value") - # check in which stack the value has to be replaced - for extruder_stack in extruder_stacks: - if extruder_stack != self._active_container_stack and extruder_stack.getProperty(key, "value") != new_value: - extruder_stack.userChanges.setProperty(key, "value", new_value) # TODO: nested property access, should be improved + # check if the value has to be replaced + if extruder_stack.getProperty(key, "value") != new_value: + extruder_stack.userChanges.setProperty(key, "value", new_value) @pyqtProperty(str, notify = activeVariantChanged) def activeVariantName(self) -> str: From fecbf82551fc512838110ed8e8a1bc118275af09 Mon Sep 17 00:00:00 2001 From: Guillem Date: Thu, 22 Mar 2018 15:49:30 +0100 Subject: [PATCH 5/5] Replace all user changed values Removed check to change the values only if they were different --- cura/Settings/MachineManager.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index ef3a7189a5..12e70841f7 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -560,8 +560,7 @@ class MachineManager(QObject): new_value = self._active_container_stack.getProperty(key, "value") # check if the value has to be replaced - if extruder_stack.getProperty(key, "value") != new_value: - extruder_stack.userChanges.setProperty(key, "value", new_value) + extruder_stack.userChanges.setProperty(key, "value", new_value) @pyqtProperty(str, notify = activeVariantChanged) def activeVariantName(self) -> str: