mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-21 21:58:01 -06:00
commit
0725bdcd64
3 changed files with 50 additions and 39 deletions
|
@ -63,6 +63,7 @@ class MachineManager(QObject):
|
|||
self._current_root_material_id = {} # type: Dict[str, str]
|
||||
|
||||
self._default_extruder_position = "0" # to be updated when extruders are switched on and off
|
||||
self._num_user_settings = 0
|
||||
|
||||
self._instance_container_timer = QTimer() # type: QTimer
|
||||
self._instance_container_timer.setInterval(250)
|
||||
|
@ -126,6 +127,8 @@ class MachineManager(QObject):
|
|||
self.activeQualityGroupChanged.connect(self.activeQualityDisplayNameChanged)
|
||||
self.activeQualityChangesGroupChanged.connect(self.activeQualityDisplayNameChanged)
|
||||
|
||||
self.activeStackValueChanged.connect(self._reCalculateNumUserSettings)
|
||||
|
||||
activeQualityDisplayNameChanged = pyqtSignal()
|
||||
|
||||
activeQualityGroupChanged = pyqtSignal()
|
||||
|
@ -151,6 +154,22 @@ class MachineManager(QObject):
|
|||
printerConnectedStatusChanged = pyqtSignal() # Emitted every time the active machine change or the outputdevices change
|
||||
|
||||
rootMaterialChanged = pyqtSignal()
|
||||
numUserSettingsChanged = pyqtSignal()
|
||||
|
||||
def _reCalculateNumUserSettings(self):
|
||||
if not self._global_container_stack:
|
||||
if self._num_user_settings != 0:
|
||||
self.numUserSettingsChanged.emit()
|
||||
self._num_user_settings = 0
|
||||
return
|
||||
num_user_settings = self._global_container_stack.getTop().getNumInstances()
|
||||
stacks = self._global_container_stack.extruderList
|
||||
for stack in stacks:
|
||||
num_user_settings += stack.getTop().getNumInstances()
|
||||
|
||||
if self._num_user_settings != num_user_settings:
|
||||
self._num_user_settings = num_user_settings
|
||||
self.numUserSettingsChanged.emit()
|
||||
|
||||
def setInitialActiveMachine(self) -> None:
|
||||
active_machine_id = self._application.getPreferences().getValue("cura/active_machine")
|
||||
|
@ -415,31 +434,13 @@ class MachineManager(QObject):
|
|||
Logger.log("d", "Checking %s stacks for errors took %.2f s" % (count, time.time() - time_start))
|
||||
return False
|
||||
|
||||
@pyqtProperty(bool, notify = activeStackValueChanged)
|
||||
@pyqtProperty(bool, notify = numUserSettingsChanged)
|
||||
def hasUserSettings(self) -> bool:
|
||||
"""Check if the global_container has instances in the user container"""
|
||||
return self._num_user_settings != 0
|
||||
|
||||
if not self._global_container_stack:
|
||||
return False
|
||||
|
||||
if self._global_container_stack.getTop().getNumInstances() != 0:
|
||||
return True
|
||||
|
||||
for stack in self._global_container_stack.extruderList:
|
||||
if stack.getTop().getNumInstances() != 0:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
@pyqtProperty(int, notify = activeStackValueChanged)
|
||||
@pyqtProperty(int, notify = numUserSettingsChanged)
|
||||
def numUserSettings(self) -> int:
|
||||
if not self._global_container_stack:
|
||||
return 0
|
||||
num_user_settings = self._global_container_stack.getTop().getNumInstances()
|
||||
stacks = self._global_container_stack.extruderList
|
||||
for stack in stacks:
|
||||
num_user_settings += stack.getTop().getNumInstances()
|
||||
return num_user_settings
|
||||
return self._num_user_settings
|
||||
|
||||
@pyqtSlot(str)
|
||||
def clearUserSettingAllCurrentStacks(self, key: str) -> None:
|
||||
|
@ -967,7 +968,6 @@ class MachineManager(QObject):
|
|||
|
||||
if self._global_container_stack is None:
|
||||
return
|
||||
with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue):
|
||||
property_names = ["value", "resolve", "validationState"]
|
||||
for container in [self._global_container_stack] + self._global_container_stack.extruderList:
|
||||
for setting_key in container.getAllKeys():
|
||||
|
@ -985,10 +985,6 @@ class MachineManager(QObject):
|
|||
self.updateNumberExtrudersEnabled()
|
||||
self.correctExtruderSettings()
|
||||
|
||||
# In case this extruder is being disabled and it's the currently selected one, switch to the default extruder
|
||||
if not enabled and position == ExtruderManager.getInstance().activeExtruderIndex:
|
||||
ExtruderManager.getInstance().setActiveExtruderIndex(int(self._default_extruder_position))
|
||||
|
||||
# Ensure that the quality profile is compatible with current combination, or choose a compatible one if available
|
||||
self._updateQualityWithMaterial()
|
||||
self.extruderChanged.emit()
|
||||
|
@ -996,8 +992,7 @@ class MachineManager(QObject):
|
|||
self.activeQualityGroupChanged.emit()
|
||||
# Update items in SettingExtruder
|
||||
ExtruderManager.getInstance().extrudersChanged.emit(self._global_container_stack.getId())
|
||||
# Make sure the front end reflects changes
|
||||
self.forceUpdateAllSettings()
|
||||
|
||||
# Also trigger the build plate compatibility to update
|
||||
self.activeMaterialChanged.emit()
|
||||
self.activeIntentChanged.emit()
|
||||
|
|
|
@ -222,11 +222,18 @@ Item
|
|||
OldControls.CheckBox
|
||||
{
|
||||
id: enabledCheckbox
|
||||
checked: Cura.MachineManager.activeStack != null ? Cura.MachineManager.activeStack.isEnabled : false
|
||||
enabled: !checked || Cura.MachineManager.numberExtrudersEnabled > 1 //Disable if it's the last enabled extruder.
|
||||
height: parent.height
|
||||
style: UM.Theme.styles.checkbox
|
||||
|
||||
Binding
|
||||
{
|
||||
target: enabledCheckbox
|
||||
property: "checked"
|
||||
value: Cura.MachineManager.activeStack.isEnabled
|
||||
when: Cura.MachineManger.activeStack != null
|
||||
}
|
||||
|
||||
/* Use a MouseArea to process the click on this checkbox.
|
||||
This is necessary because actually clicking the checkbox
|
||||
causes the "checked" property to be overwritten. After
|
||||
|
@ -235,8 +242,17 @@ Item
|
|||
MouseArea
|
||||
{
|
||||
anchors.fill: parent
|
||||
onClicked: Cura.MachineManager.setExtruderEnabled(Cura.ExtruderManager.activeExtruderIndex, !parent.checked)
|
||||
enabled: parent.enabled
|
||||
onClicked:
|
||||
{
|
||||
if(!parent.enabled)
|
||||
{
|
||||
return
|
||||
}
|
||||
// Already update the visual indication
|
||||
parent.checked = !parent.checked
|
||||
// Update the settings on the background!
|
||||
Cura.MachineManager.setExtruderEnabled(Cura.ExtruderManager.activeExtruderIndex, parent.checked)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ def test_hasUserSettings(machine_manager, application):
|
|||
mocked_instance_container = MagicMock(name="UserSettingContainer")
|
||||
mocked_instance_container.getNumInstances = MagicMock(return_value = 12)
|
||||
mocked_stack.getTop = MagicMock(return_value = mocked_instance_container)
|
||||
|
||||
machine_manager._reCalculateNumUserSettings()
|
||||
assert machine_manager.numUserSettings == 12
|
||||
assert machine_manager.hasUserSettings
|
||||
|
||||
|
@ -74,7 +74,7 @@ def test_hasUserSettingsExtruder(machine_manager, application):
|
|||
mocked_instance_container = MagicMock(name="UserSettingContainer")
|
||||
mocked_instance_container.getNumInstances = MagicMock(return_value=200)
|
||||
extruder.getTop = MagicMock(return_value = mocked_instance_container)
|
||||
|
||||
machine_manager._reCalculateNumUserSettings()
|
||||
assert machine_manager.hasUserSettings
|
||||
assert machine_manager.numUserSettings == 200
|
||||
|
||||
|
@ -91,7 +91,7 @@ def test_hasUserSettingsEmptyUserChanges(machine_manager, application):
|
|||
mocked_instance_container = MagicMock(name="UserSettingContainer")
|
||||
mocked_instance_container.getNumInstances = MagicMock(return_value=0)
|
||||
extruder.getTop = MagicMock(return_value = mocked_instance_container)
|
||||
|
||||
machine_manager._reCalculateNumUserSettings()
|
||||
assert not machine_manager.hasUserSettings
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue