Merge branch 'master' of github.com:Ultimaker/Cura

This commit is contained in:
Tim Kuipers 2016-07-11 16:44:04 +02:00
commit 5d256e5e59
10 changed files with 151 additions and 31 deletions

View File

@ -1,6 +1,7 @@
# Copyright (c) 2015 Ultimaker B.V. # Copyright (c) 2015 Ultimaker B.V.
# Cura is released under the terms of the AGPLv3 or higher. # Cura is released under the terms of the AGPLv3 or higher.
from UM.i18n import i18nCatalog
from UM.Scene.SceneNode import SceneNode from UM.Scene.SceneNode import SceneNode
from UM.Application import Application from UM.Application import Application
from UM.Resources import Resources from UM.Resources import Resources
@ -9,9 +10,11 @@ from UM.Math.Vector import Vector
from UM.Math.Color import Color from UM.Math.Color import Color
from UM.Math.AxisAlignedBox import AxisAlignedBox from UM.Math.AxisAlignedBox import AxisAlignedBox
from UM.Math.Polygon import Polygon from UM.Math.Polygon import Polygon
from UM.Message import Message
from UM.View.RenderBatch import RenderBatch from UM.View.RenderBatch import RenderBatch
from UM.View.GL.OpenGL import OpenGL from UM.View.GL.OpenGL import OpenGL
catalog = i18nCatalog("cura")
import numpy import numpy
@ -162,6 +165,13 @@ class BuildVolume(SceneNode):
def getBoundingBox(self): def getBoundingBox(self):
return self._volume_aabb return self._volume_aabb
def _buildVolumeMessage(self):
Message(catalog.i18nc(
"@info:status",
"The build volume height has been reduced due to the value of the"
" \"Print Sequence\" setting to prevent the gantry from colliding"
" with printed objects."), lifetime=10).show()
def _onGlobalContainerStackChanged(self): def _onGlobalContainerStackChanged(self):
if self._active_container_stack: if self._active_container_stack:
self._active_container_stack.propertyChanged.disconnect(self._onSettingPropertyChanged) self._active_container_stack.propertyChanged.disconnect(self._onSettingPropertyChanged)
@ -174,6 +184,7 @@ class BuildVolume(SceneNode):
self._width = self._active_container_stack.getProperty("machine_width", "value") self._width = self._active_container_stack.getProperty("machine_width", "value")
if self._active_container_stack.getProperty("print_sequence", "value") == "one_at_a_time": if self._active_container_stack.getProperty("print_sequence", "value") == "one_at_a_time":
self._height = self._active_container_stack.getProperty("gantry_height", "value") self._height = self._active_container_stack.getProperty("gantry_height", "value")
self._buildVolumeMessage()
else: else:
self._height = self._active_container_stack.getProperty("machine_height", "value") self._height = self._active_container_stack.getProperty("machine_height", "value")
self._depth = self._active_container_stack.getProperty("machine_depth", "value") self._depth = self._active_container_stack.getProperty("machine_depth", "value")
@ -189,6 +200,7 @@ class BuildVolume(SceneNode):
if setting_key == "print_sequence": if setting_key == "print_sequence":
if Application.getInstance().getGlobalContainerStack().getProperty("print_sequence", "value") == "one_at_a_time": if Application.getInstance().getGlobalContainerStack().getProperty("print_sequence", "value") == "one_at_a_time":
self._height = self._active_container_stack.getProperty("gantry_height", "value") self._height = self._active_container_stack.getProperty("gantry_height", "value")
self._buildVolumeMessage()
else: else:
self._height = self._active_container_stack.getProperty("machine_height", "value") self._height = self._active_container_stack.getProperty("machine_height", "value")
self.rebuild() self.rebuild()

View File

