Warning, /libraries/kirigami-addons/src/formcard/FormRadioDelegate.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  * Copyright 2022 Devin Lin <devin@kde.org>
0003  * SPDX-License-Identifier: LGPL-2.0-or-later
0004  */
0005 
0006 import QtQuick 2.15
0007 import QtQuick.Templates 2.15 as T
0008 import QtQuick.Controls 2.15 as Controls
0009 import QtQuick.Layouts 1.15
0010 
0011 import org.kde.kirigami 2.19 as Kirigami
0012 
0013 import "private" as Private
0014 
0015 /**
0016  * @brief A Form delegate that corresponds to a radio button.
0017  *
0018  * This component is used for creating multiple on/off toggles for the same
0019  * setting. In other words, by grouping multiple radio buttons under the same
0020  * parent, only one of the radio buttons should be checkable and applied to a
0021  * setting.
0022  *
0023  * Use the inherited QtQuick.Controls.AbstractButton.text property to define
0024  * the main text of the radio button.
0025  *
0026  * If you need multiple values for the same setting, use a
0027  * FormComboBoxDelegate instead.
0028  *
0029  * If you need a purely on/off toggle for a single setting, use a
0030  * FormSwitchDelegate instead.
0031  *
0032  * If you need an on/off/tristate toggle, use a FormCheckDelegate instead.
0033  *
0034  * @since KirigamiAddons 0.11.0
0035  *
0036  * @see QtQuick.Controls.AbstractButton
0037  * @see FormSwitchDelegate
0038  * @see FormCheckDelegate
0039  * @see FormComboBoxDelegate
0040  *
0041  * @inherit QtQuick.Controls.RadioDelegate
0042  */
0043 T.RadioDelegate {
0044     id: root
0045 
0046     /**
0047      * @brief A label containing secondary text that appears under the
0048      * inherited text property.
0049      *
0050      * This provides additional information shown in a faint gray color.
0051      */
0052     property string description: ""
0053 
0054     /**
0055      * @brief This property holds an item that will be displayed to the left of the delegate's contents.
0056      */
0057     property var leading: null
0058 
0059     /**
0060      * @brief This property holds the padding after the leading item.
0061      */
0062     property real leadingPadding: Kirigami.Units.smallSpacing
0063 
0064     /**
0065      * @brief This property holds an item that will be displayed after the
0066      * delegate's contents.
0067      */
0068     property var trailing: null
0069 
0070     /**
0071      * @brief This property holds the padding before the trailing item.
0072      */
0073     property real trailingPadding: Kirigami.Units.smallSpacing
0074 
0075     leftPadding: Kirigami.Units.gridUnit
0076     topPadding: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
0077     bottomPadding: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
0078     rightPadding: Kirigami.Units.gridUnit
0079 
0080     implicitWidth: contentItem.implicitWidth + leftPadding + rightPadding
0081     implicitHeight: contentItem.implicitHeight + topPadding + bottomPadding
0082 
0083     focusPolicy: Qt.StrongFocus
0084     hoverEnabled: true
0085     background: FormDelegateBackground { control: root }
0086 
0087     Layout.fillWidth: true
0088 
0089     contentItem: RowLayout {
0090         spacing: 0
0091 
0092         Private.ContentItemLoader {
0093             Layout.rightMargin: visible ? root.leadingPadding : 0
0094             visible: root.leading
0095             implicitHeight: visible ? root.leading.implicitHeight : 0
0096             implicitWidth: visible ? root.leading.implicitWidth : 0
0097             contentItem: root.leading
0098         }
0099 
0100         Controls.RadioButton {
0101             id: radioButtonItem
0102             focusPolicy: Qt.NoFocus // provided by delegate
0103             Layout.rightMargin: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
0104 
0105             enabled: root.enabled
0106             checked: root.checked
0107 
0108             onToggled: root.toggled()
0109             onClicked: root.clicked()
0110             onPressAndHold: root.pressAndHold()
0111             onDoubleClicked: root.doubleClicked()
0112 
0113             onCheckedChanged: {
0114                 root.checked = checked;
0115                 checked = Qt.binding(() => root.checked);
0116             }
0117         }
0118 
0119         ColumnLayout {
0120             Layout.fillWidth: true
0121             spacing: Kirigami.Units.smallSpacing
0122 
0123             Controls.Label {
0124                 Layout.fillWidth: true
0125                 text: root.text
0126                 color: root.enabled ? Kirigami.Theme.textColor : Kirigami.Theme.disabledTextColor
0127                 elide: Text.ElideRight
0128                 wrapMode: Text.Wrap
0129                 maximumLineCount: 2
0130             }
0131 
0132             Controls.Label {
0133                 visible: root.description !== ""
0134                 Layout.fillWidth: true
0135                 text: root.description
0136                 color: Kirigami.Theme.disabledTextColor
0137                 wrapMode: Text.Wrap
0138             }
0139         }
0140 
0141         Private.ContentItemLoader {
0142             Layout.leftMargin: visible ? root.trailingPadding : 0
0143             visible: root.trailing
0144             implicitHeight: visible ? root.trailing.implicitHeight : 0
0145             implicitWidth: visible ? root.trailing.implicitWidth : 0
0146             contentItem: root.trailing
0147         }
0148     }
0149 }
0150 
0151