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 UpdateInfoBoxTeamBearing(InfoBoxData &data) { const TeamCodeSettings &settings = CommonInterface::GetComputerSettings().team_code; const TrafficList &flarm = CommonInterface::Basic().flarm.traffic; const TeamInfo &teamcode_info = CommonInterface::Calculated(); if (teamcode_info.teammate_available) { // Set Value data.SetValue(teamcode_info.teammate_vector.bearing); } else data.SetValueInvalid(); // Set Comment if (!settings.team_flarm_id.IsDefined()) data.SetCommentInvalid(); else if (!settings.team_flarm_callsign.empty()) data.SetComment(settings.team_flarm_callsign.c_str()); else data.SetComment(_T("???")); if (flarm.FindTraffic(settings.team_flarm_id) != NULL) data.SetCommentColor(2); else data.SetCommentColor(1); }
void InfoBoxContentTeamCode::Update(InfoBoxData &data) { const TeamCodeSettings &settings = CommonInterface::GetComputerSettings().team_code; const TeamInfo &teamcode_info = CommonInterface::Calculated(); if (!settings.team_code_reference_waypoint) { data.SetInvalid(); return; } // Set Value data.SetValue(CommonInterface::Calculated().own_teammate_code.GetCode()); // Set Comment if (teamcode_info.flarm_teammate_code.IsDefined()) { data.SetComment(teamcode_info.flarm_teammate_code.GetCode()); data.SetCommentColor(teamcode_info.flarm_teammate_code_current ? 2 : 1); } else if (settings.team_code.IsDefined()) { data.SetComment(settings.team_code.GetCode()); data.SetCommentColor(0); } else data.SetCommentInvalid(); }
void UpdateInfoBoxTeamBearingDiff(InfoBoxData &data) { const TeamCodeSettings &settings = CommonInterface::GetComputerSettings().team_code; const NMEAInfo &basic = CommonInterface::Basic(); const TrafficList &flarm = basic.flarm.traffic; const TeamInfo &teamcode_info = CommonInterface::Calculated(); if (teamcode_info.teammate_available && basic.track_available) { // Set Value Angle Value = teamcode_info.teammate_vector.bearing - basic.track; data.SetValueFromBearingDifference(Value); } else data.SetValueInvalid(); // Set Comment if (!settings.team_flarm_id.IsDefined()) data.SetCommentInvalid(); else if (!StringIsEmpty(settings.team_flarm_callsign)) data.SetComment(settings.team_flarm_callsign); else data.SetComment(_T("???")); if (flarm.FindTraffic(settings.team_flarm_id) != NULL) data.SetCommentColor(2); else data.SetCommentColor(1); }
/* * 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 InfoBoxContentBarogram::Update(InfoBoxData &data) { const MoreData &basic = CommonInterface::Basic(); TCHAR sTmp[32]; if (basic.NavAltitudeAvailable()) { FormatUserAltitude(basic.nav_altitude, sTmp, ARRAY_SIZE(sTmp)); data.SetComment(sTmp); } else data.SetCommentInvalid(); data.SetCustom(); }
void UpdateInfoBoxTakeoffDistance(InfoBoxData &data) { const NMEAInfo &basic = CommonInterface::Basic(); const FlyingState &flight = CommonInterface::Calculated().flight; if (!basic.location_available || !flight.flying || !flight.takeoff_location.IsValid()) { data.SetInvalid(); return; } const GeoVector vector(basic.location, flight.takeoff_location); data.SetValueFromDistance(vector.distance); if (basic.track_available) data.SetCommentFromBearingDifference(vector.bearing - basic.track); else data.SetCommentInvalid(); }
void UpdateInfoBoxHomeDistance(InfoBoxData &data) { const NMEAInfo &basic = CommonInterface::Basic(); const CommonStats &common_stats = CommonInterface::Calculated().common_stats; if (!common_stats.vector_home.IsValid()) { data.SetInvalid(); return; } // Set Value data.SetValueFromDistance(common_stats.vector_home.distance); if (basic.track_available) { Angle bd = common_stats.vector_home.bearing - basic.track; data.SetCommentFromBearingDifference(bd); } else data.SetCommentInvalid(); }
void UpdateInfoBoxGRCruise(InfoBoxData &data) { const auto &basic = CommonInterface::Basic(); const auto &calculated = CommonInterface::Calculated(); const auto cruise_gr = calculated.cruise_gr; if (!::GradientValid(cruise_gr)) { data.SetInvalid(); return; } // Set Value data.SetValueFromGlideRatio(cruise_gr); if (basic.location_available) data.SetCommentFromDistance(basic.location.DistanceS(calculated.cruise_start_location)); else data.SetCommentInvalid(); }
void InfoBoxContentNextDistance::Update(InfoBoxData &data) { // use proper non-terminal next task stats const NMEAInfo &basic = CommonInterface::Basic(); const TaskStats &task_stats = XCSoarInterface::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 SetValueFromDistance(data, vector_remaining.distance); if (basic.track_available) { Angle bd = vector_remaining.bearing - basic.track; SetCommentBearingDifference(data, bd); } else data.SetCommentInvalid(); }
void UpdateInfoBoxTeamDistance(InfoBoxData &data) { const TeamCodeSettings &settings = CommonInterface::GetComputerSettings().team_code; const TeamInfo &teamcode_info = CommonInterface::Calculated(); // Set Value if (teamcode_info.teammate_available) data.SetValueFromDistance(teamcode_info.teammate_vector.distance); else data.SetValueInvalid(); // Set Comment if (!settings.team_flarm_id.IsDefined()) data.SetCommentInvalid(); else if (!StringIsEmpty(settings.team_flarm_callsign)) data.SetComment(settings.team_flarm_callsign); else data.SetComment(_T("???")); data.SetCommentColor(teamcode_info.flarm_teammate_code_current ? 2 : 1); }
void UpdateInfoBoxBattery(InfoBoxData &data) { #ifdef HAVE_BATTERY bool DisplaySupplyVoltageAsValue=false; switch (Power::External::Status) { case Power::External::OFF: if (CommonInterface::Basic().battery_level_available) data.UnsafeFormatComment(_T("%s; %d%%"), _("AC Off"), (int)CommonInterface::Basic().battery_level); else data.SetComment(_("AC Off")); break; case Power::External::ON: if (!CommonInterface::Basic().voltage_available) data.SetComment(_("AC ON")); else{ DisplaySupplyVoltageAsValue = true; data.SetValueFromVoltage(CommonInterface::Basic().voltage); } break; case Power::External::UNKNOWN: default: data.SetCommentInvalid(); } #ifndef ANDROID switch (Power::Battery::Status){ case Power::Battery::HIGH: case Power::Battery::LOW: case Power::Battery::CRITICAL: case Power::Battery::CHARGING: if (Power::Battery::RemainingPercentValid){ #endif if (!DisplaySupplyVoltageAsValue) data.SetValueFromPercent(Power::Battery::RemainingPercent); else data.SetCommentFromPercent(Power::Battery::RemainingPercent); #ifndef ANDROID } else if (!DisplaySupplyVoltageAsValue) data.SetValueInvalid(); else data.SetCommentInvalid(); break; case Power::Battery::NOBATTERY: case Power::Battery::UNKNOWN: if (!DisplaySupplyVoltageAsValue) data.SetValueInvalid(); else data.SetCommentInvalid(); } #endif return; #endif if (CommonInterface::Basic().voltage_available) { data.SetValueFromVoltage(CommonInterface::Basic().voltage); return; } else if (CommonInterface::Basic().battery_level_available) { data.SetValueFromPercent(CommonInterface::Basic().battery_level); return; } data.SetInvalid(); }