void InfoBoxContentNextLD::Update(InfoBoxWindow &infobox) { // pilots want this to be assuming terminal flight to this wp, and this // is what current_leg gradient does. if (!XCSoarInterface::Calculated().task_stats.task_valid) { infobox.SetInvalid(); return; } fixed gradient = XCSoarInterface::Calculated().task_stats.current_leg.gradient; if (!positive(gradient)) { infobox.SetValue(_T("+++")); return; } if (::GradientValid(gradient)) { TCHAR tmp[32]; _stprintf(tmp, _T("%d"), (int)gradient); infobox.SetValue(tmp); } else { infobox.SetInvalid(); } }
void InfoBoxContentFinalETEVMG::Update(InfoBoxWindow &infobox) { if (!XCSoarInterface::Basic().GroundSpeedAvailable) { infobox.SetInvalid(); return; } const fixed d = XCSoarInterface::Calculated().task_stats. total.remaining.get_distance(); const fixed &v = XCSoarInterface::Basic().GroundSpeed; if (!XCSoarInterface::Calculated().task_stats.task_valid || !positive(d) || !positive(v)) { infobox.SetInvalid(); return; } TCHAR HHMMSSsmart[32]; TCHAR SSsmart[32]; const int dd = (int)(d/v); Units::TimeToTextSmart(HHMMSSsmart, SSsmart, dd); infobox.SetValue(HHMMSSsmart); infobox.SetComment(SSsmart); }
void InfoBoxContentTeamBearingDiff::Update(InfoBoxWindow &infobox) { #ifndef OLD_TASK infobox.SetInvalid(); return; #else if (!way_points.verify_index(XCSoarInterface::SettingsComputer(). TeamCodeRefWaypoint) || !XCSoarInterface::SettingsComputer().TeammateCodeValid) { infobox.SetInvalid(); return; } // Set Value Angle Value = XCSoarInterface::Calculated().TeammateBearing - XCSoarInterface::Basic().TrackBearing; SetValueBearingDifference(infobox, Value); #endif // Set Comment if (!XCSoarInterface::SettingsComputer().TeamFlarmIdTarget.defined()) infobox.SetCommentInvalid(); else if (!string_is_empty(XCSoarInterface::SettingsComputer().TeamFlarmCNTarget)) infobox.SetComment(XCSoarInterface::SettingsComputer().TeamFlarmCNTarget); else infobox.SetComment(_T("???")); if (XCSoarInterface::Basic().flarm.FindTraffic( XCSoarInterface::SettingsComputer().TeamFlarmIdTarget) != NULL) infobox.SetColorBottom(2); else infobox.SetColorBottom(1); }
void InfoBoxContentTeamBearingDiff::Update(InfoBoxWindow &infobox) { #ifndef OLD_TASK infobox.SetInvalid(); return; #else if (!way_points.verify_index(XCSoarInterface::SettingsComputer(). TeamCodeRefWaypoint) || !XCSoarInterface::SettingsComputer().TeammateCodeValid) { infobox.SetInvalid(); return; } // Set Value TCHAR tmp[32]; double Value = XCSoarInterface::Calculated().TeammateBearing - XCSoarInterface::Basic().TrackBearing; if (Value < -180.0) Value += 360.0; else if (Value > 180.0) Value -= 360.0; #ifndef __MINGW32__ if (Value > 1) _stprintf(tmp, TEXT("%2.0f°»"), Value); else if (Value < -1) _stprintf(tmp, TEXT("«%2.0f°"), -Value); else _tcscpy(tmp, TEXT("«»")); #else if (Value > 1) _stprintf(tmp, TEXT("%2.0f°»"), Value); else if (Value < -1) _stprintf(tmp, TEXT("«%2.0f°"), -Value); else _tcscpy(tmp, TEXT("«»")); #endif infobox.SetValue(tmp); #endif // Set Comment if (!XCSoarInterface::SettingsComputer().TeamFlarmIdTarget.defined()) infobox.SetComment(_T("---")); else if (!string_is_empty(XCSoarInterface::SettingsComputer().TeamFlarmCNTarget)) infobox.SetComment(XCSoarInterface::SettingsComputer().TeamFlarmCNTarget); else infobox.SetComment(_T("???")); if (XCSoarInterface::Basic().flarm.FindTraffic( XCSoarInterface::SettingsComputer().TeamFlarmIdTarget) != NULL) infobox.SetColorBottom(2); else infobox.SetColorBottom(1); }
void InfoBoxContentTaskTimeUnderMaxHeight::Update(InfoBoxWindow &infobox) { const CommonStats &common_stats = XCSoarInterface::Calculated().common_stats; const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; const fixed maxheight = fixed(protected_task_manager-> get_ordered_task_behaviour().start_max_height); if (!task_stats.task_valid || !positive(maxheight) || !protected_task_manager || !positive(common_stats.TimeUnderStartMaxHeight)) { infobox.SetInvalid(); return; } const int dd = (int)(XCSoarInterface::Basic().Time - common_stats.TimeUnderStartMaxHeight); TCHAR HHMMSSsmart[32]; TCHAR SSsmart[32]; Units::TimeToTextSmart(HHMMSSsmart, SSsmart, dd); infobox.SetValue(HHMMSSsmart); infobox.SetComment(_("Time Below")); }
void InfoBoxContentTaskAATimeDelta::Update(InfoBoxWindow &infobox) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; const CommonStats &common_stats = XCSoarInterface::Calculated().common_stats; if (!task_stats.task_valid || !task_stats.total.achievable() || !positive(task_stats.total.TimeRemaining) || !positive(common_stats.aat_time_remaining)) { infobox.SetInvalid(); return; } fixed diff = task_stats.total.TimeRemaining - common_stats.aat_time_remaining; TCHAR HHMMSSsmart[32]; TCHAR SSsmart[32]; const int dd = abs((int)diff); Units::TimeToTextSmart(HHMMSSsmart, SSsmart, dd); TCHAR tmp[32]; _stprintf(tmp, negative(diff) ? _T("-%s") : _T("%s"), HHMMSSsmart); infobox.SetValue(tmp); infobox.SetComment(SSsmart); // Set Color (red/blue/black) infobox.SetColor(negative(diff) ? 1 : task_stats.total.TimeRemaining < common_stats.aat_time_remaining + fixed(5) ? 2 : 0); }
void InfoBoxContentNextETA::Update(InfoBoxWindow &infobox) { // use proper non-terminal next task stats if (!XCSoarInterface::Calculated().task_stats.task_valid || !XCSoarInterface::Calculated().task_stats.current_leg.achievable()) { infobox.SetInvalid(); return; } TCHAR tmp[32]; int dd = (int)(XCSoarInterface::Calculated().task_stats.current_leg. solution_remaining.TimeElapsed) + DetectCurrentTime(XCSoarInterface::Basic()); const BrokenTime t = BrokenTime::FromSecondOfDayChecked(abs(dd)); // Set Value _stprintf(tmp, _T("%02u:%02u"), t.hour, t.minute); infobox.SetValue(tmp); // Set Comment _stprintf(tmp, _T("%02u"), t.second); infobox.SetComment(tmp); }
void InfoBoxContentFreeRAM::Update(InfoBoxWindow &infobox) { #ifdef HAVE_MEM_INFO TCHAR tmp[32]; TCHAR unit; unsigned long freeRAM = SystemFreeRAM(); double f = freeRAM; if (freeRAM >= 1024 * 1024 *1024) { f /= (1024 * 1024 * 1024); unit = _T('G'); } else if (freeRAM >= 1024 * 1024) { f /= (1024 * 1024); unit = _T('M'); } else if (freeRAM >= 1024) { f /= 1024; unit = _T('K'); } else unit = _T('B'); _stprintf(tmp, _T("%.1f%c"), f, unit); infobox.SetValue(tmp); #else infobox.SetInvalid(); #endif }
void InfoBoxContentAltitudeAGL::Update(InfoBoxWindow &infobox) { const DERIVED_INFO &calculated = CommonInterface::Calculated(); TCHAR sTmp[32]; if (!calculated.AltitudeAGLValid) { infobox.SetInvalid(); return; } // Set Value Units::FormatUserAltitude(calculated.AltitudeAGL, sTmp, sizeof(sTmp) / sizeof(sTmp[0]), false); infobox.SetValue(sTmp); // Set Comment Units::FormatAlternateUserAltitude(calculated.AltitudeAGL, sTmp, sizeof(sTmp) / sizeof(sTmp[0])); infobox.SetComment(sTmp); // Set Unit infobox.SetValueUnit(Units::Current.AltitudeUnit); // Set Color (red/black) infobox.SetColor(calculated.AltitudeAGL < XCSoarInterface::SettingsComputer().route_planner.safety_height_terrain ? 1 : 0); }
void InfoBoxContentBearingDiff::Update(InfoBoxWindow &infobox) { if (!XCSoarInterface::Calculated().task_stats.task_valid || XCSoarInterface::Calculated().task_stats.current_leg.solution_remaining. Vector.Distance <= fixed(10)) { infobox.SetInvalid(); return; } // Set Value TCHAR tmp[32]; double Value = (XCSoarInterface::Calculated().task_stats.current_leg. solution_remaining.Vector.Bearing - XCSoarInterface::Basic(). TrackBearing).as_delta().value_degrees(); #ifndef __MINGW32__ if (Value > 1) _stprintf(tmp, _T("%2.0f°»"), Value); else if (Value < -1) _stprintf(tmp, _T("«%2.0f°"), -Value); else _tcscpy(tmp, _T("«»")); #else if (Value > 1) _stprintf(tmp, _T("%2.0f°»"), Value); else if (Value < -1) _stprintf(tmp, _T("«%2.0f°"), -Value); else _tcscpy(tmp, _T("«»")); #endif infobox.SetValue(tmp); }
void InfoBoxContentAltitudeAGL::Update(InfoBoxWindow &infobox) { const DerivedInfo &calculated = CommonInterface::Calculated(); TCHAR sTmp[32]; if (!calculated.altitude_agl_valid) { infobox.SetInvalid(); return; } // Set Value Units::FormatUserAltitude(calculated.altitude_agl, sTmp, ARRAY_SIZE(sTmp), false); infobox.SetValue(sTmp); // Set Comment Units::FormatAlternateUserAltitude(calculated.altitude_agl, sTmp, ARRAY_SIZE(sTmp)); infobox.SetComment(sTmp); // Set Unit infobox.SetValueUnit(Units::Current.AltitudeUnit); // Set Color (red/black) infobox.SetColor(calculated.altitude_agl < XCSoarInterface::SettingsComputer().task.route_planner.safety_height_terrain ? 1 : 0); }
void InfoBoxContentTeamCode::Update(InfoBoxWindow &infobox) { if (!XCSoarInterface::SettingsComputer().TeamCodeRefWaypoint) { infobox.SetInvalid(); return; } // Set Value infobox.SetValue(XCSoarInterface::Calculated().OwnTeamCode.GetCode()); // Set Comment if (XCSoarInterface::SettingsComputer().TeammateCodeValid == true){ infobox.SetComment(XCSoarInterface::SettingsComputer().TeammateCode.GetCode()); if (!XCSoarInterface::SettingsComputer().TeamFlarmTracking) infobox.SetColorBottom(0); else if (XCSoarInterface::Basic().flarm.FindTraffic( XCSoarInterface::SettingsComputer().TeamFlarmIdTarget) != NULL) infobox.SetColorBottom(2); else infobox.SetColorBottom(1); } else infobox.SetCommentInvalid(); }
void InfoBoxContentAltitudeQFE::Update(InfoBoxWindow &infobox) { const NMEA_INFO &basic = CommonInterface::Basic(); TCHAR sTmp[32]; if (!basic.GPSAltitudeAvailable) { infobox.SetInvalid(); return; } fixed Value = basic.GPSAltitude; const Waypoint* home_waypoint = way_points.find_home(); if (home_waypoint) Value -= home_waypoint->Altitude; // Set Value Units::FormatUserAltitude(Value, sTmp, sizeof(sTmp) / sizeof(sTmp[0]), false); infobox.SetValue(sTmp); // Set Comment Units::FormatAlternateUserAltitude(Value, sTmp, sizeof(sTmp) / sizeof(sTmp[0])); infobox.SetComment(sTmp); // Set Unit infobox.SetValueUnit(Units::Current.AltitudeUnit); }
void InfoBoxContentFinalETE::Update(InfoBoxWindow &infobox) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.total.achievable() || !positive(task_stats.total.TimeRemaining)) { infobox.SetInvalid(); return; } TCHAR tmp[32]; int dd = abs((int)task_stats.total.TimeRemaining) % (3600 * 24); int hours = (dd / 3600); int mins = (dd / 60 - hours * 60); int seconds = (dd - mins * 60 - hours * 3600); hours = hours % 24; if (hours > 0) { // hh:mm, ss // Set Value _stprintf(tmp, _T("%02d:%02d"), hours, mins); infobox.SetValue(tmp); // Set Comment _stprintf(tmp, _T("%02d"), seconds); infobox.SetComment(tmp); } else { // mm:ss // Set Value _stprintf(tmp, _T("%02d:%02d"), mins, seconds); infobox.SetValue(tmp); // Set Comment infobox.SetComment(_T("")); } }
void InfoBoxContentAltitudeBaro::Update(InfoBoxWindow &infobox) { const NMEA_INFO &basic = CommonInterface::Basic(); TCHAR sTmp[32]; if (!basic.BaroAltitudeAvailable) { infobox.SetInvalid(); if (basic.PressureAltitudeAvailable) infobox.SetComment(_("no QNH")); return; } // Set Value Units::FormatUserAltitude(basic.BaroAltitude, sTmp, sizeof(sTmp) / sizeof(sTmp[0]), false); infobox.SetValue(sTmp); // Set Comment Units::FormatAlternateUserAltitude(basic.BaroAltitude, sTmp, sizeof(sTmp) / sizeof(sTmp[0])); infobox.SetComment(sTmp); // Set Unit infobox.SetValueUnit(Units::Current.AltitudeUnit); }
void InfoBoxContentTeamDistance::Update(InfoBoxWindow &infobox) { if (!XCSoarInterface::SettingsComputer().TeammateCodeValid) { infobox.SetInvalid(); return; } // Set Value TCHAR tmp[32]; Units::FormatUserDistance(XCSoarInterface::Calculated().TeammateRange, tmp, 32, false); infobox.SetValue(tmp); // Set Unit infobox.SetValueUnit(Units::DistanceUnit); // Set Comment if (!XCSoarInterface::SettingsComputer().TeamFlarmIdTarget.defined()) infobox.SetComment(_T("---")); else if (!string_is_empty(XCSoarInterface::SettingsComputer().TeamFlarmCNTarget)) infobox.SetComment(XCSoarInterface::SettingsComputer().TeamFlarmCNTarget); else infobox.SetComment(_T("???")); if (XCSoarInterface::Basic().flarm.FindTraffic( XCSoarInterface::SettingsComputer().TeamFlarmIdTarget) != NULL) infobox.SetColorBottom(2); else infobox.SetColorBottom(1); }
void InfoBoxContentFinalETA::Update(InfoBoxWindow &infobox) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.total.achievable()) { infobox.SetInvalid(); return; } TCHAR tmp[32]; int dd = abs((int)(task_stats.total.solution_remaining.TimeElapsed + fixed(DetectCurrentTime(&XCSoarInterface::Basic())))) % (3600 * 24); int hours = (dd / 3600); int mins = (dd / 60 - hours * 60); int seconds = (dd - mins * 60 - hours * 3600); hours = hours % 24; // Set Value _stprintf(tmp, _T("%02d:%02d"), hours, mins); infobox.SetValue(tmp); // Set Comment _stprintf(tmp, _T("%02d"), seconds); infobox.SetComment(tmp); }
void InfoBoxContentAltitudeAGL::Update(InfoBoxWindow &infobox) { TCHAR sTmp[32]; if (!XCSoarInterface::Calculated().TerrainValid) { infobox.SetInvalid(); return; } // Set Value Units::FormatUserAltitude(XCSoarInterface::Basic().AltitudeAGL, sTmp, sizeof(sTmp) / sizeof(sTmp[0]), false); infobox.SetValue(sTmp); // Set Comment Units::FormatAlternateUserAltitude(XCSoarInterface::Basic().AltitudeAGL, sTmp, sizeof(sTmp) / sizeof(sTmp[0])); infobox.SetComment(sTmp); // Set Unit infobox.SetValueUnit(Units::AltitudeUnit); if (XCSoarInterface::Basic().AltitudeAGL < XCSoarInterface::SettingsComputer().safety_height_terrain) // red infobox.SetColor(1); else infobox.SetColor(0); }
void InfoBoxContentAltitudeQFE::Update(InfoBoxWindow &infobox) { const NMEAInfo &basic = CommonInterface::Basic(); TCHAR sTmp[32]; if (!basic.gps_altitude_available) { infobox.SetInvalid(); return; } fixed Value = basic.gps_altitude; const Waypoint *home_waypoint = way_points.GetHome(); if (home_waypoint) Value -= home_waypoint->altitude; // Set Value Units::FormatUserAltitude(Value, sTmp, ARRAY_SIZE(sTmp), false); infobox.SetValue(sTmp); // Set Comment Units::FormatAlternateUserAltitude(Value, sTmp, ARRAY_SIZE(sTmp)); infobox.SetComment(sTmp); // Set Unit infobox.SetValueUnit(Units::Current.AltitudeUnit); }
void InfoBoxContentAltitudeBaro::Update(InfoBoxWindow &infobox) { const NMEAInfo &basic = CommonInterface::Basic(); TCHAR sTmp[32]; if (!basic.baro_altitude_available) { infobox.SetInvalid(); if (basic.pressure_altitude_available) infobox.SetComment(_("no QNH")); return; } // Set Value Units::FormatUserAltitude(basic.baro_altitude, sTmp, ARRAY_SIZE(sTmp), false); infobox.SetValue(sTmp); // Set Comment Units::FormatAlternateUserAltitude(basic.baro_altitude, sTmp, ARRAY_SIZE(sTmp)); infobox.SetComment(sTmp); // Set Unit infobox.SetValueUnit(Units::Current.AltitudeUnit); }
void InfoBoxContentFlightLevel::Update(InfoBoxWindow &infobox) { const NMEAInfo &basic = CommonInterface::Basic(); const SETTINGS_COMPUTER &settings_computer = CommonInterface::SettingsComputer(); TCHAR sTmp[32]; if (basic.pressure_altitude_available) { fixed Altitude = Units::ToUserUnit(basic.pressure_altitude, unFeet); // Title color black infobox.SetColorTop(0); // Set Value _stprintf(sTmp, _T("%03d"), iround(Altitude/100)); infobox.SetValue(sTmp); // Set Comment _stprintf(sTmp, _T("%dft"), iround(Altitude)); infobox.SetComment(sTmp); } 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), unFeet); // Title color red infobox.SetColorTop(1); // Set Value _stprintf(sTmp, _T("%03d"), iround(Altitude/100)); infobox.SetValue(sTmp); // Set Comment _stprintf(sTmp, _T("%dft"), iround(Altitude)); infobox.SetComment(sTmp); } else if ((basic.baro_altitude_available || basic.gps_altitude_available) && !settings_computer.pressure_available) { infobox.SetInvalid(); infobox.SetComment(_("no QNH")); } else { infobox.SetInvalid(); } }
void InfoBoxContentAlternateGR::Update(InfoBoxWindow &infobox) { if (protected_task_manager == NULL) { infobox.SetInvalid(); return; } const AbortTask::AlternateVector alternates = protected_task_manager->getAlternates(); if (alternates.size() > 0 && index >= alternates.size()) index = alternates.size() - 1; TCHAR tmp[32]; _stprintf(tmp, _T("Altrn %d GR"), index+1); infobox.SetTitle(tmp); const Waypoint* way_point = (alternates.size()>index) ? &alternates[index].first : NULL; SetCommentFromWaypointName(infobox, way_point); if (!way_point) { infobox.SetInvalid(); return; } const GlideResult& solution = alternates[index].second; fixed gradient = ::AngleToGradient(solution.destination_angle_ground()); if (negative(gradient)) { infobox.SetColor(0); infobox.SetValue(_T("+++")); return; } if (::GradientValid(gradient)) { TCHAR tmp[32]; _stprintf(tmp, _T("%d"), (int)gradient); infobox.SetValue(tmp); } else { infobox.SetInvalid(); } // Set Color (blue/black) infobox.SetColor(solution.glide_reachable(true) ? 2 : 0); }
void InfoBoxContentTrack::Update(InfoBoxWindow &infobox) { if (!XCSoarInterface::Basic().track_available) { infobox.SetInvalid(); return; } infobox.SetValue(XCSoarInterface::Basic().track, _T("T")); }
void InfoBoxContentTrack::Update(InfoBoxWindow &infobox) { if (XCSoarInterface::Basic().gps.NAVWarning) { infobox.SetInvalid(); return; } infobox.SetValue(XCSoarInterface::Basic().TrackBearing, _T("T")); }
void InfoBoxContentThermalAllAvg::Update(InfoBoxWindow &infobox) { if (!positive(XCSoarInterface::Calculated().time_climb)) { infobox.SetInvalid(); return; } SetVSpeed(infobox, XCSoarInterface::Calculated().total_height_gain / XCSoarInterface::Calculated().time_climb); }
void InfoBoxContentHorizon::Update(InfoBoxWindow &infobox) { infobox.SetComment(_T("")); if (!CommonInterface::Basic().acceleration.available) { infobox.SetInvalid(); return; } infobox.SetValue(_T("")); infobox.invalidate(); }
void InfoBoxContentThermalLastAvg::Update(InfoBoxWindow &infobox) { const OneClimbInfo &thermal = CommonInterface::Calculated().last_thermal; if (!thermal.IsDefined()) { infobox.SetInvalid(); return; } SetVSpeed(infobox, thermal.lift_rate); }
void InfoBoxContentWindBearing::Update(InfoBoxWindow &infobox) { const DerivedInfo &info = CommonInterface::Calculated(); if (!info.wind_available) { infobox.SetInvalid(); return; } infobox.SetValue(info.wind.bearing, _T("T")); }
void InfoBoxContentNextWaypoint::Update(InfoBoxWindow &infobox) { // use proper non-terminal next task stats const Waypoint* way_point = protected_task_manager.getActiveWaypoint(); if (!way_point) { infobox.SetTitle(_("Next")); infobox.SetInvalid(); return; } SetTitleFromWaypointName(infobox, way_point); if (!XCSoarInterface::Calculated().task_stats.task_valid || XCSoarInterface::Calculated().task_stats.current_leg.solution_remaining. Vector.Distance <= fixed(10)) { infobox.SetInvalid(); return; } // Set Value Angle Value = (XCSoarInterface::Calculated().task_stats.current_leg. solution_remaining.Vector.Bearing - XCSoarInterface::Basic(). TrackBearing); SetValueBearingDifference(infobox, Value); // Set Comment infobox.SetComment(way_point->Comment.c_str()); // Set Color if (XCSoarInterface::Calculated().task_stats.current_leg. solution_remaining.is_final_glide()) // blue infobox.SetColor(2); else // black infobox.SetColor(0); }
void InfoBoxContentTaskAATimeDelta::Update(InfoBoxWindow &infobox) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; const CommonStats &common_stats = XCSoarInterface::Calculated().common_stats; if (!task_stats.task_valid || !task_stats.total.achievable() || !positive(task_stats.total.TimeRemaining) || !positive(common_stats.aat_time_remaining)) { infobox.SetInvalid(); return; } TCHAR tmp[32]; fixed diff = task_stats.total.TimeRemaining - common_stats.aat_time_remaining; int dd = abs((int)diff) % (3600 * 24); int hours = (dd / 3600); int mins = (dd / 60 - hours * 60); int seconds = (dd - mins * 60 - hours * 3600); hours = hours % 24; if (hours > 0) { // hh:mm, ss // Set Value _stprintf(tmp, negative(diff) ? _T("-%02d:%02d") : _T("%02d:%02d"), hours, mins); infobox.SetValue(tmp); // Set Comment _stprintf(tmp, _T("%02d"), seconds); infobox.SetComment(tmp); } else { // mm:ss // Set Value _stprintf(tmp, negative(diff) ? _T("-%02d:%02d") : _T("%02d:%02d"), mins, seconds); infobox.SetValue(tmp); // Set Comment infobox.SetComment(_T("")); } // Set Color if (negative(diff)) // Red infobox.SetColor(1); else if (task_stats.total.TimeRemaining < common_stats.aat_time_remaining + fixed(5)) // Blue infobox.SetColor(2); else // Black infobox.SetColor(0); }