Showing 3 changed files with 93 additions and 15 deletions
+22
Nasal/buttons.nas
... ...
@@ -51,6 +51,28 @@ var buttonsClass = {
51 51
         setprop('/instrumentation/zkv1000/afcs/selected-alt-ft', math.round(alt, 10));
52 52
     },
53 53
 
54
+    ValidateTMRREF : func (a = 0) {
55
+        if (a)
56
+            return;
57
+        var (id, selected) = split('-', me.device.windows.selected);
58
+        var state = me.device.windows.state[id];
59
+        selected += state.scroll.offset;
60
+        if (contains(state.objects[selected], 'callback'))
61
+            call(state.objects[selected].callback, [id, selected], me);
62
+    },
63
+
64
+    ClearTMRREF : func (a = 0) {
65
+        if (a)
66
+            return;
67
+        me.device.windows.del();
68
+        me.device.data.TMRtimer = nil;
69
+        me.device.knobs.FmsInner = func;
70
+        me.device.knobs.FmsOuter = func;
71
+        me.device.buttons.ENT = func;
72
+        me.device.buttons.FMS = func;
73
+        me.device.buttons.CLR = func;
74
+    },
75
+
54 76
     DirectTo : void,
55 77
     MENU : void,
56 78
     FPL : void,
+69 -14
Nasal/softkeys.nas
... ...
@@ -297,6 +297,60 @@ var softkeysClass = {
297 297
             },