@ -349,6 +349,10 @@ class ContainerManager(QObject):
def _updateContainerNameFilters(self): def _updateContainerNameFilters(self):
self._container_name_filters = {} self._container_name_filters = {}
for plugin_id, container_type in UM.Settings.ContainerRegistry.getContainerTypes(): for plugin_id, container_type in UM.Settings.ContainerRegistry.getContainerTypes():
# Ignore default container types since those are not plugins
if container_type in (UM.Settings.InstanceContainer, UM.Settings.ContainerStack, UM.Settings.DefinitionContainer):
continue
serialize_type = "" serialize_type = ""
try: try:
plugin_metadata = UM.PluginRegistry.getInstance().getMetaData(plugin_id) plugin_metadata = UM.PluginRegistry.getInstance().getMetaData(plugin_id)

View File

@ -206,18 +206,32 @@ class MachineManager(QObject):
def _onGlobalContainerChanged(self): def _onGlobalContainerChanged(self):
if self._global_container_stack: if self._global_container_stack:
self._global_container_stack.nameChanged.disconnect(self._onMachineNameChanged)
self._global_container_stack.containersChanged.disconnect(self._onInstanceContainersChanged) self._global_container_stack.containersChanged.disconnect(self._onInstanceContainersChanged)
self._global_container_stack.propertyChanged.disconnect(self._onGlobalPropertyChanged) self._global_container_stack.propertyChanged.disconnect(self._onGlobalPropertyChanged)
material = self._global_container_stack.findContainer({"type": "material"})
material.nameChanged.disconnect(self._onMaterialNameChanged)
quality = self._global_container_stack.findContainer({"type": "quality"})
quality.nameChanged.disconnect(self._onQualityNameChanged)
self._global_container_stack = Application.getInstance().getGlobalContainerStack() self._global_container_stack = Application.getInstance().getGlobalContainerStack()
self.globalContainerChanged.emit() self.globalContainerChanged.emit()
if self._global_container_stack: if self._global_container_stack:
Preferences.getInstance().setValue("cura/active_machine", self._global_container_stack.getId()) Preferences.getInstance().setValue("cura/active_machine", self._global_container_stack.getId())
self._global_container_stack.nameChanged.connect(self._onMachineNameChanged)
self._global_container_stack.containersChanged.connect(self._onInstanceContainersChanged) self._global_container_stack.containersChanged.connect(self._onInstanceContainersChanged)
self._global_container_stack.propertyChanged.connect(self._onGlobalPropertyChanged) self._global_container_stack.propertyChanged.connect(self._onGlobalPropertyChanged)
self._global_stack_valid = not self._checkStackForErrors(self._global_container_stack) self._global_stack_valid = not self._checkStackForErrors(self._global_container_stack)
material = self._global_container_stack.findContainer({"type": "material"})
material.nameChanged.connect(self._onMaterialNameChanged)
quality = self._global_container_stack.findContainer({"type": "quality"})
quality.nameChanged.connect(self._onQualityNameChanged)
def _onActiveExtruderStackChanged(self): def _onActiveExtruderStackChanged(self):
self.blurSettings.emit() # Ensure no-one has focus. self.blurSettings.emit() # Ensure no-one has focus.
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:
@ -508,9 +522,13 @@ class MachineManager(QObject):
old_material = self._active_container_stack.findContainer({"type":"material"}) old_material = self._active_container_stack.findContainer({"type":"material"})
old_quality = self._active_container_stack.findContainer({"type": "quality"}) old_quality = self._active_container_stack.findContainer({"type": "quality"})
if old_material: if old_material:
old_material.nameChanged.disconnect(self._onMaterialNameChanged)
material_index = self._active_container_stack.getContainerIndex(old_material) material_index = self._active_container_stack.getContainerIndex(old_material)
self._active_container_stack.replaceContainer(material_index, containers[0]) self._active_container_stack.replaceContainer(material_index, containers[0])
containers[0].nameChanged.connect(self._onMaterialNameChanged)
preferred_quality_name = None preferred_quality_name = None
if old_quality: if old_quality:
preferred_quality_name = old_quality.getName() preferred_quality_name = old_quality.getName()
@ -545,10 +563,14 @@ class MachineManager(QObject):
old_quality = self._active_container_stack.findContainer({"type": "quality"}) old_quality = self._active_container_stack.findContainer({"type": "quality"})
if old_quality and old_quality != containers[0]: if old_quality and old_quality != containers[0]:
old_quality.nameChanged.disconnect(self._onQualityNameChanged)
quality_index = self._active_container_stack.getContainerIndex(old_quality) quality_index = self._active_container_stack.getContainerIndex(old_quality)
self._active_container_stack.replaceContainer(quality_index, containers[0]) self._active_container_stack.replaceContainer(quality_index, containers[0])
containers[0].nameChanged.connect(self._onQualityNameChanged)
if self.hasUserSettings and Preferences.getInstance().getValue("cura/active_mode") == 1: if self.hasUserSettings and Preferences.getInstance().getValue("cura/active_mode") == 1:
# Ask the user if the user profile should be cleared or not (discarding the current settings) # Ask the user if the user profile should be cleared or not (discarding the current settings)
# In Simple Mode we assume the user always wants to keep the (limited) current settings # In Simple Mode we assume the user always wants to keep the (limited) current settings
@ -752,3 +774,15 @@ class MachineManager(QObject):
return containers[0] return containers[0]
return self._empty_quality_container return self._empty_quality_container
def _onMachineNameChanged(self):
print("machine name changed")
self.globalContainerChanged.emit()
def _onMaterialNameChanged(self):
print("material name changed")
self.activeMaterialChanged.emit()
def _onQualityNameChanged(self):
print("quality name changed")
self.activeQualityChanged.emit()

