Warning, /frameworks/kirigami/src/controls/ActionTextField.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2019 Carl-Lucien Schwan <carl@carlschwan.eu> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Controls as QQC2 0009 import QtQuick.Templates as T 0010 import org.kde.kirigami as Kirigami 0011 0012 /** 0013 * This is advanced textfield. It is recommended to use this class when there 0014 * is a need to create a create a textfield with action buttons (e.g a clear 0015 * action). 0016 * 0017 * Example usage for a search field: 0018 * @code 0019 * import org.kde.kirigami 2.20 as Kirigami 0020 * 0021 * Kirigami.ActionTextField { 0022 * id: searchField 0023 * 0024 * placeholderText: i18n("Search…") 0025 * 0026 * focusSequence: StandardKey.Find 0027 * 0028 * rightActions: Kirigami.Action { 0029 * icon.name: "edit-clear" 0030 * visible: searchField.text.length > 0 0031 * onTriggered: { 0032 * searchField.clear(); 0033 * searchField.accepted(); 0034 * } 0035 * } 0036 * 0037 * onAccepted: console.log("Search text is " + searchField.text); 0038 * } 0039 * @endcode 0040 * 0041 * @since 5.56 0042 * @inherit QtQuick.Controls.TextField 0043 */ 0044 QQC2.TextField { 0045 id: root 0046 0047 /** 0048 * @brief This property holds a shortcut sequence that will focus the text field. 0049 * @since 5.56 0050 */ 0051 property alias focusSequence: focusShortcut.sequence 0052 0053 /** 0054 * @brief This property holds a list of actions that will be displayed on the left side of the text field. 0055 * 0056 * By default this list is empty. 0057 * 0058 * @since 5.56 0059 */ 0060 property list<T.Action> leftActions 0061 0062 /** 0063 * @brief This property holds a list of actions that will be displayed on the right side of the text field. 0064 * 0065 * By default this list is empty. 0066 * 0067 * @since 5.56 0068 */ 0069 property list<T.Action> rightActions 0070 0071 property alias _leftActionsRow: leftActionsRow 0072 property alias _rightActionsRow: rightActionsRow 0073 0074 hoverEnabled: true 0075 0076 // Manually setting this fixes alignment in RTL layouts 0077 horizontalAlignment: TextInput.AlignLeft 0078 0079 leftPadding: Kirigami.Units.smallSpacing + (root.effectiveHorizontalAlignment === TextInput.AlignRight ? rightActionsRow : leftActionsRow).width 0080 rightPadding: Kirigami.Units.smallSpacing + (root.effectiveHorizontalAlignment === TextInput.AlignRight ? leftActionsRow : rightActionsRow).width 0081 0082 Behavior on leftPadding { 0083 NumberAnimation { 0084 duration: Kirigami.Units.longDuration 0085 easing.type: Easing.InOutQuad 0086 } 0087 } 0088 0089 Behavior on rightPadding { 0090 NumberAnimation { 0091 duration: Kirigami.Units.longDuration 0092 easing.type: Easing.InOutQuad 0093 } 0094 } 0095 0096 Shortcut { 0097 id: focusShortcut 0098 enabled: root.visible && root.enabled 0099 onActivated: { 0100 root.forceActiveFocus(Qt.ShortcutFocusReason) 0101 root.selectAll() 0102 } 0103 } 0104 0105 QQC2.ToolTip { 0106 visible: focusShortcut.nativeText.length > 0 && root.text.length === 0 && !rightActionsRow.hovered && !leftActionsRow.hovered && root.hovered 0107 text: focusShortcut.nativeText 0108 } 0109 0110 component ActionIconMouseArea: MouseArea { 0111 anchors.fill: parent 0112 activeFocusOnTab: true 0113 cursorShape: Qt.PointingHandCursor 0114 hoverEnabled: true 0115 Accessible.role: Accessible.Button 0116 Keys.onPressed: event => { 0117 switch (event.key) { 0118 case Qt.Key_Space: 0119 case Qt.Key_Enter: 0120 case Qt.Key_Return: 0121 case Qt.Key_Select: 0122 clicked(null); 0123 event.accepted = true; 0124 break; 0125 } 0126 } 0127 } 0128 0129 Row { 0130 id: leftActionsRow 0131 padding: Kirigami.Units.smallSpacing 0132 spacing: Kirigami.Units.smallSpacing 0133 layoutDirection: Qt.LeftToRight 0134 LayoutMirroring.enabled: root.effectiveHorizontalAlignment === TextInput.AlignRight 0135 anchors.left: parent.left 0136 anchors.leftMargin: Kirigami.Units.smallSpacing 0137 anchors.top: parent.top 0138 anchors.topMargin: parent.topPadding 0139 anchors.bottom: parent.bottom 0140 anchors.bottomMargin: parent.bottomPadding 0141 Repeater { 0142 model: root.leftActions 0143 Kirigami.Icon { 0144 id: delegate 0145 0146 required property T.Action modelData 0147 0148 implicitWidth: Kirigami.Units.iconSizes.sizeForLabels 0149 implicitHeight: Kirigami.Units.iconSizes.sizeForLabels 0150 0151 anchors.verticalCenter: parent.verticalCenter 0152 0153 source: modelData.icon.name.length > 0 ? modelData.icon.name : modelData.icon.source 0154 active: actionArea.containsPress || actionArea.activeFocus 0155 visible: !(modelData instanceof Kirigami.Action) || modelData.visible 0156 enabled: modelData.enabled 0157 0158 ActionIconMouseArea { 0159 id: actionArea 0160 Accessible.name: delegate.modelData.text 0161 onClicked: mouse => delegate.modelData.trigger() 0162 } 0163 0164 QQC2.ToolTip { 0165 visible: (actionArea.containsMouse || actionArea.activeFocus) && (delegate.modelData.text.length > 0) 0166 text: delegate.modelData.text 0167 } 0168 } 0169 } 0170 } 0171 0172 Row { 0173 id: rightActionsRow 0174 padding: Kirigami.Units.smallSpacing 0175 spacing: Kirigami.Units.smallSpacing 0176 layoutDirection: Qt.RightToLeft 0177 LayoutMirroring.enabled: root.effectiveHorizontalAlignment === TextInput.AlignRight 0178 anchors.right: parent.right 0179 anchors.rightMargin: Kirigami.Units.smallSpacing 0180 anchors.top: parent.top 0181 anchors.topMargin: parent.topPadding 0182 anchors.bottom: parent.bottom 0183 anchors.bottomMargin: parent.bottomPadding 0184 Repeater { 0185 model: root.rightActions 0186 Kirigami.Icon { 0187 id: delegate 0188 0189 required property T.Action modelData 0190 0191 implicitWidth: Kirigami.Units.iconSizes.sizeForLabels 0192 implicitHeight: Kirigami.Units.iconSizes.sizeForLabels 0193 0194 anchors.verticalCenter: parent.verticalCenter 0195 0196 source: modelData.icon.name.length > 0 ? modelData.icon.name : modelData.icon.source 0197 active: actionArea.containsPress || actionArea.activeFocus 0198 visible: !(modelData instanceof Kirigami.Action) || modelData.visible 0199 enabled: modelData.enabled 0200 0201 ActionIconMouseArea { 0202 id: actionArea 0203 Accessible.name: delegate.modelData.text 0204 onClicked: mouse => delegate.modelData.trigger() 0205 } 0206 0207 QQC2.ToolTip { 0208 visible: (actionArea.containsMouse || actionArea.activeFocus) && (delegate.modelData.text.length > 0) 0209 text: delegate.modelData.text 0210 } 0211 } 0212 } 0213 } 0214 }