aboutsummaryrefslogtreecommitdiff
path: root/MetaTerm.qml
diff options
context:
space:
mode:
authorAdrian Kummerlaender2015-06-29 22:31:24 +0200
committerAdrian Kummerlaender2015-06-29 22:31:24 +0200
commitf01eadd3530e61063b43aa615123dcd82ce3d239 (patch)
treedc75476440857aa3ca4d914feff7bf923e2e2931 /MetaTerm.qml
parent97e3cfada0d599fe6121d92d52e4782fc02aed08 (diff)
downloadMetaTerm-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.qml83
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()
}