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); }
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 UpdateInfoBoxStartOpenArrival(InfoBoxData &data) { const NMEAInfo &basic = CommonInterface::Basic(); const auto &calculated = CommonInterface::Calculated(); const TaskStats &task_stats = calculated.ordered_task_stats; const GlideResult ¤t_remaining = task_stats.current_leg.solution_remaining; const CommonStats &common_stats = CommonInterface::Calculated().common_stats; const RoughTimeSpan &open = common_stats.start_open_time_span; /* reset color that may have been set by a previous call */ data.SetValueColor(0); if (!basic.time_available || !task_stats.task_valid || common_stats.ordered_summary.active != 0 || !open.IsDefined() || !current_remaining.IsOk()) { data.SetInvalid(); return; } const unsigned arrival_s(basic.time + current_remaining.time_elapsed); const RoughTime arrival = RoughTime::FromSecondOfDayChecked(arrival_s); if (open.HasEnded(arrival)) { data.SetValueInvalid(); data.SetComment(_("Closed")); } else if (open.HasBegun(arrival)) { if (open.GetEnd().IsValid()) { unsigned seconds = SecondsUntil(arrival_s, open.GetEnd()); data.UnsafeFormatValue(_T("%02u:%02u"), seconds / 60, seconds % 60); data.SetValueColor(3); } else data.SetValueInvalid(); data.SetComment(_("Open")); } else { unsigned seconds = SecondsUntil(arrival_s, open.GetStart()); data.UnsafeFormatValue(_T("%02u:%02u"), seconds / 60, seconds % 60); data.SetValueColor(2); data.SetComment(_("Waiting")); } }
void UpdateInfoBoxNbrSat(InfoBoxData &data) { const NMEAInfo &basic = CommonInterface::Basic(); const GPSState &gps = basic.gps; data.SetComment(gettext(GetGPSStatus(basic))); if (!basic.alive) data.SetComment(_("No GPS")); else if (gps.satellites_used_available) { // known number of sats data.FormatValue(_T("%u"), gps.satellites_used); } else { // valid but unknown number of sats data.SetValueInvalid(); } }
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 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(); }