1 contributor
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
var softkeysClass = {
new : func (device, node, role) {
var m = { parents: [ softkeysClass ] };
m.node = node;
m.device = device;
m.role = role;
m.path = [];
return m;
},
clean : func {
foreach (var b; keys(me.bindings))
if (b != me.role)
delete(me.bindings, b);
},
SoftKey : func (n, a) {
if (a == 1)
return;
var key = me.device.display.screenElements[sprintf("SoftKey%02i-text",n)].get('text');
if (key == '' or key == nil)
return;
var path = keyMap[me.role];
foreach(var p; me.path) {
if (contains(path, p))
path = path[p];
else
break;
}
var bindings = me.bindings[me.role];
foreach(var p; me.path) {
if (contains(bindings, p))
bindings = bindings[p];
else
break;
}
if (contains(path, key)) {
append(me.path, key);
me.device.display.updateSoftKeys();
}
elsif (contains(bindings, key)) {
call(bindings[key], [], me);
}
elsif (key == 'BACK') {
pop(me.path);
me.device.display.updateSoftKeys();
}
else
print(me.device.role ~ '/' ~ key ~ ' : not yet implemented');
},
bindings : {
PFD : {
INSET: {
OFF: func {
pop(me.path);
me.device.display.updateSoftKeys();
},
},
PFD: {
'STD BARO': func {
pop(me.path);
me.device.display.updateSoftKeys();
},
},
XPDR: {
CODE: {
IDENT: func {
me.path = [];
me.device.display.updateSoftKeys();
},
BACK: func {
me.path = [];
me.device.display.updateSoftKeys();
},
},
},
},
MFD : {
ENGINE: {
FUEL: {
UNDO: func {
pop(me.path);
me.device.display.updateSoftKeys();
},
ENTER: func {
pop(me.path);
me.device.display.updateSoftKeys();
},
},
ENGINE: func {
me.path = [];
me.device.display.updateSoftKeys();
},
},
},
},
};