static void SetVSpeed(InfoBoxData &data, fixed value) { TCHAR buffer[32]; FormatUserVerticalSpeed(value, buffer, false); data.SetValue(buffer[0] == _T('+') ? buffer + 1 : buffer); data.SetValueUnit(Units::current.vertical_speed_unit); }
void InfoBoxContentTemperatureForecast::Update(InfoBoxData &data) { auto temperature = CommonInterface::GetComputerSettings().forecast_temperature; data.SetValue(_T("%2.1f"), temperature.ToUser()); data.SetValueUnit(Units::current.temperature_unit); }
void UpdateInfoBoxTaskSpeedHour(InfoBoxData &data) { const WindowStats &window = CommonInterface::Calculated().task_stats.last_hour; if (negative(window.duration)) { data.SetInvalid(); return; } data.SetValue(_T("%2.0f"), Units::ToUserTaskSpeed(window.speed)); data.SetValueUnit(Units::current.task_speed_unit); }
void UpdateInfoBoxTemperature(InfoBoxData &data) { const NMEAInfo &basic = CommonInterface::Basic(); if (!basic.temperature_available) { data.SetInvalid(); return; } // Set Value data.SetValue(_T("%2.1f"), basic.temperature.ToUser()); data.SetValueUnit(Units::current.temperature_unit); }
void InfoBoxContentTemperature::Update(InfoBoxData &data) { const NMEAInfo &basic = XCSoarInterface::Basic(); if (!basic.temperature_available) { data.SetInvalid(); return; } // Set Value data.SetValue(_T("%2.1f"), Units::ToUserTemperature(basic.temperature)); data.SetValueUnit(Units::current.temperature_unit); }
void UpdateInfoBoxHeadWind(InfoBoxData &data) { const DerivedInfo &info = CommonInterface::Calculated(); if (!info.head_wind_available) { data.SetInvalid(); return; } // Set Value data.SetValue(_T("%2.0f"), Units::ToUserWindSpeed(info.head_wind)); // Set Unit data.SetValueUnit(Units::current.wind_speed_unit); }
void UpdateInfoBoxTaskSpeedInstant(InfoBoxData &data) { const TaskStats &task_stats = CommonInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.IsPirkerSpeedAvailable()) { data.SetInvalid(); return; } // Set Value data.SetValue(_T("%2.0f"), Units::ToUserTaskSpeed(task_stats.get_pirker_speed())); // Set Unit data.SetValueUnit(Units::current.task_speed_unit); }
void InfoBoxContentTaskSpeedInstant::Update(InfoBoxData &data) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.IsPirkerSpeedAvailable()) { data.SetInvalid(); return; } // Set Value SetValueFromFixed(data, _T("%2.0f"), Units::ToUserTaskSpeed(task_stats.get_pirker_speed())); // Set Unit data.SetValueUnit(Units::current.task_speed_unit); }
void InfoBoxContentTaskSpeed::Update(InfoBoxData &data) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.total.travelled.IsDefined()) { data.SetInvalid(); return; } // Set Value SetValueFromFixed(data, _T("%2.0f"), Units::ToUserTaskSpeed(task_stats.total.travelled.get_speed())); // Set Unit data.SetValueUnit(Units::current.task_speed_unit); }
void UpdateInfoBoxTaskSpeed(InfoBoxData &data) { const TaskStats &task_stats = CommonInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.total.travelled.IsDefined()) { data.SetInvalid(); return; } // Set Value data.SetValue(_T("%2.0f"), Units::ToUserTaskSpeed(task_stats.total.travelled.GetSpeed())); // Set Unit data.SetValueUnit(Units::current.task_speed_unit); }
void UpdateInfoBoxHeadWindSimplified(InfoBoxData &data) { const NMEAInfo &basic = CommonInterface::Basic(); if (!basic.ground_speed_available || !basic.airspeed_available) { data.SetInvalid(); return; } fixed value = basic.true_airspeed - basic.ground_speed; // Set Value data.SetValue(_T("%2.0f"), Units::ToUserWindSpeed(value)); // Set Unit data.SetValueUnit(Units::current.wind_speed_unit); }
void InfoBoxContentTaskSpeedAchieved::Update(InfoBoxData &data) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.total.remaining_effective.IsDefined()) { data.SetInvalid(); return; } // Set Value data.SetValue(_T("%2.0f"), Units::ToUserTaskSpeed(task_stats.total.remaining_effective.get_speed())); // Set Unit data.SetValueUnit(Units::current.task_speed_unit); }
void InfoBoxContentNextMC0AltitudeDiff::Update(InfoBoxData &data) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; const GlideResult &next_solution = task_stats.current_leg.solution_mc0; if (!task_stats.task_valid || !next_solution.IsDefined()) { data.SetInvalid(); return; } // Set Value TCHAR tmp[32]; Units::FormatUserAltitude(next_solution.altitude_difference, tmp, 32, false); data.SetValue(tmp); // Set Unit data.SetValueUnit(Units::current.altitude_unit); }
void InfoBoxContentWindSpeed::Update(InfoBoxData &data) { const DerivedInfo &info = CommonInterface::Calculated(); if (!info.wind_available) { data.SetInvalid(); return; } // Set Value data.SetValue(_T("%2.0f"), Units::ToUserWindSpeed(info.wind.norm)); // Set Unit data.SetValueUnit(Units::current.wind_speed_unit); // Set Comment data.SetComment(info.wind.bearing); }
void InfoBoxContentTaskAASpeedMin::Update(InfoBoxData &data) { const CommonStats &common_stats = XCSoarInterface::Calculated().common_stats; const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; if (!common_stats.ordered_has_targets || !task_stats.task_valid || !positive(common_stats.aat_speed_min)) { data.SetInvalid(); return; } // Set Value data.SetValue(_T("%2.0f"), Units::ToUserTaskSpeed(common_stats.aat_speed_min)); // Set Unit data.SetValueUnit(Units::current.task_speed_unit); }
void InfoBoxContentFinalAltitudeRequire::Update(InfoBoxData &data) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.total.solution_remaining.IsOk()) { data.SetInvalid(); return; } // Set Value TCHAR tmp[32]; Units::FormatUserAltitude(task_stats.total.solution_remaining.GetRequiredAltitude(), tmp, 32, false); data.SetValue(tmp); // Set Unit data.SetValueUnit(Units::current.altitude_unit); }
void UpdateInfoBoxTaskAASpeedMax(InfoBoxData &data) { const auto &calculated = CommonInterface::Calculated(); const TaskStats &task_stats = calculated.ordered_task_stats; const CommonStats &common_stats = calculated.common_stats; if (!task_stats.has_targets || !positive(common_stats.aat_speed_max)) { data.SetInvalid(); return; } // Set Value data.SetValue(_T("%2.0f"), Units::ToUserTaskSpeed(common_stats.aat_speed_max)); // Set Unit data.SetValueUnit(Units::current.task_speed_unit); }
void InfoBoxContentNextAltitudeRequire::Update(InfoBoxData &data) { // pilots want this to be assuming terminal flight to this wp const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; const GlideResult &next_solution = XCSoarInterface::Calculated().common_stats.next_solution; if (!task_stats.task_valid || !next_solution.IsAchievable()) { data.SetInvalid(); return; } // Set Value TCHAR tmp[32]; Units::FormatUserAltitude(next_solution.GetRequiredAltitude(), tmp, 32, false); data.SetValue(tmp); // Set Unit data.SetValueUnit(Units::current.altitude_unit); }
void InfoBoxContentNextAltitudeArrival::Update(InfoBoxData &data) { // pilots want this to be assuming terminal flight to this wp const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; const GlideResult next_solution = XCSoarInterface::Calculated().common_stats.next_solution; if (!task_stats.task_valid || !next_solution.IsFinalGlide()) { data.SetInvalid(); return; } // Set Value TCHAR tmp[32]; fixed alt = next_solution.GetArrivalAltitude(XCSoarInterface::Basic().nav_altitude); Units::FormatUserAltitude(alt, tmp, 32, false); data.SetValue(tmp); // Set Unit data.SetValueUnit(Units::current.altitude_unit); }
void UpdateInfoBoxCircleDiameter(InfoBoxData &data) { if (!CommonInterface::Basic().airspeed_available.IsValid()) { data.SetInvalid(); return; } const Angle turn_rate = CommonInterface::Calculated().turn_rate_heading_smoothed.Absolute(); // deal with div zero and small turn rates if (turn_rate < Angle::Degrees(1)) { data.SetInvalid(); return; } const fixed circle_diameter = CommonInterface::Basic().true_airspeed / turn_rate.Radians() * fixed(2); // convert turn rate to radians/s and double it to get estimated circle diameter if (circle_diameter > fixed (2000)){ // arbitrary estimated that any diameter bigger than 2km will not be interesting data.SetInvalid(); return; } TCHAR buffer[32]; Unit unit = FormatSmallUserDistance(buffer, circle_diameter, false, 0); data.SetValue (buffer); data.SetValueUnit(unit); const fixed circle_duration = Angle::FullCircle().Native() / turn_rate.Native(); StaticString<16> duration_buffer; duration_buffer.Format(_T("%u s"), int(circle_duration)); _tcscpy (buffer, duration_buffer); data.SetComment (buffer); }