mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 01:00:44 +02:00
Merge pull request #7046 from jherico/keynav
Improve keyboard navigation in file dialog and running scripts
This commit is contained in:
commit
a8395b38ac
3 changed files with 116 additions and 50 deletions
|
@ -181,7 +181,11 @@ ModalWindow {
|
||||||
upButton.enabled = Qt.binding(function() { return (model.parentFolder && model.parentFolder != "") ? true : false; });
|
upButton.enabled = Qt.binding(function() { return (model.parentFolder && model.parentFolder != "") ? true : false; });
|
||||||
showFiles = !root.selectDirectory
|
showFiles = !root.selectDirectory
|
||||||
}
|
}
|
||||||
onFolderChanged: fileTableView.currentRow = 0;
|
onFolderChanged: {
|
||||||
|
fileTableView.selection.clear();
|
||||||
|
fileTableView.selection.select(0);
|
||||||
|
fileTableView.currentRow = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function navigateToRow(row) {
|
function navigateToRow(row) {
|
||||||
|
@ -199,6 +203,59 @@ ModalWindow {
|
||||||
okAction.trigger();
|
okAction.trigger();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
property string prefix: ""
|
||||||
|
|
||||||
|
function addToPrefix(event) {
|
||||||
|
if (!event.text || event.text === "") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
var newPrefix = prefix + event.text.toLowerCase();
|
||||||
|
var matchedIndex = -1;
|
||||||
|
for (var i = 0; i < model.count; ++i) {
|
||||||
|
var name = model.get(i, "fileName").toLowerCase();
|
||||||
|
if (0 === name.indexOf(newPrefix)) {
|
||||||
|
matchedIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (matchedIndex !== -1) {
|
||||||
|
fileTableView.selection.clear();
|
||||||
|
fileTableView.selection.select(matchedIndex);
|
||||||
|
fileTableView.currentRow = matchedIndex;
|
||||||
|
fileTableView.prefix = newPrefix;
|
||||||
|
}
|
||||||
|
prefixClearTimer.restart();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
id: prefixClearTimer
|
||||||
|
interval: 1000
|
||||||
|
repeat: false
|
||||||
|
running: false
|
||||||
|
onTriggered: fileTableView.prefix = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
Keys.onPressed: {
|
||||||
|
switch (event.key) {
|
||||||
|
case Qt.Key_Backspace:
|
||||||
|
case Qt.Key_Tab:
|
||||||
|
case Qt.Key_Backtab:
|
||||||
|
event.accepted = false;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (addToPrefix(event)) {
|
||||||
|
event.accepted = true
|
||||||
|
} else {
|
||||||
|
event.accepted = false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TextField {
|
TextField {
|
||||||
|
|
|
@ -3,6 +3,11 @@ import QtQuick.Controls 1.4
|
||||||
|
|
||||||
TableView {
|
TableView {
|
||||||
id: root
|
id: root
|
||||||
|
onActiveFocusChanged: {
|
||||||
|
if (activeFocus && currentRow == -1) {
|
||||||
|
root.selection.select(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
itemDelegate: Component {
|
itemDelegate: Component {
|
||||||
Item {
|
Item {
|
||||||
|
|
|
@ -90,6 +90,7 @@ Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
ScrollView {
|
ScrollView {
|
||||||
|
onActiveFocusChanged: if (activeFocus && listView.currentItem) { listView.currentItem.forceActiveFocus(); }
|
||||||
anchors {
|
anchors {
|
||||||
top: allButtons.bottom;
|
top: allButtons.bottom;
|
||||||
left: parent.left;
|
left: parent.left;
|
||||||
|
@ -103,17 +104,19 @@ Window {
|
||||||
id: listView
|
id: listView
|
||||||
clip: true
|
clip: true
|
||||||
anchors { fill: parent; margins: 0 }
|
anchors { fill: parent; margins: 0 }
|
||||||
|
|
||||||
model: runningScriptsModel
|
model: runningScriptsModel
|
||||||
|
delegate: FocusScope {
|
||||||
delegate: Rectangle {
|
id: scope
|
||||||
|
anchors { left: parent.left; right: parent.right }
|
||||||
|
height: scriptName.height + 12 + (ListView.isCurrentItem ? scriptName.height + 6 : 0)
|
||||||
|
Keys.onDownPressed: listView.incrementCurrentIndex()
|
||||||
|
Keys.onUpPressed: listView.decrementCurrentIndex()
|
||||||
|
Rectangle {
|
||||||
id: rectangle
|
id: rectangle
|
||||||
|
anchors.fill: parent
|
||||||
clip: true
|
clip: true
|
||||||
radius: 3
|
radius: 3
|
||||||
anchors { left: parent.left; right: parent.right }
|
color: scope.ListView.isCurrentItem ? "#79f" :
|
||||||
|
|
||||||
height: scriptName.height + 12 + (ListView.isCurrentItem ? scriptName.height + 6 : 0)
|
|
||||||
color: ListView.isCurrentItem ? "#39f" :
|
|
||||||
index % 2 ? "#ddd" : "#eee"
|
index % 2 ? "#ddd" : "#eee"
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
|
@ -131,7 +134,7 @@ Window {
|
||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
onClicked: listView.currentIndex = index
|
onClicked: { listView.currentIndex = index; scope.forceActiveFocus(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
Row {
|
Row {
|
||||||
|
@ -157,6 +160,7 @@ Window {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
id: loadLabel
|
id: loadLabel
|
||||||
|
@ -220,6 +224,7 @@ Window {
|
||||||
anchors.bottom: treeView.top
|
anchors.bottom: treeView.top
|
||||||
anchors.bottomMargin: 8
|
anchors.bottomMargin: 8
|
||||||
placeholderText: "filter"
|
placeholderText: "filter"
|
||||||
|
focus: true
|
||||||
onTextChanged: scriptsModel.filterRegExp = new RegExp("^.*" + text + ".*$", "i")
|
onTextChanged: scriptsModel.filterRegExp = new RegExp("^.*" + text + ".*$", "i")
|
||||||
Component.onCompleted: scriptsModel.filterRegExp = new RegExp("^.*$", "i")
|
Component.onCompleted: scriptsModel.filterRegExp = new RegExp("^.*$", "i")
|
||||||
}
|
}
|
||||||
|
@ -232,7 +237,6 @@ Window {
|
||||||
anchors.left: parent.left
|
anchors.left: parent.left
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
headerVisible: false
|
headerVisible: false
|
||||||
focus: true
|
|
||||||
// FIXME doesn't work?
|
// FIXME doesn't work?
|
||||||
onDoubleClicked: isExpanded(index) ? collapse(index) : expand(index)
|
onDoubleClicked: isExpanded(index) ? collapse(index) : expand(index)
|
||||||
// FIXME not triggered by double click?
|
// FIXME not triggered by double click?
|
||||||
|
@ -261,11 +265,11 @@ Window {
|
||||||
TableViewColumn {
|
TableViewColumn {
|
||||||
title: "Name";
|
title: "Name";
|
||||||
role: "display";
|
role: "display";
|
||||||
// delegate: Text {
|
// delegate: Text {
|
||||||
// text: styleData.value
|
// text: styleData.value
|
||||||
// renderType: Text.QtRendering
|
// renderType: Text.QtRendering
|
||||||
// elite: styleData.elideMode
|
// elite: styleData.elideMode
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue