blob: 9c1636f3630acc30d3f879af5a251c426ddfd2d9 (
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
120
121
122
123
124
125
|
import QtQuick 2.0
import QtQuick.Layouts 1.1
Item {
id: item
property int activeItem : 0
property int itemIndex : 0
property alias children : column.children
property Component terminalItem : Component { TerminalItem { } }
function onItemExecuted(index) {
if ( index === (children.length - 1) ) {
createItem();
}
}
function createItem() {
var instantiateTerminal = function() {
var instance = terminalItem.createObject(column, {
"index" : itemIndex,
"width" : flickable.width
});
instance.onExecuted.connect(onItemExecuted);
++itemIndex;
}
if ( terminalItem.status === Component.Ready ) {
instantiateTerminal();
} else {
terminalItem.statusChanged.connect(instantiateTerminal);
}
}
function scrollTo(index) {
if ( column.height >= flickable.height ) {
var offset = children[index].y
+ (children[index].height / 2)
- (flickable.height / 2);
var bound = column.height
- flickable.height;
if ( offset < 0 ) {
flickable.contentY = 0;
} else if ( offset >= bound ) {
flickable.contentY = bound;
} else {
flickable.contentY = offset;
}
}
}
function selectItem(index) {
children[activeItem].deselect();
children[index ].select();
activeItem = typeof index === "number" ? index : parseInt(index);
scrollTo(index);
}
function selectNext() {
if ( activeItem < (children.length - 1) ) {
selectItem(activeItem + 1);
} else {
mode.enterInsertMode();
}
}
function selectPrev() {
if ( activeItem > 0 ) {
selectItem(activeItem - 1);
}
}
function focusCurrent() {
children[activeItem].forceActiveFocus();
}
function unfocusCurrent() {
children[activeItem].unfocus();
}
function getCurrent() {
return children[activeItem];
}
function get(index) {
return children[index];
}
function iterate(func) {
for ( var i = 0; i < children.length; i++ ) {
func(children[i]);
}
}
Flickable {
id: flickable
anchors.fill: parent
boundsBehavior: Flickable.StopAtBounds
contentHeight: column.height
contentWidth: parent.width
pixelAligned: true
Column {
id: column
anchors {
left: parent.left
right: parent.right
}
spacing: 10
onHeightChanged: scrollTo(activeItem)
}
}
}
|