// Copyright (c) 2015 Ultimaker B.V. // Uranium is released under the terms of the AGPLv3 or higher. import QtQuick 2.1 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import UM 1.1 as UM SettingItem { id: base contents: ComboBox { id: control model: definition.options textRole: "value"; anchors.fill: parent MouseArea { anchors.fill: parent; acceptedButtons: Qt.NoButton; onWheel: wheel.accepted = true; } style: ComboBoxStyle { background: Rectangle { color: { if (!enabled) { return UM.Theme.getColor("setting_control_disabled") } if(control.hovered || base.activeFocus) { return UM.Theme.getColor("setting_control_highlight") } else { return UM.Theme.getColor("setting_control") } } 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"); } label: Item { Label { anchors.left: parent.left; anchors.leftMargin: UM.Theme.getSize("default_lining").width anchors.right: downArrow.left; anchors.rightMargin: UM.Theme.getSize("default_lining").width; anchors.verticalCenter: parent.verticalCenter; text: control.currentText; font: UM.Theme.getFont("default"); color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text"); elide: Text.ElideRight; verticalAlignment: Text.AlignVCenter; } UM.RecolorImage { id: downArrow anchors.right: parent.right; anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2; anchors.verticalCenter: parent.verticalCenter; source: UM.Theme.getIcon("arrow_bottom") width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height sourceSize.width: width + 5 sourceSize.height: width + 5 color: UM.Theme.getColor("setting_control_text"); } } } onActivated: { forceActiveFocus(); provider.setPropertyValue("value", definition.options[index].key) } onModelChanged: updateCurrentIndex(); Connections { target: provider onPropertiesChanged: control.updateCurrentIndex() } function updateCurrentIndex() { for(var i = 0; i < definition.options.length; ++i) { if(definition.options[i].key == provider.properties.value) { currentIndex = i; return; } } currentIndex = -1; } } }