View File

@ -20,7 +20,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
## Overridden from InstanceContainer ## Overridden from InstanceContainer
def duplicate(self, new_id, new_name = None): def duplicate(self, new_id, new_name = None):
base_file = self.getMetaDataEntry("base_file", "") base_file = self.getMetaDataEntry("base_file", None)
new_uuid = str(uuid.uuid4()) new_uuid = str(uuid.uuid4())
if base_file: if base_file:
@ -40,7 +40,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
result = super().duplicate(new_id, new_name) result = super().duplicate(new_id, new_name)
result.setMetaDataEntry("GUID", new_uuid) result.setMetaDataEntry("GUID", new_uuid)
result.setMetaDataEntry("base_file", base_file) if result.getMetaDataEntry("base_file", None):
result.setMetaDataEntry("base_file", base_file)
return result return result
## Overridden from InstanceContainer ## Overridden from InstanceContainer
@ -57,8 +58,13 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer):
super().setMetaDataEntry(key, value) super().setMetaDataEntry(key, value)
if key == "material":
self.setName(value)
for container in UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(GUID = self.getMetaDataEntry("GUID")): for container in UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(GUID = self.getMetaDataEntry("GUID")):
container.setMetaData(copy.deepcopy(self._metadata)) container.setMetaData(copy.deepcopy(self._metadata))
if key == "material":
container.setName(value)
## Overridden from InstanceContainer ## Overridden from InstanceContainer
def setProperty(self, key, property_name, property_value, container = None): def setProperty(self, key, property_name, property_value, container = None):

View File

@ -144,6 +144,42 @@
"settable_per_extruder": true, "settable_per_extruder": true,
"settable_per_meshgroup": false, "settable_per_meshgroup": false,
"settable_globally": false "settable_globally": false
},
"extruder_prime_pos_x":
{
"label": "Extruder Prime X Position",
"description": "The X coordinate of the position where the nozzle primes at the start of printing.",
"type": "float",
"unit": "mm",
"default_value": 0,
"minimum_value_warning": "-1000",
"maximum_value_warning": "1000",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"extruder_prime_pos_y":
{
"label": "Extruder Prime Y Position",
"description": "The Y coordinate of the position where the nozzle primes at the start of printing.",
"type": "float",
"unit": "mm",
"default_value": 0,
"minimum_value_warning": "-1000",
"maximum_value_warning": "1000",
"settable_per_mesh": false,
"settable_per_extruder": true
},
"extruder_prime_pos_z":
{
"label": "Extruder Prime Z Position",
"description": "The Z coordinate of the position where the nozzle primes at the start of printing.",
"type": "float",
"unit": "mm",
"default_value": 0,
"minimum_value_warning": "-1000",
"maximum_value_warning": "1000",
"settable_per_mesh": false,
"settable_per_extruder": true
} }
} }
} }

