void TaskStatusPanel::Refresh() { if (protected_task_manager == NULL) return; const DerivedInfo &calculated = CommonInterface::Calculated(); const TaskStats &task_stats = calculated.ordered_task_stats; TCHAR Temp[80]; SetRowVisible(TaskTime, task_stats.has_targets); if (task_stats.has_targets) { FormatSignedTimeHHMM(Temp, (int)protected_task_manager->GetOrderedTaskSettings().aat_min_time); SetText(TaskTime, Temp); } int ete_time(task_stats.GetEstimatedTotalTime()); FormatSignedTimeHHMM(Temp, ete_time); SetText(ETETime, Temp); FormatSignedTimeHHMM(Temp, (int)task_stats.total.time_remaining_now); SetText(RemainingTime, Temp); if (task_stats.total.planned.IsDefined()) { FormatUserDistanceSmart(task_stats.total.planned.GetDistance(), Temp, ARRAY_SIZE(Temp)); SetText(TaskDistance, Temp); } else SetText(TaskDistance, _T("")); if (task_stats.total.remaining.IsDefined()) { FormatUserDistanceSmart(task_stats.total.remaining.GetDistance(), Temp, ARRAY_SIZE(Temp)); SetText(RemainingDistance, Temp); } if (task_stats.total.planned.IsDefined()) { FormatUserTaskSpeed(task_stats.total.planned.GetSpeed(), Temp, ARRAY_SIZE(Temp)); SetText(EstimatedSpeed, Temp); } else SetText(EstimatedSpeed, _T("")); if (task_stats.total.travelled.IsDefined()) { FormatUserTaskSpeed(task_stats.total.travelled.GetSpeed(), Temp, ARRAY_SIZE(Temp)); SetText(AverageSpeed, Temp); } else SetText(AverageSpeed, _T("")); }
void RulesStatusPanel::Refresh() { TCHAR Temp[80]; const DerivedInfo &calculated = CommonInterface::Calculated(); const TaskStats &task_stats = calculated.ordered_task_stats; const StartStats &start_stats = task_stats.start; const ComputerSettings &settings = CommonInterface::GetComputerSettings(); /// @todo proper task validity check SetText(ValidStart, start_stats.task_started ? _("Yes") : _T("No")); SetText(ValidFinish, task_stats.task_finished ? _("Yes") : _T("No")); if (start_stats.task_started) { SetText(StartTime, FormatLocalTimeHHMM((int)start_stats.time, settings.utc_offset)); SetText(StartSpeed, FormatUserTaskSpeed(start_stats.ground_speed)); SetText(StartHeight, FormatUserAltitude(start_stats.altitude)); } else { ClearValue(StartTime); ClearValue(StartSpeed); ClearValue(StartHeight); } Temp[0] = _T('\0'); double finish_height(0); if (protected_task_manager != nullptr) { ProtectedTaskManager::Lease task_manager(*protected_task_manager); const OrderedTask &task = task_manager->GetOrderedTask(); const unsigned task_size = task.TaskSize(); if (task_size > 0) { CopyString(Temp, task.GetTaskPoint(0).GetWaypoint().name.c_str(), ARRAY_SIZE(Temp)); finish_height = task.GetTaskPoint(task_size - 1).GetElevation(); } } SetText(StartPoint, Temp); SetText(FinishAlt, FormatUserAltitude(finish_height)); }
void TaskStatusPanel::Refresh() { if (protected_task_manager == nullptr) return; const DerivedInfo &calculated = CommonInterface::Calculated(); const TaskStats &task_stats = calculated.ordered_task_stats; SetRowVisible(TaskTime, task_stats.has_targets); if (task_stats.has_targets) SetText(TaskTime, FormatSignedTimeHHMM((int)protected_task_manager->GetOrderedTaskSettings().aat_min_time)); SetText(ETETime, FormatSignedTimeHHMM((int)task_stats.GetEstimatedTotalTime())); SetText(RemainingTime, FormatSignedTimeHHMM((int)task_stats.total.time_remaining_now)); if (task_stats.total.planned.IsDefined()) SetText(TaskDistance, FormatUserDistanceSmart(task_stats.total.planned.GetDistance())); else ClearText(TaskDistance); if (task_stats.total.remaining.IsDefined()) SetText(RemainingDistance, FormatUserDistanceSmart(task_stats.total.remaining.GetDistance())); if (task_stats.total.planned.IsDefined()) SetText(EstimatedSpeed, FormatUserTaskSpeed(task_stats.total.planned.GetSpeed())); else ClearText(EstimatedSpeed); if (task_stats.total.travelled.IsDefined()) SetText(AverageSpeed, FormatUserTaskSpeed(task_stats.total.travelled.GetSpeed())); else ClearText(AverageSpeed); LoadValue(MC, CommonInterface::GetComputerSettings().polar.glide_polar_task.GetMC(), UnitGroup::VERTICAL_SPEED); if (task_stats.total.planned.IsDefined()) { auto rMax = task_stats.distance_max; auto rMin = task_stats.distance_min; if (rMin < rMax) { auto range = 2 * (task_stats.total.planned.GetDistance() - rMin) / (rMax - rMin) - 1; LoadValue(RANGE, range * 100); } else ClearValue(RANGE); } else ClearValue(RANGE); if (task_stats.total.remaining_effective.IsDefined()) LoadValue(SPEED_REMAINING, task_stats.total.remaining_effective.GetSpeed(), UnitGroup::TASK_SPEED); else ClearValue(SPEED_REMAINING); LoadValue(EFFECTIVE_MC, task_stats.effective_mc, UnitGroup::VERTICAL_SPEED); if (task_stats.total.travelled.IsDefined()) LoadValue(SPEED_ACHIEVED, task_stats.total.travelled.GetSpeed(), UnitGroup::TASK_SPEED); else ClearValue(SPEED_ACHIEVED); LoadValue(CRUISE_EFFICIENCY, task_stats.cruise_efficiency * 100); }
gcc_const static inline StringBuffer<TCHAR, 32> FormatUserTaskSpeed(double value, bool precision=true) { StringBuffer<TCHAR, 32> buffer; FormatUserTaskSpeed(value, buffer.data(), true, precision); return buffer; }