diff --git a/interface/resources/qml/dialogs/FileDialog.qml b/interface/resources/qml/dialogs/FileDialog.qml index 10dd4897e3..916ef434b6 100644 --- a/interface/resources/qml/dialogs/FileDialog.qml +++ b/interface/resources/qml/dialogs/FileDialog.qml @@ -181,7 +181,11 @@ ModalWindow { upButton.enabled = Qt.binding(function() { return (model.parentFolder && model.parentFolder != "") ? true : false; }); showFiles = !root.selectDirectory } - onFolderChanged: fileTableView.currentRow = 0; + onFolderChanged: { + fileTableView.selection.clear(); + fileTableView.selection.select(0); + fileTableView.currentRow = 0; + } } function navigateToRow(row) { @@ -199,6 +203,59 @@ ModalWindow { 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 { diff --git a/interface/resources/qml/dialogs/fileDialog/FileTableView.qml b/interface/resources/qml/dialogs/fileDialog/FileTableView.qml index de9126c987..93cdeebab0 100644 --- a/interface/resources/qml/dialogs/fileDialog/FileTableView.qml +++ b/interface/resources/qml/dialogs/fileDialog/FileTableView.qml @@ -3,6 +3,11 @@ import QtQuick.Controls 1.4 TableView { id: root + onActiveFocusChanged: { + if (activeFocus && currentRow == -1) { + root.selection.select(0) + } + } itemDelegate: Component { Item { diff --git a/interface/resources/qml/hifi/dialogs/RunningScripts.qml b/interface/resources/qml/hifi/dialogs/RunningScripts.qml index f61bf3f96d..8834c1d8bc 100644 --- a/interface/resources/qml/hifi/dialogs/RunningScripts.qml +++ b/interface/resources/qml/hifi/dialogs/RunningScripts.qml @@ -90,6 +90,7 @@ Window { } ScrollView { + onActiveFocusChanged: if (activeFocus && listView.currentItem) { listView.currentItem.forceActiveFocus(); } anchors { top: allButtons.bottom; left: parent.left; @@ -103,54 +104,57 @@ Window { id: listView clip: true anchors { fill: parent; margins: 0 } - model: runningScriptsModel - - delegate: Rectangle { - id: rectangle - clip: true - radius: 3 + delegate: FocusScope { + id: scope anchors { left: parent.left; right: parent.right } - height: scriptName.height + 12 + (ListView.isCurrentItem ? scriptName.height + 6 : 0) - color: ListView.isCurrentItem ? "#39f" : - index % 2 ? "#ddd" : "#eee" - - Text { - id: scriptName - anchors { left: parent.left; leftMargin: 4; top: parent.top; topMargin:6 } - text: name - } - - Text { - id: scriptUrl - anchors { left: scriptName.left; right: parent.right; rightMargin: 4; top: scriptName.bottom; topMargin: 6 } - text: url - elide: Text.ElideMiddle - } - - MouseArea { + Keys.onDownPressed: listView.incrementCurrentIndex() + Keys.onUpPressed: listView.decrementCurrentIndex() + Rectangle { + id: rectangle anchors.fill: parent - onClicked: listView.currentIndex = index - } + clip: true + radius: 3 + color: scope.ListView.isCurrentItem ? "#79f" : + index % 2 ? "#ddd" : "#eee" - Row { - anchors.verticalCenter: scriptName.verticalCenter - anchors.right: parent.right - anchors.rightMargin: 4 - spacing: 4 - HifiControls.FontAwesome { - text: "\uf021"; size: scriptName.height; - MouseArea { - anchors { fill: parent; margins: -2; } - onClicked: reloadScript(model.url) - } + Text { + id: scriptName + anchors { left: parent.left; leftMargin: 4; top: parent.top; topMargin:6 } + text: name } - HifiControls.FontAwesome { - size: scriptName.height; text: "\uf00d" - MouseArea { - anchors { fill: parent; margins: -2; } - onClicked: stopScript(model.url) + + Text { + id: scriptUrl + anchors { left: scriptName.left; right: parent.right; rightMargin: 4; top: scriptName.bottom; topMargin: 6 } + text: url + elide: Text.ElideMiddle + } + + MouseArea { + anchors.fill: parent + onClicked: { listView.currentIndex = index; scope.forceActiveFocus(); } + } + + Row { + anchors.verticalCenter: scriptName.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 4 + spacing: 4 + HifiControls.FontAwesome { + text: "\uf021"; size: scriptName.height; + MouseArea { + anchors { fill: parent; margins: -2; } + onClicked: reloadScript(model.url) + } + } + HifiControls.FontAwesome { + size: scriptName.height; text: "\uf00d" + MouseArea { + anchors { fill: parent; margins: -2; } + onClicked: stopScript(model.url) + } } } } @@ -220,6 +224,7 @@ Window { anchors.bottom: treeView.top anchors.bottomMargin: 8 placeholderText: "filter" + focus: true onTextChanged: scriptsModel.filterRegExp = new RegExp("^.*" + text + ".*$", "i") Component.onCompleted: scriptsModel.filterRegExp = new RegExp("^.*$", "i") } @@ -232,7 +237,6 @@ Window { anchors.left: parent.left anchors.right: parent.right headerVisible: false - focus: true // FIXME doesn't work? onDoubleClicked: isExpanded(index) ? collapse(index) : expand(index) // FIXME not triggered by double click? @@ -258,14 +262,14 @@ Window { console.log("Desktop size " + Qt.size(desktop.width, desktop.height)); } - TableViewColumn { + TableViewColumn { title: "Name"; role: "display"; -// delegate: Text { -// text: styleData.value -// renderType: Text.QtRendering -// elite: styleData.elideMode -// } + // delegate: Text { + // text: styleData.value + // renderType: Text.QtRendering + // elite: styleData.elideMode + // } } }