Warning, /maui/mauikit/src/controls.5/TextFieldPopup.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * Copyright 2023 Camilo Higuita <milo.h@aol.com> 0003 * 0004 * This program is free software; you can redistribute it and/or modify 0005 * it under the terms of the GNU Library General Public License as 0006 * published by the Free Software Foundation; either version 2, or 0007 * (at your option) any later version. 0008 * 0009 * This program is distributed in the hope that it will be useful, 0010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0012 * GNU General Public License for more details 0013 * 0014 * You should have received a copy of the GNU Library General Public 0015 * License along with this program; if not, write to the 0016 * Free Software Foundation, Inc., 0017 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 0018 */ 0019 0020 import QtQuick 2.15 0021 import QtQuick.Controls 2.15 0022 import QtQuick.Layouts 1.3 0023 0024 import QtGraphicalEffects 1.0 0025 import QtQuick.Window 2.15 0026 0027 import org.mauikit.controls 1.3 as Maui 0028 0029 AbstractButton 0030 { 0031 id: control 0032 0033 Maui.Theme.colorSet: Maui.Theme.Button 0034 Maui.Theme.inherit: false 0035 0036 property int minimumWidth: 400 0037 property int minimumHeight: 500 0038 0039 implicitWidth: 200 0040 implicitHeight: _layout.implicitHeight + topPadding + bottomPadding 0041 0042 hoverEnabled: true 0043 0044 default property alias content: _page.content 0045 0046 property alias popup: _popup 0047 property alias textField : _textField 0048 0049 property alias popupVisible: _popup.visible 0050 property alias closePolicy: _popup.closePolicy 0051 0052 property int position: ToolBar.Header 0053 0054 property alias placeholderText: _textField.placeholderText 0055 property alias inputMethodHints: _textField.inputMethodHints 0056 property alias activeFocusOnPress: _textField.activeFocusOnPress 0057 property alias wrapMode :_textField.wrapMode 0058 property alias color: _textField.color 0059 property alias verticalAlignment: _textField.verticalAlignment 0060 property alias preeditText: _textField.preeditText 0061 0062 onClicked: 0063 { 0064 _popup.open() 0065 } 0066 0067 text: _textField.text 0068 icon.name: "edit-find" 0069 0070 Keys.onEscapePressed: control.close() 0071 0072 signal accepted() 0073 signal cleared() 0074 signal opened() 0075 signal closed() 0076 0077 function open() 0078 { 0079 _popup.open() 0080 } 0081 0082 function close() 0083 { 0084 _popup.close() 0085 } 0086 0087 function clear() 0088 { 0089 _textField.clear() 0090 } 0091 0092 padding: Maui.Style.defaultPadding 0093 spacing: Maui.Style.space.small 0094 0095 contentItem: RowLayout 0096 { 0097 id: _layout 0098 spacing: control.spacing 0099 0100 Maui.Icon 0101 { 0102 visible: source ? true : false 0103 source: control.icon.name 0104 implicitHeight: visible ? 16 : 0 0105 implicitWidth: height 0106 color: control.color 0107 } 0108 0109 Item 0110 { 0111 Layout.fillWidth: true 0112 visible: !placeholder.visible 0113 } 0114 0115 Label 0116 { 0117 id: placeholder 0118 Layout.fillWidth: true 0119 text: control.text.length > 0 ? control.text : control.placeholderText 0120 font: control.font 0121 color: control.color 0122 verticalAlignment: control.verticalAlignment 0123 elide: Text.ElideRight 0124 wrapMode: Text.NoWrap 0125 0126 opacity: !_textField.activeFocus ? 1 : 0.5 0127 0128 Behavior on opacity 0129 { 0130 NumberAnimation 0131 { 0132 duration: Maui.Style.units.longDuration 0133 easing.type: Easing.InOutQuad 0134 } 0135 } 0136 } 0137 } 0138 0139 Popup 0140 { 0141 id: _popup 0142 0143 parent: control 0144 anchors.centerIn: undefined 0145 0146 closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent 0147 modal: false 0148 0149 y: control.position === ToolBar.Header ? 0 : (control.height - (_popup.height)) 0150 0151 x: width === control.width ? 0 : 0 - ((width - control.width)/2) 0152 0153 width: Math.min(Math.max(control.minimumWidth, parent.width), control.Window.window.width - Maui.Style.defaultPadding*2) 0154 height: Math.min(control.Window.window.height- Maui.Style.defaultPadding*2, control.minimumHeight) 0155 0156 margins: 0 0157 padding: 0 0158 0159 onClosed: 0160 { 0161 _textField.clear() 0162 control.closed() 0163 } 0164 0165 onOpened: 0166 { 0167 _textField.forceActiveFocus() 0168 _textField.selectAll() 0169 control.opened() 0170 } 0171 0172 Maui.Page 0173 { 0174 id:_page 0175 anchors.fill: parent 0176 altHeader: control.position === ToolBar.Footer 0177 0178 headBar.visible: false 0179 headerColumn: TextField 0180 { 0181 implicitHeight: control.height 0182 width: parent.width 0183 0184 id: _textField 0185 text: control.text 0186 0187 icon.source: control.icon.name 0188 0189 onTextChanged: control.text = text 0190 onAccepted: 0191 { 0192 control.text = text 0193 control.accepted() 0194 } 0195 0196 onCleared: 0197 { 0198 control.cleared() 0199 } 0200 0201 Keys.enabled: true 0202 Keys.forwardTo: control 0203 Keys.onEscapePressed: control.close() 0204 0205 background: Rectangle 0206 { 0207 color: Maui.Theme.backgroundColor 0208 0209 0210 Maui.Separator 0211 { 0212 id: _border 0213 anchors.left: parent.left 0214 anchors.right: parent.right 0215 weight: Maui.Separator.Weight.Light 0216 opacity: 0.4 0217 0218 Behavior on color 0219 { 0220 Maui.ColorTransition{} 0221 } 0222 } 0223 0224 states: [ State 0225 { 0226 when: control.position === ToolBar.Header 0227 0228 AnchorChanges 0229 { 0230 target: _border 0231 anchors.top: undefined 0232 anchors.bottom: parent.bottom 0233 } 0234 }, 0235 0236 State 0237 { 0238 when: control.position === ToolBar.Footer 0239 0240 AnchorChanges 0241 { 0242 target: _border 0243 anchors.top: parent.top 0244 anchors.bottom: undefined 0245 } 0246 } 0247 ] 0248 } 0249 } 0250 0251 } 0252 0253 background: Rectangle 0254 { 0255 color: Maui.Theme.backgroundColor 0256 0257 radius: Maui.Style.radiusV 0258 layer.enabled: true 0259 layer.effect: DropShadow 0260 { 0261 horizontalOffset: 0 0262 verticalOffset: 0 0263 radius: 8 0264 samples: 16 0265 color: "#80000000" 0266 transparentBorder: true 0267 } 0268 0269 Behavior on color 0270 { 0271 Maui.ColorTransition{} 0272 } 0273 } 0274 } 0275 0276 background: Rectangle 0277 { 0278 color: control.enabled ? (control.hovered ? Maui.Theme.hoverColor : Maui.Theme.backgroundColor) : "transparent" 0279 0280 radius: Maui.Style.radiusV 0281 0282 Behavior on color 0283 { 0284 Maui.ColorTransition{} 0285 } 0286 } 0287 0288 function forceActiveFocus() 0289 { 0290 control.open() 0291 } 0292 }