From 2b6b7a1f815212b1bf022a1cbbf5f1401704799c Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Fri, 13 Dec 2019 11:30:34 +0100 Subject: [PATCH] Fix lost settings on sync to diff printer type When syncing to a different printer type only the global user changes where kept, while the per-extruder user changes were not copied at all, since the extruder list is empty before the new machine becomes active. This commit fixes this problem by keeping a copy of the per-extruder user changes before the new machine (of different type) is activated. The copied user changes are then transfered to the new global stack after the new machine is set as active. CURA-6127 --- cura/Settings/MachineManager.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index f8e609af77..ece3e1ce92 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1257,8 +1257,19 @@ class MachineManager(QObject): new_machine.setMetaDataEntry("hidden", False) self._global_container_stack.setMetaDataEntry("hidden", True) + # The new_machine only has the global user changes and not the per-extruder user changes (since it has an empty + # extruderList before it becomes active). Keep a temporary copy of the per-extruder user changes and transfer + # it to the user changes of the new machine after the new_machine becomes active. + per_extruder_user_changes = {} + for extruder_name, extruder_stack in self._global_container_stack.extruders.items(): + per_extruder_user_changes[extruder_name] = extruder_stack.userChanges + self.setActiveMachine(new_machine.getId()) + # Apply the per-extruder userChanges to the new_machine (which is of different type than the previous one). + for extruder_name in self._global_container_stack.extruders.keys(): + self._global_container_stack.extruders[extruder_name].setUserChanges(per_extruder_user_changes[extruder_name]) + @pyqtSlot(QObject) def applyRemoteConfiguration(self, configuration: PrinterConfigurationModel) -> None: if self._global_container_stack is None: