123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- // Copyright (c) 2018 Ultimaker B.V.
- // Uranium is released under the terms of the LGPLv3 or higher.
- import QtQuick 2.7
- import QtQuick.Layouts 1.2
- import QtQuick.Controls 2.0
- import UM 1.2 as UM
- SettingItem
- {
- id: base
- property var focusItem: control
- contents: MouseArea
- {
- id: control
- anchors.fill: parent
- hoverEnabled: true
- property bool checked:
- {
- // FIXME this needs to go away once 'resolve' is combined with 'value' in our data model.
- // Stacklevels
- // 0: user -> unsaved change
- // 1: quality changes -> saved change
- // 2: quality
- // 3: material -> user changed material in materials page
- // 4: variant
- // 5: machine
- var value
- if ((base.resolve !== undefined && base.resolve != "None") && (stackLevel != 0) && (stackLevel != 1))
- {
- // We have a resolve function. Indicates that the setting is not settable per extruder and that
- // we have to choose between the resolved value (default) and the global value
- // (if user has explicitly set this).
- value = base.resolve
- }
- else
- {
- value = propertyProvider.properties.value
- }
- switch(value)
- {
- case "True":
- return true
- case "False":
- return false
- default:
- return (value !== undefined) ? value : false
- }
- }
- Keys.onSpacePressed:
- {
- forceActiveFocus()
- propertyProvider.setPropertyValue("value", !checked)
- }
- onClicked:
- {
- forceActiveFocus()
- propertyProvider.setPropertyValue("value", !checked)
- }
- Keys.onTabPressed:
- {
- base.setActiveFocusToNextSetting(true)
- }
- Keys.onBacktabPressed:
- {
- base.setActiveFocusToNextSetting(false)
- }
- onActiveFocusChanged:
- {
- if (activeFocus)
- {
- base.focusReceived()
- }
- }
- Rectangle
- {
- anchors
- {
- verticalCenter: parent.verticalCenter
- left: parent.left
- }
- width: UM.Theme.getSize("checkbox").width
- height: width
- radius: UM.Theme.getSize("checkbox_radius").width
- border.width: UM.Theme.getSize("default_lining").width
- border.color:
- {
- if(!enabled)
- {
- return UM.Theme.getColor("checkbox_border_disabled")
- }
- switch (propertyProvider.properties.validationState)
- {
- case "ValidatorState.Invalid":
- case "ValidatorState.Exception":
- case "ValidatorState.MinimumError":
- case "ValidatorState.MaximumError":
- return UM.Theme.getColor("setting_validation_error");
- case "ValidatorState.MinimumWarning":
- case "ValidatorState.MaximumWarning":
- return UM.Theme.getColor("setting_validation_warning");
- }
- // Validation is OK.
- if (control.containsMouse || control.activeFocus || hovered)
- {
- return UM.Theme.getColor("checkbox_border_hover")
- }
- return UM.Theme.getColor("checkbox_border")
- }
- color: {
- if (!enabled)
- {
- return UM.Theme.getColor("checkbox_disabled")
- }
- switch (propertyProvider.properties.validationState)
- {
- case "ValidatorState.Invalid":
- case "ValidatorState.Exception":
- case "ValidatorState.MinimumError":
- case "ValidatorState.MaximumError":
- return UM.Theme.getColor("setting_validation_error_background")
- case "ValidatorState.MinimumWarning":
- case "ValidatorState.MaximumWarning":
- return UM.Theme.getColor("setting_validation_warning_background")
- }
- // Validation is OK.
- if (control.containsMouse || control.activeFocus)
- {
- return UM.Theme.getColor("checkbox_hover")
- }
- return UM.Theme.getColor("checkbox")
- }
- UM.ColorImage
- {
- anchors.verticalCenter: parent.verticalCenter
- anchors.horizontalCenter: parent.horizontalCenter
- height: UM.Theme.getSize("checkbox_mark").height
- width: UM.Theme.getSize("checkbox_mark").width
- color: !enabled ? UM.Theme.getColor("checkbox_mark_disabled") : UM.Theme.getColor("checkbox_mark");
- source: UM.Theme.getIcon("Check", "low")
- opacity: control.checked ? 1 : 0
- Behavior on opacity { NumberAnimation { duration: 100; } }
- }
- }
- }
- }
|