static void CopyList() { const ProtectedAirspaceWarningManager::Lease lease(*airspace_warnings); warning_list.clear(); for (auto i = lease->begin(), end = lease->end(); i != end && !warning_list.full(); ++i) warning_list.push_back(*i); }
void AirspaceWarningMonitor::Check() { const auto &calculated = CommonInterface::Calculated(); if (widget == nullptr && calculated.airspace_warnings.latest == last) return; /* there's a new airspace warning */ last = calculated.airspace_warnings.latest; auto *airspace_warnings = GetAirspaceWarnings(); if (airspace_warnings == nullptr) { HideWidget(); return; } if (!HasPointer()) { /* "classic" list-only view for devices without touch screen */ if (dlgAirspaceWarningVisible()) /* already visible */ return; // un-blank the display, play a sound ResetUserIdle(); PlayResource(_T("IDR_WAV_BEEPBWEEP")); // show airspace warnings dialog if (CommonInterface::GetUISettings().enable_airspace_warning_dialog) dlgAirspaceWarningsShowModal(*airspace_warnings, true); return; } const AbstractAirspace *airspace = nullptr; AirspaceWarning::State state; AirspaceInterceptSolution solution; { const ProtectedAirspaceWarningManager::Lease lease(*airspace_warnings); auto w = lease->begin(); if (w != lease->end() && w->IsAckExpired()) { airspace = &w->GetAirspace(); state = w->GetWarningState(); solution = w->GetSolution(); } } if (airspace == nullptr) { HideWidget(); return; } if (CommonInterface::GetUISettings().enable_airspace_warning_dialog) { /* show airspace warning */ if (widget != nullptr) { if (widget->Update(*airspace, state, solution)) return; HideWidget(); } widget = new AirspaceWarningWidget(*this, *airspace_warnings, *airspace, state, solution); PageActions::SetCustomBottom(widget); } // un-blank the display, play a sound ResetUserIdle(); PlayResource(_T("IDR_WAV_BEEPBWEEP")); }