View File

@ -774,7 +774,7 @@
"type": "float", "type": "float",
"default_value": 2, "default_value": 2,
"minimum_value": "0", "minimum_value": "0",
"value": "0 if infill_sparse_density == 0 else (infill_line_width * 100) / infill_sparse_density * (2 if infill_pattern == \"grid\" else (3 if infill_pattern == \"triangles\" else 1))", "value": "0 if infill_sparse_density == 0 else (infill_line_width * 100) / infill_sparse_density * (2 if infill_pattern == \"grid\" else (3 if infill_pattern == \"triangles\" else (3 if infill_pattern == \"cubic\" else 1)))",
"settable_per_mesh": true "settable_per_mesh": true
} }
} }
@ -782,12 +782,13 @@
"infill_pattern": "infill_pattern":
{ {
"label": "Infill Pattern", "label": "Infill Pattern",
"description": "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle and concentric patterns are fully printed every layer.", "description": "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, cubic, triangle and concentric patterns are fully printed every layer.",
"type": "enum", "type": "enum",
"options": "options":
{ {
"grid": "Grid", "grid": "Grid",
"lines": "Lines", "lines": "Lines",
"cubic": "Cubic",
"triangles": "Triangles", "triangles": "Triangles",
"concentric": "Concentric", "concentric": "Concentric",
"zigzag": "Zig Zag" "zigzag": "Zig Zag"
@ -2868,7 +2869,7 @@
"type": "extruder", "type": "extruder",
"default_value": "0", "default_value": "0",
"value": "support_extruder_nr", "value": "support_extruder_nr",
"enabled": "support_enable", "enabled": "support_enable and support_roof_enable",
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": false "settable_per_extruder": false
} }

View File

@ -13,7 +13,10 @@ import Cura 1.0 as Cura
Instantiator Instantiator
{ {
model: UM.InstanceContainersModel { filter: menu.getFilter({ "read_only": true }); } model: UM.InstanceContainersModel
{
filter: menu.getFilter({ "read_only": true });
}
MenuItem MenuItem
{ {
@ -32,13 +35,11 @@ import Cura 1.0 as Cura
Instantiator Instantiator
{ {
id: customProfileInstantiator
model: UM.InstanceContainersModel model: UM.InstanceContainersModel
{ {
id: customProfilesModel;
filter: menu.getFilter({ "read_only": false }); filter: menu.getFilter({ "read_only": false });
onRowsInserted: customSeparator.visible = rowCount() > 1 onModelReset: customSeparator.visible = rowCount() > 0
onRowsRemoved: customSeparator.visible = rowCount() > 1
onModelReset: customSeparator.visible = rowCount() > 1
} }
MenuItem MenuItem
@ -50,8 +51,16 @@ import Cura 1.0 as Cura
onTriggered: Cura.MachineManager.setActiveQuality(model.id) onTriggered: Cura.MachineManager.setActiveQuality(model.id)
} }
onObjectAdded: menu.insertItem(index, object); onObjectAdded:
onObjectRemoved: menu.removeItem(object); {
customSeparator.visible = model.rowCount() > 0;
menu.insertItem(index, object);
}
onObjectRemoved:
{
customSeparator.visible = model.rowCount() > 0;
menu.removeItem(object);
}
} }
ExclusiveGroup { id: group; } ExclusiveGroup { id: group; }

View File

@ -51,7 +51,7 @@ TabView
width: base.secondColumnWidth; width: base.secondColumnWidth;
text: properties.supplier; text: properties.supplier;
readOnly: !base.editingEnabled; readOnly: !base.editingEnabled;
onEditingFinished: Cura.ContainerManager.setContainerMetaDataEntry(base.containerId, "brand", text) onEditingFinished: base.setMetaDataEntry("brand", properties.supplier, text)
} }
Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Material Type") } Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Material Type") }
@ -60,7 +60,7 @@ TabView
width: base.secondColumnWidth; width: base.secondColumnWidth;
text: properties.material_type; text: properties.material_type;
readOnly: !base.editingEnabled; readOnly: !base.editingEnabled;
onEditingFinished: Cura.ContainerManager.setContainerMetaDataEntry(base.containerId, "material", text) onEditingFinished: base.setMetaDataEntry("material", properties.material_type, text)
} }
Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Color") } Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Color") }
@ -75,7 +75,6 @@ TabView
{ {
id: colorSelector id: colorSelector
color: properties.color_code color: properties.color_code
onColorChanged: Cura.ContainerManager.setContainerMetaDataEntry(base.containerId, "color_code", color)
width: colorLabel.height * 0.75 width: colorLabel.height * 0.75
height: colorLabel.height * 0.75 height: colorLabel.height * 0.75
@ -90,15 +89,15 @@ TabView
id: colorLabel; id: colorLabel;
text: properties.color_name; text: properties.color_name;
readOnly: !base.editingEnabled readOnly: !base.editingEnabled
onEditingFinished: Cura.ContainerManager.setContainerMetaDataEntry(base.containerId, "color_name", text) onEditingFinished: base.setMetaDataEntry("color_name", properties.color_name, text)
} }
ColorDialog { id: colorDialog; color: properties.color_code; onAccepted: colorSelector.color = color } ColorDialog { id: colorDialog; color: properties.color_code; onAccepted: base.setMetaDataEntry("color_code", properties.color_code, color) }
} }
Item { width: parent.width; height: UM.Theme.getSize("default_margin").height } Item { width: parent.width; height: UM.Theme.getSize("default_margin").height }
Label { width: parent.width; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: "<b>" + catalog.i18nc("@label", "Properties") + "</b>" } Label { width: parent.width; height: parent.rowHeight; font.bold: true; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Properties") }
Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Density") } Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Density") }
ReadOnlySpinBox ReadOnlySpinBox
@ -110,7 +109,7 @@ TabView
stepSize: 0.01 stepSize: 0.01
readOnly: !base.editingEnabled; readOnly: !base.editingEnabled;
onEditingFinished: Cura.ContainerManager.setContainerMetaDataEntry(base.containerId, "properties/density", value) onEditingFinished: base.setMetaDataEntry("properties/density", properties.density, value)
} }
Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Diameter") } Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Diameter") }
@ -123,7 +122,7 @@ TabView
stepSize: 0.01 stepSize: 0.01
readOnly: !base.editingEnabled; readOnly: !base.editingEnabled;
onEditingFinished: Cura.ContainerManager.setContainerMetaDataEntry(base.containerId, "properties/diameter", value) onEditingFinished: base.setMetaDataEntry("properties/diameter", properties.diameter, value)
} }
Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Filament Cost") } Label { width: base.firstColumnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Filament Cost") }
@ -175,7 +174,7 @@ TabView
readOnly: !base.editingEnabled; readOnly: !base.editingEnabled;
onEditingFinished: Cura.ContainerManager.setContainerMetaDataEntry(base.containerId, "description", text) onEditingFinished: base.setMetaDataEntry("description", properties.description, text)
} }
Label { width: parent.width; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Adhesion Information") } Label { width: parent.width; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Adhesion Information") }
@ -188,7 +187,7 @@ TabView
readOnly: !base.editingEnabled; readOnly: !base.editingEnabled;
onEditingFinished: Cura.ContainerManager.setContainerMetaDataEntry(base.containerId, "adhesion_info", text) onEditingFinished: base.setMetaDataEntry("adhesion_info", properties.adhesion_info, text)
} }
} }
} }
@ -249,4 +248,13 @@ TabView
} }
} }
} }
// Tiny convenience function to check if a value really changed before trying to set it.
function setMetaDataEntry(entry_name, old_value, new_value)
{
if(old_value != new_value)
{
Cura.ContainerManager.setContainerMetaDataEntry(base.containerId, entry_name, new_value)
}
}
} }

