Simplify SettingExtruder setting item

This way it properly updates when a parent setting changes.

Contributes to CURA-3804
This commit is contained in:
Arjen Hiemstra 2017-05-16 17:43:05 +02:00
parent 7d5c2a9b6a
commit 616ee34be5

View File

@ -15,22 +15,19 @@ SettingItem
contents: ComboBox contents: ComboBox
{ {
id: control id: control
anchors.fill: parent
model: Cura.ExtrudersModel model: Cura.ExtrudersModel { }
{
id: extruders_model
onModelChanged: control.color = extruders_model.getItem(control.currentIndex).color
}
property string color:
{
var model_color = extruders_model.getItem(control.currentIndex).color;
return (model_color) ? model_color : "";
}
textRole: "name" textRole: "name"
anchors.fill: parent onActivated:
onCurrentIndexChanged: updateCurrentColor(); {
forceActiveFocus();
propertyProvider.setPropertyValue("value", model.getItem(index).index);
}
currentIndex: propertyProvider.properties.value
MouseArea MouseArea
{ {
@ -59,7 +56,19 @@ SettingItem
} }
} }
border.width: UM.Theme.getSize("default_lining").width border.width: UM.Theme.getSize("default_lining").width
border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : control.hovered ? UM.Theme.getColor("setting_control_border_highlight") : UM.Theme.getColor("setting_control_border") border.color:
{
if(!enabled)
{
return UM.Theme.getColor("setting_control_disabled_border");
}
if(control.hovered || base.activeFocus)
{
UM.Theme.getColor("setting_control_border_highlight")
}
return UM.Theme.getColor("setting_control_border")
}
} }
label: Item label: Item
{ {
@ -68,35 +77,36 @@ SettingItem
id: swatch id: swatch
height: UM.Theme.getSize("setting_control").height / 2 height: UM.Theme.getSize("setting_control").height / 2
width: height width: height
anchors.left: parent.left
anchors.leftMargin: UM.Theme.getSize("default_lining").width
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
color: control.color
border.width: UM.Theme.getSize("default_lining").width border.width: UM.Theme.getSize("default_lining").width
border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : UM.Theme.getColor("setting_control_border") border.color: enabled ? UM.Theme.getColor("setting_control_border") : UM.Theme.getColor("setting_control_disabled_border")
color: control.currentText != "" ? control.model.getItem(control.currentIndex).color : ""
} }
Label Label
{ {
anchors.left: swatch.right anchors
anchors.leftMargin: UM.Theme.getSize("default_lining").width {
anchors.right: downArrow.left left: swatch.right;
anchors.rightMargin: UM.Theme.getSize("default_lining").width right: arrow.left;
anchors.verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
margins: UM.Theme.getSize("default_lining").width
}
width: parent.width - swatch.width;
text: control.currentText text: control.currentText
font: UM.Theme.getFont("default") font: UM.Theme.getFont("default")
color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text") color: enabled ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text")
elide: Text.ElideRight elide: Text.ElideRight
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
} }
UM.RecolorImage UM.RecolorImage
{ {
id: downArrow id: arrow
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
source: UM.Theme.getIcon("arrow_bottom") source: UM.Theme.getIcon("arrow_bottom")
@ -109,57 +119,5 @@ SettingItem
} }
} }
} }
onActivated:
{
forceActiveFocus();
propertyProvider.setPropertyValue("value", extruders_model.getItem(index).index);
control.color = extruders_model.getItem(index).color;
}
onModelChanged: updateCurrentIndex();
Binding
{
target: control
property: "currentIndex"
value:
{
for(var i = 0; i < extruders_model.rowCount(); ++i)
{
if(extruders_model.getItem(i).index == propertyProvider.properties.value)
{
return i;
}
}
return -1;
}
}
// In some cases we want to update the current color without updating the currentIndex, so it's a seperate function.
function updateCurrentColor()
{
for(var i = 0; i < extruders_model.rowCount(); ++i)
{
if(extruders_model.getItem(i).index == currentIndex)
{
control.color = extruders_model.getItem(i).color;
return;
}
}
}
function updateCurrentIndex()
{
for(var i = 0; i < extruders_model.rowCount(); ++i)
{
if(extruders_model.getItem(i).index == propertyProvider.properties.value)
{
control.currentIndex = i;
return;
}
}
currentIndex = -1;
}
} }
} }