diff options
author | Adrian Kummerlaender | 2015-06-29 22:31:24 +0200 |
---|---|---|
committer | Adrian Kummerlaender | 2015-06-29 22:31:24 +0200 |
commit | f01eadd3530e61063b43aa615123dcd82ce3d239 (patch) | |
tree | dc75476440857aa3ca4d914feff7bf923e2e2931 /MetaTerm.qml | |
parent | 97e3cfada0d599fe6121d92d52e4782fc02aed08 (diff) | |
download | MetaTerm-f01eadd3530e61063b43aa615123dcd82ce3d239.tar MetaTerm-f01eadd3530e61063b43aa615123dcd82ce3d239.tar.gz MetaTerm-f01eadd3530e61063b43aa615123dcd82ce3d239.tar.bz2 MetaTerm-f01eadd3530e61063b43aa615123dcd82ce3d239.tar.lz MetaTerm-f01eadd3530e61063b43aa615123dcd82ce3d239.tar.xz MetaTerm-f01eadd3530e61063b43aa615123dcd82ce3d239.tar.zst MetaTerm-f01eadd3530e61063b43aa615123dcd82ce3d239.zip |
Added vim-like UI normal and insert modes
Normal mode allows for selecting the a terminal or newline text input.
Insert mode sets the keyboard focus to the currently selected item.
This transforms _MetaTerm_ into a fully keyboard driven application.
Diffstat (limited to 'MetaTerm.qml')
-rw-r--r-- | MetaTerm.qml | 83 |
1 files changed, 79 insertions, 4 deletions
diff --git a/MetaTerm.qml b/MetaTerm.qml index f95baa7..913f514 100644 --- a/MetaTerm.qml +++ b/MetaTerm.qml @@ -2,11 +2,15 @@ import QtQuick 2.0 import QMLTermWidget 1.0 import QtQuick.Controls 1.2 + Rectangle { + id: root anchors.fill: parent color: "#161616" + property string uiMode : "insert" + Flickable { id: terminalListFlickable boundsBehavior: Flickable.StopAtBounds @@ -37,16 +41,26 @@ Rectangle { function nextItem() { if ( activeItem < (children.length - 1) ) { - children[++activeItem].focus(); + children[ activeItem].deselect(); + children[++activeItem].select(); } } function prevItem() { if ( activeItem > 0 ) { - children[--activeItem].focus(); + children[ activeItem].deselect(); + children[--activeItem].select(); } } + function focusItem() { + children[activeItem].forceActiveFocus(); + } + + function unfocusItem() { + children[activeItem].unfocus(); + } + TerminalItem { width: terminalListFlickable.width onExecuted: terminalList.createItem() @@ -58,19 +72,80 @@ Rectangle { } Action { + id: insertTerminalAction + shortcut: "i" + onTriggered: { + switch ( uiMode ) { + case "normal": { + uiMode = "insert"; + terminalList.focusItem(); + break; + } + default: { + break; + } + } + + console.log(uiMode); + } + } + + Action { + id: escapeTerminalAction + shortcut: "Shift+ESC" + onTriggered: { + switch ( uiMode ) { + case "insert": { + uiMode = "normal"; + root.forceActiveFocus(); + terminalList.unfocusItem(); + break; + } + default: { + break; + } + } + + console.log(uiMode); + } + } + + Action { id: nextTerminalAction shortcut: "j" - onTriggered: terminalList.nextItem() + onTriggered: { + switch ( uiMode ) { + case "normal": { + terminalList.nextItem(); + break; + } + default: { + break; + } + } + } } Action { id: prevTerminalAction shortcut: "k" - onTriggered: terminalList.prevItem() + onTriggered: { + switch ( uiMode ) { + case "normal": { + terminalList.prevItem(); + break; + } + default: { + break; + } + } + } } ScrollBar { flickable: terminalListFlickable handleSize: 10 } + + Component.onCompleted: terminalList.focusItem() } |