void InfoBoxContentOLCSpeed::Update(InfoBoxData &data) { const ComputerSettings &settings_computer = CommonInterface::GetComputerSettings(); if (!settings_computer.contest.enable || !protected_task_manager) { data.SetInvalid(); return; } int result_index = (settings_computer.contest.contest == Contest::OLC_LEAGUE) ? 0 : -1; const ContestResult& result_olc = CommonInterface::Calculated().contest_stats.GetResult(result_index); if (result_olc.score < fixed(1)) { data.SetInvalid(); return; } // Set Value data.SetValueFromSpeed(result_olc.GetSpeed()); data.UnsafeFormatComment(_T("%.1f pts"), (double)result_olc.score); }
void InfoBoxContentFlightLevel::Update(InfoBoxData &data) { const NMEAInfo &basic = CommonInterface::Basic(); const ComputerSettings &settings_computer = CommonInterface::GetComputerSettings(); if (basic.pressure_altitude_available) { fixed Altitude = Units::ToUserUnit(basic.pressure_altitude, Unit::FEET); // Title color black data.SetTitleColor(0); // Set Value data.UnsafeFormatValue(_T("%03d"), iround(Altitude / 100)); // Set Comment data.UnsafeFormatComment(_T("%dft"), iround(Altitude)); } else if (basic.gps_altitude_available && settings_computer.pressure_available) { // Take gps altitude as baro altitude. This is inaccurate but still fits our needs. const AtmosphericPressure &qnh = settings_computer.pressure; fixed Altitude = Units::ToUserUnit(qnh.QNHAltitudeToPressureAltitude(basic.gps_altitude), Unit::FEET); // Title color red data.SetTitleColor(1); // Set Value data.UnsafeFormatValue(_T("%03d"), iround(Altitude / 100)); // Set Comment data.UnsafeFormatComment(_T("%dft"), iround(Altitude)); } else if ((basic.baro_altitude_available || basic.gps_altitude_available) && !settings_computer.pressure_available) { data.SetInvalid(); data.SetComment(_("no QNH")); } else { data.SetInvalid(); } }
void UpdateInfoBoxTimeUTC(InfoBoxData &data) { const NMEAInfo &basic = CommonInterface::Basic(); if (!basic.time_available) { data.SetInvalid(); return; } // Set Value const BrokenDateTime t = basic.date_time_utc; data.UnsafeFormatValue(_T("%02d:%02d"), t.hour, t.minute); // Set Comment data.UnsafeFormatComment(_T("%02d"), t.second); }
void UpdateInfoBoxTimeLocal(InfoBoxData &data) { const NMEAInfo &basic = CommonInterface::Basic(); const ComputerSettings &settings = CommonInterface::GetComputerSettings(); if (!basic.time_available) { data.SetInvalid(); return; } // Set Value FormatLocalTimeHHMM(data.value.buffer(), (int)basic.time, settings.utc_offset); // Set Comment data.UnsafeFormatComment(_T("%02u"), basic.date_time_utc.second); }
void InfoBoxContentFinalETA::Update(InfoBoxData &data) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.total.IsAchievable()) { data.SetInvalid(); return; } int dd = (int)task_stats.total.solution_remaining.time_elapsed + DetectCurrentTime(XCSoarInterface::Basic()); const BrokenTime t = BrokenTime::FromSecondOfDayChecked(abs(dd)); // Set Value data.UnsafeFormatValue(_T("%02u:%02u"), t.hour, t.minute); // Set Comment data.UnsafeFormatComment(_T("%02u"), t.second); }
void UpdateInfoBoxFinalETA(InfoBoxData &data) { const TaskStats &task_stats = CommonInterface::Calculated().task_stats; const BrokenTime &now_local = CommonInterface::Calculated().date_time_local; if (!task_stats.task_valid || !task_stats.total.IsAchievable() || !now_local.IsPlausible()) { data.SetInvalid(); return; } const BrokenTime t = now_local + unsigned(task_stats.total.solution_remaining.time_elapsed); // Set Value data.UnsafeFormatValue(_T("%02u:%02u"), t.hour, t.minute); // Set Comment data.UnsafeFormatComment(_T("%02u"), t.second); }
void InfoBoxContentOLC::Update(InfoBoxData &data) { if (!XCSoarInterface::GetComputerSettings().task.enable_olc || !protected_task_manager) { data.SetInvalid(); return; } const ContestResult& result_olc = XCSoarInterface::Calculated().contest_stats.GetResult(); if (result_olc.score < fixed_one) { data.SetInvalid(); return; } // Set Value data.SetValueFromDistance(result_olc.distance); data.UnsafeFormatComment(_T("%.1f pts"), (double)result_olc.score); }
void InfoBoxContentNextETA::Update(InfoBoxData &data) { // use proper non-terminal next task stats const NMEAInfo &basic = CommonInterface::Basic(); const TaskStats &task_stats = CommonInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.current_leg.IsAchievable()) { data.SetInvalid(); return; } int dd = (int)(task_stats.current_leg.solution_remaining.time_elapsed) + DetectCurrentTime(basic); const BrokenTime t = BrokenTime::FromSecondOfDayChecked(abs(dd)); // Set Value data.UnsafeFormatValue(_T("%02u:%02u"), t.hour, t.minute); // Set Comment data.UnsafeFormatComment(_T("%02u"), t.second); }
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(); }