Files
Tksi310Monitor/qml/Controls/TristateSwitch.qml
2024-01-22 17:37:10 +09:00

77 lines
2.1 KiB
QML

import QtQuick 2.12
import QtQuick.Controls 2.12 as Controls
import QtQuick.Layouts 1.12
import Palette 1.0
Controls.CheckBox {
id: control
implicitHeight: 128
padding: 12
tristate: true
checkState: Qt.Unchecked
property string firstStateDescription
property string secondStateDescription
indicator: Item {
anchors.fill: control
anchors.margins: control.padding
RowLayout {
anchors.fill: parent
spacing: 0
Controls.Label {
id: firstLabel
text: control.firstStateDescription
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.family: "Roboto"
font.pixelSize: 72
font.weight: Font.Bold
color: control.checkState === Qt.PartiallyChecked ? Palette.alternativeLabelTextColor : Palette.labelTextColor
Layout.preferredWidth: (parent.width -parent.spacing) / 2
}
Controls.Label {
id: secondLabel
text: control.secondStateDescription
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.family: "Roboto"
font.pixelSize: 72
font.weight: Font.Bold
color: control.checkState === Qt.Checked ? Palette.alternativeLabelTextColor : Palette.labelTextColor
Layout.preferredWidth: (parent.width -parent.spacing) / 2
}
}
Rectangle {
color: Palette.switchActiveBackgroundColor
radius: 24
visible: control.checkState !== Qt.Unchecked
width: control.checkState === Qt.Checked ? secondLabel.width : firstLabel.width
height: parent.height
x: control.checkState === Qt.Checked ? secondLabel.x : firstLabel.x
z: -1
}
}
contentItem: Item {
}
background: Rectangle {
color: Palette.switchBackgroundColor
radius: 32
}
}