- for(unsigned int i=0; i<_iaps.size(); ++i) { // TODO - do this properly when > 3 IAPs
- string s = GPSitoa(i+1);
- _kln89->DrawText(s, 2, 2 - s.size(), 2-i);
- if(!(selApp && _uLinePos == 5+i && _kln89->_blink)) {
- _kln89->DrawText(_iaps[i]->_abbrev, 2, 3, 2-i);
- _kln89->DrawText(_iaps[i]->_rwyStr, 2, 9, 2-i);
- }
- if(selApp && _uLinePos == 5+i && !_kln89->_blink) {
- _kln89->Underline(2, 3, 2-i, 9);
+ // _maxULine pos should be 4 + iaps.size() at this point.
+ // Draw a maximum of 3 IAPs.
+ // If there are more than 3 IAPs for this airport, then we need to offset the start
+ // of the list if _uLinePos is pointing at the 4th or later IAP.
+ unsigned int offset = 0;
+ unsigned int index;
+ if(_uLinePos > 7) {
+ offset = _uLinePos - 7;
+ }
+ for(unsigned int i=0; i<3; ++i) {
+ index = offset + i;
+ if(index < _iaps.size()) {
+ string s = GPSitoa(index+1);
+ _kln89->DrawText(s, 2, 2 - s.size(), 2-i);
+ if(!(selApp && _uLinePos == index+5 && _kln89->_blink)) {
+ _kln89->DrawText(_iaps[index]->_ident, 2, 3, 2-i);
+ _kln89->DrawText(_iaps[index]->_rwyStr, 2, 9, 2-i);
+ }
+ if(selApp && _uLinePos == index+5 && !_kln89->_blink) {
+ _kln89->Underline(2, 3, 2-i, 9);
+ }
+ } else {
+ break;