You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.1 KiB
103 lines
3.1 KiB
import QtQuick 2.0 |
|
import QtQuick.Controls.Styles 1.1 |
|
import "ColorUtils.js" as ColorUtils |
|
|
|
|
|
Item { |
|
SystemPalette { id: sysPalette; colorGroup: SystemPalette.Active } |
|
property color enabledCheckedColor: sysPalette.highlight |
|
property color enabledNotCheckedColor: ColorUtils.blendColors(sysPalette.windowText, sysPalette.window, 0.5) |
|
property color hoveredColor: ColorUtils.blendColors(sysPalette.highlight, sysPalette.window, 0.5) |
|
property color disabledColor: ColorUtils.blendColors(sysPalette.windowText, sysPalette.window, 0.4) |
|
opacity: control.enabled ? 1.0 : 0.5 |
|
width: 28 |
|
height: 28 |
|
|
|
Rectangle { |
|
visible: control.enabled |
|
anchors.centerIn: parent |
|
height: 18 |
|
width: 18 |
|
radius: 11 |
|
color: ColorUtils.adjustAlpha(sysPalette.shadow, 0.15) |
|
transform: Translate { x: 1; y: 1 } |
|
} |
|
Rectangle { |
|
anchors.centerIn: parent |
|
height: 18 |
|
width: 18 |
|
radius: 10 |
|
color: sysPalette.window |
|
border { |
|
width: 1 |
|
color: control.checked ? (control.enabled ? enabledCheckedColor : disabledColor) : enabledNotCheckedColor |
|
} |
|
transform: Translate {x: control.pressed ? 1 : 0; y: control.pressed ? 1 : 0} |
|
} |
|
Rectangle { |
|
visible: control.hovered |
|
anchors.centerIn: parent |
|
height: 18 |
|
width: 18 |
|
radius: 10 |
|
color: sysPalette.window |
|
border { |
|
width: 2 |
|
color: hoveredColor |
|
} |
|
transform: Translate {x: control.pressed ? 1 : 0; y: control.pressed ? 1 : 0} |
|
} |
|
Rectangle { |
|
id: __rBMark |
|
anchors.centerIn: parent |
|
height: 12 |
|
width: 12 |
|
radius: 6 |
|
color: control.enabled ? (control.checked ? enabledCheckedColor : enabledNotCheckedColor) : disabledColor |
|
Rectangle { |
|
visible: control.hovered |
|
anchors.centerIn: parent |
|
height: 12 |
|
width: 12 |
|
radius: 6 |
|
color: hoveredColor |
|
} |
|
transform: [ |
|
Translate {x: control.pressed ? 1 : 0; y: control.pressed ? 1 : 0}, |
|
Rotation { |
|
id: __rBRotator |
|
origin.x: 6 |
|
origin.y: 6 |
|
axis { x: 1; y: -1; z: 0 } |
|
angle: control.checked ? 0 : 270 |
|
} |
|
] |
|
PropertyAnimation { |
|
id: __rBFlipChecked |
|
target: __rBRotator |
|
property: "angle" |
|
duration: 100 |
|
from: 270 ; to: 360 |
|
onStarted: __rBMark.visible = true; |
|
} |
|
PropertyAnimation { |
|
id: __rBFlipUnChecked |
|
target: __rBRotator |
|
property: "angle" |
|
duration: 100 |
|
from: 180 ; to: 270 |
|
onStopped: __rBMark.visible = false; |
|
} |
|
Component.onCompleted: { |
|
control.checkedChanged.connect(flipChecked) |
|
} |
|
function flipChecked() { |
|
if (control.checked) { |
|
__rBFlipChecked.running = true; |
|
} else { |
|
__rBFlipUnChecked.running = true; |
|
} |
|
} |
|
} |
|
} |
|
|
|
|