298 298
             'TMR/REF' : func {
299 299
                 if (!contains(me.device.windows.state, 'TMR/REF')) {
300
+                    var Vspeed_visiblity = func (id, selected, Vspeed)
301
+                        me.device.data[Vspeed ~ '-visible'] =
302
+                            me.device.windows.state[id].objects[selected].text
303
+                            ==
304
+                            me.device.windows.state[id].objects[selected].choices[0];
305
+                    var GenericTimer = func (id, selected) {
306
+                        var action = me.device.windows.state[id].objects[selected].text;
307
+                        if (action == 'START?') {
308
+                            me.device.data.TMRrevert = 0;
309
+                            me.device.data.TMRlast = getprop('/sim/time/elapsed-sec') - 1;
310
+                            me.device.data.TMRreset = me.device.windows.state[id].objects[selected - 2].text;
311
+                            me.device.data.TMRtimer = maketimer(1, func {
312
+                                    var (hh, mm, ss) = split(':',
313
+                                            me.device.windows.state[id].objects[selected - 2].text);
314
+                                    var direction = -1;
315
+                                    if ((me.device.windows.state[id].objects[selected - 1].text
316
+                                            ==
317
+                                        me.device.windows.state[id].objects[selected - 1].choices[0])
318
+                                    or me.device.data.TMRrevert)
319
+                                        direction = 1;
320
+                                    var now = getprop('/sim/time/elapsed-sec');
321
+                                    var dt = int(now - me.device.data.TMRlast) * direction;
322
+                                    me.device.data.TMRlast = now;
323
+                                    var val = HMS(hh, mm, ss, dt);
324
+                                    me.device.windows.state[id].objects[selected - 2].text = val;
325
+                                    me.device.windows.window[id ~ '-' ~ (selected -2)]
326
+                                        .setText(val);
327
+                                    if (val == '00:00:00' and direction == -1)
328
+                                        me.device.data.TMRrevert = 1;
329
+                                }, me);
330
+                            me.device.data.TMRtimer.start();
331
+                            action = 'STOP?';
332
+                        }
333
+                        elsif (action == 'STOP?') {
334
+                            me.device.data.TMRtimer.stop();
335
+                            action = 'RESET?';
336
+                        }
337
+                        elsif (action == 'RESET?') {
338
+                            action = 'START?';
339
+                            if ((me.device.windows.state[id].objects[selected - 1].text
340
+                                        ==
341
+                                me.device.windows.state[id].objects[selected - 1].choices[1])
342
+                            and !me.device.data.TMRrevert)
343
+                                var val = me.device.data.TMRreset;
344
+                            else
345
+                                var val = '00:00:00';
346
+                            me.device.windows.state[id].objects[selected - 2].text = val;
347
+                            me.device.windows.window[id ~ '-' ~ (selected -2)]
348
+                                .setText(val);
349
+                        }
350
+                        me.device.windows.window[me.device.windows.selected]
351
+                            .setText(action);
352
+                        me.device.windows.state[id].objects[selected].text = action;
353
+                    };
300 354
                     me.device.windows.draw(
301 355
                         'TMR/REF',
302 356
                         {x: 720, y: 535, w: 300, l: 5, sep: 3},
... ...
@@ -305,20 +359,20 @@ var softkeysClass = {
305 359
                             {type: 'separator'},
306 360
                             {text: 'TIMER', type: 'normal'},
307 361
                             {text: '00:00:00', type: 'selected|time', },
308
-                            {text: '  UP >', type: 'editable', choices: ['  UP >', '<DOWN '], callback: func},
309
-                            {text: 'START?', type: 'editable|end-of-line|choices', choices: ['START?', 'RESET?', 'STOP?'], callback: func},
362
+                            {text: '  UP >', type: 'editable', choices: ['  UP >', '<DOWN ']},
363
+                            {text: 'START?', type: 'editable|end-of-line', callback: func (id, selected) GenericTimer(id, selected)},
310 364
                             {type: 'separator'},
311
-                            {text: sprintf('Vx     % 3iKT', alerts.getNode('Vx').getValue()), type: 'normal', scrollgroup:0},
312
-                            {text: '   ON >', type: 'editable|end-of-line', choices: ['   ON >', '< OFF  '], scrollgroup:0, callback: func},
313
-                            {text: sprintf('Vy     % 3iKT', alerts.getNode('Vy').getValue()), type: 'normal', scrollgroup:1},
314
-                            {text: '   ON >', type: 'editable|end-of-line', choices: ['   ON >', '< OFF  '], scrollgroup:1, callback: func},
315
-                            {text: sprintf('Vr     % 3iKT', alerts.getNode('Vr').getValue()), type: 'normal', scrollgroup:2},
316
-                            {text: '   ON >', type: 'editable|end-of-line', choices: ['   ON >', '< OFF  '], scrollgroup:2, callback: func},
317
-                            {text: sprintf('Vglide % 3iKT', alerts.getNode('Vglide').getValue()), type: 'normal', scrollgroup:3},
318
-                            {text: '   ON >', type: 'editable|end-of-line', choices: ['   ON >', '< OFF  '], scrollgroup:3, callback: func},
365
+                            {text: sprintf('Vx     %3iKT', alerts.getNode('Vx').getValue()), type: 'normal', scrollgroup:0},
366
+                            {text: me.device.data['Vx-visible'] ? '   ON >' : '< OFF  ', type: 'editable|immediate|end-of-line', choices: ['   ON >', '< OFF  '], scrollgroup:0, callback: func (id, selected) Vspeed_visiblity(id, selected, 'Vx')},
367
+                            {text: sprintf('Vy     %3iKT', alerts.getNode('Vy').getValue()), type: 'normal', scrollgroup:1},
368
+                            {text: me.device.data['Vy-visible'] ? '   ON >' : '< OFF  ', type: 'editable|immediate|end-of-line', choices: ['   ON >', '< OFF  '], scrollgroup:1, callback: func (id, selected) Vspeed_visiblity(id, selected, 'Vy')},
369
+                            {text: sprintf('Vr     %3iKT', alerts.getNode('Vr').getValue()), type: 'normal', scrollgroup:2},
370
+                            {text: me.device.data['Vr-visible'] ? '   ON >' : '< OFF  ', type: 'editable|immediate|end-of-line', choices: ['   ON >', '< OFF  '], scrollgroup:2, callback: func (id, selected) Vspeed_visiblity(id, selected, 'Vr')},
371
+                            {text: sprintf('Vglide %3iKT', alerts.getNode('Vglide').getValue()), type: 'normal', scrollgroup:3},
372
+                            {text: me.device.data['Vglide-visible'] ? '   ON >' : '< OFF  ', type: 'editable|immediate|end-of-line', choices: ['   ON >', '< OFF  '], scrollgroup:3, callback: func (id, selected) Vspeed_visiblity(id, selected, 'Vglide')},
319 373
                             {type: 'separator'},
320 374
                             {text: 'MINIMUMS', type: 'normal'},
321
-                            {text: '  BARO >', type: 'editable', choices: ['  BARO >','< TST1 >','< TST2  '], callback: func},
375
+                            {text: '   OFF   >', type: 'editable', choices: ['   OFF   >', '<  BARO  >','<TEMP COMP'], callback: func},
322 376
                             {text: ' 1000FT', type: 'editable', format: '% 5iFT', factor: 100, callback: func},
323 377
                         ],
324 378
                         { # scrolling info, see menu.nas
... ...
@@ -328,11 +382,12 @@ var softkeysClass = {
328 382
                     );
329 383
                     me.device.knobs.FmsInner = me.device.knobs.MenuSettings;
330 384
                     me.device.knobs.FmsOuter = me.device.knobs.NavigateMenu;
385
+                    me.device.buttons.ENT = me.device.buttons.ValidateTMRREF;
386
+                    me.device.buttons.FMS = me.device.buttons.ValidateTMRREF;
387
+                    me.device.buttons.CLR = me.device.buttons.ClearTMRREF;
331 388
                 }
332 389
                 else {
333
-                    me.device.knobs.FmsInner = func;
334
-                    me.device.knobs.FmsOuter = func;
335
-                    me.device.windows.del();
390
+                    me.device.buttons.ClearTMRREF();
336 391
                 }
337 392
             },
338 393
         },
+2 -1
README.md
... ...
@@ -74,6 +74,7 @@ Please report bug at <seb.marque@free.fr>.
74 74
   * possibility to add a copilot's PFD, and other displays
75 75
   * EIS: separation for aircraft specifics (selected by the zkv1000 config)
76 76
 * ![][90%]
77
+  * TMR/REF Timer ![][done], Vspeeds ![][done], minimums ![][pending] (don't understand the role of this)
77 78
   * Bearing needs some checks to be sure it shows the correct information
78 79
   * XPDR: emergency code depending of the country (eg.: 1200 for US, 7700 for Europe), should be set in settings
79 80
 * ![][80%]
... ...
@@ -81,7 +82,6 @@ Please report bug at <seb.marque@free.fr>.
81 82
 * ![][70%]
82 83
   * make booting animation visible ![][pending]
83 84
 * ![][60%]
84
-  * TMR/REF ![][ongoing]
85 85
 * ![][50%]
86 86
   * EIS: animations for temperature for YaSim and JSBSim
87 87
 * ![][40%]
... ...
@@ -103,6 +103,7 @@ Please report bug at <seb.marque@free.fr>.
103 103
   * rotation and zooming of online maps in-flight ![][pending]
104 104
   * VS guidance
105 105
   * VNAV
106
+  * scrolling lift in menus
106 107
   * tutorials
107 108
   * many more...
108 109