aboutsummaryrefslogtreecommitdiff
path: root/MetaTerm.qml
blob: 76185948bba06c81ef9b8ac78a7ad2f8047d37df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import QtQuick 2.0
import QMLTermWidget 1.0
import QtQuick.Controls 1.2


Rectangle {
	id: root
	anchors.fill: parent

	color: "#161616"

	Flickable {
		id: terminalListFlickable
		boundsBehavior: Flickable.StopAtBounds
		anchors.fill: parent

		Column {
			id: terminalList
			spacing: 10

			property int activeItem : 0

			function createItem() {
				var terminalItem = Qt.createComponent("TerminalItem.qml");
				var instantiateTerminal = function() {
					var instance = terminalItem.createObject(terminalList, {
						"width": terminalListFlickable.width
					});
					instance.onExecuted.connect(createItem);
				}

				if ( terminalItem.status == Component.Ready ) {
					instantiateTerminal();
				} else {
					terminalItem.statusChanged.connect(instantiateTerminal);
				}
			}

			function nextItem() {
				if ( activeItem < (children.length - 1) ) {
					children[  activeItem].deselect();
					children[++activeItem].select();
				}
			}

			function prevItem() {
				if ( activeItem > 0 ) {
					children[  activeItem].deselect();
					children[--activeItem].select();
				}
			}

			function focusItem() {
				children[activeItem].forceActiveFocus();
			}

			function unfocusItem() {
				children[activeItem].unfocus();
			}

			TerminalItem {
				width: terminalListFlickable.width
				onExecuted: terminalList.createItem()
			}
		}

		contentHeight: terminalList.height
		contentWidth:  terminalList.width
	}

	Action {
		id: insertTerminalAction
		shortcut: "i"
		enabled: false
		onTriggered: {
			escapeTerminalAction.enabled = true;
			insertTerminalAction.enabled = false;
			nextTerminalAction.enabled   = false;
			prevTerminalAction.enabled   = false;

			terminalList.focusItem();
		}
	}

	Action {
		id: escapeTerminalAction
		shortcut: "Shift+ESC"
		onTriggered: {
			escapeTerminalAction.enabled = false;
			insertTerminalAction.enabled = true;
			nextTerminalAction.enabled   = true;
			prevTerminalAction.enabled   = true;

			root.forceActiveFocus();
			terminalList.unfocusItem();
		}
	}

	Action {
		id: nextTerminalAction
		shortcut: "j"
		enabled: false
		onTriggered: terminalList.nextItem()
	}

	Action {
		id: prevTerminalAction
		shortcut: "k"
		enabled: false
		onTriggered: terminalList.prevItem()
	}

	ScrollBar {
		flickable: terminalListFlickable
		handleSize: 10
	}

	Component.onCompleted: terminalList.focusItem()
}