From 8275b0d9bffef63d60d1671c9dff55d33b0b3748 Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Wed, 3 Aug 2016 02:08:53 +0100 Subject: [PATCH] refs #697 BlackMisc settings renamed and reorganized. --- samples/blackmiscsim/samplesfscommon.cpp | 9 +- samples/blackmiscsim/samplesmodelmapping.cpp | 9 +- src/blackcore/context/contextaudioimpl.cpp | 2 +- .../components/audiosetupcomponent.cpp | 5 +- .../components/dbownmodelscomponent.h | 2 +- .../settingssimulatorbasicscomponent.cpp | 9 +- .../settingssimulatorbasicscomponent.h | 6 +- .../settingssimulatormessagescomponent.cpp | 4 +- .../settingssimulatormessagescomponent.h | 4 +- src/blackgui/settings/dockwidgetsettings.h | 2 +- src/blackgui/settings/guisettings.h | 2 +- src/blackgui/settings/navigatorsettings.h | 2 +- src/blackmisc/audio/audio.h | 2 +- src/blackmisc/audio/audiosettings.cpp | 59 +++ src/blackmisc/audio/audiosettings.h | 65 +++ src/blackmisc/audio/registermetadataaudio.cpp | 2 +- .../audio/settings/settingsaudio.cpp | 62 --- src/blackmisc/audio/settings/settingsaudio.h | 69 --- src/blackmisc/blackmisc.pro | 4 - src/blackmisc/settingscache.h | 12 +- .../simulation/aircraftmodelloader.cpp | 1 - .../simulation/aircraftmodelloader.h | 4 +- .../simulation/fscommon/aircraftcfgparser.cpp | 1 - .../simulation/registermetadatasimulation.cpp | 5 +- .../simulation/settings/settingssimulator.cpp | 442 ------------------ .../simulation/settings/settingssimulator.h | 304 ------------ .../simulation/simulationsettings.cpp | 439 +++++++++++++++++ src/blackmisc/simulation/simulationsettings.h | 301 ++++++++++++ 28 files changed, 902 insertions(+), 926 deletions(-) create mode 100644 src/blackmisc/audio/audiosettings.cpp create mode 100644 src/blackmisc/audio/audiosettings.h delete mode 100644 src/blackmisc/audio/settings/settingsaudio.cpp delete mode 100644 src/blackmisc/audio/settings/settingsaudio.h delete mode 100644 src/blackmisc/simulation/settings/settingssimulator.cpp delete mode 100644 src/blackmisc/simulation/settings/settingssimulator.h create mode 100644 src/blackmisc/simulation/simulationsettings.cpp create mode 100644 src/blackmisc/simulation/simulationsettings.h diff --git a/samples/blackmiscsim/samplesfscommon.cpp b/samples/blackmiscsim/samplesfscommon.cpp index 73d608ec4..1873c3e68 100644 --- a/samples/blackmiscsim/samplesfscommon.cpp +++ b/samples/blackmiscsim/samplesfscommon.cpp @@ -14,7 +14,7 @@ #include "blackmisc/sampleutils.h" #include "blackmisc/simulation/fscommon/aircraftcfgentrieslist.h" #include "blackmisc/simulation/fscommon/aircraftcfgparser.h" -#include "blackmisc/simulation/settings/settingssimulator.h" +#include "blackmisc/simulation/simulationsettings.h" #include "blackmisc/simulation/simulatorinfo.h" #include @@ -28,7 +28,6 @@ using namespace BlackMisc; using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation::FsCommon; -using namespace BlackMisc::Simulation::Settings; namespace BlackSample { @@ -41,9 +40,9 @@ namespace BlackSample }, streamOut, streamIn); const CSimulatorInfo sim = fsDir.toLower().contains("simobjects") ? CSimulatorInfo::FSX : CSimulatorInfo::FS9; - CMultiSimulatorSimulatorSettings multiSettings; - const CSettingsSimulator originalSettings = multiSettings.getSettings(sim); - CSettingsSimulator newSettings(originalSettings); + CMultiSimulatorSettings multiSettings; + const CSettings originalSettings = multiSettings.getSettings(sim); + CSettings newSettings(originalSettings); newSettings.setModelDirectory(fsDir); multiSettings.setSettings(newSettings, sim); // set, but do NOT(!) save diff --git a/samples/blackmiscsim/samplesmodelmapping.cpp b/samples/blackmiscsim/samplesmodelmapping.cpp index 19ca7194a..521486960 100644 --- a/samples/blackmiscsim/samplesmodelmapping.cpp +++ b/samples/blackmiscsim/samplesmodelmapping.cpp @@ -15,7 +15,7 @@ #include "blackmisc/aviation/aircrafticaocode.h" #include "blackmisc/aviation/airlineicaocode.h" #include "blackmisc/sampleutils.h" -#include "blackmisc/simulation/settings/settingssimulator.h" +#include "blackmisc/simulation/simulationsettings.h" #include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/aircraftmodelloader.h" #include "blackmisc/simulation/fscommon/aircraftcfgentrieslist.h" @@ -33,7 +33,6 @@ using namespace BlackCore; using namespace BlackMisc; using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation::FsCommon; -using namespace BlackMisc::Simulation::Settings; using namespace BlackMisc::Aviation; namespace BlackSample @@ -54,9 +53,9 @@ namespace BlackSample }, streamOut, streamIn); const CSimulatorInfo sim = fsDir.toLower().contains("simobjects") ? CSimulatorInfo::FSX : CSimulatorInfo::FS9; - CMultiSimulatorSimulatorSettings multiSettings; - const CSettingsSimulator originalSettings = multiSettings.getSettings(sim); - CSettingsSimulator newSettings(originalSettings); + CMultiSimulatorSettings multiSettings; + const CSettings originalSettings = multiSettings.getSettings(sim); + CSettings newSettings(originalSettings); newSettings.setModelDirectory(fsDir); multiSettings.setSettings(newSettings, sim); // set, but do NOT(!) save diff --git a/src/blackcore/context/contextaudioimpl.cpp b/src/blackcore/context/contextaudioimpl.cpp index e7be20fc8..180496f0d 100644 --- a/src/blackcore/context/contextaudioimpl.cpp +++ b/src/blackcore/context/contextaudioimpl.cpp @@ -17,7 +17,7 @@ #include "blackcore/vatsim/voicevatlib.h" #include "blackmisc/audio/audiodeviceinfo.h" #include "blackmisc/audio/notificationsounds.h" -#include "blackmisc/audio/settings/settingsaudio.h" +#include "blackmisc/audio/audiosettings.h" #include "blackmisc/audio/voiceroomlist.h" #include "blackmisc/aviation/callsign.h" #include "blackmisc/compare.h" diff --git a/src/blackgui/components/audiosetupcomponent.cpp b/src/blackgui/components/audiosetupcomponent.cpp index 5bcf1b09d..1861e2c18 100644 --- a/src/blackgui/components/audiosetupcomponent.cpp +++ b/src/blackgui/components/audiosetupcomponent.cpp @@ -12,7 +12,7 @@ #include "blackgui/guiapplication.h" #include "blackmisc/audio/audiodeviceinfo.h" #include "blackmisc/audio/notificationsounds.h" -#include "blackmisc/audio/settings/settingsaudio.h" +#include "blackmisc/audio/audiosettings.h" #include "blackmisc/sequence.h" #include "ui_audiosetupcomponent.h" @@ -27,7 +27,6 @@ using namespace BlackMisc; using namespace BlackGui; using namespace BlackMisc::Aviation; using namespace BlackMisc::Audio; -using namespace BlackMisc::Audio::Settings; using namespace BlackMisc::PhysicalQuantities; namespace BlackGui @@ -76,7 +75,7 @@ namespace BlackGui void CAudioSetupComponent::ps_reloadSettings() { - CSettingsAudio as(m_audioSettings.getThreadLocal()); + CSettings as(m_audioSettings.getThreadLocal()); this->ui->cb_SetupAudioPlayNotificationSounds->setChecked(true); this->ui->cb_SetupAudioNotificationTextMessage->setChecked(as.getNotificationFlag(CNotificationSounds::NotificationTextMessagePrivate)); this->ui->cb_SetupAudioNotificationVoiceRoom->setChecked(as.getNotificationFlag(CNotificationSounds::NotificationVoiceRoomJoined)); diff --git a/src/blackgui/components/dbownmodelscomponent.h b/src/blackgui/components/dbownmodelscomponent.h index 0879c119b..664e06e84 100644 --- a/src/blackgui/components/dbownmodelscomponent.h +++ b/src/blackgui/components/dbownmodelscomponent.h @@ -104,7 +104,7 @@ namespace BlackGui private: QScopedPointer ui; std::unique_ptr m_modelLoader; //!< read own aircraft models - BlackMisc::CData m_simulatorSelection {this }; //!< last selection + BlackMisc::CData m_simulatorSelection {this }; //!< last selection //! Init or change model loader bool initModelLoader(const BlackMisc::Simulation::CSimulatorInfo &simulator); diff --git a/src/blackgui/components/settingssimulatorbasicscomponent.cpp b/src/blackgui/components/settingssimulatorbasicscomponent.cpp index 84ce5720e..ed69f7472 100644 --- a/src/blackgui/components/settingssimulatorbasicscomponent.cpp +++ b/src/blackgui/components/settingssimulatorbasicscomponent.cpp @@ -15,7 +15,6 @@ using namespace BlackMisc; using namespace BlackMisc::Simulation; -using namespace BlackMisc::Simulation::Settings; using namespace BlackConfig; namespace BlackGui @@ -104,7 +103,7 @@ namespace BlackGui void CSettingsSimulatorBasicsComponent::ps_save() { const CSimulatorInfo simulator(ui->comp_SimulatorSelector->getValue()); - CSettingsSimulator s = this->getSettings(simulator); + CSettings s = this->getSettings(simulator); const QString sd(ui->le_SimulatorDirectory->text().trimmed()); const QStringList md(this->parseDirectories(ui->pte_ModelDirectories->toPlainText())); const QStringList ed(this->parseDirectories(ui->pte_ExcludeDirectories->toPlainText())); @@ -194,15 +193,15 @@ namespace BlackGui ui->pte_ModelDirectories->setPlainText(d); } - CSettingsSimulator CSettingsSimulatorBasicsComponent::getSettings(const CSimulatorInfo &simulator) const + CSettings CSettingsSimulatorBasicsComponent::getSettings(const CSimulatorInfo &simulator) const { - const CSettingsSimulator s = this->m_settings.getSettings(simulator); + const CSettings s = this->m_settings.getSettings(simulator); return s; } void CSettingsSimulatorBasicsComponent::displaySettings(const CSimulatorInfo &simulator) { - const CSettingsSimulator s = this->getSettings(simulator); + const CSettings s = this->getSettings(simulator); this->displayExcludeDirectoryPatterns(s.getModelExcludeDirectoryPatterns()); this->displayModelDirectories(s.getModelDirectories()); ui->le_SimulatorDirectory->setText(s.getSimulatorDirectory()); diff --git a/src/blackgui/components/settingssimulatorbasicscomponent.h b/src/blackgui/components/settingssimulatorbasicscomponent.h index 3742ba33f..8f14897c4 100644 --- a/src/blackgui/components/settingssimulatorbasicscomponent.h +++ b/src/blackgui/components/settingssimulatorbasicscomponent.h @@ -12,7 +12,7 @@ #ifndef BLACKGUI_COMPONENTS_SETTINGSSIMULATORBASICSCOMPONENT_H #define BLACKGUI_COMPONENTS_SETTINGSSIMULATORBASICSCOMPONENT_H -#include "blackmisc/simulation/settings/settingssimulator.h" +#include "blackmisc/simulation/simulationsettings.h" #include #include @@ -54,7 +54,7 @@ namespace BlackGui private: QScopedPointer ui; - BlackMisc::Simulation::Settings::CMultiSimulatorSimulatorSettings m_settings { this }; + BlackMisc::Simulation::CMultiSimulatorSettings m_settings { this }; Qt::CaseSensitivity m_fileCaseSensitivity = BlackMisc::CFileUtils::osFileNameCaseSensitivity(); //! Optimize for small layout @@ -73,7 +73,7 @@ namespace BlackGui void displayModelDirectories(const QStringList &dirs); //! Current settings - BlackMisc::Simulation::Settings::CSettingsSimulator getSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; + BlackMisc::Simulation::CSettings getSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; //! Display simulator`s settings void displaySettings(const BlackMisc::Simulation::CSimulatorInfo &simulator); diff --git a/src/blackgui/components/settingssimulatormessagescomponent.cpp b/src/blackgui/components/settingssimulatormessagescomponent.cpp index 9f33ac590..7abaffd38 100644 --- a/src/blackgui/components/settingssimulatormessagescomponent.cpp +++ b/src/blackgui/components/settingssimulatormessagescomponent.cpp @@ -9,10 +9,10 @@ #include "settingssimulatormessagescomponent.h" #include "ui_settingssimulatormessagescomponent.h" -#include "blackmisc/simulation/settings/settingssimulator.h" +#include "blackmisc/simulation/simulationsettings.h" using namespace BlackMisc; -using namespace BlackMisc::Simulation::Settings; +using namespace BlackMisc::Simulation; namespace BlackGui { diff --git a/src/blackgui/components/settingssimulatormessagescomponent.h b/src/blackgui/components/settingssimulatormessagescomponent.h index 4f9800782..c53bfd12a 100644 --- a/src/blackgui/components/settingssimulatormessagescomponent.h +++ b/src/blackgui/components/settingssimulatormessagescomponent.h @@ -12,7 +12,7 @@ #ifndef BLACKGUI_COMPONENTS_SETTINGSSIMULATORMESSAGESCOMPONENT_H #define BLACKGUI_COMPONENTS_SETTINGSSIMULATORMESSAGESCOMPONENT_H -#include "blackmisc/simulation/settings/settingssimulator.h" +#include "blackmisc/simulation/simulationsettings.h" #include #include @@ -44,7 +44,7 @@ namespace BlackGui private: QScopedPointer ui; - BlackMisc::CSetting m_settings { this }; //!< settings for messages + BlackMisc::CSetting m_settings { this }; //!< settings for messages }; } // ns } // ns diff --git a/src/blackgui/settings/dockwidgetsettings.h b/src/blackgui/settings/dockwidgetsettings.h index 219f47539..d5b3a336b 100644 --- a/src/blackgui/settings/dockwidgetsettings.h +++ b/src/blackgui/settings/dockwidgetsettings.h @@ -143,7 +143,7 @@ namespace BlackGui }; //! Trait for settings for dock widget - struct TDockWidgets : public BlackMisc::CSettingTrait + struct TDockWidgets : public BlackMisc::TSettingTrait { //! Key in data cache static const char *key() { return "guidockwidget"; } diff --git a/src/blackgui/settings/guisettings.h b/src/blackgui/settings/guisettings.h index edf7fc3c6..ab27a500a 100644 --- a/src/blackgui/settings/guisettings.h +++ b/src/blackgui/settings/guisettings.h @@ -21,7 +21,7 @@ namespace BlackGui namespace Settings { //! Settings for last manual entries of own aircraft mode - struct TOwnAircraftModel : public BlackMisc::CSettingTrait + struct TOwnAircraftModel : public BlackMisc::TSettingTrait { //! Key in data cache static const char *key() { return "guinownaircraftmodel"; } diff --git a/src/blackgui/settings/navigatorsettings.h b/src/blackgui/settings/navigatorsettings.h index 8ace08ac2..84a24161d 100644 --- a/src/blackgui/settings/navigatorsettings.h +++ b/src/blackgui/settings/navigatorsettings.h @@ -99,7 +99,7 @@ namespace BlackGui }; //! Trait for settings for navigator - struct TNavigator : public BlackMisc::CSettingTrait + struct TNavigator : public BlackMisc::TSettingTrait { //! Key in data cache static const char *key() { return "guinavigator"; } diff --git a/src/blackmisc/audio/audio.h b/src/blackmisc/audio/audio.h index 037cbcbd5..619518e7b 100644 --- a/src/blackmisc/audio/audio.h +++ b/src/blackmisc/audio/audio.h @@ -21,6 +21,6 @@ #include "blackmisc/audio/audiodeviceinfolist.h" #include "blackmisc/audio/voiceroom.h" #include "blackmisc/audio/voiceroomlist.h" -#include "blackmisc/audio/settings/settingsaudio.h" +#include "blackmisc/audio/audiosettings.h" #endif // guard diff --git a/src/blackmisc/audio/audiosettings.cpp b/src/blackmisc/audio/audiosettings.cpp new file mode 100644 index 000000000..4413c5540 --- /dev/null +++ b/src/blackmisc/audio/audiosettings.cpp @@ -0,0 +1,59 @@ +/* Copyright (C) 2013 + * swift Project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "blackmisc/audio/audiosettings.h" + +#include +#include + +using namespace BlackMisc::Audio; + +namespace BlackMisc +{ + namespace Audio + { + CSettings::CSettings() + { + this->initDefaultValues(); + } + + bool CSettings::getNotificationFlag(CNotificationSounds::Notification notification) const + { + const int i = static_cast(notification); + if (i >= m_notificationFlags.length()) return true; // default + QChar f = m_notificationFlags.at(i); + return '1' == f; + } + + QString CSettings::convertToQString(bool i18n) const + { + Q_UNUSED(i18n); + QString s("Notification flags:"); + s.append(" ").append(m_notificationFlags); + return s; + } + + void CSettings::initDefaultValues() + { + this->initNotificationFlags(); + } + + void CSettings::initNotificationFlags() + { + // if we add flags in the future, we automatically extend ... + constexpr int l = 1 + static_cast(CNotificationSounds::Notification::NotificationsLoadSounds); + if (this->m_notificationFlags.length() < l) + { + int cl = m_notificationFlags.length(); + this->m_notificationFlags.append(QString(l - cl, '1')); + } + } + + } // namespace +} // namespace diff --git a/src/blackmisc/audio/audiosettings.h b/src/blackmisc/audio/audiosettings.h new file mode 100644 index 000000000..0f3149476 --- /dev/null +++ b/src/blackmisc/audio/audiosettings.h @@ -0,0 +1,65 @@ +/* Copyright (C) 2013 + * swift Project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKMISC_AUDIO_SETTINGS_H +#define BLACKMISC_AUDIO_SETTINGS_H + +#include "blackmisc/audio/notificationsounds.h" +#include "blackmisc/blackmiscexport.h" +#include "blackmisc/metaclass.h" +#include "blackmisc/statusmessage.h" +#include "blackmisc/valueobject.h" +#include "blackmisc/variant.h" + +#include +#include + +namespace BlackMisc +{ + namespace Audio + { + //! Value object encapsulating information of audio related settings. + class BLACKMISC_EXPORT CSettings : public CValueObject + { + public: + //! Default constructor. + CSettings(); + + //! Notification flag (play notification?) + bool getNotificationFlag(BlackMisc::Audio::CNotificationSounds::Notification notification) const; + + //! Notification flag (play notification?) + void setNotificationFlag(BlackMisc::Audio::CNotificationSounds::Notification notification, bool value); + + //! Settings value + BlackMisc::CStatusMessage value(const QString &path, const QString &command, const BlackMisc::CVariant &value, bool &changedFlag); + + //! Init with meaningful default values + void initDefaultValues(); + + //! \copydoc BlackMisc::Mixin::String::toQString + QString convertToQString(bool i18n = false) const; + + private: + QString m_notificationFlags; //!< play notification for notification x, a little trick to use a string here (streamable, hashable, ..) + void initNotificationFlags(); //!< init flags + + BLACK_METACLASS( + CSettings, + BLACK_METAMEMBER(notificationFlags) + ); + }; + } // namespace +} // namespace + +Q_DECLARE_METATYPE(BlackMisc::Audio::CSettings) + +#endif // guard diff --git a/src/blackmisc/audio/registermetadataaudio.cpp b/src/blackmisc/audio/registermetadataaudio.cpp index cccc53fb6..4684e04c7 100644 --- a/src/blackmisc/audio/registermetadataaudio.cpp +++ b/src/blackmisc/audio/registermetadataaudio.cpp @@ -23,7 +23,7 @@ namespace BlackMisc CAudioDeviceInfoList::registerMetadata(); CVoiceRoom::registerMetadata(); CVoiceRoomList::registerMetadata(); - Settings::CSettingsAudio::registerMetadata(); + CSettings::registerMetadata(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); } diff --git a/src/blackmisc/audio/settings/settingsaudio.cpp b/src/blackmisc/audio/settings/settingsaudio.cpp deleted file mode 100644 index 878868a55..000000000 --- a/src/blackmisc/audio/settings/settingsaudio.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 2013 - * swift Project Community / Contributors - * - * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level - * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, - * including this file, may be copied, modified, propagated, or distributed except according to the terms - * contained in the LICENSE file. - */ - -#include "blackmisc/audio/settings/settingsaudio.h" - -#include -#include - -using namespace BlackMisc::Audio; - -namespace BlackMisc -{ - namespace Audio - { - namespace Settings - { - CSettingsAudio::CSettingsAudio() - { - this->initDefaultValues(); - } - - bool CSettingsAudio::getNotificationFlag(CNotificationSounds::Notification notification) const - { - const int i = static_cast(notification); - if (i >= m_notificationFlags.length()) return true; // default - QChar f = m_notificationFlags.at(i); - return '1' == f; - } - - QString CSettingsAudio::convertToQString(bool i18n) const - { - Q_UNUSED(i18n); - QString s("Notification flags:"); - s.append(" ").append(m_notificationFlags); - return s; - } - - void CSettingsAudio::initDefaultValues() - { - this->initNotificationFlags(); - } - - void CSettingsAudio::initNotificationFlags() - { - // if we add flags in the future, we automatically extend ... - constexpr int l = 1 + static_cast(CNotificationSounds::Notification::NotificationsLoadSounds); - if (this->m_notificationFlags.length() < l) - { - int cl = m_notificationFlags.length(); - this->m_notificationFlags.append(QString(l - cl, '1')); - } - } - - } // namespace - } // namespace -} // namespace diff --git a/src/blackmisc/audio/settings/settingsaudio.h b/src/blackmisc/audio/settings/settingsaudio.h deleted file mode 100644 index ef986ebd0..000000000 --- a/src/blackmisc/audio/settings/settingsaudio.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2013 - * swift Project Community / Contributors - * - * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level - * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, - * including this file, may be copied, modified, propagated, or distributed except according to the terms - * contained in the LICENSE file. - */ - -//! \file - -#ifndef BLACKMISC_AUDIO_SETTINGS_AUDIO_H -#define BLACKMISC_AUDIO_SETTINGS_AUDIO_H - -#include "blackmisc/audio/notificationsounds.h" -#include "blackmisc/blackmiscexport.h" -#include "blackmisc/metaclass.h" -#include "blackmisc/statusmessage.h" -#include "blackmisc/valueobject.h" -#include "blackmisc/variant.h" - -#include -#include - -namespace BlackMisc -{ - namespace Audio - { - namespace Settings - { - //! Value object encapsulating information of audio related settings. - class BLACKMISC_EXPORT CSettingsAudio : public CValueObject - { - public: - //! Default constructor. - CSettingsAudio(); - - //! Notification flag (play notification?) - bool getNotificationFlag(BlackMisc::Audio::CNotificationSounds::Notification notification) const; - - //! Notification flag (play notification?) - void setNotificationFlag(BlackMisc::Audio::CNotificationSounds::Notification notification, bool value); - - //! Settings value - BlackMisc::CStatusMessage value(const QString &path, const QString &command, const BlackMisc::CVariant &value, bool &changedFlag); - - //! Init with meaningful default values - void initDefaultValues(); - - //! \copydoc BlackMisc::Mixin::String::toQString - QString convertToQString(bool i18n = false) const; - - private: - QString m_notificationFlags; //!< play notification for notification x, a little trick to use a string here (streamable, hashable, ..) - void initNotificationFlags(); //!< init flags - - BLACK_METACLASS( - CSettingsAudio, - BLACK_METAMEMBER(notificationFlags) - ); - }; - - } // namespace - } // namespace -} // namespace - -Q_DECLARE_METATYPE(BlackMisc::Audio::Settings::CSettingsAudio) - -#endif // guard diff --git a/src/blackmisc/blackmisc.pro b/src/blackmisc/blackmisc.pro index 34d3c747b..9ec02b46f 100644 --- a/src/blackmisc/blackmisc.pro +++ b/src/blackmisc/blackmisc.pro @@ -28,7 +28,6 @@ TRANSLATIONS += translations/blackmisc_i18n_de.ts \ HEADERS += *.h \ $$PWD/audio/*.h \ - $$PWD/audio/settings/*.h \ $$PWD/aviation/*.h \ $$PWD/db/*.h \ $$PWD/geo/*.h \ @@ -38,7 +37,6 @@ HEADERS += *.h \ $$PWD/pq/*.h \ $$PWD/simulation/*.h \ $$PWD/simulation/data/*.h \ - $$PWD/simulation/settings/*.h \ $$PWD/simulation/fscommon/*.h \ $$PWD/simulation/fsx/*.h \ $$PWD/simulation/xplane/*.h \ @@ -46,7 +44,6 @@ HEADERS += *.h \ SOURCES += *.cpp \ $$PWD/audio/*.cpp \ - $$PWD/audio/settings/*.cpp \ $$PWD/aviation/*.cpp \ $$PWD/db/*.cpp \ $$PWD/geo/*.cpp \ @@ -55,7 +52,6 @@ SOURCES += *.cpp \ $$PWD/network/*.cpp \ $$PWD/pq/*.cpp \ $$PWD/simulation/*.cpp \ - $$PWD/simulation/settings/*.cpp \ $$PWD/simulation/data/*.cpp \ $$PWD/simulation/fscommon/*.cpp \ $$PWD/simulation/fsx/*.cpp \ diff --git a/src/blackmisc/settingscache.h b/src/blackmisc/settingscache.h index fd2ff4e38..e46c4be85 100644 --- a/src/blackmisc/settingscache.h +++ b/src/blackmisc/settingscache.h @@ -63,7 +63,7 @@ namespace BlackMisc /*! * Class template for accessing a specific value in the CSettingsCache. - * \tparam Trait A subclass of BlackMisc::CSettingTrait that identifies the value's key and other metadata. + * \tparam Trait A subclass of BlackMisc::TSettingTrait that identifies the value's key and other metadata. */ template class CSetting : public BlackMisc::CCached @@ -91,7 +91,7 @@ namespace BlackMisc /*! * Class template for accessing a specific value in the CSettingsCache. - * \tparam Trait A subclass of BlackMisc::CSettingTrait that identifies the value's key and other metadata. + * \tparam Trait A subclass of BlackMisc::TSettingTrait that identifies the value's key and other metadata. */ template class CSettingReadOnly : public BlackMisc::CSetting @@ -115,7 +115,7 @@ namespace BlackMisc * Base class for traits to be used as template argument to BlackMisc::CSetting. */ template - struct CSettingTrait + struct TSettingTrait { //! Data type of the value. using type = T; @@ -135,13 +135,13 @@ namespace BlackMisc static const T &defaultValue() { static const T def {}; return def; } //! Deleted default constructor. - CSettingTrait() = delete; + TSettingTrait() = delete; //! Deleted copy constructor. - CSettingTrait(const CSettingTrait &) = delete; + TSettingTrait(const TSettingTrait &) = delete; //! Deleted copy assignment operator. - CSettingTrait &operator =(const CSettingTrait &) = delete; + TSettingTrait &operator =(const TSettingTrait &) = delete; }; } diff --git a/src/blackmisc/simulation/aircraftmodelloader.cpp b/src/blackmisc/simulation/aircraftmodelloader.cpp index 6a4e7b09f..d870e4572 100644 --- a/src/blackmisc/simulation/aircraftmodelloader.cpp +++ b/src/blackmisc/simulation/aircraftmodelloader.cpp @@ -18,7 +18,6 @@ #include using namespace BlackMisc::Simulation::Data; -using namespace BlackMisc::Simulation::Settings; using namespace BlackMisc::Simulation::FsCommon; using namespace BlackMisc::Simulation::XPlane; diff --git a/src/blackmisc/simulation/aircraftmodelloader.h b/src/blackmisc/simulation/aircraftmodelloader.h index 87496c63f..3ac787115 100644 --- a/src/blackmisc/simulation/aircraftmodelloader.h +++ b/src/blackmisc/simulation/aircraftmodelloader.h @@ -16,7 +16,7 @@ #include "blackmisc/simulation/aircraftmodelinterfaces.h" #include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/data/modelcaches.h" -#include "blackmisc/simulation/settings/settingssimulator.h" +#include "blackmisc/simulation/simulationsettings.h" #include "blackmisc/simulation/simulatorinfo.h" #include "blackmisc/statusmessage.h" @@ -155,7 +155,7 @@ namespace BlackMisc std::atomic m_cancelLoading { false }; //!< flag std::atomic m_loadingInProgress { false }; //!< Loading in progress BlackMisc::Simulation::Data::CModelCaches m_caches { this }; //!< caches - BlackMisc::Simulation::Settings::CMultiSimulatorSimulatorSettings m_settings { this }; //!< settings + BlackMisc::Simulation::CMultiSimulatorSettings m_settings { this }; //!< settings protected slots: //! Loading finished diff --git a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp index f980e5b20..0d643d02c 100644 --- a/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp +++ b/src/blackmisc/simulation/fscommon/aircraftcfgparser.cpp @@ -35,7 +35,6 @@ using namespace BlackMisc; using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation::FsCommon; -using namespace BlackMisc::Simulation::Settings; using namespace BlackMisc::Network; namespace BlackMisc diff --git a/src/blackmisc/simulation/registermetadatasimulation.cpp b/src/blackmisc/simulation/registermetadatasimulation.cpp index 813593f21..65cf574ee 100644 --- a/src/blackmisc/simulation/registermetadatasimulation.cpp +++ b/src/blackmisc/simulation/registermetadatasimulation.cpp @@ -9,12 +9,11 @@ #include "registermetadatasimulation.h" #include "simulation.h" -#include "blackmisc/simulation/settings/settingssimulator.h" +#include "blackmisc/simulation/simulationsettings.h" #include "blackmisc/valueobject.h" #include "blackmisc/variant.h" using namespace BlackMisc::Simulation; -using namespace BlackMisc::Simulation::Settings; using namespace BlackMisc::Simulation::Fsx; using namespace BlackMisc::Simulation::FsCommon; @@ -42,7 +41,7 @@ namespace BlackMisc CSimulatorSetup::registerMetadata(); CVPilotModelRule::registerMetadata(); CVPilotModelRuleSet::registerMetadata(); - CSettingsSimulator::registerMetadata(); + CSettings::registerMetadata(); CSettingsSimulatorMessages::registerMetadata(); } } // ns diff --git a/src/blackmisc/simulation/settings/settingssimulator.cpp b/src/blackmisc/simulation/settings/settingssimulator.cpp deleted file mode 100644 index 48bc6471e..000000000 --- a/src/blackmisc/simulation/settings/settingssimulator.cpp +++ /dev/null @@ -1,442 +0,0 @@ -/* Copyright (C) 2016 - * swift project community / contributors - * - * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level - * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, - * including this file, may be copied, modified, propagated, or distributed except according to the terms - * contained in the LICENSE file. - */ - -#include "settingssimulator.h" -#include "blackmisc/simulation/simulatedaircraft.h" -#include "blackmisc/simulation/fscommon/fscommonutil.h" -#include "blackmisc/simulation/xplane/xplaneutil.h" -#include "blackmisc/stringutils.h" - -using namespace BlackMisc; -using namespace BlackMisc::PhysicalQuantities; -using namespace BlackMisc::Simulation::FsCommon; -using namespace BlackMisc::Simulation::XPlane; - -namespace BlackMisc -{ - namespace Simulation - { - namespace Settings - { - CSettingsSimulator::CSettingsSimulator() - { } - - void CSettingsSimulator::setSimulatorDirectory(const QString &simulatorDirectory) - { - this->m_simulatorDirectory = simulatorDirectory.trimmed(); - } - - const QString &CSettingsSimulator::getSimulatorDirectory() const - { - return this->m_simulatorDirectory; - } - - void CSettingsSimulator::setModelDirectories(const QStringList &modelDirectories) - { - this->m_modelDirectories = modelDirectories; - } - - void CSettingsSimulator::setModelDirectory(const QString &modelDirectory) - { - this->m_modelDirectories = QStringList({ modelDirectory }); - } - - const QStringList &CSettingsSimulator::getModelDirectories() const - { - return this->m_modelDirectories; - } - - void CSettingsSimulator::setModelExcludeDirectories(const QStringList &excludeDirectories) - { - this->m_excludeDirectoryPatterns = excludeDirectories; - } - - const QStringList &CSettingsSimulator::getModelExcludeDirectoryPatterns() const - { - return m_excludeDirectoryPatterns; - } - - void CSettingsSimulator::resetPaths() - { - this->m_excludeDirectoryPatterns.clear(); - this->m_modelDirectories.clear(); - this->m_simulatorDirectory.clear(); - } - - QString CSettingsSimulator::convertToQString(bool i18n) const - { - return convertToQString(", ", i18n); - } - - QString CSettingsSimulator::convertToQString(const QString &separator, bool i18n) const - { - Q_UNUSED(i18n); - QString s("model directories: "); - s.append(this->m_modelDirectories.join(',')); - s.append(separator); - s.append("exclude directories: "); - s.append(this->m_excludeDirectoryPatterns.join(',')); - return s; - } - - CVariant CSettingsSimulator::propertyByIndex(const CPropertyIndex &index) const - { - if (index.isMyself()) { return CVariant::from(*this); } - ColumnIndex i = index.frontCasted(); - switch (i) - { - case IndexSimulatorDirectory: - return CVariant::fromValue(this->m_simulatorDirectory); - case IndexModelDirectory: - return CVariant::fromValue(this->m_modelDirectories); - case IndexModelExcludeDirectoryPatterns: - return CVariant::fromValue(this->m_excludeDirectoryPatterns); - default: - return CValueObject::propertyByIndex(index); - } - } - - void CSettingsSimulator::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant) - { - if (index.isMyself()) { (*this) = variant.to(); return; } - - ColumnIndex i = index.frontCasted(); - switch (i) - { - case IndexSimulatorDirectory: - this->setSimulatorDirectory(variant.toQString()); - break; - case IndexModelDirectory: - this->setSimulatorDirectory(variant.toQString()); - break; - case IndexModelExcludeDirectoryPatterns: - this->m_excludeDirectoryPatterns = variant.value(); - break; - default: - CValueObject::setPropertyByIndex(index, variant); - break; - } - } - - CMultiSimulatorSimulatorSettings::CMultiSimulatorSimulatorSettings(QObject *parent) : QObject(parent) - { - // void - } - - CSettingsSimulator CMultiSimulatorSimulatorSettings::getSettings(const CSimulatorInfo &simulator) const - { - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - switch (simulator.getSimulator()) - { - case CSimulatorInfo::FS9: return this->m_simSettingsFs9.get(); - case CSimulatorInfo::FSX: return this->m_simSettingsFsx.get(); - case CSimulatorInfo::P3D: return this->m_simSettingsP3D.get(); - case CSimulatorInfo::XPLANE: return this->m_simSettingsXP.get(); - default: - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - break; - } - return CSettingsSimulator(); - } - - CStatusMessage CMultiSimulatorSimulatorSettings::setSettings(const CSettingsSimulator &settings, const CSimulatorInfo &simulator) - { - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - switch (simulator.getSimulator()) - { - case CSimulatorInfo::FS9: return this->m_simSettingsFs9.set(settings); - case CSimulatorInfo::FSX: return this->m_simSettingsFsx.set(settings); - case CSimulatorInfo::P3D: return this->m_simSettingsP3D.set(settings); - case CSimulatorInfo::XPLANE: return this->m_simSettingsXP.set(settings); - default: - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - break; - } - return CStatusMessage({ CLogCategory::settings() }, CStatusMessage::SeverityError, "wrong simulator"); - } - - CStatusMessage CMultiSimulatorSimulatorSettings::setAndSaveSettings(const CSettingsSimulator &settings, const CSimulatorInfo &simulator) - { - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - switch (simulator.getSimulator()) - { - case CSimulatorInfo::FS9: return this->m_simSettingsFs9.setAndSave(settings); - case CSimulatorInfo::FSX: return this->m_simSettingsFsx.setAndSave(settings); - case CSimulatorInfo::P3D: return this->m_simSettingsP3D.setAndSave(settings); - case CSimulatorInfo::XPLANE: return this->m_simSettingsXP.setAndSave(settings); - default: - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - break; - } - return CStatusMessage({ CLogCategory::settings() }, CStatusMessage::SeverityError, "wrong simulator"); - } - - CStatusMessage CMultiSimulatorSimulatorSettings::saveSettings(const CSimulatorInfo &simulator) - { - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - switch (simulator.getSimulator()) - { - case CSimulatorInfo::FS9: return this->m_simSettingsFs9.save(); - case CSimulatorInfo::FSX: return this->m_simSettingsFsx.save(); - case CSimulatorInfo::P3D: return this->m_simSettingsP3D.save(); - case CSimulatorInfo::XPLANE: return this->m_simSettingsXP.save(); - default: - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - break; - } - return CStatusMessage({ CLogCategory::settings() }, CStatusMessage::SeverityError, "wrong simulator"); - } - - QString CMultiSimulatorSimulatorSettings::getSimulatorDirectoryOrDefault(const CSimulatorInfo &simulator) const - { - const CSettingsSimulator s = this->getSettings(simulator); - if (s.getSimulatorDirectory().isEmpty()) - { - return this->getDefaultSimulatorDirectory(simulator); - } - return s.getSimulatorDirectory(); - } - - QString CMultiSimulatorSimulatorSettings::getDefaultSimulatorDirectory(const CSimulatorInfo &simulator) const - { - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - switch (simulator.getSimulator()) - { - case CSimulatorInfo::FS9: return CFsCommonUtil::fs9Dir(); - case CSimulatorInfo::FSX: return CFsCommonUtil::fsxDir(); - case CSimulatorInfo::P3D: return CFsCommonUtil::p3dDir(); - case CSimulatorInfo::XPLANE: return CXPlaneUtil::xplaneRootDir(); //! check XP - default: - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - break; - } - return ""; - } - - QStringList CMultiSimulatorSimulatorSettings::getModelDirectoriesOrDefault(const CSimulatorInfo &simulator) const - { - const CSettingsSimulator s = this->getSettings(simulator); - if (s.getModelDirectories().isEmpty()) - { - return this->getDefaultModelDirectories(simulator); - } - return s.getModelDirectories(); - } - - QString CMultiSimulatorSimulatorSettings::getFirstModelDirectoryOrDefault(const CSimulatorInfo &simulator) const - { - const QStringList models(getModelDirectoriesOrDefault(simulator)); - if (models.isEmpty()) { return ""; } - return models.first(); - } - - QStringList CMultiSimulatorSimulatorSettings::getDefaultModelDirectories(const CSimulatorInfo &simulator) const - { - static const QStringList e; - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - switch (simulator.getSimulator()) - { - case CSimulatorInfo::FS9: return CFsCommonUtil::fs9AircraftDir().isEmpty() ? e : QStringList({ CFsCommonUtil::fs9AircraftDir() }); - case CSimulatorInfo::FSX: return CFsCommonUtil::fsxSimObjectsDir().isEmpty() ? e : QStringList({ CFsCommonUtil::fsxSimObjectsDir() }); - case CSimulatorInfo::P3D: return CFsCommonUtil::p3dSimObjectsDir().isEmpty() ? e : QStringList({ CFsCommonUtil::p3dSimObjectsDir()}); - case CSimulatorInfo::XPLANE: return CXPlaneUtil::xplaneModelDirectories(); - default: - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - break; - } - return QStringList(); - } - - QStringList CMultiSimulatorSimulatorSettings::getModelExcludeDirectoryPatternsOrDefault(const CSimulatorInfo &simulator) const - { - const CSettingsSimulator s = this->getSettings(simulator); - QStringList exclude(s.getModelExcludeDirectoryPatterns()); - if (!exclude.isEmpty()) { return exclude; } - exclude = this->getDefaultModelExcludeDirectoryPatterns(simulator); - return exclude; - } - - QStringList CMultiSimulatorSimulatorSettings::getDefaultModelExcludeDirectoryPatterns(const CSimulatorInfo &simulator) const - { - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - switch (simulator.getSimulator()) - { - case CSimulatorInfo::FS9: return CFsCommonUtil::fs9AircraftObjectsExcludeDirectoryPatterns(); - case CSimulatorInfo::FSX: return CFsCommonUtil::fsxSimObjectsExcludeDirectoryPatterns(); - case CSimulatorInfo::P3D: return CFsCommonUtil::p3dSimObjectsExcludeDirectoryPatterns(); - case CSimulatorInfo::XPLANE: return CXPlaneUtil::xplaneModelExcludeDirectoryPatterns(); - default: - Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); - break; - } - return QStringList(); - } - - void CMultiSimulatorSimulatorSettings::resetToDefaults(const CSimulatorInfo &simulator) - { - CSettingsSimulator s = this->getSettings(simulator); - s.resetPaths(); - this->setAndSaveSettings(s, simulator); - } - - CSettingsSimulatorMessages::CSettingsSimulatorMessages() - { - // void - } - - void CSettingsSimulatorMessages::setTechnicalLogSeverity(CStatusMessage::StatusSeverity severity) - { - this->m_technicalLogLevel = static_cast(severity); - } - - void CSettingsSimulatorMessages::disableTechnicalMessages() - { - this->m_technicalLogLevel = -1; - } - - bool CSettingsSimulatorMessages::isRelayedErrorsMessages() const - { - if (this->m_technicalLogLevel < 0) { return false; } - return (this->m_technicalLogLevel <= CStatusMessage::SeverityError); - } - - bool CSettingsSimulatorMessages::isRelayedWarningMessages() const - { - if (this->m_technicalLogLevel < 0) { return false; } - return (this->m_technicalLogLevel <= CStatusMessage::SeverityWarning); - } - - bool CSettingsSimulatorMessages::isRelayedInfoMessages() const - { - if (this->m_technicalLogLevel < 0) { return false; } - return (this->m_technicalLogLevel <= CStatusMessage::SeverityInfo); - } - - bool CSettingsSimulatorMessages::isRelayedTechnicalMessages() const - { - return (this->m_technicalLogLevel >= 0); - } - - void CSettingsSimulatorMessages::setRelayedTextMessages(CSettingsSimulatorMessages::TextMessageType messageType) - { - this->m_messageType = static_cast(messageType); - } - - bool CSettingsSimulatorMessages::isRelayedSupervisorTextMessages() const - { - return this->getRelayedTextMessageTypes().testFlag(TextMessageSupervisor); - } - - bool CSettingsSimulatorMessages::isRelayedPrivateTextMessages() const - { - return this->getRelayedTextMessageTypes().testFlag(TextMessagePrivate); - } - - bool CSettingsSimulatorMessages::isRelayedUnicomTextMessages() const - { - return this->getRelayedTextMessageTypes().testFlag(TextMessagesUnicom); - } - - bool CSettingsSimulatorMessages::isRelayedCom1TextMessages() const - { - return this->getRelayedTextMessageTypes().testFlag(TextMessagesCom1); - } - - bool CSettingsSimulatorMessages::isRelayedCom2TextMessages() const - { - return this->getRelayedTextMessageTypes().testFlag(TextMessagesCom2); - } - - bool CSettingsSimulatorMessages::isRelayedTextMessage(const Network::CTextMessage &msg, const BlackMisc::Simulation::CSimulatedAircraft &aircraft) const - { - if (msg.isEmpty()) { return false; } - if (!this->isGloballyEnabled()) { return false; } - if (this->m_messageType == NoTextMessages) { return false; } - - const TextMessageType mt = static_cast(this->m_messageType); - if (msg.isPrivateMessage() && mt.testFlag(TextMessagePrivate)) { return true; } - if (msg.isSupervisorMessage() && (mt.testFlag(TextMessagePrivate) || mt.testFlag(TextMessageSupervisor))) { return true; } - if (msg.isSendToUnicom() && mt.testFlag(TextMessagesUnicom)) { return true; } - - if (msg.isRadioMessage()) - { - const CFrequency f(msg.getFrequency()); - if (mt.testFlag(TextMessagesCom1)) - { - if (aircraft.getCom1System().isActiveFrequencyWithin8_33kHzChannel(f)) { return true; } - } - if (mt.testFlag(TextMessagesCom2)) - { - if (aircraft.getCom2System().isActiveFrequencyWithin8_33kHzChannel(f)) { return true; } - } - } - return false; - } - - CSettingsSimulatorMessages::TextMessageType CSettingsSimulatorMessages::getRelayedTextMessageTypes() const - { - return static_cast(this->m_messageType); - } - - QString CSettingsSimulatorMessages::convertToQString(bool i18n) const - { - Q_UNUSED(i18n); - QString s("Enabled %1, text messages: %2, severity: %3"); - QString severity; - if (this->isRelayedTechnicalMessages()) - { - severity = "No tech. msgs"; - } - else - { - severity = CStatusMessage::severityToString(static_cast(this->m_technicalLogLevel)); - } - return s.arg(boolToOnOff(this->m_globallyEnabled)).arg(this->m_messageType).arg(severity); - } - - CVariant CSettingsSimulatorMessages::propertyByIndex(const CPropertyIndex &index) const - { - if (index.isMyself()) { return CVariant::from(*this); } - ColumnIndex i = index.frontCasted(); - switch (i) - { - case IndexTechnicalLogSeverity: - return CVariant::fromValue(this->m_technicalLogLevel); - case IndexTextMessageRelay: - return CVariant::from(this->m_messageType); - case IndexGloballyEnabled: - return CVariant::from(this->m_globallyEnabled); - default: - return CValueObject::propertyByIndex(index); - } - } - - void CSettingsSimulatorMessages::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant) - { - if (index.isMyself()) { (*this) = variant.to(); return; } - ColumnIndex i = index.frontCasted(); - switch (i) - { - case IndexTechnicalLogSeverity: - this->setTechnicalLogSeverity(static_cast(variant.toInt())); - break; - case IndexTextMessageRelay: - this->setRelayedTextMessages(static_cast(variant.toInt())); - break; - case IndexGloballyEnabled: - this->setGloballyEnabled(variant.toBool()); - break; - default: - CValueObject::setPropertyByIndex(index, variant); - break; - } - } - } // ns - } // ns -} // ns diff --git a/src/blackmisc/simulation/settings/settingssimulator.h b/src/blackmisc/simulation/settings/settingssimulator.h deleted file mode 100644 index d51afaf24..000000000 --- a/src/blackmisc/simulation/settings/settingssimulator.h +++ /dev/null @@ -1,304 +0,0 @@ -/* Copyright (C) 2016 - * swift project community / contributors - * - * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level - * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, - * including this file, may be copied, modified, propagated, or distributed except according to the terms - * contained in the LICENSE file. - */ - -//! \file - -#ifndef BLACKMISC_SIMULATION_SETTINGS_SETTINGSSIMULATOR_H -#define BLACKMISC_SIMULATION_SETTINGS_SETTINGSSIMULATOR_H - -#include "blackmisc/simulation/simulatorinfo.h" -#include "blackmisc/network/textmessage.h" -#include "blackmisc/settingscache.h" -#include "blackmisc/statusmessage.h" -#include "blackmisc/blackmiscexport.h" -#include "blackmisc/propertyindex.h" - -#include -#include - -namespace BlackMisc -{ - namespace Simulation - { - class CSimulatedAircraft; - - namespace Settings - { - //! Settings for simulator - //! Driver independent part also used in loaders (such as directories) - class BLACKMISC_EXPORT CSettingsSimulator : - public BlackMisc::CValueObject - { - public: - //! Properties by index - enum ColumnIndex - { - IndexSimulatorDirectory = BlackMisc::CPropertyIndex::GlobalIndexCSimulatorSettings, - IndexModelDirectory, - IndexModelExcludeDirectoryPatterns - }; - - //! Default constructor - CSettingsSimulator(); - - //! Destructor. - ~CSettingsSimulator() {} - - //! Set simulator directory - void setSimulatorDirectory(const QString &simulatorDirectory); - - //! Simulator directory - const QString &getSimulatorDirectory() const; - - //! Set model directories - void setModelDirectories(const QStringList &modelDirectories); - - //! Set single model directory - void setModelDirectory(const QString &modelDirectory); - - //! Model directory - const QStringList &getModelDirectories() const; - - //! Set exclude directories - void setModelExcludeDirectories(const QStringList &excludeDirectories); - - //! Margins for given dock widget - const QStringList &getModelExcludeDirectoryPatterns() const; - - //! Reset the paths - void resetPaths(); - - //! \copydoc BlackMisc::Mixin::String::toQString - QString convertToQString(bool i18n = false) const; - - //! To string - QString convertToQString(const QString &separator, bool i18n = false) const; - - //! \copydoc BlackMisc::Mixin::Index::propertyByIndex - BlackMisc::CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; - - //! \copydoc BlackMisc::Mixin::Index::setPropertyByIndex - void setPropertyByIndex(const BlackMisc::CPropertyIndex &index, const BlackMisc::CVariant &variant); - - private: - QString m_simulatorDirectory; //! Simulator directory - QStringList m_modelDirectories; //!< Model directory - QStringList m_excludeDirectoryPatterns; //!< Exclude model directory - - BLACK_METACLASS( - CSettingsSimulator, - BLACK_METAMEMBER(simulatorDirectory), - BLACK_METAMEMBER(modelDirectories), - BLACK_METAMEMBER(excludeDirectoryPatterns) - ); - }; - - //! Trait for simulator settings - struct SettingsSimulatorFsx : public BlackMisc::CSettingTrait - { - //! Key in data cache - static const char *key() { return "settingssimulatorfsx"; } - }; - - //! Trait for simulator settings - struct SettingsSimulatorFs9 : public BlackMisc::CSettingTrait - { - //! Key in data cache - static const char *key() { return "settingssimulatorfs9"; } - }; - - //! Trait for simulator settings - struct SettingsSimulatorP3D : public BlackMisc::CSettingTrait - { - //! Key in data cache - static const char *key() { return "settingssimulatorp3d"; } - }; - - //! Trait for simulator settings - struct SettingsSimulatorXP : public BlackMisc::CSettingTrait - { - //! Key in data cache - static const char *key() { return "settingssimulatorxplane"; } - }; - - //! Bundle of settings for all simulators - class BLACKMISC_EXPORT CMultiSimulatorSimulatorSettings : public QObject - { - Q_OBJECT - - public: - //! Construtor - CMultiSimulatorSimulatorSettings(QObject *parent = nullptr); - - //! Settings per simulator - CSettingsSimulator getSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; - - //! Set settings per simulator - BlackMisc::CStatusMessage setSettings(const BlackMisc::Simulation::Settings::CSettingsSimulator &settings, const BlackMisc::Simulation::CSimulatorInfo &simulator); - - //! Set settings per simulator - BlackMisc::CStatusMessage setAndSaveSettings(const BlackMisc::Simulation::Settings::CSettingsSimulator &settings, const BlackMisc::Simulation::CSimulatorInfo &simulator); - - //! Set settings per simulator - BlackMisc::CStatusMessage saveSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator); - - //! Simulator directory or default model path per simulator - QString getSimulatorDirectoryOrDefault(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; - - //! Default simulator path per simulator - QString getDefaultSimulatorDirectory(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; - - //! Model directory or default model path per simulator - QStringList getModelDirectoriesOrDefault(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; - - //! First model directoy - QString getFirstModelDirectoryOrDefault(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; - - //! Default model path per simulator - QStringList getDefaultModelDirectories(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; - - //! Model exclude paths per simulator - QStringList getModelExcludeDirectoryPatternsOrDefault(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; - - //! Default model exclude paths per simulator - QStringList getDefaultModelExcludeDirectoryPatterns(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; - - //! Reset to defaults - void resetToDefaults(const BlackMisc::Simulation::CSimulatorInfo &simulator); - - private: - BlackMisc::CSetting m_simSettingsFsx {this}; //!< FSX cache - BlackMisc::CSetting m_simSettingsFs9 {this}; //!< FS9 cache - BlackMisc::CSetting m_simSettingsP3D {this}; //!< P3D cache - BlackMisc::CSetting m_simSettingsXP {this}; //!< XP cache - }; - - //! Settings regarding message handling. - //! Driver independent part, related to network - class BLACKMISC_EXPORT CSettingsSimulatorMessages : - public BlackMisc::CValueObject - { - public: - //! Properties by index - enum ColumnIndex - { - IndexTechnicalLogSeverity = BlackMisc::CPropertyIndex::GlobalIndexCSimulatorMessageSettings, - IndexTextMessageRelay, - IndexGloballyEnabled - }; - - //! Enabled matching mode flags - enum TextMessageTypeFlag - { - NoTextMessages = 0, - TextMessagesUnicom = 1 << 0, - TextMessagesCom1 = 1 << 1, - TextMessagesCom2 = 1 << 2, - TextMessagePrivate = 1 << 3, - TextMessageSupervisor = 1 << 4, - TextMessagesAll = TextMessagesUnicom | TextMessagesCom1 | TextMessagesCom2 | TextMessagePrivate - }; - Q_DECLARE_FLAGS(TextMessageType, TextMessageTypeFlag) - - //! Default constructor - CSettingsSimulatorMessages(); - - //! Destructor. - ~CSettingsSimulatorMessages() {} - - //! Log severity - void setTechnicalLogSeverity(BlackMisc::CStatusMessage::StatusSeverity severity); - - //! Globally enable / disable - void setGloballyEnabled(bool enabled) { this->m_globallyEnabled = enabled; } - - //! Globally enabled? - bool isGloballyEnabled() const { return this->m_globallyEnabled; } - - //! No technical messages - void disableTechnicalMessages(); - - //! Relay (technical) error messages - bool isRelayedErrorsMessages() const; - - //! Relay (technical) warning messages - bool isRelayedWarningMessages() const; - - //! Relay (technical) info messages - bool isRelayedInfoMessages() const; - - //! Relay any message - bool isRelayedTechnicalMessages() const; - - //! Relay the following message types - void setRelayedTextMessages(BlackMisc::Simulation::Settings::CSettingsSimulatorMessages::TextMessageType messageType); - - //! Relay supervisor messages - bool isRelayedSupervisorTextMessages() const; - - //! Relay private messages - bool isRelayedPrivateTextMessages() const; - - //! Relay UNICOM messages - bool isRelayedUnicomTextMessages() const; - - //! Relay given text message - bool isRelayedTextMessage(const BlackMisc::Network::CTextMessage &msg, const BlackMisc::Simulation::CSimulatedAircraft &aircraft) const; - - //! Relay COM1 text message - bool isRelayedCom1TextMessages() const; - - //! Relay COM2 text message - bool isRelayedCom2TextMessages() const; - - //! Relayed text messages - CSettingsSimulatorMessages::TextMessageType getRelayedTextMessageTypes() const; - - //! \copydoc BlackMisc::Mixin::String::toQString - QString convertToQString(bool i18n = false) const; - - //! \copydoc BlackMisc::Mixin::Index::propertyByIndex - BlackMisc::CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; - - //! \copydoc BlackMisc::Mixin::Index::setPropertyByIndex - void setPropertyByIndex(const BlackMisc::CPropertyIndex &index, const BlackMisc::CVariant &variant); - - private: - int m_technicalLogLevel = BlackMisc::CStatusMessage::SeverityError; //!< Simulator directory - int m_messageType = static_cast(TextMessagePrivate | TextMessageSupervisor); - bool m_globallyEnabled = true; //!< messsage relay enabled to simulator - - BLACK_METACLASS( - CSettingsSimulatorMessages, - BLACK_METAMEMBER(technicalLogLevel), - BLACK_METAMEMBER(messageType) - ); - }; - - //! Trait for simulator message settings - struct SettingsSimulatorMessages : public BlackMisc::CSettingTrait - { - //! Key in data cache - static const char *key() { return "settingssimulatormessages"; } - }; - } // ns - } // ns -} // ns - -Q_DECLARE_METATYPE(BlackMisc::Simulation::Settings::CSettingsSimulator) -Q_DECLARE_METATYPE(BlackMisc::CCollection) -Q_DECLARE_METATYPE(BlackMisc::CSequence) -Q_DECLARE_METATYPE(BlackMisc::Simulation::Settings::CSettingsSimulatorMessages) -Q_DECLARE_METATYPE(BlackMisc::CCollection) -Q_DECLARE_METATYPE(BlackMisc::CSequence) -Q_DECLARE_METATYPE(BlackMisc::Simulation::Settings::CSettingsSimulatorMessages::TextMessageTypeFlag) -Q_DECLARE_METATYPE(BlackMisc::Simulation::Settings::CSettingsSimulatorMessages::TextMessageType) -Q_DECLARE_OPERATORS_FOR_FLAGS(BlackMisc::Simulation::Settings::CSettingsSimulatorMessages::TextMessageType) - -#endif // guard diff --git a/src/blackmisc/simulation/simulationsettings.cpp b/src/blackmisc/simulation/simulationsettings.cpp new file mode 100644 index 000000000..a17cf73c4 --- /dev/null +++ b/src/blackmisc/simulation/simulationsettings.cpp @@ -0,0 +1,439 @@ +/* Copyright (C) 2016 + * swift project community / contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "simulationsettings.h" +#include "blackmisc/simulation/simulatedaircraft.h" +#include "blackmisc/simulation/fscommon/fscommonutil.h" +#include "blackmisc/simulation/xplane/xplaneutil.h" +#include "blackmisc/stringutils.h" + +using namespace BlackMisc; +using namespace BlackMisc::PhysicalQuantities; +using namespace BlackMisc::Simulation::FsCommon; +using namespace BlackMisc::Simulation::XPlane; + +namespace BlackMisc +{ + namespace Simulation + { + CSettings::CSettings() + { } + + void CSettings::setSimulatorDirectory(const QString &simulatorDirectory) + { + this->m_simulatorDirectory = simulatorDirectory.trimmed(); + } + + const QString &CSettings::getSimulatorDirectory() const + { + return this->m_simulatorDirectory; + } + + void CSettings::setModelDirectories(const QStringList &modelDirectories) + { + this->m_modelDirectories = modelDirectories; + } + + void CSettings::setModelDirectory(const QString &modelDirectory) + { + this->m_modelDirectories = QStringList({ modelDirectory }); + } + + const QStringList &CSettings::getModelDirectories() const + { + return this->m_modelDirectories; + } + + void CSettings::setModelExcludeDirectories(const QStringList &excludeDirectories) + { + this->m_excludeDirectoryPatterns = excludeDirectories; + } + + const QStringList &CSettings::getModelExcludeDirectoryPatterns() const + { + return m_excludeDirectoryPatterns; + } + + void CSettings::resetPaths() + { + this->m_excludeDirectoryPatterns.clear(); + this->m_modelDirectories.clear(); + this->m_simulatorDirectory.clear(); + } + + QString CSettings::convertToQString(bool i18n) const + { + return convertToQString(", ", i18n); + } + + QString CSettings::convertToQString(const QString &separator, bool i18n) const + { + Q_UNUSED(i18n); + QString s("model directories: "); + s.append(this->m_modelDirectories.join(',')); + s.append(separator); + s.append("exclude directories: "); + s.append(this->m_excludeDirectoryPatterns.join(',')); + return s; + } + + CVariant CSettings::propertyByIndex(const CPropertyIndex &index) const + { + if (index.isMyself()) { return CVariant::from(*this); } + ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexSimulatorDirectory: + return CVariant::fromValue(this->m_simulatorDirectory); + case IndexModelDirectory: + return CVariant::fromValue(this->m_modelDirectories); + case IndexModelExcludeDirectoryPatterns: + return CVariant::fromValue(this->m_excludeDirectoryPatterns); + default: + return CValueObject::propertyByIndex(index); + } + } + + void CSettings::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant) + { + if (index.isMyself()) { (*this) = variant.to(); return; } + + ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexSimulatorDirectory: + this->setSimulatorDirectory(variant.toQString()); + break; + case IndexModelDirectory: + this->setSimulatorDirectory(variant.toQString()); + break; + case IndexModelExcludeDirectoryPatterns: + this->m_excludeDirectoryPatterns = variant.value(); + break; + default: + CValueObject::setPropertyByIndex(index, variant); + break; + } + } + + CMultiSimulatorSettings::CMultiSimulatorSettings(QObject *parent) : QObject(parent) + { + // void + } + + CSettings CMultiSimulatorSettings::getSettings(const CSimulatorInfo &simulator) const + { + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + switch (simulator.getSimulator()) + { + case CSimulatorInfo::FS9: return this->m_simSettingsFs9.get(); + case CSimulatorInfo::FSX: return this->m_simSettingsFsx.get(); + case CSimulatorInfo::P3D: return this->m_simSettingsP3D.get(); + case CSimulatorInfo::XPLANE: return this->m_simSettingsXP.get(); + default: + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + break; + } + return CSettings(); + } + + CStatusMessage CMultiSimulatorSettings::setSettings(const CSettings &settings, const CSimulatorInfo &simulator) + { + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + switch (simulator.getSimulator()) + { + case CSimulatorInfo::FS9: return this->m_simSettingsFs9.set(settings); + case CSimulatorInfo::FSX: return this->m_simSettingsFsx.set(settings); + case CSimulatorInfo::P3D: return this->m_simSettingsP3D.set(settings); + case CSimulatorInfo::XPLANE: return this->m_simSettingsXP.set(settings); + default: + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + break; + } + return CStatusMessage({ CLogCategory::settings() }, CStatusMessage::SeverityError, "wrong simulator"); + } + + CStatusMessage CMultiSimulatorSettings::setAndSaveSettings(const CSettings &settings, const CSimulatorInfo &simulator) + { + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + switch (simulator.getSimulator()) + { + case CSimulatorInfo::FS9: return this->m_simSettingsFs9.setAndSave(settings); + case CSimulatorInfo::FSX: return this->m_simSettingsFsx.setAndSave(settings); + case CSimulatorInfo::P3D: return this->m_simSettingsP3D.setAndSave(settings); + case CSimulatorInfo::XPLANE: return this->m_simSettingsXP.setAndSave(settings); + default: + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + break; + } + return CStatusMessage({ CLogCategory::settings() }, CStatusMessage::SeverityError, "wrong simulator"); + } + + CStatusMessage CMultiSimulatorSettings::saveSettings(const CSimulatorInfo &simulator) + { + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + switch (simulator.getSimulator()) + { + case CSimulatorInfo::FS9: return this->m_simSettingsFs9.save(); + case CSimulatorInfo::FSX: return this->m_simSettingsFsx.save(); + case CSimulatorInfo::P3D: return this->m_simSettingsP3D.save(); + case CSimulatorInfo::XPLANE: return this->m_simSettingsXP.save(); + default: + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + break; + } + return CStatusMessage({ CLogCategory::settings() }, CStatusMessage::SeverityError, "wrong simulator"); + } + + QString CMultiSimulatorSettings::getSimulatorDirectoryOrDefault(const CSimulatorInfo &simulator) const + { + const CSettings s = this->getSettings(simulator); + if (s.getSimulatorDirectory().isEmpty()) + { + return this->getDefaultSimulatorDirectory(simulator); + } + return s.getSimulatorDirectory(); + } + + QString CMultiSimulatorSettings::getDefaultSimulatorDirectory(const CSimulatorInfo &simulator) const + { + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + switch (simulator.getSimulator()) + { + case CSimulatorInfo::FS9: return CFsCommonUtil::fs9Dir(); + case CSimulatorInfo::FSX: return CFsCommonUtil::fsxDir(); + case CSimulatorInfo::P3D: return CFsCommonUtil::p3dDir(); + case CSimulatorInfo::XPLANE: return CXPlaneUtil::xplaneRootDir(); //! check XP + default: + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + break; + } + return ""; + } + + QStringList CMultiSimulatorSettings::getModelDirectoriesOrDefault(const CSimulatorInfo &simulator) const + { + const CSettings s = this->getSettings(simulator); + if (s.getModelDirectories().isEmpty()) + { + return this->getDefaultModelDirectories(simulator); + } + return s.getModelDirectories(); + } + + QString CMultiSimulatorSettings::getFirstModelDirectoryOrDefault(const CSimulatorInfo &simulator) const + { + const QStringList models(getModelDirectoriesOrDefault(simulator)); + if (models.isEmpty()) { return ""; } + return models.first(); + } + + QStringList CMultiSimulatorSettings::getDefaultModelDirectories(const CSimulatorInfo &simulator) const + { + static const QStringList e; + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + switch (simulator.getSimulator()) + { + case CSimulatorInfo::FS9: return CFsCommonUtil::fs9AircraftDir().isEmpty() ? e : QStringList({ CFsCommonUtil::fs9AircraftDir() }); + case CSimulatorInfo::FSX: return CFsCommonUtil::fsxSimObjectsDir().isEmpty() ? e : QStringList({ CFsCommonUtil::fsxSimObjectsDir() }); + case CSimulatorInfo::P3D: return CFsCommonUtil::p3dSimObjectsDir().isEmpty() ? e : QStringList({ CFsCommonUtil::p3dSimObjectsDir()}); + case CSimulatorInfo::XPLANE: return CXPlaneUtil::xplaneModelDirectories(); + default: + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + break; + } + return QStringList(); + } + + QStringList CMultiSimulatorSettings::getModelExcludeDirectoryPatternsOrDefault(const CSimulatorInfo &simulator) const + { + const CSettings s = this->getSettings(simulator); + QStringList exclude(s.getModelExcludeDirectoryPatterns()); + if (!exclude.isEmpty()) { return exclude; } + exclude = this->getDefaultModelExcludeDirectoryPatterns(simulator); + return exclude; + } + + QStringList CMultiSimulatorSettings::getDefaultModelExcludeDirectoryPatterns(const CSimulatorInfo &simulator) const + { + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + switch (simulator.getSimulator()) + { + case CSimulatorInfo::FS9: return CFsCommonUtil::fs9AircraftObjectsExcludeDirectoryPatterns(); + case CSimulatorInfo::FSX: return CFsCommonUtil::fsxSimObjectsExcludeDirectoryPatterns(); + case CSimulatorInfo::P3D: return CFsCommonUtil::p3dSimObjectsExcludeDirectoryPatterns(); + case CSimulatorInfo::XPLANE: return CXPlaneUtil::xplaneModelExcludeDirectoryPatterns(); + default: + Q_ASSERT_X(simulator.isSingleSimulator(), Q_FUNC_INFO, "No single simulator"); + break; + } + return QStringList(); + } + + void CMultiSimulatorSettings::resetToDefaults(const CSimulatorInfo &simulator) + { + CSettings s = this->getSettings(simulator); + s.resetPaths(); + this->setAndSaveSettings(s, simulator); + } + + CSettingsSimulatorMessages::CSettingsSimulatorMessages() + { + // void + } + + void CSettingsSimulatorMessages::setTechnicalLogSeverity(CStatusMessage::StatusSeverity severity) + { + this->m_technicalLogLevel = static_cast(severity); + } + + void CSettingsSimulatorMessages::disableTechnicalMessages() + { + this->m_technicalLogLevel = -1; + } + + bool CSettingsSimulatorMessages::isRelayedErrorsMessages() const + { + if (this->m_technicalLogLevel < 0) { return false; } + return (this->m_technicalLogLevel <= CStatusMessage::SeverityError); + } + + bool CSettingsSimulatorMessages::isRelayedWarningMessages() const + { + if (this->m_technicalLogLevel < 0) { return false; } + return (this->m_technicalLogLevel <= CStatusMessage::SeverityWarning); + } + + bool CSettingsSimulatorMessages::isRelayedInfoMessages() const + { + if (this->m_technicalLogLevel < 0) { return false; } + return (this->m_technicalLogLevel <= CStatusMessage::SeverityInfo); + } + + bool CSettingsSimulatorMessages::isRelayedTechnicalMessages() const + { + return (this->m_technicalLogLevel >= 0); + } + + void CSettingsSimulatorMessages::setRelayedTextMessages(CSettingsSimulatorMessages::TextMessageType messageType) + { + this->m_messageType = static_cast(messageType); + } + + bool CSettingsSimulatorMessages::isRelayedSupervisorTextMessages() const + { + return this->getRelayedTextMessageTypes().testFlag(TextMessageSupervisor); + } + + bool CSettingsSimulatorMessages::isRelayedPrivateTextMessages() const + { + return this->getRelayedTextMessageTypes().testFlag(TextMessagePrivate); + } + + bool CSettingsSimulatorMessages::isRelayedUnicomTextMessages() const + { + return this->getRelayedTextMessageTypes().testFlag(TextMessagesUnicom); + } + + bool CSettingsSimulatorMessages::isRelayedCom1TextMessages() const + { + return this->getRelayedTextMessageTypes().testFlag(TextMessagesCom1); + } + + bool CSettingsSimulatorMessages::isRelayedCom2TextMessages() const + { + return this->getRelayedTextMessageTypes().testFlag(TextMessagesCom2); + } + + bool CSettingsSimulatorMessages::isRelayedTextMessage(const Network::CTextMessage &msg, const BlackMisc::Simulation::CSimulatedAircraft &aircraft) const + { + if (msg.isEmpty()) { return false; } + if (!this->isGloballyEnabled()) { return false; } + if (this->m_messageType == NoTextMessages) { return false; } + + const TextMessageType mt = static_cast(this->m_messageType); + if (msg.isPrivateMessage() && mt.testFlag(TextMessagePrivate)) { return true; } + if (msg.isSupervisorMessage() && (mt.testFlag(TextMessagePrivate) || mt.testFlag(TextMessageSupervisor))) { return true; } + if (msg.isSendToUnicom() && mt.testFlag(TextMessagesUnicom)) { return true; } + + if (msg.isRadioMessage()) + { + const CFrequency f(msg.getFrequency()); + if (mt.testFlag(TextMessagesCom1)) + { + if (aircraft.getCom1System().isActiveFrequencyWithin8_33kHzChannel(f)) { return true; } + } + if (mt.testFlag(TextMessagesCom2)) + { + if (aircraft.getCom2System().isActiveFrequencyWithin8_33kHzChannel(f)) { return true; } + } + } + return false; + } + + CSettingsSimulatorMessages::TextMessageType CSettingsSimulatorMessages::getRelayedTextMessageTypes() const + { + return static_cast(this->m_messageType); + } + + QString CSettingsSimulatorMessages::convertToQString(bool i18n) const + { + Q_UNUSED(i18n); + QString s("Enabled %1, text messages: %2, severity: %3"); + QString severity; + if (this->isRelayedTechnicalMessages()) + { + severity = "No tech. msgs"; + } + else + { + severity = CStatusMessage::severityToString(static_cast(this->m_technicalLogLevel)); + } + return s.arg(boolToOnOff(this->m_globallyEnabled)).arg(this->m_messageType).arg(severity); + } + + CVariant CSettingsSimulatorMessages::propertyByIndex(const CPropertyIndex &index) const + { + if (index.isMyself()) { return CVariant::from(*this); } + ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexTechnicalLogSeverity: + return CVariant::fromValue(this->m_technicalLogLevel); + case IndexTextMessageRelay: + return CVariant::from(this->m_messageType); + case IndexGloballyEnabled: + return CVariant::from(this->m_globallyEnabled); + default: + return CValueObject::propertyByIndex(index); + } + } + + void CSettingsSimulatorMessages::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant) + { + if (index.isMyself()) { (*this) = variant.to(); return; } + ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexTechnicalLogSeverity: + this->setTechnicalLogSeverity(static_cast(variant.toInt())); + break; + case IndexTextMessageRelay: + this->setRelayedTextMessages(static_cast(variant.toInt())); + break; + case IndexGloballyEnabled: + this->setGloballyEnabled(variant.toBool()); + break; + default: + CValueObject::setPropertyByIndex(index, variant); + break; + } + } + } // ns +} // ns diff --git a/src/blackmisc/simulation/simulationsettings.h b/src/blackmisc/simulation/simulationsettings.h new file mode 100644 index 000000000..6d64234f5 --- /dev/null +++ b/src/blackmisc/simulation/simulationsettings.h @@ -0,0 +1,301 @@ +/* Copyright (C) 2016 + * swift project community / contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKMISC_SIMULATION_SETTINGS_H +#define BLACKMISC_SIMULATION_SETTINGS_H + +#include "blackmisc/simulation/simulatorinfo.h" +#include "blackmisc/network/textmessage.h" +#include "blackmisc/settingscache.h" +#include "blackmisc/statusmessage.h" +#include "blackmisc/blackmiscexport.h" +#include "blackmisc/propertyindex.h" + +#include +#include + +namespace BlackMisc +{ + namespace Simulation + { + class CSimulatedAircraft; + + //! Settings for simulator + //! Driver independent part also used in loaders (such as directories) + class BLACKMISC_EXPORT CSettings : + public BlackMisc::CValueObject + { + public: + //! Properties by index + enum ColumnIndex + { + IndexSimulatorDirectory = BlackMisc::CPropertyIndex::GlobalIndexCSimulatorSettings, + IndexModelDirectory, + IndexModelExcludeDirectoryPatterns + }; + + //! Default constructor + CSettings(); + + //! Destructor. + ~CSettings() {} + + //! Set simulator directory + void setSimulatorDirectory(const QString &simulatorDirectory); + + //! Simulator directory + const QString &getSimulatorDirectory() const; + + //! Set model directories + void setModelDirectories(const QStringList &modelDirectories); + + //! Set single model directory + void setModelDirectory(const QString &modelDirectory); + + //! Model directory + const QStringList &getModelDirectories() const; + + //! Set exclude directories + void setModelExcludeDirectories(const QStringList &excludeDirectories); + + //! Margins for given dock widget + const QStringList &getModelExcludeDirectoryPatterns() const; + + //! Reset the paths + void resetPaths(); + + //! \copydoc BlackMisc::Mixin::String::toQString + QString convertToQString(bool i18n = false) const; + + //! To string + QString convertToQString(const QString &separator, bool i18n = false) const; + + //! \copydoc BlackMisc::Mixin::Index::propertyByIndex + BlackMisc::CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; + + //! \copydoc BlackMisc::Mixin::Index::setPropertyByIndex + void setPropertyByIndex(const BlackMisc::CPropertyIndex &index, const BlackMisc::CVariant &variant); + + private: + QString m_simulatorDirectory; //! Simulator directory + QStringList m_modelDirectories; //!< Model directory + QStringList m_excludeDirectoryPatterns; //!< Exclude model directory + + BLACK_METACLASS( + CSettings, + BLACK_METAMEMBER(simulatorDirectory), + BLACK_METAMEMBER(modelDirectories), + BLACK_METAMEMBER(excludeDirectoryPatterns) + ); + }; + + //! Trait for simulator settings + struct TSimulatorFsx : public BlackMisc::TSettingTrait + { + //! Key in data cache + static const char *key() { return "settingssimulatorfsx"; } + }; + + //! Trait for simulator settings + struct TSimulatorFs9 : public BlackMisc::TSettingTrait + { + //! Key in data cache + static const char *key() { return "settingssimulatorfs9"; } + }; + + //! Trait for simulator settings + struct TSimulatorP3D : public BlackMisc::TSettingTrait + { + //! Key in data cache + static const char *key() { return "settingssimulatorp3d"; } + }; + + //! Trait for simulator settings + struct TSimulatorXP : public BlackMisc::TSettingTrait + { + //! Key in data cache + static const char *key() { return "settingssimulatorxplane"; } + }; + + //! Bundle of settings for all simulators + class BLACKMISC_EXPORT CMultiSimulatorSettings : public QObject + { + Q_OBJECT + + public: + //! Construtor + CMultiSimulatorSettings(QObject *parent = nullptr); + + //! Settings per simulator + CSettings getSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; + + //! Set settings per simulator + BlackMisc::CStatusMessage setSettings(const BlackMisc::Simulation::CSettings &settings, const BlackMisc::Simulation::CSimulatorInfo &simulator); + + //! Set settings per simulator + BlackMisc::CStatusMessage setAndSaveSettings(const BlackMisc::Simulation::CSettings &settings, const BlackMisc::Simulation::CSimulatorInfo &simulator); + + //! Set settings per simulator + BlackMisc::CStatusMessage saveSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator); + + //! Simulator directory or default model path per simulator + QString getSimulatorDirectoryOrDefault(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; + + //! Default simulator path per simulator + QString getDefaultSimulatorDirectory(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; + + //! Model directory or default model path per simulator + QStringList getModelDirectoriesOrDefault(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; + + //! First model directoy + QString getFirstModelDirectoryOrDefault(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; + + //! Default model path per simulator + QStringList getDefaultModelDirectories(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; + + //! Model exclude paths per simulator + QStringList getModelExcludeDirectoryPatternsOrDefault(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; + + //! Default model exclude paths per simulator + QStringList getDefaultModelExcludeDirectoryPatterns(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; + + //! Reset to defaults + void resetToDefaults(const BlackMisc::Simulation::CSimulatorInfo &simulator); + + private: + BlackMisc::CSetting m_simSettingsFsx {this}; //!< FSX cache + BlackMisc::CSetting m_simSettingsFs9 {this}; //!< FS9 cache + BlackMisc::CSetting m_simSettingsP3D {this}; //!< P3D cache + BlackMisc::CSetting m_simSettingsXP {this}; //!< XP cache + }; + + //! Settings regarding message handling. + //! Driver independent part, related to network + class BLACKMISC_EXPORT CSettingsSimulatorMessages : + public BlackMisc::CValueObject + { + public: + //! Properties by index + enum ColumnIndex + { + IndexTechnicalLogSeverity = BlackMisc::CPropertyIndex::GlobalIndexCSimulatorMessageSettings, + IndexTextMessageRelay, + IndexGloballyEnabled + }; + + //! Enabled matching mode flags + enum TextMessageTypeFlag + { + NoTextMessages = 0, + TextMessagesUnicom = 1 << 0, + TextMessagesCom1 = 1 << 1, + TextMessagesCom2 = 1 << 2, + TextMessagePrivate = 1 << 3, + TextMessageSupervisor = 1 << 4, + TextMessagesAll = TextMessagesUnicom | TextMessagesCom1 | TextMessagesCom2 | TextMessagePrivate + }; + Q_DECLARE_FLAGS(TextMessageType, TextMessageTypeFlag) + + //! Default constructor + CSettingsSimulatorMessages(); + + //! Destructor. + ~CSettingsSimulatorMessages() {} + + //! Log severity + void setTechnicalLogSeverity(BlackMisc::CStatusMessage::StatusSeverity severity); + + //! Globally enable / disable + void setGloballyEnabled(bool enabled) { this->m_globallyEnabled = enabled; } + + //! Globally enabled? + bool isGloballyEnabled() const { return this->m_globallyEnabled; } + + //! No technical messages + void disableTechnicalMessages(); + + //! Relay (technical) error messages + bool isRelayedErrorsMessages() const; + + //! Relay (technical) warning messages + bool isRelayedWarningMessages() const; + + //! Relay (technical) info messages + bool isRelayedInfoMessages() const; + + //! Relay any message + bool isRelayedTechnicalMessages() const; + + //! Relay the following message types + void setRelayedTextMessages(BlackMisc::Simulation::CSettingsSimulatorMessages::TextMessageType messageType); + + //! Relay supervisor messages + bool isRelayedSupervisorTextMessages() const; + + //! Relay private messages + bool isRelayedPrivateTextMessages() const; + + //! Relay UNICOM messages + bool isRelayedUnicomTextMessages() const; + + //! Relay given text message + bool isRelayedTextMessage(const BlackMisc::Network::CTextMessage &msg, const BlackMisc::Simulation::CSimulatedAircraft &aircraft) const; + + //! Relay COM1 text message + bool isRelayedCom1TextMessages() const; + + //! Relay COM2 text message + bool isRelayedCom2TextMessages() const; + + //! Relayed text messages + CSettingsSimulatorMessages::TextMessageType getRelayedTextMessageTypes() const; + + //! \copydoc BlackMisc::Mixin::String::toQString + QString convertToQString(bool i18n = false) const; + + //! \copydoc BlackMisc::Mixin::Index::propertyByIndex + BlackMisc::CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; + + //! \copydoc BlackMisc::Mixin::Index::setPropertyByIndex + void setPropertyByIndex(const BlackMisc::CPropertyIndex &index, const BlackMisc::CVariant &variant); + + private: + int m_technicalLogLevel = BlackMisc::CStatusMessage::SeverityError; //!< Simulator directory + int m_messageType = static_cast(TextMessagePrivate | TextMessageSupervisor); + bool m_globallyEnabled = true; //!< messsage relay enabled to simulator + + BLACK_METACLASS( + CSettingsSimulatorMessages, + BLACK_METAMEMBER(technicalLogLevel), + BLACK_METAMEMBER(messageType) + ); + }; + + //! Trait for simulator message settings + struct TSimulatorMessages : public BlackMisc::TSettingTrait + { + //! Key in data cache + static const char *key() { return "settingssimulatormessages"; } + }; + } // ns +} // ns + +Q_DECLARE_METATYPE(BlackMisc::Simulation::CSettings) +Q_DECLARE_METATYPE(BlackMisc::CCollection) +Q_DECLARE_METATYPE(BlackMisc::CSequence) +Q_DECLARE_METATYPE(BlackMisc::Simulation::CSettingsSimulatorMessages) +Q_DECLARE_METATYPE(BlackMisc::CCollection) +Q_DECLARE_METATYPE(BlackMisc::CSequence) +Q_DECLARE_METATYPE(BlackMisc::Simulation::CSettingsSimulatorMessages::TextMessageTypeFlag) +Q_DECLARE_METATYPE(BlackMisc::Simulation::CSettingsSimulatorMessages::TextMessageType) +Q_DECLARE_OPERATORS_FOR_FLAGS(BlackMisc::Simulation::CSettingsSimulatorMessages::TextMessageType) + +#endif // guard