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()  } | 
