diff options
Diffstat (limited to 'mobile-widgets/qml/HintsTextEdit.qml')
-rw-r--r-- | mobile-widgets/qml/HintsTextEdit.qml | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/mobile-widgets/qml/HintsTextEdit.qml b/mobile-widgets/qml/HintsTextEdit.qml new file mode 100644 index 000000000..5f066890c --- /dev/null +++ b/mobile-widgets/qml/HintsTextEdit.qml @@ -0,0 +1,84 @@ +import QtQuick 2.6 +import QtQuick.Controls 2.0 +import QtGraphicalEffects 1.0 +import QtQuick.Layouts 1.2 +import org.kde.kirigami 2.0 as Kirigami + +TextField { + id: root + z: focus ? 999 : 0 + property alias model: hintsView.model + property alias currentIndex: hintsView.currentIndex + inputMethodHints: Qt.ImhNoPredictiveText + onTextChanged: { + textUpdateTimer.restart(); + } + Keys.onUpPressed: { + hintsView.currentIndex--; + } + Keys.onDownPressed: { + hintsView.currentIndex++; + } + Timer { + id: textUpdateTimer + interval: 300 + onTriggered: { + if (root.text.length == 0) { + return; + } + for (var i = 0; i < hintsView.count; ++i) { + var m = model[i].match(root.text); + if (m !== null && model[i].startsWith(root.text)) { + hintsView.currentIndex = i; + root.text = model[i]; + root.select(m[0].length, model[i].length); + textUpdateTimer.running = false; + break; + } + } + } + } + Frame { + z: 9000 + y: parent.height + visible: root.focus + width: root.width + leftPadding: 0 + rightPadding: 0 + topPadding: 2 + bottomPadding: 2 + height: Math.max(Kirigami.Units.gridUnit*4, hintsView.contentHeight + topPadding + bottomPadding) + background: Rectangle { + color: Kirigami.Theme.backgroundColor + radius: 2 + layer.enabled: true + layer.effect: DropShadow { + horizontalOffset: 0 + verticalOffset: 1 + radius: Kirigami.Units.gridUnit + samples: 32 + color: Qt.rgba(0, 0, 0, 0.5) + } + } + ListView { + id: hintsView + anchors.fill: parent + clip: true + onCurrentIndexChanged: root.text = model[currentIndex]; + + delegate: Kirigami.BasicListItem { + label: modelData + topPadding: 0 + bottomPadding: 0 + leftPadding: 0 + rightPadding: 0 + implicitHeight: Kirigami.Units.gridUnit*2 + checked: hintsView.currentIndex == index + onClicked: { + hintsView.currentIndex = index + root.text = modelData + } + } + } + } +} |