/** * Reads the selected LanguageFile into the cache */ void ReadLanguageFile() { #ifndef HAVE_NATIVE_GETTEXT CloseLanguageFile(); LogFormat("Loading language file"); TCHAR buffer[MAX_PATH], second_buffer[MAX_PATH]; const TCHAR *value = Profile::GetPath(ProfileKeys::LanguageFile, buffer) ? buffer : _T(""); if (StringIsEqual(value, _T("none"))) return; if (StringIsEmpty(value) || StringIsEqual(value, _T("auto"))) { AutoDetectLanguage(); return; } const TCHAR *base = BaseName(value); if (base == NULL) base = value; if (base == value) { LocalPath(second_buffer, value); value = second_buffer; } if (!LoadLanguageFile(value) && !ReadResourceLanguageFile(base)) AutoDetectLanguage(); #endif }
/** * Reads the selected LanguageFile into the cache */ void ReadLanguageFile() { CloseLanguageFile(); LogStartUp(_T("Loading language file")); TCHAR buffer[MAX_PATH], second_buffer[MAX_PATH]; const TCHAR *value = Profile::GetPath(szProfileLanguageFile, buffer) ? buffer : _T(""); if (_tcscmp(value, _T("none")) == 0) return; if (string_is_empty(value) || _tcscmp(value, _T("auto")) == 0) { AutoDetectLanguage(); return; } const TCHAR *base = BaseName(value); if (base == NULL) base = value; if (base == value) { LocalPath(second_buffer, value); value = second_buffer; } if (!LoadLanguageFile(value) && !ReadResourceLanguageFile(base)) AutoDetectLanguage(); }
void Shutdown() { VerboseOperationEnvironment operation; gcc_unused ScopeBusyIndicator busy; MainWindow *const main_window = CommonInterface::main_window; auto &live_blackboard = CommonInterface::GetLiveBlackboard(); // Show progress dialog operation.SetText(_("Shutdown, please wait...")); // Log shutdown information LogFormat("Entering shutdown..."); main_window->BeginShutdown(); StartupLogFreeRamAndStorage(); Lua::StopAllBackground(); // Turn off all displays global_running = false; #ifdef HAVE_TRACKING if (tracking != nullptr) tracking->StopAsync(); #endif // Stop logger and save igc file operation.SetText(_("Shutdown, saving logs...")); if (logger != nullptr) logger->GUIStopLogger(CommonInterface::Basic(), true); delete flight_logger; flight_logger = nullptr; delete all_monitors; all_monitors = nullptr; if (glide_computer_events != nullptr) { live_blackboard.RemoveListener(*glide_computer_events); delete glide_computer_events; glide_computer_events = nullptr; } SaveFlarmColors(); // Save settings to profile operation.SetText(_("Shutdown, saving profile...")); Profile::Save(); operation.SetText(_("Shutdown, please wait...")); // Stop threads LogFormat("Stop threads"); #ifdef HAVE_DOWNLOAD_MANAGER Net::DownloadManager::BeginDeinitialise(); #endif #ifndef ENABLE_OPENGL if (draw_thread != nullptr) draw_thread->BeginStop(); #endif if (calculation_thread != nullptr) calculation_thread->BeginStop(); if (merge_thread != nullptr) merge_thread->BeginStop(); // Wait for the calculations thread to finish LogFormat("Waiting for calculation thread"); if (merge_thread != nullptr) { merge_thread->Join(); delete merge_thread; merge_thread = nullptr; } if (calculation_thread != nullptr) { calculation_thread->Join(); delete calculation_thread; calculation_thread = nullptr; } // Wait for the drawing thread to finish #ifndef ENABLE_OPENGL LogFormat("Waiting for draw thread"); if (draw_thread != nullptr) { draw_thread->Join(); delete draw_thread; draw_thread = nullptr; } #endif LogFormat("delete MapWindow"); main_window->Deinitialise(); // Stop sound AudioVarioGlue::Deinitialise(); // Save the task for the next time operation.SetText(_("Shutdown, saving task...")); LogFormat("Save default task"); if (protected_task_manager != nullptr) protected_task_manager->TaskSaveDefault(); // Clear waypoint database way_points.Clear(); operation.SetText(_("Shutdown, please wait...")); // Clear weather database delete rasp; rasp = nullptr; // Clear terrain database delete terrain; terrain = nullptr; delete topography; topography = nullptr; // Close any device connections devShutdown(); NMEALogger::Shutdown(); delete replay; replay = nullptr; delete devices; devices = nullptr; delete device_blackboard; device_blackboard = nullptr; if (protected_task_manager != nullptr) { protected_task_manager->SetRoutePlanner(nullptr); delete protected_task_manager; protected_task_manager = nullptr; } delete task_manager; task_manager = nullptr; #ifdef HAVE_NOAA delete noaa_store; noaa_store = nullptr; #endif #ifdef HAVE_TRACKING if (tracking != nullptr) { tracking->WaitStopped(); delete tracking; tracking = nullptr; } #endif #ifdef HAVE_DOWNLOAD_MANAGER Net::DownloadManager::Deinitialise(); #endif // Close the progress dialog LogFormat("Close Progress Dialog"); operation.Hide(); delete glide_computer; glide_computer = nullptr; delete task_events; task_events = nullptr; delete logger; logger = nullptr; // Clear airspace database airspace_database.Clear(); // Destroy FlarmNet records DeinitTrafficGlobals(); delete file_cache; file_cache = nullptr; LogFormat("Close Windows - main"); main_window->Destroy(); CloseLanguageFile(); Display::RestoreOrientation(); StartupLogFreeRamAndStorage(); LogFormat("Finished shutdown"); }
void XCSoarInterface::Shutdown() { VerboseOperationEnvironment operation; gcc_unused ScopeBusyIndicator busy; // Show progress dialog operation.SetText(_("Shutdown, please wait...")); // Log shutdown information LogStartUp(_T("Entering shutdown...")); StartupLogFreeRamAndStorage(); // Turn off all displays globalRunningEvent.Reset(); #ifdef HAVE_TRACKING if (tracking != NULL) tracking->StopAsync(); #endif // Stop logger and save igc file operation.SetText(_("Shutdown, saving logs...")); logger.GUIStopLogger(Basic(), true); delete flight_logger; flight_logger = NULL; GetLiveBlackboard().RemoveListener(glide_computer_events); FlarmFriends::Save(); // Save settings to profile operation.SetText(_("Shutdown, saving profile...")); Profile::Save(); // Stop sound AudioVarioGlue::Deinitialise(); operation.SetText(_("Shutdown, please wait...")); // Stop threads LogStartUp(_T("Stop threads")); #ifndef ENABLE_OPENGL draw_thread->BeginStop(); #endif calculation_thread->BeginStop(); merge_thread->BeginStop(); // Wait for the calculations thread to finish LogStartUp(_T("Waiting for calculation thread")); merge_thread->Join(); delete merge_thread; merge_thread = NULL; calculation_thread->Join(); delete calculation_thread; calculation_thread = NULL; // Wait for the drawing thread to finish #ifndef ENABLE_OPENGL LogStartUp(_T("Waiting for draw thread")); draw_thread->Join(); delete draw_thread; #endif LogStartUp(_T("delete MapWindow")); main_window.Deinitialise(); // Save the task for the next time operation.SetText(_("Shutdown, saving task...")); LogStartUp(_T("Save default task")); protected_task_manager->TaskSaveDefault(); // Clear waypoint database LogStartUp(_T("Close waypoints")); way_points.Clear(); operation.SetText(_("Shutdown, please wait...")); // Clear weather database LogStartUp(_T("CloseRASP")); RASP.Close(); // Clear terrain database LogStartUp(_T("CloseTerrain")); delete terrain; LogStartUp(_T("CloseTopography")); delete topography; delete protected_marks; delete marks; // Close any device connections devShutdown(); NMEALogger::Shutdown(); delete replay; DeviceListDeinitialise(); delete device_blackboard; device_blackboard = NULL; protected_task_manager->SetRoutePlanner(NULL); delete protected_task_manager; delete task_manager; #ifdef HAVE_NET delete noaa_store; #endif #ifdef HAVE_TRACKING if (tracking != NULL) { tracking->WaitStopped(); delete tracking; } #endif // Close the progress dialog LogStartUp(_T("Close Progress Dialog")); operation.Hide(); // Clear the EGM96 database EGM96::Close(); delete glide_computer; // Clear airspace database LogStartUp(_T("Close airspace")); airspace_database.clear(); // Destroy FlarmNet records FlarmNet::Destroy(); delete file_cache; LogStartUp(_T("Close Windows - main")); main_window.reset(); CloseLanguageFile(); Display::RestoreOrientation(); StartupLogFreeRamAndStorage(); LogStartUp(_T("Finished shutdown")); }
void XCSoarInterface::Shutdown(void) { gcc_unused ScopeBusyIndicator busy; // Show progress dialog ProgressGlue::Create(_("Shutdown, please wait...")); // Log shutdown information LogStartUp(_T("Entering shutdown...")); StartupLogFreeRamAndStorage(); // Turn off all displays globalRunningEvent.reset(); // Stop logger and save igc file ProgressGlue::Create(_("Shutdown, saving logs...")); logger.guiStopLogger(Basic(), true); // Save settings to profile ProgressGlue::Create(_("Shutdown, saving profile...")); Profile::Save(); // Stop sound LogStartUp(_T("SaveSoundSettings")); Profile::SetSoundSettings(); #ifndef DISABLEAUDIOVARIO // VarioSound_EnableSound(false); // VarioSound_Close(); #endif ProgressGlue::Create(_("Shutdown, please wait...")); // Stop threads LogStartUp(_T("Stop threads")); #ifndef ENABLE_OPENGL draw_thread->stop(); #endif calculation_thread->stop(); // Wait for the calculations thread to finish LogStartUp(_T("Waiting for calculation thread")); calculation_thread->join(); delete calculation_thread; calculation_thread = NULL; // Wait for the drawing thread to finish #ifndef ENABLE_OPENGL LogStartUp(_T("Waiting for draw thread")); draw_thread->join(); delete draw_thread; #endif LogStartUp(_T("delete MapWindow")); main_window.map.reset(); // Save the task for the next time ProgressGlue::Create(_("Shutdown, saving task...")); LogStartUp(_T("Save default task")); protected_task_manager->task_save_default(); // Clear waypoint database LogStartUp(_T("Close waypoints")); way_points.clear(); ProgressGlue::Create(_("Shutdown, please wait...")); // Clear weather database LogStartUp(_T("CloseRASP")); RASP.Close(); // Clear terrain database LogStartUp(_T("CloseTerrain")); delete terrain; LogStartUp(_T("CloseTopography")); delete topography; delete marks; // Close any device connections devShutdown(); RawLoggerShutdown(); delete replay; // Save everything in the persistent memory file SaveCalculationsPersist(Basic(), Calculated(), *protected_task_manager, *glide_computer, logger); delete protected_task_manager; delete task_manager; // Kill windows LogStartUp(_T("Destroy Info Boxes")); InfoBoxManager::Destroy(); LogStartUp(_T("Destroy Button Labels")); ButtonLabel::Destroy(); // Close the progress dialog LogStartUp(_T("Close Progress Dialog")); ProgressGlue::Close(); // Clear the EGM96 database CloseGeoid(); delete glide_computer; // Clear airspace database LogStartUp(_T("Close airspace")); airspace_warnings->clear(); airspace_database.clear(); delete airspace_warnings; delete airspace_warning; // Destroy FlarmNet records FlarmNet::Destroy(); delete file_cache; LogStartUp(_T("Close Windows - main ")); main_window.reset(); CloseLanguageFile(); RestoreDisplayOrientation(); StartupLogFreeRamAndStorage(); LogStartUp(_T("Finished shutdown")); }