mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
QML UI: replace combobox with custom text field with hints
Signed-off-by: Marco Martin <notmart@gmail.com>
This commit is contained in:
parent
751626eec5
commit
4113bab17b
3 changed files with 89 additions and 22 deletions
84
mobile-widgets/qml/HintsTextEdit.qml
Normal file
84
mobile-widgets/qml/HintsTextEdit.qml
Normal file
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue