Merge branch '2.3' of github.com:Ultimaker/Cura into 2.3

This commit is contained in:
Jaime van Kessel 2016-10-12 17:27:01 +02:00
commit 6e9acf77c0
6 changed files with 40 additions and 10 deletions

View file

@ -223,6 +223,9 @@ class MachineManager(QObject):
def _onActiveExtruderStackChanged(self): def _onActiveExtruderStackChanged(self):
self.blurSettings.emit() # Ensure no-one has focus. self.blurSettings.emit() # Ensure no-one has focus.
old_active_container_stack = self._active_container_stack
if self._active_container_stack and self._active_container_stack != self._global_container_stack: if self._active_container_stack and self._active_container_stack != self._global_container_stack:
self._active_container_stack.containersChanged.disconnect(self._onInstanceContainersChanged) self._active_container_stack.containersChanged.disconnect(self._onInstanceContainersChanged)
self._active_container_stack.propertyChanged.disconnect(self._onPropertyChanged) self._active_container_stack.propertyChanged.disconnect(self._onPropertyChanged)
@ -232,8 +235,16 @@ class MachineManager(QObject):
self._active_container_stack.propertyChanged.connect(self._onPropertyChanged) self._active_container_stack.propertyChanged.connect(self._onPropertyChanged)
else: else:
self._active_container_stack = self._global_container_stack self._active_container_stack = self._global_container_stack
old_active_stack_valid = self._active_stack_valid
self._active_stack_valid = not self._checkStackForErrors(self._active_container_stack) self._active_stack_valid = not self._checkStackForErrors(self._active_container_stack)
self.activeStackValidationChanged.emit() if old_active_stack_valid != self._active_stack_valid:
self.activeStackValidationChanged.emit()
if old_active_container_stack != self._active_container_stack:
# Many methods and properties related to the active quality actually depend
# on _active_container_stack. If it changes, then the properties change.
self.activeQualityChanged.emit()
def _onInstanceContainersChanged(self, container): def _onInstanceContainersChanged(self, container):
container_type = container.getMetaDataEntry("type") container_type = container.getMetaDataEntry("type")
@ -492,6 +503,21 @@ class MachineManager(QObject):
return quality.getMetaDataEntry("quality_type") return quality.getMetaDataEntry("quality_type")
return "" return ""
## Get the Quality ID associated with the currently active extruder
# Note that this only returns the "quality", not the "quality_changes"
# \returns QualityID (string) if found, empty string otherwise
# \sa activeQualityId()
# \todo Ideally, this method would be named activeQualityId(), and the other one
# would be named something like activeQualityOrQualityChanges() for consistency
@pyqtProperty(str, notify = activeQualityChanged)
def activeQualityContainerId(self):
# We're using the active stack instead of the global stack in case the list of qualities differs per extruder
if self._active_container_stack:
quality = self._active_container_stack.findContainer(type = "quality")
if quality:
return quality.getId()
return ""
@pyqtProperty(str, notify = activeQualityChanged) @pyqtProperty(str, notify = activeQualityChanged)
def activeQualityChangesId(self): def activeQualityChangesId(self):
if self._active_container_stack: if self._active_container_stack:

View file

@ -120,7 +120,11 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
quality_container = quality_container[0] quality_container = quality_container[0]
quality_type = quality_container.getMetaDataEntry("quality_type") quality_type = quality_container.getMetaDataEntry("quality_type")
definition_id = quality_container.getDefinition().getId() definition = quality_container.getDefinition()
if definition:
definition_id = definition.getId()
else:
definition_id = "empty_quality"
criteria = {"type": "quality", "quality_type": quality_type, "definition": definition_id} criteria = {"type": "quality", "quality_type": quality_type, "definition": definition_id}
@ -136,9 +140,9 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
new_criteria.pop("extruder") new_criteria.pop("extruder")
containers = self._container_registry.findInstanceContainers(**new_criteria) containers = self._container_registry.findInstanceContainers(**new_criteria)
if not containers: if not containers and "material" in criteria:
# Try again, this time without material # Try again, this time without material
criteria.pop("material") criteria.pop("material", None)
containers = self._container_registry.findInstanceContainers(**criteria) containers = self._container_registry.findInstanceContainers(**criteria)
if not containers: if not containers:
@ -147,7 +151,7 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
containers = self._container_registry.findInstanceContainers(**criteria) containers = self._container_registry.findInstanceContainers(**criteria)
if not containers: if not containers:
UM.Logger.log("Could not find any quality containers matching the search criteria %s" % str(criteria)) UM.Logger.log("w", "Could not find any quality containers matching the search criteria %s" % str(criteria))
return return
if quality_changes_container: if quality_changes_container:

View file

@ -2354,7 +2354,7 @@
"everywhere": "Everywhere" "everywhere": "Everywhere"
}, },
"default_value": "everywhere", "default_value": "everywhere",
"resolve": "'everywhere' if 'everywhere' in extruderValues('support_type') else buildplate", "resolve": "'everywhere' if 'everywhere' in extruderValues('support_type') else 'buildplate'",
"enabled": "support_enable", "enabled": "support_enable",
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": false "settable_per_extruder": false

View file

@ -137,7 +137,7 @@ Item
Action Action
{ {
id: addProfileAction; id: addProfileAction;
enabled: Cura.MachineManager.isActiveStackValid && Cura.MachineManager.hasUserSettings enabled: Cura.MachineManager.isActiveStackValid && Cura.MachineManager.hasUserSettings && Cura.MachineManager.activeQualityId != "empty_quality"
text: catalog.i18nc("@action:inmenu menubar:profile","&Create profile from current settings..."); text: catalog.i18nc("@action:inmenu menubar:profile","&Create profile from current settings...");
} }

View file

@ -62,7 +62,7 @@ UM.ManagementPage
Button Button
{ {
text: catalog.i18nc("@label", "Create") text: catalog.i18nc("@label", "Create")
enabled: base.canCreateProfile() enabled: base.canCreateProfile() && Cura.MachineManager.activeQualityId != "empty_quality"
visible: base.canCreateProfile() visible: base.canCreateProfile()
iconName: "list-add"; iconName: "list-add";
@ -78,7 +78,7 @@ UM.ManagementPage
Button Button
{ {
text: catalog.i18nc("@label", "Duplicate") text: catalog.i18nc("@label", "Duplicate")
enabled: ! base.canCreateProfile() enabled: ! base.canCreateProfile() && Cura.MachineManager.activeQualityId != "empty_quality"
visible: ! base.canCreateProfile() visible: ! base.canCreateProfile()
iconName: "list-add"; iconName: "list-add";

View file

@ -244,7 +244,7 @@ Column
} }
} }
property var valueWarning: Cura.MachineManager.activeQualityId == "empty_quality" property var valueWarning: Cura.MachineManager.activeQualityContainerId == "empty_quality"
enabled: !extrudersList.visible || base.currentExtruderIndex > -1 enabled: !extrudersList.visible || base.currentExtruderIndex > -1