View File

@ -129,7 +129,7 @@ UM.ManagementPage
enabled: base.currentItem != null && !base.currentItem.readOnly enabled: base.currentItem != null && !base.currentItem.readOnly
checkable: true checkable: enabled
} }
} }
@ -144,10 +144,10 @@ UM.ManagementPage
bottom: parent.bottom bottom: parent.bottom
} }
editingEnabled: base.currentItem != null && !base.currentItem.readOnly && editButton.checked; editingEnabled: editButton.checkable && editButton.checked;
properties: materialProperties properties: materialProperties
containerId: base.currentItem.id containerId: base.currentItem != null ? base.currentItem.id : ""
} }
QtObject QtObject

View File

@ -140,7 +140,7 @@ UM.ManagementPage
Row { Row {
id: currentSettingsActions id: currentSettingsActions
visible: currentItem.id == Cura.MachineManager.activeQualityId visible: currentItem && currentItem.id == Cura.MachineManager.activeQualityId
anchors.left: parent.left anchors.left: parent.left
anchors.top: profileName.bottom anchors.top: profileName.bottom
@ -173,14 +173,14 @@ UM.ManagementPage
Label { Label {
id: defaultsMessage id: defaultsMessage
visible: !currentItem.metadata.has_settings visible: currentItem && !currentItem.metadata.has_settings
text: catalog.i18nc("@action:label", "This profile has no settings and uses the defaults specified by the printer.") text: catalog.i18nc("@action:label", "This profile has no settings and uses the defaults specified by the printer.")
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
width: parent.width width: parent.width
} }
Label { Label {
id: noCurrentSettingsMessage id: noCurrentSettingsMessage
visible: currentItem.id == Cura.MachineManager.activeQualityId && !Cura.MachineManager.hasUserSettings visible: currentItem && currentItem.id == Cura.MachineManager.activeQualityId && !Cura.MachineManager.hasUserSettings
text: catalog.i18nc("@action:label", "Your current settings match the selected profile.") text: catalog.i18nc("@action:label", "Your current settings match the selected profile.")
wrapMode: Text.WordWrap wrapMode: Text.WordWrap
width: parent.width width: parent.width
@ -197,7 +197,17 @@ UM.ManagementPage
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
ListView { ListView {
model: Cura.ContainerSettingsModel{ containers: (currentItem.id == Cura.MachineManager.activeQualityId) ? [base.currentItem.id, Cura.MachineManager.activeUserProfileId] : [base.currentItem.id] } model: Cura.ContainerSettingsModel{ containers:
{
if (!currentItem) {
return []
} else if (currentItem.id == Cura.MachineManager.activeQualityId) {
return [base.currentItem.id, Cura.MachineManager.activeUserProfileId]
} else {
return [base.currentItem.id]
}
}
}
delegate: Row { delegate: Row {
property variant setting: model property variant setting: model
spacing: UM.Theme.getSize("default_margin").width/2 spacing: UM.Theme.getSize("default_margin").width/2
@ -221,7 +231,7 @@ UM.ManagementPage
} }
} }
header: Row { header: Row {
visible: currentItem.id == Cura.MachineManager.activeQualityId visible: currentItem && currentItem.id == Cura.MachineManager.activeQualityId
spacing: UM.Theme.getSize("default_margin").width spacing: UM.Theme.getSize("default_margin").width
Label { Label {
text: catalog.i18nc("@action:label", "Profile:") text: catalog.i18nc("@action:label", "Profile:")
@ -231,7 +241,7 @@ UM.ManagementPage
} }
Label { Label {
text: catalog.i18nc("@action:label", "Current:") text: catalog.i18nc("@action:label", "Current:")
visible: currentItem.id == Cura.MachineManager.activeQualityId visible: currentItem && currentItem.id == Cura.MachineManager.activeQualityId
font.bold: true font.bold: true
} }
} }