FluentUI/src/controls/FluRadioButton.qml

126 lines
3.1 KiB
QML
Raw Normal View History

2023-02-28 18:29:00 +08:00
import QtQuick 2.15
2023-03-12 14:26:03 +08:00
import QtQuick.Controls 2.15
2023-02-28 18:29:00 +08:00
import QtQuick.Layouts 1.15
import FluentUI 1.0
2023-02-26 23:47:07 +08:00
2023-03-12 14:26:03 +08:00
Control {
2023-02-26 23:47:07 +08:00
2023-03-12 14:26:03 +08:00
id:control
2023-02-28 18:29:00 +08:00
property bool checked: false
property string text: "RodioButton"
signal clicked
property bool disabled: false
2023-03-12 14:26:03 +08:00
focusPolicy:Qt.TabFocus
Keys.onEnterPressed:(visualFocus&&handleClick())
Keys.onReturnPressed:(visualFocus&&handleClick())
MouseArea {
anchors.fill: parent
onClicked: handleClick()
}
function handleClick(){
if(disabled){
return
}
control.clicked()
}
background: Item{
FluFocusRectangle{
visible: control.visualFocus
}
}
contentItem: RowLayout{
2023-02-28 18:29:00 +08:00
Rectangle{
id:rect_check
width: 20
height: 20
radius: 10
layer.samples: 4
layer.enabled: true
layer.smooth: true
border.width: {
if(checked&&disabled){
return 3
}
2023-03-12 14:26:03 +08:00
if(hovered){
2023-02-28 18:29:00 +08:00
if(checked){
return 5
}
return 1
}
2023-03-12 14:26:03 +08:00
if(hovered){
2023-02-28 18:29:00 +08:00
if(checked){
return 3
}
return 1
}
return checked ? 5 : 1
}
Behavior on border.width {
NumberAnimation{
duration: 100
}
}
border.color: {
if(disabled){
2023-03-06 14:22:13 +08:00
if(FluTheme.isDark){
2023-02-28 18:29:00 +08:00
return Qt.rgba(82/255,82/255,82/255,1)
}else{
return Qt.rgba(198/255,198/255,198/255,1)
}
}
if(checked){
2023-03-06 14:22:13 +08:00
if(FluTheme.isDark){
2023-03-06 12:09:06 +08:00
return FluTheme.primaryColor.lighter
2023-02-28 18:29:00 +08:00
}else{
2023-03-06 12:09:06 +08:00
return FluTheme.primaryColor.dark
2023-02-28 18:29:00 +08:00
}
}else{
2023-03-06 14:22:13 +08:00
if(FluTheme.isDark){
2023-02-28 18:29:00 +08:00
return Qt.rgba(161/255,161/255,161/255,1)
}else{
return Qt.rgba(141/255,141/255,141/255,1)
}
}
}
color:{
if(disabled&&checked){
return Qt.rgba(159/255,159/255,159/255,1)
}
2023-03-06 14:22:13 +08:00
if(FluTheme.isDark){
2023-03-12 14:26:03 +08:00
if(hovered){
2023-02-28 18:29:00 +08:00
return Qt.rgba(43/255,43/255,43/255,1)
}
return Qt.rgba(50/255,50/255,50/255,1)
}else{
2023-03-12 14:26:03 +08:00
if(hovered){
2023-02-28 18:29:00 +08:00
if(checked){
return Qt.rgba(1,1,1,1)
}
return Qt.rgba(222/255,222/255,222/255,1)
}
return Qt.rgba(1,1,1,1)
}
}
}
FluText{
2023-03-12 14:26:03 +08:00
text: control.text
2023-02-28 18:29:00 +08:00
Layout.alignment: Qt.AlignVCenter
}
}
2023-02-26 23:47:07 +08:00
}
2023-02-28 18:29:00 +08:00