void UpdateInfoBoxNextDistance(InfoBoxData &data) { const Waypoint* way_point = protected_task_manager != NULL ? protected_task_manager->GetActiveWaypoint() : NULL; // Set title if (!way_point) data.SetTitle(_("WP Dist")); else data.SetTitle(way_point->name.c_str()); // use proper non-terminal next task stats const NMEAInfo &basic = CommonInterface::Basic(); const TaskStats &task_stats = CommonInterface::Calculated().task_stats; const GeoVector &vector_remaining = task_stats.current_leg.vector_remaining; if (!task_stats.task_valid || !vector_remaining.IsValid()) { data.SetInvalid(); return; } // Set Value data.SetValueFromDistance(vector_remaining.distance); data.SetValueColor(task_stats.inside_oz ? 3 : 0); if (basic.track_available) { Angle bd = vector_remaining.bearing - basic.track; data.SetCommentFromBearingDifference(bd); } else data.SetCommentInvalid(); }
void UpdateInfoBoxAltitudeNav(InfoBoxData &data) { const MoreData &basic = CommonInterface::Basic(); if (!basic.NavAltitudeAvailable()) { data.SetInvalid(); if (basic.pressure_altitude_available) data.SetComment(_("no QNH")); return; } const ComputerSettings &settings_computer = CommonInterface::GetComputerSettings(); if (basic.baro_altitude_available && settings_computer.features.nav_baro_altitude_enabled) data.SetTitle(InfoBoxFactory::GetCaption(InfoBoxFactory::e_H_Baro)); else data.SetTitle(InfoBoxFactory::GetCaption(InfoBoxFactory::e_HeightGPS)); data.SetValueFromAltitude(basic.nav_altitude); data.SetCommentFromAlternateAltitude(basic.nav_altitude); }
/* * The NextArrow infobox contains an arrow pointing at the next waypoint. * This function updates the text fields in the infobox. */ void InfoBoxContentNextArrow::Update(InfoBoxData &data) { // use proper non-terminal next task stats const NMEAInfo &basic = CommonInterface::Basic(); const TaskStats &task_stats = CommonInterface::Calculated().task_stats; const GeoVector &vector_remaining = task_stats.current_leg.vector_remaining; // Check if data is valid bool distance_valid = task_stats.task_valid && vector_remaining.IsValid(); bool angle_valid = distance_valid && basic.track_available; // Set title. Use waypoint name if available. const Waypoint *way_point = protected_task_manager != nullptr ? protected_task_manager->GetActiveWaypoint() : nullptr; if (!way_point) data.SetTitle(_("Next arrow")); else data.SetTitle(way_point->name.c_str()); // Set value if (angle_valid) data.SetCustom(); // Enables OnCustomPaint else data.SetInvalid(); // Set comment if (distance_valid) data.SetCommentFromDistance(vector_remaining.distance); else data.SetCommentInvalid(); }
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; } data.SetTitle(way_point->name.c_str()); // 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; data.SetValueFromBearingDifference(Value); // Set Color (blue/black) data.SetValueColor(solution_remaining.IsFinalGlide() ? 2 : 0); }
void InfoBoxContentMacCready::Update(InfoBoxData &data) { const ComputerSettings &settings_computer = CommonInterface::GetComputerSettings(); data.SetTitle(settings_computer.task.auto_mc ? _("MC AUTO") : _("MC MANUAL")); SetVSpeed(data, settings_computer.polar.glide_polar_task.GetMC()); const CommonStats &common_stats = CommonInterface::Calculated().common_stats; data.SetCommentFromSpeed(common_stats.V_block, false); }