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 InfoBoxContentNextWaypoint::Update(InfoBoxData &data) { // use proper non-terminal next task stats const Waypoint* way_point = protected_task_manager != NULL ? protected_task_manager->GetActiveWaypoint() : NULL; if (!way_point) { data.SetTitle(_("Next")); data.SetInvalid(); return; } SetTitleFromWaypointName(data, way_point); // Set Comment if (way_point->radio_frequency.IsDefined()) { const unsigned freq = way_point->radio_frequency.GetKiloHertz(); data.FormatComment(_T("%u.%03u %s"), freq / 1000, freq % 1000, way_point->comment.c_str()); } else data.SetComment(way_point->comment.c_str()); const NMEAInfo &basic = CommonInterface::Basic(); const TaskStats &task_stats = CommonInterface::Calculated().task_stats; const GlideResult &solution_remaining = task_stats.current_leg.solution_remaining; const GeoVector &vector_remaining = task_stats.current_leg.vector_remaining; if (!basic.track_available || !task_stats.task_valid || !vector_remaining.IsValid()) { data.SetValueInvalid(); return; } // Set Value Angle Value = vector_remaining.bearing - basic.track; SetValueBearingDifference(data, Value); // Set Color (blue/black) data.SetValueColor(solution_remaining.IsFinalGlide() ? 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); }