aboutsummaryrefslogtreecommitdiff
path: root/src/StateHandler.qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/StateHandler.qml')
-rw-r--r--src/StateHandler.qml158
1 files changed, 158 insertions, 0 deletions
diff --git a/src/StateHandler.qml b/src/StateHandler.qml
new file mode 100644
index 0000000..d9f5f5a
--- /dev/null
+++ b/src/StateHandler.qml
@@ -0,0 +1,158 @@
+import QtQuick 2.0
+import QtQuick.Controls 1.2
+import Qt.labs.settings 1.0
+
+Item {
+ id: item
+
+ property Item terminalList : null
+ property CommandInput commandInput : null
+
+ Settings {
+ id: settings
+ category: "keybinding"
+
+ property string insertMode : "i"
+ property string normalMode : "Shift+ESC"
+ property string commandMode : ":"
+ property string nextItem : "j"
+ property string prevItem : "k"
+ property string firstItem : "g"
+ property string resetItem : "d"
+ property string lastItem : "Shift+G"
+ property string heightenItem : "Shift+J"
+ property string shortenItem : "Shift+K"
+ }
+
+ state: "INSERT"
+
+ function enterInsertMode() {
+ enterInsertAction.trigger();
+ }
+
+ function enterNormalMode() {
+ enterNormalAction.trigger();
+ }
+
+ states: [
+ State {
+ name: "NORMAL"
+
+ PropertyChanges { target: enterNormalAction; enabled: false }
+ PropertyChanges { target: enterInsertAction; enabled: true }
+ PropertyChanges { target: enterCommandAction; enabled: true }
+ PropertyChanges { target: nextTerminalAction; enabled: true }
+ PropertyChanges { target: heightenTerminalAction; enabled: true }
+ PropertyChanges { target: shortenTerminalAction; enabled: true }
+ PropertyChanges { target: prevTerminalAction; enabled: true }
+ PropertyChanges { target: lastTerminalAction; enabled: true }
+ PropertyChanges { target: firstTerminalAction; enabled: true }
+ PropertyChanges { target: resetTerminalAction; enabled: true }
+ },
+ State {
+ name: "INSERT"
+
+ PropertyChanges { target: enterNormalAction; enabled: true }
+ PropertyChanges { target: enterInsertAction; enabled: false }
+ PropertyChanges { target: enterCommandAction; enabled: false }
+ PropertyChanges { target: nextTerminalAction; enabled: false }
+ PropertyChanges { target: heightenTerminalAction; enabled: false }
+ PropertyChanges { target: shortenTerminalAction; enabled: false }
+ PropertyChanges { target: prevTerminalAction; enabled: false }
+ PropertyChanges { target: lastTerminalAction; enabled: false }
+ PropertyChanges { target: firstTerminalAction; enabled: false }
+ PropertyChanges { target: resetTerminalAction; enabled: false }
+ },
+ State {
+ name: "COMMAND"
+
+ PropertyChanges { target: enterNormalAction; enabled: true }
+ PropertyChanges { target: enterInsertAction; enabled: false }
+ PropertyChanges { target: enterCommandAction; enabled: false }
+ PropertyChanges { target: nextTerminalAction; enabled: false }
+ PropertyChanges { target: heightenTerminalAction; enabled: false }
+ PropertyChanges { target: shortenTerminalAction; enabled: false }
+ PropertyChanges { target: prevTerminalAction; enabled: false }
+ PropertyChanges { target: lastTerminalAction; enabled: false }
+ PropertyChanges { target: firstTerminalAction; enabled: false }
+ PropertyChanges { target: resetTerminalAction; enabled: false }
+ }
+ ]
+
+ Action {
+ id: enterNormalAction
+ shortcut: settings.normalMode
+ onTriggered: {
+ item.state = "NORMAL";
+
+ terminalList.forceActiveFocus();
+ terminalList.unfocusCurrent();
+ commandInput.unfocus();
+ }
+ }
+
+ Action {
+ id: enterInsertAction
+ shortcut: settings.insertMode
+ onTriggered: {
+ item.state = "INSERT";
+
+ terminalList.focusCurrent();
+ }
+ }
+
+ Action {
+ id: enterCommandAction
+ shortcut: settings.commandMode
+ onTriggered: {
+ item.state = "COMMAND";
+
+ commandInput.focus(shortcut);
+ }
+ }
+
+ Action {
+ id: nextTerminalAction
+ shortcut: settings.nextItem
+ onTriggered: terminalList.selectNext()
+ }
+
+ Action {
+ id: heightenTerminalAction
+ shortcut: settings.heightenItem
+ onTriggered: terminalList.getCurrent().heighten()
+ }
+
+ Action {
+ id: shortenTerminalAction
+ shortcut: settings.shortenItem
+ onTriggered: terminalList.getCurrent().shorten()
+ }
+
+ Action {
+ id: prevTerminalAction
+ shortcut: settings.prevItem
+ onTriggered: terminalList.selectPrev()
+ }
+
+ Action {
+ id: lastTerminalAction
+ shortcut: settings.lastItem
+ onTriggered: terminalList.selectItem(terminalList.children.length - 1)
+ }
+
+ Action {
+ id: firstTerminalAction
+ shortcut: settings.firstItem
+ onTriggered: terminalList.selectItem(0)
+ }
+
+ Action {
+ id: resetTerminalAction
+ shortcut: settings.resetItem
+ onTriggered: {
+ terminalList.getCurrent().reset();
+ terminalList.getCurrent().select();
+ }
+ }
+}