]> git.mxchange.org Git - flightgear.git/blob - src/Instrumentation/KLN89/kln89_page_set.cxx
Make traffic take-off roll look a little better.
[flightgear.git] / src / Instrumentation / KLN89 / kln89_page_set.cxx
1 // kln89_page_*.[ch]xx - this file is one of the "pages" that
2 //                       are used in the KLN89 GPS unit simulation. 
3 //
4 // Written by David Luff, started 2005.
5 //
6 // Copyright (C) 2005 - David C Luff - daveluff AT ntlworld.com
7 //
8 // This program is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU General Public License as
10 // published by the Free Software Foundation; either version 2 of the
11 // License, or (at your option) any later version.
12 //
13 // This program is distributed in the hope that it will be useful, but
14 // WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 // General Public License for more details.
17 //
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 //
22 // $Id$
23
24 #ifdef HAVE_CONFIG_H
25 #  include "config.h"
26 #endif
27
28 #include "kln89_page_set.hxx"
29
30 #include <iostream>
31 using namespace std;
32
33 KLN89SetPage::KLN89SetPage(KLN89* parent) 
34 : KLN89Page(parent) {
35         _nSubPages = 11;
36         _subPage = 0;
37         _name = "SET";
38 }
39
40 KLN89SetPage::~KLN89SetPage() {
41 }
42
43 void KLN89SetPage::Update(double dt) {
44         string sBaro, sAlt, sVel;
45         switch(_subPage+1) {
46         case 1:
47                 _kln89->DrawText("INIT POS:", 2, 0, 3);
48                 break;
49         case 2:
50                 _kln89->DrawText("DATE", 2, 0, 3);
51                 _kln89->DrawText("TIME", 2, 0, 2);
52                 _kln89->DrawText("Cord", 2, 0, 1);
53                 _kln89->DrawText("Mag Var:", 2, 0, 0);
54                 break;
55         case 3:
56                 _kln89->DrawText("Update DB on", 2, 1, 3);
57                 _kln89->DrawText("ground only", 2, 1, 2);
58                 _kln89->DrawText("Key", 2, 0, 1);
59                 _kln89->DrawText("Update pub DB?", 2, 0, 0);
60                 break;
61         case 4:
62                 //cout << "_uLinePos = " << _uLinePos << '\n';
63                 _kln89->DrawText("TURN", 2, 5, 3);
64                 _kln89->DrawText("ANTICIPATION", 2, 1, 2);
65                 if(_kln89->_mode == KLN89_MODE_CRSR && _uLinePos == 1) {
66                         if(!_kln89->_blink) {
67                                 _kln89->DrawText((_kln89->GetTurnAnticipation() ? "ENABLED" : "DISABLED"), 2, 3, 1);
68                         }
69                         _kln89->Underline(2, 3, 1, 8);
70                 } else {
71                         _kln89->DrawText((_kln89->GetTurnAnticipation() ? "ENABLED" : "DISABLED"), 2, 3, 1);
72                 }
73                 break;
74         case 5:
75                 _kln89->DrawText("Default First", 2, 0, 3);
76                 _kln89->DrawText("Character of", 2, 1, 2);
77                 _kln89->DrawText("Wpt identifier", 2, 0, 1);
78                 _kln89->DrawText("Entry:", 2, 3, 0);
79                 if(_kln89->_mode == KLN89_MODE_CRSR && _uLinePos == 1) {
80                         if(!_kln89->_blink) {
81                                 _kln89->DrawChar(_kln89->_defaultFirstChar, 2, 10, 0);
82                         }
83                         _kln89->Underline(2, 10, 0, 1);
84                 } else {
85                         _kln89->DrawChar(_kln89->_defaultFirstChar, 2, 10, 0);
86                 }
87                 break;
88         case 6:
89                 _kln89->DrawText("NEAREST APT", 2, 1, 3);
90                 _kln89->DrawText("CRITERIA", 2, 3, 2);
91                 _kln89->DrawText("Length:", 2, 0, 1);
92                 _kln89->DrawText("Surface:", 2, 0, 0);
93                 break;
94         case 7:
95                 _kln89->DrawText("SUA ALERT", 2, 3, 3);
96                 if(_kln89->_mode == KLN89_MODE_CRSR && _uLinePos == 1) {
97                         if(!_kln89->_blink) {
98                                 _kln89->DrawText((_kln89->GetSuaAlertEnabled() ? "ENABLED" : "DISABLED"), 2, 4, 2);
99                         }
100                         _kln89->Underline(2, 4, 2, 8);
101                 } else {
102                         _kln89->DrawText((_kln89->GetSuaAlertEnabled() ? "ENABLED" : "DISABLED"), 2, 4, 2);
103                 }
104                 if(_kln89->GetSuaAlertEnabled()) {
105                         _kln89->DrawText("Buffer:", 2, 0, 1);
106                         _kln89->DrawSpecialChar(5, 2, 7, 1);    // +- sign.
107                         if(_kln89->_mode == KLN89_MODE_CRSR && _uLinePos == 2) {
108                                 if(!_kln89->_blink) {
109                                         _kln89->DrawText("00300", 2, 8, 1);             // TODO - fix this hardwiring!!!!
110                                 }
111                                 _kln89->Underline(2, 8, 1, 5);
112                         } else {
113                                 _kln89->DrawText("00300", 2, 8, 1);             // TODO - fix this hardwiring!!!!
114                         }
115                         _kln89->DrawText("ft", 2, 13, 1);       // TODO - fix this hardwiring!!!!
116                 }
117                 break;
118         case 8:
119                 _kln89->DrawText("SET UNITS:", 2, 3, 3);
120                 _kln89->DrawText("Baro    :", 2, 0, 2);
121                 _kln89->DrawText("Alt-APT :", 2, 0, 1);
122                 _kln89->DrawText("Dist-Vel:", 2, 0, 0);
123                 switch(_kln89->_baroUnits) {
124                 case GPS_PRES_UNITS_IN:
125                         sBaro = "\"";
126                         break;
127                 case GPS_PRES_UNITS_MB:
128                         sBaro = "mB";
129                         break;
130                 case GPS_PRES_UNITS_HP:
131                         sBaro = "hP";
132                         break;
133                 }
134                 if(_kln89->_altUnits == GPS_ALT_UNITS_FT) sAlt = "ft";
135                 else sAlt = "m";
136                 if(_kln89->_distUnits == GPS_DIST_UNITS_NM) sVel = "nm-kt";
137                 else sVel = "km-";
138                         
139                 if(_kln89->_mode == KLN89_MODE_CRSR && _uLinePos == 1) {
140                         if(!_kln89->_blink) {
141                                 _kln89->DrawText(sBaro, 2, 10, 2);
142                         }
143                         _kln89->Underline(2, 10, 2, 2);
144                 } else {
145                         _kln89->DrawText(sBaro, 2, 10, 2);
146                 }
147                 if(_kln89->_mode == KLN89_MODE_CRSR && _uLinePos == 2) {
148                         if(!_kln89->_blink) {
149                                 _kln89->DrawText(sAlt, 2, 10, 1);
150                         }
151                         _kln89->Underline(2, 10, 1, 2);
152                 } else {
153                         _kln89->DrawText(sAlt, 2, 10, 1);
154                 }
155                 if(_kln89->_mode == KLN89_MODE_CRSR && _uLinePos == 3) {
156                         if(!_kln89->_blink) {
157                                 _kln89->DrawText(sVel, 2, 10, 0);
158                                 if(_kln89->_distUnits != GPS_DIST_UNITS_NM) _kln89->DrawKPH(2, 13, 0);
159                         }
160                         _kln89->Underline(2, 10, 0, 5);
161                 } else {
162                         _kln89->DrawText(sVel, 2, 10, 0);
163                         if(_kln89->_distUnits != GPS_DIST_UNITS_NM) _kln89->DrawKPH(2, 13, 0);
164                 }
165                 break;
166         case 9:
167                 _kln89->DrawText("Altitude", 2, 3, 3);
168                 _kln89->DrawText("Alert:", 2, 1, 2);
169                 break;
170         case 10:
171                 _kln89->DrawText("BUS MONITOR", 2, 2, 3);
172                 _kln89->DrawText("Bus Volt", 2, 0, 2);
173                 _kln89->DrawText("Alert Volt", 2, 0, 1);
174                 _kln89->DrawText("Alert Delay", 2, 0, 0);
175                 break;
176         case 11:
177                 _kln89->DrawText("MIN DISPLAY", 2, 2, 3);
178                 _kln89->DrawText("BRIGHTNESS ADJ", 2, 1, 2);
179                 if(_kln89->_mode == KLN89_MODE_CRSR && _uLinePos == 1) {
180                         if(!_kln89->_blink) {
181                                 _kln89->DrawChar('0' + _kln89->GetMinDisplayBrightness(), 2, 6, 0);
182                         }
183                         _kln89->Underline(2, 6, 0, 1);
184                 } else {
185                         _kln89->DrawChar('0' + _kln89->GetMinDisplayBrightness(), 2, 6, 0);
186                 }
187                 if(_kln89->GetMinDisplayBrightness() == 4) {
188                         _kln89->DrawText("Default", 2, 8, 0);
189                 }
190                 break;
191         }
192         
193         KLN89Page::Update(dt);
194 }
195
196 void KLN89SetPage::CrsrPressed() {
197         if(_kln89->_mode == KLN89_MODE_DISP) return;
198         if(_kln89->_obsMode) {
199                 _uLinePos = 0;
200         } else {
201                 _uLinePos = 1;
202         }
203         switch(_subPage+1) {
204         case 1:
205                 break;
206         case 2:
207                 break;
208         case 3:
209                 break;
210         case 4:
211                 _maxULinePos = 1;
212                 break;
213         case 5:
214                 _maxULinePos = 1;
215                 break;
216         case 6:
217                 _maxULinePos = 2;
218                 break;
219         case 7:
220                 if(_kln89->GetSuaAlertEnabled()) _maxULinePos = 2;
221                 else _maxULinePos = 1;
222                 break;
223         case 8:
224                 _maxULinePos = 3;
225                 break;
226         case 9:
227                 break;
228         case 10:
229                 break;
230         case 11:
231                 _maxULinePos = 1;
232                 break;
233         }
234 }
235
236 void KLN89SetPage::Knob2Left1() {
237         if(_kln89->_mode != KLN89_MODE_CRSR || _uLinePos == 0) {
238                 KLN89Page::Knob2Left1();
239         } else {
240                 switch(_subPage+1) {
241                 case 1:
242                         break;
243                 case 2:
244                         break;
245                 case 3:
246                         break;
247                 case 4:
248                         if(_uLinePos == 1) {
249                                 _kln89->SetTurnAnticipation(!_kln89->GetTurnAnticipation());
250                         }
251                         break;
252                 case 5:
253                         if(_uLinePos == 1) {
254                                 _kln89->_defaultFirstChar = _kln89->DecChar(_kln89->_defaultFirstChar, false, true);
255                         }
256                         break;
257                 case 6:
258                         break;
259                 case 7:
260                         if(_uLinePos == 1) {
261                                 _kln89->SetSuaAlertEnabled(!_kln89->GetSuaAlertEnabled());
262                                 _maxULinePos = (_kln89->GetSuaAlertEnabled() ? 2 : 1);
263                         } else if(_uLinePos == 2) {
264                                 // TODO - implement variable sua alert buffer
265                         }
266                         break;
267                 case 8:
268                         if(_uLinePos == 1) {  // baro units
269                                 _kln89->SetBaroUnits(_kln89->GetBaroUnits() - 1, true);
270                         } else if(_uLinePos == 2) {
271                                 _kln89->SetAltUnitsSI(!_kln89->GetAltUnitsSI());
272                         } else if(_uLinePos == 3) {
273                                 _kln89->SetDistVelUnitsSI(!_kln89->GetDistVelUnitsSI());
274                         }
275                         break;
276                 case 11:
277                         if(_uLinePos == 1) {
278                                 _kln89->DecrementMinDisplayBrightness();
279                         }
280                         break;
281                 }
282         }
283 }
284
285 void KLN89SetPage::Knob2Right1() {
286         if(_kln89->_mode != KLN89_MODE_CRSR || _uLinePos == 0) {
287                 KLN89Page::Knob2Right1();
288         } else {
289                 switch(_subPage+1) {
290                 case 1:
291                         break;
292                 case 2:
293                         break;
294                 case 3:
295                         break;
296                 case 4:
297                         if(_uLinePos == 1) {   // Which it should be!
298                                 _kln89->SetTurnAnticipation(!_kln89->GetTurnAnticipation());
299                         }
300                         break;
301                 case 5:
302                         if(_uLinePos == 1) {
303                                 _kln89->_defaultFirstChar = _kln89->IncChar(_kln89->_defaultFirstChar, false, true);
304                         }
305                         break;
306                 case 6:
307                         break;
308                 case 7:
309                         if(_uLinePos == 1) {
310                                 _kln89->SetSuaAlertEnabled(!_kln89->GetSuaAlertEnabled());
311                                 _maxULinePos = (_kln89->GetSuaAlertEnabled() ? 2 : 1);
312                         } else if(_uLinePos == 2) {
313                                 // TODO - implement variable sua alert buffer
314                         }
315                         break;
316                 case 8:
317                         if(_uLinePos == 1) {  // baro units
318                                 _kln89->SetBaroUnits(_kln89->GetBaroUnits() + 1, true);
319                         } else if(_uLinePos == 2) {
320                                 _kln89->SetAltUnitsSI(!_kln89->GetAltUnitsSI());
321                         } else if(_uLinePos == 3) {
322                                 _kln89->SetDistVelUnitsSI(!_kln89->GetDistVelUnitsSI());
323                         }
324                         break;
325                 case 11:
326                         if(_uLinePos == 1) {
327                                 _kln89->IncrementMinDisplayBrightness();
328                         }
329                         break;
330                 }
331         }
332 }