Revert "Update SettingOverrideDecorator upon extruder enabled/disabled"

CURA-5456

This reverts commit 7a6e711276.
This commit is contained in:
Lipu Fei 2018-06-13 10:34:01 +02:00
parent 880e098031
commit b0b4f78cf2

View file

@ -9,7 +9,6 @@ from UM.Signal import Signal, signalemitter
from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.InstanceContainer import InstanceContainer
from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Logger import Logger from UM.Logger import Logger
from UM.Util import parseBool
from UM.Application import Application from UM.Application import Application
@ -40,7 +39,7 @@ class SettingOverrideDecorator(SceneNodeDecorator):
user_container = InstanceContainer(container_id = self._generateUniqueName()) user_container = InstanceContainer(container_id = self._generateUniqueName())
user_container.addMetaDataEntry("type", "user") user_container.addMetaDataEntry("type", "user")
self._stack.userChanges = user_container self._stack.userChanges = user_container
self._extruder_stack = ExtruderManager.getInstance().getExtruderStack(0) self._extruder_stack = ExtruderManager.getInstance().getExtruderStack(0).getId()
self._is_non_printing_mesh = False self._is_non_printing_mesh = False
self._is_non_thumbnail_visible_mesh = False self._is_non_thumbnail_visible_mesh = False
@ -49,25 +48,13 @@ class SettingOverrideDecorator(SceneNodeDecorator):
Application.getInstance().getContainerRegistry().addContainer(self._stack) Application.getInstance().getContainerRegistry().addContainer(self._stack)
Application.getInstance().globalContainerStackChanged.connect(self._onNumberOfExtrudersEnabledChanged) Application.getInstance().globalContainerStackChanged.connect(self._updateNextStack)
Application.getInstance().getMachineManager().numberExtrudersEnabledChanged.connect(self._onNumberOfExtrudersEnabledChanged)
self.activeExtruderChanged.connect(self._updateNextStack) self.activeExtruderChanged.connect(self._updateNextStack)
self._updateNextStack() self._updateNextStack()
def _generateUniqueName(self): def _generateUniqueName(self):
return "SettingOverrideInstanceContainer-%s" % uuid.uuid1() return "SettingOverrideInstanceContainer-%s" % uuid.uuid1()
def _onNumberOfExtrudersEnabledChanged(self, *args, **kwargs):
if not parseBool(self._extruder_stack.getMetaDataEntry("enabled", "True")):
# switch to the first extruder that's available
global_stack = Application.getInstance().getMachineManager().activeMachine
for _, extruder in sorted(list(global_stack.extruders.items())):
if parseBool(extruder.getMetaDataEntry("enabled", "True")):
self._extruder_stack = extruder
self._updateNextStack()
break
def __deepcopy__(self, memo): def __deepcopy__(self, memo):
## Create a fresh decorator object ## Create a fresh decorator object
deep_copy = SettingOverrideDecorator() deep_copy = SettingOverrideDecorator()
@ -82,7 +69,7 @@ class SettingOverrideDecorator(SceneNodeDecorator):
deep_copy._stack.replaceContainer(0, instance_container) deep_copy._stack.replaceContainer(0, instance_container)
# Properly set the right extruder on the copy # Properly set the right extruder on the copy
deep_copy.setActiveExtruder(self._extruder_stack.getId()) deep_copy.setActiveExtruder(self._extruder_stack)
# use value from the stack because there can be a delay in signal triggering and "_is_non_printing_mesh" # use value from the stack because there can be a delay in signal triggering and "_is_non_printing_mesh"
# has not been updated yet. # has not been updated yet.
@ -95,7 +82,7 @@ class SettingOverrideDecorator(SceneNodeDecorator):
# #
# \return An extruder's container stack. # \return An extruder's container stack.
def getActiveExtruder(self): def getActiveExtruder(self):
return self._extruder_stack.getId() return self._extruder_stack
## Gets the signal that emits if the active extruder changed. ## Gets the signal that emits if the active extruder changed.
# #
@ -137,16 +124,20 @@ class SettingOverrideDecorator(SceneNodeDecorator):
# kept up to date. # kept up to date.
def _updateNextStack(self): def _updateNextStack(self):
if self._extruder_stack: if self._extruder_stack:
if self._stack.getNextStack(): extruder_stack = ContainerRegistry.getInstance().findContainerStacks(id = self._extruder_stack)
old_extruder_stack_id = self._stack.getNextStack().getId() if extruder_stack:
else: if self._stack.getNextStack():
old_extruder_stack_id = "" old_extruder_stack_id = self._stack.getNextStack().getId()
else:
old_extruder_stack_id = ""
self._stack.setNextStack(self._extruder_stack) self._stack.setNextStack(extruder_stack[0])
# Trigger slice/need slicing if the extruder changed. # Trigger slice/need slicing if the extruder changed.
if self._stack.getNextStack().getId() != old_extruder_stack_id: if self._stack.getNextStack().getId() != old_extruder_stack_id:
Application.getInstance().getBackend().needsSlicing() Application.getInstance().getBackend().needsSlicing()
Application.getInstance().getBackend().tickle() Application.getInstance().getBackend().tickle()
else:
Logger.log("e", "Extruder stack %s below per-object settings does not exist.", self._extruder_stack)
else: else:
self._stack.setNextStack(Application.getInstance().getGlobalContainerStack()) self._stack.setNextStack(Application.getInstance().getGlobalContainerStack())
@ -154,14 +145,7 @@ class SettingOverrideDecorator(SceneNodeDecorator):
# #
# \param extruder_stack_id The new extruder stack to print with. # \param extruder_stack_id The new extruder stack to print with.
def setActiveExtruder(self, extruder_stack_id): def setActiveExtruder(self, extruder_stack_id):
if self._extruder_stack.getId() == extruder_stack_id: self._extruder_stack = extruder_stack_id
return
global_stack = Application.getInstance().getMachineManager().activeMachine
for extruder in global_stack.extruders.values():
if extruder.getId() == extruder_stack_id:
self._extruder_stack = extruder
break
self._updateNextStack() self._updateNextStack()
ExtruderManager.getInstance().resetSelectedObjectExtruders() ExtruderManager.getInstance().resetSelectedObjectExtruders()
self.activeExtruderChanged.emit() self.activeExtruderChanged.emit()