mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-22 05:39:37 +08:00
161 lines
5.3 KiB
QML
161 lines
5.3 KiB
QML
// 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
|
|
}
|
|
}
|
|
|
|
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
|
|
{
|
|
top: parent.top
|
|
bottom: parent.bottom
|
|
left: parent.left
|
|
}
|
|
width: height
|
|
|
|
radius: UM.Theme.getSize("setting_control_radius").width
|
|
border.width: UM.Theme.getSize("default_lining").width
|
|
|
|
border.color:
|
|
{
|
|
if(!enabled)
|
|
{
|
|
return UM.Theme.getColor("setting_control_disabled_border")
|
|
}
|
|
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("setting_control_border_highlight")
|
|
}
|
|
return UM.Theme.getColor("setting_control_border")
|
|
}
|
|
|
|
color: {
|
|
if (!enabled)
|
|
{
|
|
return UM.Theme.getColor("setting_control_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("setting_control_highlight")
|
|
}
|
|
return UM.Theme.getColor("setting_control")
|
|
}
|
|
|
|
UM.RecolorImage
|
|
{
|
|
anchors.verticalCenter: parent.verticalCenter
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
width: Math.round(parent.width / 2.5)
|
|
height: Math.round(parent.height / 2.5)
|
|
sourceSize.height: width
|
|
color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text");
|
|
source: UM.Theme.getIcon("check")
|
|
opacity: control.checked ? 1 : 0
|
|
Behavior on opacity { NumberAnimation { duration: 100; } }
|
|
}
|
|
}
|
|
}
|
|
}
|