Showing 4 changed files with 209 additions and 292 deletions
+1 -1
Nasal/core.nas
... ...
@@ -85,7 +85,7 @@ var deviceClass = {
85 85
         m.display.showInitProgress(m.role);
86 86
         m.buttons  = buttonsClass.new(m.node);
87 87
         m.knobs    = knobsClass.new(m.node);
88
-        m.softkeys = softkeysClass.new(m.node, m.role);
88
+        m.softkeys = softkeysClass.new(m, m.node, m.role);
89 89
         m.display.loadsvg();
90 90
         m.display.loadGroup({
91 91
             hide : [
+110
Nasal/display.nas
... ...
@@ -75,6 +75,10 @@ var displayClass = {
75 75
                 hide : [ ],
76 76
                 clip: [ ],
77 77
             };
78
+
79
+            for (var k = 0; k < 12; k += 1)
80
+                append(groups.text, sprintf("SoftKey%02i-text", k));
81
+
78 82
             if (me.role == 'PFD') {
79 83
                 append(groups.show,
80 84
                     'XPDR-TIME', 
... ...
@@ -156,6 +160,7 @@ var displayClass = {
156 160
             }
157 161
             me._updateRadio({auto:'nav'});
158 162
             me._updateRadio({auto:'comm'});
163
+            me.updateSoftKeys();
159 164
             me.progress.removeAllChildren();
160 165
             me.progress = nil;
161 166
             me.showInitProgress = nil;
... ...
@@ -280,6 +285,45 @@ var displayClass = {
280 285
     },
281 286
 #}}}
282 287
 
288
+    updateSoftKeys : func {
289
+# update SoftKeys boxes {{{
290
+        # grey background code = #353939
291
+        # on PFD the last boxes are always BACK and ALERTS
292
+        if (me.role == 'PFD') {
293
+            me.screenElements[sprintf("SoftKey%02i-text", 11)]
294
+                .setText('ALERTS');
295
+            if (size(me.device.softkeys.path) != 0)
296
+                me.screenElements[sprintf("SoftKey%02i-text", 10)]
297
+                    .setText('BACK');
298
+        }
299
+
300
+        var path = keyMap[me.role];
301
+        foreach (var p; me.device.softkeys.path)
302
+            path = path[p];
303
+
304
+        # feeding with empty menus the first boxes
305
+        var start = (contains(path, 'first')) ? path.first : 0;
306
+        for (var k = 0; k < start; k+=1) {
307
+            me.screenElements[sprintf("SoftKey%02i-text", k)]
308
+                .setText('');
309
+        }
310
+        # filling with the content the next boxes
311
+        forindex (var k; path.texts) {
312
+            var i = k + start;
313
+            me.screenElements[sprintf("SoftKey%02i-text", i)]
314
+                .setText(path.texts[k]);
315
+        }
316
+        # feeding the last boxes with empty string
317
+        var end = (me.role == 'PFD') ? 10 : 12;
318
+        if (size(path.texts) + start < end) {
319
+            start = size(path.texts) + start;
320
+            for (var k = start; k < end; k += 1)
321
+                me.screenElements[sprintf("SoftKey%02i-text", k)]
322
+                    .setText('');
323
+        }
324
+    },
325
+#}}}
326
+
283 327
     updateAI: func(roll,pitch){
284 328
 #{{{
285 329
         if (pitch > 80)
... ...
@@ -651,3 +695,69 @@ var displayClass = {
651 695
     },
652 696
 #}}}
653 697
 };
698
+
699
+var keyMap = {
700
+    PFD : {
701
+        first : 1,
702
+        texts : ['INSET', 'SENSOR', 'PFD', 'OBS', 'CDI', 'DME', 'XPDR', 'IDENT', 'TMR/REF', 'NRST' ],
703
+        INSET : {
704
+            texts : ['OFF', 'DCLTR', 'WXLGND', 'TRAFFIC', 'TOPO', 'TERRAIN', 'STRMSCP', 'NEXRAD-C', 'XM LTNG', 'METAR'],
705
+        },
706
+        SENSOR : {
707
+            first : 2,
708
+            texts : [ 'ADC1', 'ADC2', '', 'AHRS1', 'AHRS2'],
709
+        },
710
+        PFD : {
711
+            texts : [ 'SYN VIS', 'DFLTS', 'AOA/WIND', 'DME', 'BRG', 'HSI FMT', '', '', 'ALT UNIT', 'STD BARO' ],
712
+            'SYN VIS' : {
713
+                texts : [ 'PATHWAY', 'SYN TERR', 'HR2NHDG', 'APTSIGNS', 'FPM'],
714
+            },
715
+            'AOA/WIND' : {
716
+                first : 4,
717
+                texts : ['AOA', 'WIND'],
718
+                AOA : {
719
+                    first : 5,
720
+                    texts : ['AOA ON', 'AOA AUTO'],
721
+                },
722
+                WIND : {
723
+                    first : 2,
724
+                    texts : ['OPTN1', 'OPTN2', '', 'OFF'],
725
+                },
726
+            },
727
+            'HSI FMT' : {
728
+                first : 6,
729
+                texts : ['360 HSI', 'ARC HSI'],
730
+            },
731
+            'ALT UNIT' : {
732
+                first : 5,
733
+                texts : ['METERS', '', 'IN', 'HPA'],
734
+            },
735
+        },
736
+        XPDR : {
737
+            first : 2,
738
+            texts : ['STBY', 'ON', 'ALT', '', 'VFR', 'CODE', 'IDENT'],
739
+            CODE : {
740
+                texts : ['0', '1', '2', '3', '4', '5', '6', '7', 'IDENT', 'BKSP'],
741
+            },
742
+        },
743
+    },
744
+    MFD : {
745
+        texts : ['ENGINE', '', 'MAP', '', '', '', '', '', '', 'DCLTR', 'SHW CHRT', 'CHKLIST'],
746
+        MAP : {
747
+            texts: ['TRAFFIC', 'PROFILE', 'TOPO', 'TERRAIN', 'AIRWAYS', 'STRMSCP','NEXRAD-C', 'XM LTNG', 'METAR', 'LEGEND', 'BACK'],
748
+        },
749
+        CHKLIST : {
750
+            texts : ['ENGINE', '', '', '', '', 'DONE', '', '', '', '', 'EXIT', 'EMERGCY'],
751
+        },
752
+        ENGINE : {
753
+            texts : ['ENGINE', 'ANTI-ICE', '', 'DCLTR', '', 'ASSIST', '', '', '', '', 'FUEL'],
754
+            'ANTI-ICE' : {
755
+                texts : ['LEFT', 'AUTO', 'RIGHT', '', '', '', '', '', '', '', '', 'BACK'],
756
+            },
757
+            FUEL : {
758
+                first : 1,
759
+                texts : ['FULL', 'TABS', '', '', '', '', '', '', '', 'UNDO', 'ENTER'],
760
+            },
761
+        },
762
+    },
763
+};
+86 -279
Nasal/softkeys.nas
... ...
@@ -1,297 +1,104 @@
1 1
 var softkeysClass = {
2
-    new : func (node, role) {
2
+    new : func (device, node, role) {
3 3
         var m = { parents: [ softkeysClass ] };
4 4
         m.node = node;
5
+        m.device = device;
5 6
         m.role = role;
6
-        m.rootmenu = m.role == 'MFD' ? 16 : 0;
7
-        m.goto(m.rootmenu);
7
+        m.path = [];
8 8
         return m;
9 9
     },
10 10
 
11
-    SoftKey : func (n, a) {
12
-        printf("%s softkey %i (%s)", me.role, n, a == 1 ? "pushed" : "released");
13
-#        me._SoftKey[me.rootlevel + me.level][n](a);
14
-    },
15
-
16
-    goto: func (l) {
17
-        me.level = l;
18
-    },
19
-
20
-    GPS: func { 
21
-        nyi('GPS softkey');
22
-        me.goto(me.rootmenu);
11
+    clean : func {
12
+        # deletes unsed bindings
13
+        foreach (var b; me.bindings)
14
+            if (b != role)
15
+                delete(bindings, b);
23 16
     },
24 17
 
25
-    CDIOFF: func {
26
-        cdi.getNode('visible').setBoolValue(0);
27
-        radios.getNode('nav1-selected').setIntValue(0);
28
-        radios.getNode('nav2-selected').setIntValue(0);
29
-        cdi.getNode('in-range').unalias();
30
-        cdi.getNode('course').unalias();
31
-        cdi.getNode('course-deflection').unalias();
32
-        cdi.getNode('pointer-type').setIntValue(0);
33
-        cdi.getNode('from-flag').unalias();
34
-        var mode = nil;
35
-        mode = getprop('/autopilot/locks/roll');
36
-        if (mode == 'NAV' or mode == 'APR')
37
-            AFCS.ROLL();
38
-        mode = getprop('/autopilot/locks/pitch');
39
-        if (mode == 'GS' or mode == 'APR')
40
-            AFCS.PIT();
41
-        me.goto(me.rootmenu);
42
-    },
43
-
44
-    VOR: func (n) {
45
-        radios.getNode('nav' ~ (2-n) ~ '-selected').setIntValue(0);
46
-        radios.getNode('nav' ~ (1+n) ~ '-selected').setIntValue(1);
47
-        CDIfromNAV(n);
48
-        me.goto(me.rootmenu);
49
-    },
50
-
51
-    NRST: func {
52
-        var title = me.mud.node.getNode('title').getValue();
53
-        if (substr(title, 0, 8) == 'NEAREST ') {
54
-            me.mud.close();
55
-            me.largeFMSknob = void;
56
-            me.smallFMSknob = void;
57
-        }
58
-        else {
59
-            lockSearches();
60
-            searchNearestNavaid('airport', 10);
61
-            showSearchResults(me.mud, 'NEAREST AIRPORTS', 'mag-bearing-deg', 
62
-                    func { msg('set HDG to ' ~ arg[0][0]);
63
-                        setprop('/instrumentation/zkv1000/afcs/heading-bug-deg', arg[0][0]) 
64
-                    }
65
-            );
66
-            unlockSearches();
67
-            me.smallFMSknob = func (dir) { selectSearchType(me.mud, dir) };
68
-            me.largeFMSknob = func (dir) { me.mud.select(dir) };
18
+    SoftKey : func (n, a) {
19
+        # released key not yet managed
20
+        if (a == 1)
21
+            return;
22
+
23
+        var key = me.device.display.screenElements[sprintf("SoftKey%02i-text",n)].get('text');
24
+        if (key == '' or key == nil)
25
+            return;
26
+
27
+        var path = keyMap[me.role];
28
+        foreach(var p; me.path) {
29
+            if (contains(path, p))
30
+                path = path[p];
31
+            else
32
+                break;
69 33
         }
70
-    },
71 34
 
72
-    INSETOFF: func { 
73
-        me.newstatus(1);
74
-    },
75
-
76
-    TRAFFIC: func {
77
-        if (props.globals.getNode('/instrumentation/radar/serviceable') != nil 
78
-        and props.globals.getNode('/instrumentation/radar/display-controls/tcas') != nil) {
79
-            if (getprop('/instrumentation/radar/serviceable') 
80
-            and getprop('/instrumentation/radar/display-controls/tcas')) {
81
-                me.newstatus(5);
82
-            }
83
-        }
84
-        else {
85
-            msg('unable to find TCAS config, no radar');
86
-            me.goto(me.rootmenu);
35
+        var bindings = me.bindings[me.role];
36
+        foreach(var p; me.path) {
37
+            if (contains(bindings, p))
38
+                bindings = bindings[p];
39
+            else
40
+                break;
87 41
         }
88
-    },
89
-
90
-    TOPO: func { 
91
-        me.newstatus(2);
92
-        me.node.getNode('mfd-title').setValue('TOPO');
93
-        setprop(me.map_path ~ '/longitude-deg', getprop('/position/longitude-deg'));
94
-        setprop(me.map_path ~ '/latitude-deg', getprop('/position/latitude-deg'));
95
-        me.map.getNode('latitude-deg').alias('/position/latitude-deg');
96
-        me.map.getNode('longitude-deg').alias('/position/longitude-deg');
97
-    },
98
-
99
-    TERRAIN: func {
100
-        me.newstatus(3);
101
-        me.node.getNode('mfd-title').setValue('TERR ' ~ mapRanges[getprop(me.map_path ~ '/range-index')]);
102
-        me.map.getNode('latitude-deg').unalias();
103
-        me.map.getNode('longitude-deg').unalias();
104
-        setprop(me.map_path ~ '/longitude-deg', getprop('/position/longitude-deg'));
105
-        setprop(me.map_path ~ '/latitude-deg', getprop('/position/latitude-deg'));
106
-    },
107
-
108
-    STRMSCP: func { 
109
-        nyi('STRMSCP softkey');
110
-        me.goto(me.rootmenu);
111
-    },
112
-
113
-    NEXRAD: func { 
114
-        nyi('NEXRAD softkey');
115
-        me.goto(me.rootmenu);
116
-    },
117
-
118
-    XMLTNG: func { 
119
-        nyi('XMLTNG softkey');
120
-        me.goto(me.rootmenu);
121
-    },
122
-
123
-    DCLTROFF: func { 
124
-        nyi('DCLTROFF softkey');
125
-        me.goto(me.rootmenu);
126
-    },
127
-
128
-    DCLTR: func (x) { 
129
-        nyi('DCLTR' ~ x ~ ' softkey');
130
-        me.goto(me.rootmenu);
131
-    },
132
-
133
-    DFLTS: func { 
134
-        nyi('DEFAULTS softkey');
135
-        me.goto(me.rootmenu);
136
-    },
137
-
138
-    DME: func { 
139
-        nyi('DME softkey');
140
-        me.goto(me.rootmenu);
141
-    },
142
-
143
-    STDBARO: func { 
144
-        setprop('/instrumentation/altimeter/setting-inhg', 29.92);
145
-        me.goto(me.rootmenu);
146
-    },
147
-
148
-    BRG1: func (x) { 
149
-        nyi('BRG1' ~ x ~ ' softkey');
150
-        me.goto(me.rootmenu);
151
-    },
152
-
153
-    BRG2: func (x) { 
154
-        nyi('BRG2' ~ x ~ ' softkey');
155
-        me.goto(me.rootmenu);
156
-    },
157
-
158
-    BRGOFF: func (x) { 
159
-        nyi('BRGOFF' ~ x ~ ' softkey');
160
-        me.goto(me.rootmenu);
161
-    },
162
-
163
-    HSI360: func { 
164
-        me.node.getNode('hsi-360').setBoolValue(1);
165
-        me.goto(me.rootmenu);
166
-    },
167
-
168
-    HSIARC: func { 
169
-        me.node.getNode('hsi-360').setBoolValue(0);
170
-        me.goto(me.rootmenu);
171
-    },
172
-
173
-    OPTN: func (x) { 
174
-        me.node.getNode('wind-data').setBoolValue(1);
175
-        wind_infos = zkv1000['wind_opt' ~ x];
176
-        me.goto(me.rootmenu);
177
-    },
178
-
179
-    WINDOFF: func { 
180
-        wind_infos = void;
181
-        me.node.getNode('wind-data').setBoolValue(1);
182
-        setprop('/instrumentation/zkv1000/infos/wind-line', '');
183
-        setprop('/instrumentation/zkv1000/infos/wind-line[1]', '');
184
-        me.goto(me.rootmenu);
185
-    },
186
-
187
-    METERS: func { 
188
-        nyi('METERS softkey');
189
-        me.goto(me.rootmenu);
190
-    },
191
-
192
-    IN: func { 
193
-        nyi('IN softkey');
194
-        me.goto(me.rootmenu);
195
-    },
196
-
197
-    HPA: func { 
198
-        nyi('HPA softkey');
199
-        me.goto(me.rootmenu);
200
-    },
201 42
 
202
-    ON: func { 
203
-        setprop('/instrumentation/zkv1000/radios/xpdr-mode', 'ON');
204
-        setprop('/instrumentation/transponder/serviceable', 1);
205
-        me.goto(me.rootmenu);
206
-    },
207
-
208
-    ALT: func { 
209
-        setprop('/instrumentation/zkv1000/radios/xpdr-mode', 'ALT');
210
-        setprop('/instrumentation/transponder/serviceable', 1);
211
-        me.goto(me.rootmenu);
212
-    },
213
-
214
-    GND: func {
215
-        setprop('/instrumentation/zkv1000/radios/xpdr-mode', 'GND');
216
-        setprop('/instrumentation/transponder/serviceable', 1);
217
-        me.goto(me.rootmenu);
218
-    },
219
-
220
-    VFR: func { 
221
-        XPDR_old = getprop('/instrumentation/transponder/id-code');
222
-        setprop('/instrumentation/zkv1000/radios/xpdr-mode', 'VFR');
223
-        setprop('/instrumentation/transponder/serviceable', 0);
224
-        me.goto(me.rootmenu);
225
-    },
226
-
227
-    XPDR: func (x) {
228
-        if (x <= 7) {
229
-            if (XPDR_n == 3) {
230
-                XPDR_old = getprop('/instrumentation/transponder/id-code');
231
-            }
232
-            elsif (XPDR_n < 0) {
233
-                me.goto(10);
234
-                XPDR_n = 3;
235
-                return;
236
-            }
237
-            else {
238
-                setprop('/instrumentation/transponder/id-code', x * math.pow(10, XPDR_n));
239
-                XPDR_n -= 1;
240
-            }
241
-        }
242
-        else {
243
-            if (x == 9) setprop('/instrumentation/transponder/id-code', XPDR_old);
244
-            XPDR_n = 3;
245
-            me.goto(me.rootmenu);
43
+        if (contains(path, key)) {
44
+            append(me.path, key);
45
+            me.device.display.updateSoftKeys();
246 46
         }
247
-    },
248
-
249
-    CODE: func {
250
-        getprop('/instrumentation/zkv1000/radios/xpdr-mode') == 'STBY' or return;
251
-        me.largeFMSknob = func (x) { 
252
-            XPDR_change_cursor_position(x); 
253
-            settimer(func { me.ENTsoftkey(1) }, 10); 
47
+        elsif (contains(bindings, key)) {
48
+            call(bindings[key], [], me);
254 49
         }
255
-        me.smallFMSknob = func (x) { 
256
-            XPDR_enter_digits(x);
257
-            settimer(func { me.ENTsoftkey(1) }, 10); 
50
+        elsif (key == 'BACK') {
51
+            pop(me.path);
52
+            me.device.display.updateSoftKeys();
258 53
         }
259
-        me.goto(11);
54
+        else
55
+            print(me.device.role ~ '/' ~ key ~ ' : not yet implemented');
56
+    },
57
+
58
+    bindings : {
59
+        PFD : {
60
+            INSET: {
61
+                OFF: func {
62
+                    pop(me.path);
63
+                    me.device.display.updateSoftKeys();
64
+                },
65
+            },
66
+            PFD: {
67
+                'STD BARO': func {
68
+                    pop(me.path);
69
+                    me.device.display.updateSoftKeys();
70
+                },
71
+            },
72
+            XPDR: {
73
+                CODE: {
74
+                    IDENT: func {
75
+                        me.path = [];
76
+                        me.device.display.updateSoftKeys();
77
+                    },
78
+                    BACK: func {
79
+                        me.path = [];
80
+                        me.device.display.updateSoftKeys();
81
+                    },
82
+                },
83
+            },
84
+        },
85
+        MFD : {
86
+            ENGINE: {
87
+                FUEL: {
88
+                    UNDO: func {
89
+                        pop(me.path);
90
+                        me.device.display.updateSoftKeys();
91
+                    },
92
+                    ENTER: func {
93
+                        pop(me.path);
94
+                        me.device.display.updateSoftKeys();
95
+                    },
96
+                },
97
+                ENGINE: func {
98
+                    me.path = [];
99
+                    me.device.display.updateSoftKeys();
100
+                },
101
+            },
102
+        },
260 103
     },
261
-
262
-    TMRREF: func (ref) { 
263
-        time = zkv1000['time' ~ ref];
264
-        me.goto(me.rootmenu);
265
-    },
266
-
267
-    CHRON: func {
268
-        fgcommand('dialog-show', props.Node.new({
269
-            'dialog-name': 'stopwatch-dialog',
270
-        }));
271
-        me.goto(me.rootmenu);
272
-    },
273
-
274
-    set_softkeyActionTable: func {
275
-        me.softkeyActionTable = [
276
-            [void,               func{me.goto(2)},void,             func{me.goto(4)},  void,              func{me.goto(1)},  ADFDME,            func{me.goto(10)},IDENT,            func{me.goto(17)}, func{me.NRST()}],
277
-            [void,               func{me.VOR(0)}, func{me.VOR(1)},  func{me.GPS()},    void,              void,              func{me.CDIOFF()}, void,             void,             void,              func{me.goto(me.rootmenu)}],
278
-            [func{me.INSETOFF()},func{me.goto(3)},void,             func{me.TRAFFIC()},func{me.TOPO()},   func{me.TERRAIN()},func{me.STRMSCP()},func{me.NEXRAD()},func{me.XMLTNG()},void,              func{me.goto(me.rootmenu)}],
279
-            [func{me.DCLTROFF()},void,            func{me.DCLTR(1)},func{me.DCLTR(2)}, func{me.DCLTR(3)}, void,              void,              void,             void,             void,              func{me.goto(2)}],
280
-            [LIGHT,              func{me.DFLTS()},func{me.goto(8)}, func{me.DME()},    func{me.goto(5)},  func{me.goto(7)},  func{me.goto(6)},  void,             func{me.goto(9)}, func{me.STDBARO()},func{me.goto(me.rootmenu)}],
281
-            [func{me.BRG1(1)},   func{me.BRG1(2)},func{me.BRG1(3)}, void,              func{me.BRGOFF(1)},void,              void,              void,             void,             void,              func{me.goto(4)}],
282
-            [func{me.BRG2(1)},   func{me.BRG2(2)},func{me.BRG2(3)}, void,              func{me.BRGOFF(2)},void,              void,              void,             void,             void,              func{me.goto(4)}],
283
-            [void,               void,            void,             void,              void,              func{me.HSI360()}, func{me.HSIARC()}, void,             void,             void,              func{me.goto(4)}],
284
-            [void,               void,            func{me.OPTN(1)}, func{me.OPTN(2)},  func{me.OPTN(3)},  void,              func{me.WINDOFF()},void,             void,             void,              func{me.goto(4)}],
285
-            [void,               void,            void,             void,              void,              func{me.METERS()}, void,              func{me.IN()},    func{me.HPA()},   void,              func{me.goto(4)}],
286
-            [void,               void,            STDBY,            func{me.ON()},     func{me.ALT()},    func{me.GND()},    func{me.VFR()},    func{me.CODE()},  IDENT,            void,              func{me.goto(me.rootmenu)}],
287
-            [func{me.XPDR(0)},   func{me.XPDR(1)},func{me.XPDR(2)}, func{me.XPDR(3)},  func{me.XPDR(4)},  func{me.XPDR(5)},  func{me.XPDR(6)},  func{me.XPDR(7)}, func{me.XPDR(8)}, BKSP,              func{me.XPDR(9)}],
288
-            [func{me.newstatus(1)},func{me.goto(15)},void,          func{me.goto(14)}, void,              func{me.goto(13)}, void,              CHECKLIST,        void,             void,              void],
289
-            [void,               void,            func{me.DCLTR(1)},void,              func{me.DCLTR(2)}, void,              func{me.DCLTR(3)}, void,             void,             void,              func{me.goto(me.rootmenu)}],
290
-            [void,               void,            void,             func{me.TRAFFIC()},func{me.TOPO()},   func{me.TERRAIN()},func{me.STRMSCP()},func{me.NEXRAD()},func{me.XMLTNG()},void,              func{me.goto(me.rootmenu)}],
291
-            [func{me.goto(me.rootmenu)},void,     LEAN,             void,              void,              void,              func{FUEL(1)},     func{FUEL(2)},    func{FUEL(3)},    void,              void],
292
-            [func{me.newstatus(2)},func{me.goto(2)},void,             func{me.goto(4)},  void,              func{me.goto(1)},  ADFDME,            func{me.goto(10)},IDENT,            func{me.goto(17)}, func{me.NRST()}],
293
-            [func{me.TMRREF('LCL')},func{me.TMRREF('UTC')},void,    func{me.TMRREF('RL')},void,           func{me.CHRON()},  void,              void,             void,             void,              func{me.goto(me.rootmenu)}],
294
-        ];
295
-    },
296
-
297 104
 };
+12 -12
Systems/screen.svg
... ...
@@ -7160,7 +7160,7 @@
7160 7160
        height="24.000597"
7161 7161
        width="83.8013"
7162 7162
        id="SoftKey02-bg"
7163
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7163
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7164 7164
        inkscape:label="SoftKey02-bg" />
7165 7165
     <path
7166 7166
        inkscape:connector-curvature="0"
... ...
@@ -7181,7 +7181,7 @@
7181 7181
          sodipodi:role="line"
7182 7182
          style="font-size:17.5px;line-height:1.25">XXXXXXXX</tspan></text>
7183 7183
     <rect
7184
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7184
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7185 7185
        id="SoftKey01-bg"
7186 7186
        width="83.8013"
7187 7187
        height="24.000597"
... ...
@@ -7207,7 +7207,7 @@
7207 7207
          y="711.67462"
7208 7208
          style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:17.5px;line-height:125%;font-family:'Liberation Sans Narrow';-inkscape-font-specification:'Liberation Sans Narrow, Condensed';text-align:center;writing-mode:lr-tb;text-anchor:middle">XXXXXXXX</tspan></text>
7209 7209
     <rect
7210
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7210
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7211 7211
        id="SoftKey03-bg"
7212 7212
        width="83.8013"
7213 7213
        height="24.000597"
... ...
@@ -7234,7 +7234,7 @@
7234 7234
          y="711.67462"
7235 7235
          style="font-size:17.5px;line-height:1.25">XXXXXXXX</tspan></text>
7236 7236
     <rect
7237
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7237
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7238 7238
        id="SoftKey04-bg"
7239 7239
        width="83.8013"
7240 7240
        height="24.000597"
... ...
@@ -7261,7 +7261,7 @@
7261 7261
          y="711.67462"
7262 7262
          style="font-size:17.5px;line-height:1.25">XXXXXXXX</tspan></text>
7263 7263
     <rect
7264
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7264
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7265 7265
        id="SoftKey06-bg"
7266 7266
        width="83.8013"
7267 7267
        height="24.000597"
... ...
@@ -7292,7 +7292,7 @@
7292 7292
        height="24.000597"
7293 7293
        width="83.8013"
7294 7294
        id="SoftKey05-bg"
7295
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7295
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7296 7296
        inkscape:label="SoftKey05-bg" />
7297 7297
     <path
7298 7298
        inkscape:connector-curvature="0"
... ...
@@ -7318,7 +7318,7 @@
7318 7318
        height="24.000597"
7319 7319
        width="83.8013"
7320 7320
        id="SoftKey07-bg"
7321
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7321
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7322 7322
        inkscape:label="SoftKey07-bg" />
7323 7323
     <path
7324 7324
        inkscape:connector-curvature="0"
... ...
@@ -7344,7 +7344,7 @@
7344 7344
        height="24.000597"
7345 7345
        width="83.8013"
7346 7346
        id="SoftKey08-bg"
7347
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7347
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7348 7348
        inkscape:label="SoftKey08-bg" />
7349 7349
     <path
7350 7350
        inkscape:connector-curvature="0"
... ...
@@ -7370,7 +7370,7 @@
7370 7370
        height="24.000597"
7371 7371
        width="83.8013"
7372 7372
        id="SoftKey10-bg"
7373
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7373
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7374 7374
        inkscape:label="SoftKey10-bg" />
7375 7375
     <path
7376 7376
        inkscape:connector-curvature="0"
... ...
@@ -7391,7 +7391,7 @@
7391 7391
          sodipodi:role="line"
7392 7392
          style="font-size:17.5px;line-height:1.25">XXXXXXXX</tspan></text>
7393 7393
     <rect
7394
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7394
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7395 7395
        id="SoftKey09-bg"
7396 7396
        width="83.8013"
7397 7397
        height="24.000597"
... ...
@@ -7417,7 +7417,7 @@
7417 7417
          y="711.67462"
7418 7418
          style="font-size:17.5px;line-height:1.25">XXXXXXXX</tspan></text>
7419 7419
     <rect
7420
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7420
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7421 7421
        id="SoftKey11-bg"
7422 7422
        width="83.8013"
7423 7423
        height="24.000597"
... ...
@@ -7448,7 +7448,7 @@
7448 7448
        height="24.000597"
7449 7449
        width="83.8013"
7450 7450
        id="SoftKey00-bg"
7451
-       style="display:inline;fill:#353939;fill-opacity:1;stroke:none"
7451
+       style="display:inline;fill:#000000;fill-opacity:1;stroke:none"
7452 7452
        inkscape:label="SoftKey00-bg" />
7453 7453
     <path
7454 7454
        inkscape:connector-curvature="0"