Warning, /libraries/kirigami-addons/src/formcard/FormSwitchDelegate.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 switch.
0017  *
0018  * This component is used to create a purely on/off toggle for a single
0019  * setting.
0020  *
0021  * Use the inherited QtQuick.Controls.AbstractButton.text property to define
0022  * the main text of the button.
0023  *
0024  * If you need an on/off/tristate toggle, use a FormCheckDelegate instead.
0025  *
0026  * If you need multiple values for the same setting, use a
0027  * FormComboBoxDelegate instead.
0028  *
0029  * If you need multiple toggles for the same setting, use a FormRadioDelegate
0030  * instead.
0031  *
0032  * @since KirigamiAddons 0.11.0
0033  *
0034  * @see QtQuick.Controls.AbstractButton
0035  * @see FormCheckDelegate
0036  * @see FormComboBoxDelegate
0037  * @see FormRadioDelegate
0038  *
0039  * @inherit QtQuick.Controls.SwitchDelegate
0040  */
0041 T.SwitchDelegate {
0042     id: root
0043 
0044     /**
0045      * @brief A label containing secondary text that appears under the inherited text property.
0046      *
0047      * This provides additional information shown in a faint gray color.
0048      */
0049     property string description: ""
0050 
0051     /**
0052      * @brief This property holds an item that will be displayed
0053      * to the left of the delegate's contents.
0054      */
0055     property var leading: null
0056 
0057     /**
0058      * @brief This property holds the padding after the leading item.
0059      */
0060     property real leadingPadding: Kirigami.Units.smallSpacing
0061 
0062     /**
0063      * @brief This property holds an item that will be displayed
0064      * to the right of the delegate's contents.
0065      */
0066     property var trailing: null
0067 
0068     /**
0069      * @brief This property holds the padding before the trailing item.
0070      */
0071     property real trailingPadding: Kirigami.Units.smallSpacing
0072 
0073     leftPadding: Kirigami.Units.gridUnit
0074     topPadding: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
0075     bottomPadding: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
0076     rightPadding: Kirigami.Units.gridUnit
0077 
0078     implicitWidth: contentItem.implicitWidth + leftPadding + rightPadding
0079     implicitHeight: contentItem.implicitHeight + topPadding + bottomPadding
0080 
0081     focusPolicy: Qt.StrongFocus
0082     hoverEnabled: true
0083     background: FormDelegateBackground { control: root }
0084 
0085     Layout.fillWidth: true
0086 
0087     Accessible.description: root.description
0088     Accessible.role: Accessible.CheckBox
0089     Accessible.onPressAction: switchItem.toggle()
0090     Accessible.onToggleAction: switchItem.toggle()
0091 
0092     contentItem: RowLayout {
0093         spacing: 0
0094 
0095         Private.ContentItemLoader {
0096             Layout.rightMargin: visible ? root.leadingPadding : 0
0097             visible: root.leading
0098             implicitHeight: visible ? root.leading.implicitHeight : 0
0099             implicitWidth: visible ? root.leading.implicitWidth : 0
0100             contentItem: root.leading
0101         }
0102 
0103         ColumnLayout {
0104             Layout.fillWidth: true
0105             spacing: Kirigami.Units.smallSpacing
0106 
0107             Controls.Label {
0108                 Layout.fillWidth: true
0109                 text: root.text
0110                 elide: Text.ElideRight
0111                 wrapMode: Text.Wrap
0112                 maximumLineCount: 2
0113                 color: root.enabled ? Kirigami.Theme.textColor : Kirigami.Theme.disabledTextColor
0114                 Accessible.ignored: true
0115             }
0116 
0117             Controls.Label {
0118                 visible: root.description !== ""
0119                 Layout.fillWidth: true
0120                 text: root.description
0121                 wrapMode: Text.Wrap
0122                 color: Kirigami.Theme.disabledTextColor
0123                 Accessible.ignored: true
0124             }
0125         }
0126 
0127         Controls.Switch {
0128             id: switchItem
0129             focusPolicy: Qt.NoFocus // provided by delegate
0130             Layout.leftMargin: Kirigami.Units.largeSpacing + Kirigami.Units.smallSpacing
0131 
0132             enabled: root.enabled
0133             checked: root.checked
0134 
0135             onToggled: root.toggled()
0136             onClicked: root.clicked()
0137             onPressAndHold: root.pressAndHold()
0138             onDoubleClicked: root.doubleClicked()
0139 
0140             onCheckedChanged: {
0141                 root.checked = checked;
0142                 checked = Qt.binding(() => root.checked);
0143             }
0144 
0145             Accessible.ignored: true
0146         }
0147 
0148         Private.ContentItemLoader {
0149             Layout.leftMargin: visible ? root.trailingPadding : 0
0150             visible: root.trailing
0151             implicitHeight: visible ? root.trailing.implicitHeight : 0
0152             implicitWidth: visible ? root.trailing.implicitWidth : 0
0153             contentItem: root.trailing
0154         }
0155     }
0156 }