void InfoBoxContentNextWaypoint::Update(InfoBoxWindow &infobox) { // use proper non-terminal next task stats const Waypoint* way_point = protected_task_manager != NULL ? protected_task_manager->getActiveWaypoint() : NULL; if (!way_point) { infobox.SetTitle(_("Next")); infobox.SetInvalid(); return; } SetTitleFromWaypointName(infobox, way_point); // Set Comment if (way_point->radio_frequency.IsDefined()) { StaticString<128> comment; const unsigned freq = way_point->radio_frequency.GetKiloHertz(); _sntprintf(comment.buffer(), comment.MAX_SIZE, _T("%u.%03u %s"), freq / 1000, freq % 1000, way_point->Comment.c_str()); infobox.SetComment(comment); } else infobox.SetComment(way_point->Comment.c_str()); const GlideResult &solution_remaining = XCSoarInterface::Calculated().task_stats.current_leg.solution_remaining; if (!XCSoarInterface::Basic().track_available || !XCSoarInterface::Calculated().task_stats.task_valid || !solution_remaining.defined() || solution_remaining.Vector.Distance <= fixed(10)) { infobox.SetValueInvalid(); return; } // Set Value Angle Value = solution_remaining.Vector.Bearing - XCSoarInterface::Basic().track; SetValueBearingDifference(infobox, Value); // Set Color (blue/black) infobox.SetColor(solution_remaining.is_final_glide() ? 2 : 0); }
void InfoBoxContentAlternateGR::Update(InfoBoxWindow &infobox) { if (protected_task_manager == NULL) { infobox.SetInvalid(); return; } const AbortTask::AlternateVector alternates = protected_task_manager->getAlternates(); if (alternates.size() > 0 && index >= alternates.size()) index = alternates.size() - 1; TCHAR tmp[32]; _stprintf(tmp, _T("Altrn %d GR"), index+1); infobox.SetTitle(tmp); const Waypoint* way_point = (alternates.size()>index) ? &alternates[index].first : NULL; SetCommentFromWaypointName(infobox, way_point); if (!way_point) { infobox.SetInvalid(); return; } const GlideResult& solution = alternates[index].second; fixed gradient = ::AngleToGradient(solution.destination_angle_ground()); if (negative(gradient)) { infobox.SetColor(0); infobox.SetValue(_T("+++")); return; } if (::GradientValid(gradient)) { TCHAR tmp[32]; _stprintf(tmp, _T("%d"), (int)gradient); infobox.SetValue(tmp); } else { infobox.SetInvalid(); } // Set Color (blue/black) infobox.SetColor(solution.glide_reachable(true) ? 2 : 0); }
void InfoBoxContentNextWaypoint::Update(InfoBoxWindow &infobox) { // use proper non-terminal next task stats const Waypoint* way_point = protected_task_manager.getActiveWaypoint(); if (!way_point) { infobox.SetTitle(_("Next")); infobox.SetInvalid(); return; } SetTitleFromWaypointName(infobox, way_point); if (!XCSoarInterface::Calculated().task_stats.task_valid || XCSoarInterface::Calculated().task_stats.current_leg.solution_remaining. Vector.Distance <= fixed(10)) { infobox.SetInvalid(); return; } // Set Value Angle Value = (XCSoarInterface::Calculated().task_stats.current_leg. solution_remaining.Vector.Bearing - XCSoarInterface::Basic(). TrackBearing); SetValueBearingDifference(infobox, Value); // Set Comment infobox.SetComment(way_point->Comment.c_str()); // Set Color if (XCSoarInterface::Calculated().task_stats.current_leg. solution_remaining.is_final_glide()) // blue infobox.SetColor(2); else // black infobox.SetColor(0); }
void InfoBoxContentAlternateName::Update(InfoBoxWindow &infobox) { if (protected_task_manager == NULL) { infobox.SetInvalid(); return; } const AbortTask::AlternateVector alternates = protected_task_manager->getAlternates(); if (alternates.size() > 0 && index >= alternates.size()) index = alternates.size() - 1; TCHAR tmp[32]; _stprintf(tmp, _T("Altrn %d"), index+1); infobox.SetTitle(tmp); const Waypoint* way_point = (alternates.size()>index) ? &alternates[index].first : NULL; SetCommentFromWaypointName(infobox, way_point); if (!way_point) { infobox.SetInvalid(); return; } const GlideResult& solution = alternates[index].second; // Set Value Angle Value = solution.Vector.Bearing - XCSoarInterface::Basic().track; SetValueBearingDifference(infobox, Value); // Set Color (blue/black) infobox.SetColor(solution.glide_reachable(true) ? 2 : 0); }
void InfoBoxContentNextWaypoint::Update(InfoBoxWindow &infobox) { const Waypoint* way_point = protected_task_manager.getActiveWaypoint(); if (!way_point) { // Set Title infobox.SetTitle(_T("Next")); infobox.SetInvalid(); return; } // Set Title TCHAR tmp[32]; if (XCSoarInterface::SettingsMap().DisplayTextType == DISPLAYFIRSTTHREE) { _tcsncpy(tmp, way_point->Name.c_str(), 3); tmp[3] = '\0'; } else if (XCSoarInterface::SettingsMap().DisplayTextType == DISPLAYNUMBER) { _stprintf(tmp, _T("%d"), way_point->id); } else { _tcsncpy(tmp, way_point->Name.c_str(), (sizeof(tmp) / sizeof(TCHAR)) - 1); tmp[(sizeof(tmp) / sizeof(TCHAR)) - 1] = '\0'; } infobox.SetTitle(tmp); if (!XCSoarInterface::Calculated().task_stats.task_valid || XCSoarInterface::Calculated().task_stats.current_leg.solution_remaining. Vector.Distance <= fixed(10)) { infobox.SetInvalid(); return; } // Set Value double Value = (XCSoarInterface::Calculated().task_stats.current_leg. solution_remaining.Vector.Bearing - XCSoarInterface::Basic(). TrackBearing).as_delta().value_degrees(); #ifndef __MINGW32__ if (Value > 1) _stprintf(tmp, _T("%2.0f°»"), Value); else if (Value < -1) _stprintf(tmp, _T("«%2.0f°"), -Value); else _tcscpy(tmp, _T("«»")); #else if (Value > 1) _stprintf(tmp, _T("%2.0f°»"), Value); else if (Value < -1) _stprintf(tmp, _T("«%2.0f°"), -Value); else _tcscpy(tmp, _T("«»")); #endif infobox.SetValue(tmp); // Set Comment infobox.SetComment(way_point->Comment.c_str()); // Set Color if (XCSoarInterface::Calculated().task_stats.current_leg. solution_remaining.is_final_glide()) // blue infobox.SetColor(2); else // black infobox.SetColor(0); }