Warning, /pim/itinerary/src/app/components/RadioSelector.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-License-Identifier: LGPL-2.0-or-later
0002 // SPDX-FileCopyrightText: 2023 Mathis BrĂ¼chert <mbb@kaidan.im>
0003 
0004 import QtQuick
0005 import QtQuick.Controls as QQC2
0006 import QtQuick.Layouts
0007 import org.kde.kirigami as Kirigami
0008 
0009 Item{
0010     id: container
0011 
0012     property list<Kirigami.Action> actions
0013     property bool consistentWidth: false
0014     property int defaultIndex: 0
0015     readonly property int selectedIndex: marker.selectedIndex
0016 
0017     Layout.minimumWidth: consistentWidth ? 0 : switchLayout.implicitWidth
0018     implicitHeight: switchLayout.implicitHeight
0019     Layout.fillWidth: consistentWidth
0020 
0021     QQC2.ButtonGroup {
0022         buttons: switchLayout.children
0023     }
0024 
0025     RowLayout {
0026         id: switchLayout
0027         anchors {
0028             top: container.top
0029             left: container.left
0030             right: container.right
0031         }
0032         Repeater{
0033             id: repeater
0034 
0035             model: actions
0036             delegate: QQC2.ToolButton {
0037                 id: button
0038 
0039                 required property var modelData
0040                 required property int index
0041 
0042                 Layout.fillWidth: true
0043                 Layout.preferredWidth: consistentWidth ? (container.width/repeater.count)-(switchLayout.spacing/repeater.count-1) : button.implicitWidth
0044                 Layout.minimumHeight: Math.round(Kirigami.Units.gridUnit * 1.5)
0045 
0046                 checkable: true
0047                 text: modelData.text
0048                 icon.name: modelData.icon.name
0049 
0050                 background: Rectangle{
0051                     anchors.fill: button
0052 
0053                     radius: height/2
0054                     color: "transparent"
0055                     border.color: Kirigami.Theme.disabledTextColor
0056                     opacity: button.hovered ? 0.3 : 0
0057 
0058                     Behavior on opacity {
0059                         PropertyAnimation {
0060                             duration: Kirigami.Units.shortDuration
0061                             easing.type: Easing.InOutCubic
0062                         }
0063                     }
0064                 }
0065 
0066                 contentItem: RowLayout{
0067                     Item {
0068                         Layout.leftMargin:  icon.visible ? Kirigami.Units.smallSpacing : Kirigami.Units.largeSpacing
0069                         Layout.fillWidth: true
0070                     }
0071 
0072                     Kirigami.Icon {
0073                         id: icon
0074 
0075                         Layout.alignment: Qt.AlignVCenter
0076 
0077                         color: button.checked ? Kirigami.Theme.hoverColor : Kirigami.Theme.textColor
0078                         visible: button.icon.name
0079                         source: button.icon.name
0080                         implicitHeight: label.height
0081                         implicitWidth: label.height
0082                         Behavior on color {
0083                             PropertyAnimation {
0084                                 duration: Kirigami.Units.longDuration
0085                                 easing.type: Easing.InOutCubic
0086                             }
0087                         }
0088                     }
0089                     Item{
0090                         Layout.alignment: Qt.AlignVCenter
0091 
0092                         implicitWidth: fakeLabel.implicitWidth
0093                         implicitHeight: fakeLabel.implicitHeight
0094                         QQC2.Label {
0095                             id: fakeLabel
0096 
0097                             anchors.centerIn: parent
0098                             font.bold: true
0099                             color: Kirigami.Theme.hoverColor
0100 
0101                             opacity: button.checked ? 1 : 0
0102                             text: button.text
0103                             Behavior on opacity {
0104                                 PropertyAnimation {
0105                                     duration: Kirigami.Units.longDuration
0106                                     easing.type: Easing.InOutCubic
0107                                 }
0108                             }
0109                             Accessible.ignored: true
0110                         }
0111                         QQC2.Label {
0112                             id: label
0113 
0114                             anchors.centerIn: parent
0115                             color: Kirigami.Theme.textColor
0116 
0117                             opacity: button.checked ? 0 : 1
0118                             text: button.text
0119                             Behavior on opacity {
0120                                 PropertyAnimation {
0121                                     duration: Kirigami.Units.longDuration
0122                                     easing.type: Easing.InOutCubic
0123                                 }
0124                             }
0125                             Accessible.ignored: true
0126                         }
0127                     }
0128 
0129                     Item {
0130                         Layout.fillWidth: true
0131                         Layout.rightMargin: Kirigami.Units.largeSpacing
0132                     }
0133                 }
0134 
0135                 onClicked: {
0136                     marker.width = Qt.binding(function() { return width })
0137                     marker.x = Qt.binding(function() { return x })
0138                     modelData.triggered()
0139                     marker.selectedIndex = index
0140 
0141                 }
0142                 Component.onCompleted: if (index === defaultIndex ) {
0143                     marker.width = Qt.binding(function() { return width })
0144                     marker.x = Qt.binding(function() { return x })
0145                     button.checked = true
0146                 }
0147             }
0148         }
0149     }
0150 
0151     Rectangle {
0152         id: marker
0153 
0154         property int selectedIndex: container.defaultIndex
0155 
0156         y: switchLayout.y
0157         z: switchLayout.z - 1
0158         height: switchLayout.implicitHeight
0159         radius: height/2
0160         border.width: 1
0161         border.color: Kirigami.ColorUtils.linearInterpolation(
0162                             Kirigami.Theme.hoverColor,
0163                             "transparent", 0.4)
0164         color: Kirigami.ColorUtils.linearInterpolation(
0165                     Kirigami.Theme.hoverColor,
0166                     "transparent", 0.9)
0167 
0168         Behavior on x {
0169             PropertyAnimation {
0170                 id: x_anim
0171 
0172                 duration: Kirigami.Units.longDuration
0173                 easing.type: Easing.InOutCubic
0174             }
0175         }
0176 
0177         Behavior on width {
0178             PropertyAnimation {
0179                 id: width_anim
0180 
0181                 duration: Kirigami.Units.longDuration
0182                 easing.type: Easing.InOutCubic
0183             }
0184         }
0185     }
0186 }