]> git.mxchange.org Git - flightgear.git/blob - src/Instrumentation/KLN89/kln89_page.cxx
Vassilii Khachaturov:
[flightgear.git] / src / Instrumentation / KLN89 / kln89_page.cxx
1 // kln89_page.cxx - base class for the "pages" that\r
2 //                  are used in the KLN89 GPS unit simulation. \r
3 //\r
4 // Written by David Luff, started 2005.\r
5 //\r
6 // Copyright (C) 2005 - David C Luff - david.luff@nottingham.ac.uk\r
7 //\r
8 // This program is free software; you can redistribute it and/or\r
9 // modify it under the terms of the GNU General Public License as\r
10 // published by the Free Software Foundation; either version 2 of the\r
11 // License, or (at your option) any later version.\r
12 //\r
13 // This program is distributed in the hope that it will be useful, but\r
14 // WITHOUT ANY WARRANTY; without even the implied warranty of\r
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
16 // General Public License for more details.\r
17 //\r
18 // You should have received a copy of the GNU General Public License\r
19 // along with this program; if not, write to the Free Software\r
20 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\r
21 //\r
22 // $Id$\r
23 \r
24 #include "kln89_page.hxx"\r
25 \r
26 KLN89Page::KLN89Page(KLN89* parent) \r
27 : GPSPage(parent) {\r
28         _kln89 = (KLN89*)parent;\r
29         _entInvert = false;\r
30         _to_flag = true;\r
31 }\r
32 \r
33 KLN89Page::~KLN89Page() {\r
34 }\r
35 \r
36 void KLN89Page::Update(double dt) {\r
37         bool crsr = (_kln89->_mode == KLN89_MODE_CRSR ? true : false);\r
38         bool nav1 = (_name == "NAV" && _subPage == 0);\r
39         bool nav4 = (_name == "NAV" && _subPage == 3);\r
40         // The extra level of check for the ACT page is necessary since\r
41         // ACT is implemented by using the other waypoint pages as\r
42         // appropriate.\r
43         bool act = (_kln89->_activePage->GetName() == "ACT");\r
44         _kln89->DrawDivider();\r
45         if(crsr) {\r
46                 if(!nav4) _kln89->DrawText("*CRSR*", 1, 0, 0);\r
47                 if(_uLinePos == 0) _kln89->Underline(1, 3, 1, 3);\r
48         } else {\r
49                 if(!nav4) {\r
50                         if(act) {\r
51                                 _kln89->DrawText("ACT", 1, 0, 0);\r
52                         } else {\r
53                                 _kln89->DrawText(_name, 1, 0, 0);\r
54                         }\r
55                         if(_name == "DIR") {\r
56                                 // Don't draw a subpage number\r
57                         } else if(_name == "USR" || _name == "FPL") {\r
58                                 // Zero-based\r
59                                 _kln89->DrawText(GPSitoa(_subPage), 1, 4, 0);\r
60                         } else {\r
61                                 // One-based\r
62                                 _kln89->DrawText(GPSitoa(_subPage+1), 1, 4, 0);\r
63                         }\r
64                 }\r
65         }\r
66         if(crsr && _uLinePos == 0 && _kln89->_blink) {\r
67                 // Don't draw\r
68         } else {\r
69                 if(_kln89->_obsMode) {\r
70                         _kln89->DrawText(GPSitoa(_kln89->_obsHeading), 1, 3, 1);\r
71                 } else {\r
72                         _kln89->DrawText("Leg", 1, 3, 1);\r
73                 }\r
74         }\r
75         _kln89->DrawText((_kln89->GetDistVelUnitsSI() ? "km" : "nm"), 1, 4, 3);\r
76         GPSWaypoint* awp = _parent->GetActiveWaypoint();\r
77         if(_kln89->_navFlagged) {\r
78                 _kln89->DrawText("--.-", 1, 0 ,3);\r
79                 // Only nav1 still gets speed drawn if nav is flagged - not ACT\r
80                 if(!nav1) _kln89->DrawText("------", 1, 0, 2);\r
81         } else {\r
82                 char buf[8];\r
83                 float f = _parent->GetDistToActiveWaypoint() * (_kln89->GetDistVelUnitsSI() ? 0.001 : SG_METER_TO_NM);\r
84                 snprintf(buf, 5, (f >= 100.0 ? "%4.0f" : "%4.1f"), f);\r
85                 string s = buf;\r
86                 _kln89->DrawText(s, 1, 4 - s.size(), 3, true);\r
87                 // Draw active waypoint ID, except for\r
88                 // nav1, act, and any waypoint pages matching \r
89                 // active waypoint that need speed drawn instead.\r
90                 if(act || nav1 || (awp && awp->id == _id)) {\r
91                         _kln89->DrawSpeed(_kln89->_groundSpeed_kts, 1, 5, 2);\r
92                 } else {\r
93                         if(!(_kln89->_waypointAlert && _kln89->_blink)) _kln89->DrawText(awp->id, 1, 0, 2);\r
94                 }\r
95         }\r
96         /*\r
97         if(_noNrst) {\r
98                 _kln89->DrawText("  No  ", 1, 0, 1, false, 99);\r
99                 _kln89->DrawText(" Nrst ", 1, 0, 0, false, 99);\r
100         }\r
101         */\r
102         if(_scratchpadMsg) {\r
103                 _kln89->DrawText(_scratchpadLine1, 1, 0, 1, false, 99);\r
104                 _kln89->DrawText(_scratchpadLine2, 1, 0, 0, false, 99);\r
105                 _scratchpadTimer += dt;\r
106                 if(_scratchpadTimer > 4.0) {\r
107                         _scratchpadMsg = false;\r
108                         _scratchpadTimer = 0.0;\r
109                 }\r
110         }\r
111 }\r
112 \r
113 void KLN89Page::ShowScratchpadMessage(const string& line1, const string& line2) {\r
114         _scratchpadLine1 = line1;\r
115         _scratchpadLine2 = line2;\r
116         _scratchpadTimer = 0.0;\r
117         _scratchpadMsg = true;\r
118 }       \r
119 \r
120 void KLN89Page::Knob1Left1() {\r
121         if(_kln89->_mode == KLN89_MODE_CRSR) {\r
122                 if(_uLinePos > 0) _uLinePos--;\r
123         }\r
124 }\r
125 \r
126 void KLN89Page::Knob1Right1() {\r
127         if(_kln89->_mode == KLN89_MODE_CRSR) {\r
128                 if(_uLinePos < _maxULinePos) _uLinePos++;\r
129         }\r
130 }\r
131 \r
132 void KLN89Page::Knob2Left1() {\r
133         if(_kln89->_mode != KLN89_MODE_CRSR) {\r
134                 GPSPage::Knob2Left1(); \r
135         } else {\r
136                 if(_uLinePos == 0 && _kln89->_obsMode) {\r
137                         _kln89->_obsHeading--;\r
138                         if(_kln89->_obsHeading < 0) {\r
139                                 _kln89->_obsHeading += 360;\r
140                         }\r
141                         _kln89->SetOBSFromWaypoint();\r
142                 }\r
143         }\r
144 }\r
145 \r
146 void KLN89Page::Knob2Right1() {\r
147         if(_kln89->_mode != KLN89_MODE_CRSR) {\r
148                 GPSPage::Knob2Right1(); \r
149         } else {\r
150                 if(_uLinePos == 0 && _kln89->_obsMode) {\r
151                         _kln89->_obsHeading++;\r
152                         if(_kln89->_obsHeading > 359) {\r
153                                 _kln89->_obsHeading -= 360;\r
154                         }\r
155                         _kln89->SetOBSFromWaypoint();\r
156                 }\r
157         }\r
158 }\r
159 \r
160 void KLN89Page::CrsrPressed() {\r
161         // Stick some sensible defaults in\r
162         if(_kln89->_obsMode) {\r
163                 _uLinePos = 0;\r
164         } else {\r
165                 _uLinePos = 1;\r
166         }\r
167         _maxULinePos = 1;\r
168 }\r
169 \r
170 void KLN89Page::EntPressed() {}\r
171 void KLN89Page::ClrPressed() {}\r
172 void KLN89Page::DtoPressed() {}\r
173 void KLN89Page::NrstPressed() {}\r
174 void KLN89Page::AltPressed() {}\r
175 \r
176 void KLN89Page::OBSPressed() {\r
177         if(_kln89->_obsMode) {\r
178                 // If ORS2 and not slaved to gps\r
179                 _uLinePos = 0;\r
180         } else {\r
181                 // Don't leave the cursor on in the leg position.\r
182                 if(_uLinePos == 0) {\r
183                         _kln89->_mode = KLN89_MODE_DISP;\r
184                 }\r
185         }\r
186 }\r
187 \r
188 void KLN89Page::MsgPressed() {}\r
189 \r
190 void KLN89Page::CleanUp() {\r
191         _kln89->_cleanUpPage = -1;\r
192 }\r
193 \r
194 void KLN89Page::LooseFocus() {\r
195         _entInvert = false;\r
196 }\r
197 \r
198 void KLN89Page::SetId(const string& s) {\r
199         _id = s;\r
200 }\r
201 \r
202 const string& KLN89Page::GetId() {\r
203         return(_id);\r
204 }\r