diff --git a/samples/blackmiscsim/samplesfscommon.cpp b/samples/blackmiscsim/samplesfscommon.cpp index ed3d225ea..09512964f 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/simulatorsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/simulation/simulatorinfo.h" #include @@ -28,6 +28,7 @@ using namespace BlackMisc; using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation::FsCommon; +using namespace BlackMisc::Simulation::Settings; namespace BlackSample { diff --git a/samples/blackmiscsim/samplesmodelmapping.cpp b/samples/blackmiscsim/samplesmodelmapping.cpp index 951ca4562..839b01c83 100644 --- a/samples/blackmiscsim/samplesmodelmapping.cpp +++ b/samples/blackmiscsim/samplesmodelmapping.cpp @@ -15,9 +15,9 @@ #include "blackmisc/aviation/aircrafticaocode.h" #include "blackmisc/aviation/airlineicaocode.h" #include "blackmisc/sampleutils.h" -#include "blackmisc/simulation/simulatorsettings.h" #include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/aircraftmodelloader.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/simulation/fscommon/aircraftcfgentrieslist.h" #include "blackmisc/simulation/fscommon/aircraftcfgparser.h" #include "blackmisc/simulation/fscommon/vpilotrulesreader.h" @@ -33,6 +33,7 @@ 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 @@ -40,12 +41,12 @@ namespace BlackSample void CSamplesModelMapping::samples(QTextStream &streamOut, QTextStream &streamIn) { CVPilotRulesReader vpRulesReader; - bool s = vpRulesReader.read(true); + const bool s = vpRulesReader.read(true); streamOut << "directory: " << CVPilotRulesReader::standardMappingsDirectory() << endl; streamOut << "loaded: " << BlackMisc::boolToYesNo(s) << " size: " << vpRulesReader.getAsModelsFromCache().size() << endl; // mapper with rule set, handing over ownership - QString fsDir = CSampleUtils::selectDirectory( + const QString fsDir = CSampleUtils::selectDirectory( { QStringLiteral("P:/FlightSimulatorX (MSI)/SimObjects"), QStringLiteral("P:/Temp/SimObjects"), diff --git a/src/blackcore/context/contextsimulatorimpl.cpp b/src/blackcore/context/contextsimulatorimpl.cpp index fede15a13..303d2f148 100644 --- a/src/blackcore/context/contextsimulatorimpl.cpp +++ b/src/blackcore/context/contextsimulatorimpl.cpp @@ -44,6 +44,7 @@ using namespace BlackMisc::Network; using namespace BlackMisc::Simulation; using namespace BlackMisc::Geo; using namespace BlackMisc::Simulation; +using namespace BlackMisc::Simulation::Settings; namespace BlackCore { diff --git a/src/blackcore/context/contextsimulatorimpl.h b/src/blackcore/context/contextsimulatorimpl.h index ae899a509..7e6295f95 100644 --- a/src/blackcore/context/contextsimulatorimpl.h +++ b/src/blackcore/context/contextsimulatorimpl.h @@ -31,7 +31,7 @@ #include "blackmisc/simulation/simulatorplugininfo.h" #include "blackmisc/simulation/simulatorplugininfolist.h" #include "blackmisc/simulation/simulatorinternals.h" -#include "blackmisc/simulation/simulatorsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/worker.h" #include @@ -206,7 +206,7 @@ namespace BlackCore BlackCore::CAircraftMatcher m_aircraftMatcher; //!< Model matcher BlackMisc::Simulation::CAircraftModelSetLoader m_modelSetLoader { this }; //!< load model set from caches QMap m_matchingMessages; - BlackMisc::CSettingReadOnly m_messageSettings { this }; //!< settings for messages + BlackMisc::CSettingReadOnly m_messageSettings { this }; //!< settings for messages BlackMisc::CSettingReadOnly m_enabledSimulators { this, &CContextSimulator::changeEnabledSimulators }; QString m_networkSessionId; //! Network session, if not connected empty bool m_initallyAddAircrafts = false; diff --git a/src/blackcore/simulatorcommon.h b/src/blackcore/simulatorcommon.h index f1fc24a02..d43f38d9c 100644 --- a/src/blackcore/simulatorcommon.h +++ b/src/blackcore/simulatorcommon.h @@ -28,7 +28,7 @@ #include "blackmisc/simulation/simulatorinfo.h" #include "blackmisc/simulation/simulatorplugininfo.h" #include "blackmisc/simulation/simulatorinternals.h" -#include "blackmisc/simulation/simulatorsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/simulation/interpolationrenderingsetup.h" #include "blackmisc/simulation/interpolationhints.h" #include "blackmisc/simulation/interpolationlogger.h" @@ -215,7 +215,7 @@ namespace BlackCore bool m_isWeatherActivated = false; //!< Is simulator weather activated? BlackMisc::Geo::CCoordinateGeodetic m_lastWeatherPosition; //!< Own aircraft position at which weather was fetched and injected last - BlackMisc::CSetting m_weatherScenarioSettings { this, &CSimulatorCommon::reloadWeatherSettings }; //!< Selected weather scenario + BlackMisc::CSetting m_weatherScenarioSettings { this, &CSimulatorCommon::reloadWeatherSettings }; //!< Selected weather scenario //! Lookup against DB data static BlackMisc::Simulation::CAircraftModel reverseLookupModel(const BlackMisc::Simulation::CAircraftModel &model); diff --git a/src/blackgui/components/dbownmodelsetcomponent.h b/src/blackgui/components/dbownmodelsetcomponent.h index 1dcd636b4..1e7526e23 100644 --- a/src/blackgui/components/dbownmodelsetcomponent.h +++ b/src/blackgui/components/dbownmodelsetcomponent.h @@ -14,7 +14,7 @@ #include "blackgui/components/dbmappingcomponentaware.h" #include "blackgui/menus/menudelegate.h" -#include "blackmisc/simulation/modelsettings.h" +#include "blackmisc/simulation/settings/modelsettings.h" #include "blackmisc/simulation/aircraftmodelinterfaces.h" #include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/aircraftmodelsetloader.h" @@ -151,8 +151,8 @@ namespace BlackGui QScopedPointer ui; QScopedPointer m_modelSetDialog; BlackMisc::Simulation::CAircraftModelSetLoader m_modelSetLoader { this }; - BlackMisc::CSettingReadOnly m_distributorPreferences { this, &CDbOwnModelSetComponent::ps_distributorPreferencesChanged }; //!< distributor preferences - BlackMisc::CSettingReadOnly m_modelSettings { this, &CDbOwnModelSetComponent::ps_modelSettingsChanged }; //!< settings for models + BlackMisc::CSettingReadOnly m_distributorPreferences { this, &CDbOwnModelSetComponent::ps_distributorPreferencesChanged }; //!< distributor preferences + BlackMisc::CSettingReadOnly m_modelSettings { this, &CDbOwnModelSetComponent::ps_modelSettingsChanged }; //!< settings for models // -------------------------- custom menus ----------------------------------- diff --git a/src/blackgui/components/distributorpreferencescomponent.h b/src/blackgui/components/distributorpreferencescomponent.h index e4aa3c6b6..e6ce40553 100644 --- a/src/blackgui/components/distributorpreferencescomponent.h +++ b/src/blackgui/components/distributorpreferencescomponent.h @@ -14,7 +14,7 @@ #include "blackmisc/settingscache.h" #include "blackmisc/simulation/aircraftmodelsetloader.h" -#include "blackmisc/simulation/modelsettings.h" +#include "blackmisc/simulation/settings/modelsettings.h" #include "blackmisc/simulation/simulatorinfo.h" #include @@ -70,7 +70,7 @@ namespace BlackGui QScopedPointer ui; BlackGui::COverlayMessagesFrame *m_overlayMessageFrame = nullptr; BlackMisc::Simulation::CAircraftModelSetLoader m_modelSetLoader { this }; - BlackMisc::CSetting m_distributorPreferences { this, &CDistributorPreferencesComponent::ps_preferencesChanged }; + BlackMisc::CSetting m_distributorPreferences { this, &CDistributorPreferencesComponent::ps_preferencesChanged }; //! Update void updateContainerMaybeAsync(const BlackMisc::Simulation::CDistributorList &models, bool sortByOrder = true); diff --git a/src/blackgui/components/modelconverterxsetupcomponent.h b/src/blackgui/components/modelconverterxsetupcomponent.h index c4546bb3a..5e24ebbe4 100644 --- a/src/blackgui/components/modelconverterxsetupcomponent.h +++ b/src/blackgui/components/modelconverterxsetupcomponent.h @@ -42,7 +42,7 @@ namespace BlackGui void saveSettings(); QScopedPointer ui; - BlackMisc::CSetting m_setting { this }; + BlackMisc::CSetting m_setting { this }; }; } // ns } // ns diff --git a/src/blackgui/components/settingssimulatorbasicscomponent.cpp b/src/blackgui/components/settingssimulatorbasicscomponent.cpp index a15ccd24f..77308b057 100644 --- a/src/blackgui/components/settingssimulatorbasicscomponent.cpp +++ b/src/blackgui/components/settingssimulatorbasicscomponent.cpp @@ -18,6 +18,7 @@ using namespace BlackMisc; using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation::FsCommon; +using namespace BlackMisc::Simulation::Settings; using namespace BlackConfig; namespace BlackGui diff --git a/src/blackgui/components/settingssimulatorbasicscomponent.h b/src/blackgui/components/settingssimulatorbasicscomponent.h index 86964dee3..192ac38b4 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/simulatorsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/simulation/fscommon/fscommonutil.h" #include #include @@ -58,7 +58,7 @@ namespace BlackGui private: QScopedPointer ui; - BlackMisc::Simulation::CMultiSimulatorSettings m_settings { this }; + BlackMisc::Simulation::Settings::CMultiSimulatorSettings m_settings { this }; Qt::CaseSensitivity m_fileCaseSensitivity = BlackMisc::CFileUtils::osFileNameCaseSensitivity(); //! Optimize for small layout @@ -77,7 +77,7 @@ namespace BlackGui void displayModelDirectories(const QStringList &dirs); //! Current settings - BlackMisc::Simulation::CSimulatorSettings getSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; + BlackMisc::Simulation::Settings::CSimulatorSettings 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 d7481f5bc..d1f67a0c2 100644 --- a/src/blackgui/components/settingssimulatormessagescomponent.cpp +++ b/src/blackgui/components/settingssimulatormessagescomponent.cpp @@ -9,10 +9,11 @@ #include "settingssimulatormessagescomponent.h" #include "ui_settingssimulatormessagescomponent.h" -#include "blackmisc/simulation/simulatorsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" using namespace BlackMisc; using namespace BlackMisc::Simulation; +using namespace BlackMisc::Simulation::Settings; namespace BlackGui { diff --git a/src/blackgui/components/settingssimulatormessagescomponent.h b/src/blackgui/components/settingssimulatormessagescomponent.h index 3b79ce316..a59620caa 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/simulatorsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.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/components/weathercomponent.h b/src/blackgui/components/weathercomponent.h index c39423fd0..8885eced7 100644 --- a/src/blackgui/components/weathercomponent.h +++ b/src/blackgui/components/weathercomponent.h @@ -16,7 +16,7 @@ #include "blackgui/blackguiexport.h" #include "blackcore/actionbind.h" #include "blackmisc/geo/coordinategeodetic.h" -#include "blackmisc/simulation/simulatorsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/weather/weatherscenario.h" #include "blackmisc/identifiable.h" @@ -77,7 +77,7 @@ namespace BlackGui QVector m_weatherScenarios; QTimer m_weatherUpdateTimer { this }; BlackMisc::Geo::CCoordinateGeodetic m_lastOwnAircraftPosition; - BlackMisc::CSetting m_weatherScenarioSetting { this }; + BlackMisc::CSetting m_weatherScenarioSetting { this }; BlackCore::CActionBindings m_hotkeyBindings; bool m_isWeatherActivated = false; }; diff --git a/src/blackgui/editors/ownmodelsetform.h b/src/blackgui/editors/ownmodelsetform.h index 0aa98236c..14aafae35 100644 --- a/src/blackgui/editors/ownmodelsetform.h +++ b/src/blackgui/editors/ownmodelsetform.h @@ -13,7 +13,7 @@ #define BLACKGUI_EDITORS_OWNMODELSETFORM_H #include "form.h" -#include "blackmisc/simulation/modelsettings.h" +#include "blackmisc/simulation/settings/modelsettings.h" #include #include @@ -109,7 +109,7 @@ namespace BlackGui QScopedPointer ui; BlackMisc::Simulation::CSimulatorInfo m_simulator; - BlackMisc::CSetting m_distributorPreferences { this, &COwnModelSetForm::ps_preferencesChanged }; + BlackMisc::CSetting m_distributorPreferences { this, &COwnModelSetForm::ps_preferencesChanged }; }; } // ns } // ns diff --git a/src/blackmisc/simulation/aircraftmodelloader.h b/src/blackmisc/simulation/aircraftmodelloader.h index 68ce7bcb4..f11d7ca26 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/simulatorsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/simulation/simulatorinfo.h" #include "blackmisc/statusmessage.h" @@ -179,7 +179,7 @@ namespace BlackMisc std::atomic m_cancelLoading { false }; //!< flag, requesting to cancel loading std::atomic m_loadingInProgress { false }; //!< Loading in progress BlackMisc::Simulation::Data::CModelCaches m_caches { false, this }; //!< caches - BlackMisc::Simulation::CMultiSimulatorSettings m_settings { this }; //!< settings + BlackMisc::Simulation::Settings::CMultiSimulatorSettings m_settings { this }; //!< settings BlackMisc::CStatusMessageList m_loadingMessages; //!< loading messages protected slots: diff --git a/src/blackmisc/simulation/modelconverterx.cpp b/src/blackmisc/simulation/modelconverterx.cpp index 5f1312ff1..a79d3fcd7 100644 --- a/src/blackmisc/simulation/modelconverterx.cpp +++ b/src/blackmisc/simulation/modelconverterx.cpp @@ -16,6 +16,7 @@ using namespace BlackConfig; using namespace BlackMisc; +using namespace BlackMisc::Simulation::Settings; namespace BlackMisc { diff --git a/src/blackmisc/simulation/modelconverterx.h b/src/blackmisc/simulation/modelconverterx.h index 32c373126..7c5611738 100644 --- a/src/blackmisc/simulation/modelconverterx.h +++ b/src/blackmisc/simulation/modelconverterx.h @@ -44,20 +44,23 @@ namespace BlackMisc static QProcess *s_proccess; //!< 0..1 process running }; - //! Binary of MCX - struct TModelConverterXBinary : public BlackMisc::TSettingTrait + namespace Settings { - //! \copydoc BlackMisc::TSettingTrait::key - static const char *key() { return "mapping/modelconverterxbin"; } - - //! \copydoc BlackMisc::TSettingTrait::isValid - static bool isValid(const QString &value) + //! Binary of MCX + struct TModelConverterXBinary : public BlackMisc::TSettingTrait { - if (value.isEmpty()) { return true; } - const QFile f(value); - return f.exists(); - } - }; + //! \copydoc BlackMisc::TSettingTrait::key + static const char *key() { return "mapping/modelconverterxbin"; } + + //! \copydoc BlackMisc::TSettingTrait::isValid + static bool isValid(const QString &value) + { + if (value.isEmpty()) { return true; } + const QFile f(value); + return f.exists(); + } + }; + } // ns } // ns } // ns diff --git a/src/blackmisc/simulation/modelsettings.cpp b/src/blackmisc/simulation/modelsettings.cpp deleted file mode 100644 index 16b1015a5..000000000 --- a/src/blackmisc/simulation/modelsettings.cpp +++ /dev/null @@ -1,55 +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 "modelsettings.h" -#include "blackmisc/stringutils.h" - -namespace BlackMisc -{ - namespace Simulation - { - CModelSettings::CModelSettings() - { } - - QString CModelSettings::convertToQString(bool i18n) const - { - Q_UNUSED(i18n); - static const QString ms("Allow exclude: %1"); - return ms.arg(boolToYesNo(this->m_allowExcludeModels)); - } - - CVariant CModelSettings::propertyByIndex(const CPropertyIndex &index) const - { - if (index.isMyself()) { return CVariant::from(*this); } - const ColumnIndex i = index.frontCasted(); - switch (i) - { - case IndexAllowExclude: - return CVariant::fromValue(this->m_allowExcludeModels); - default: - return CValueObject::propertyByIndex(index); - } - } - - void CModelSettings::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant) - { - if (index.isMyself()) { (*this) = variant.to(); return; } - const ColumnIndex i = index.frontCasted(); - switch (i) - { - case IndexAllowExclude: - this->setAllowExcludedModels(variant.toBool()); - break; - default: - CValueObject::setPropertyByIndex(index, variant); - break; - } - } - } // ns -} // ns diff --git a/src/blackmisc/simulation/modelsettings.h b/src/blackmisc/simulation/modelsettings.h deleted file mode 100644 index aa8706f14..000000000 --- a/src/blackmisc/simulation/modelsettings.h +++ /dev/null @@ -1,82 +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_MODELSETTINGS_H -#define BLACKMISC_SIMULATION_MODELSETTINGS_H - -#include "blackmisc/simulation/distributorlistpreferences.h" -#include "blackmisc/settingscache.h" -#include "blackmisc/blackmiscexport.h" -#include "blackmisc/propertyindex.h" - -namespace BlackMisc -{ - namespace Simulation - { - //! Settings for models - class BLACKMISC_EXPORT CModelSettings : - public BlackMisc::CValueObject - { - public: - //! Properties by index - enum ColumnIndex - { - IndexAllowExclude = BlackMisc::CPropertyIndex::GlobalIndexCSimulatorSettings - }; - - //! Default constructor - CModelSettings(); - - //! Allow excluded models? - bool getAllowExcludedModels() const { return m_allowExcludeModels; } - - //! Allow excluded models? - void setAllowExcludedModels(bool allow) { m_allowExcludeModels = allow; } - - //! \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: - bool m_allowExcludeModels = false; //!< Allow excluded models in sets - - BLACK_METACLASS( - CModelSettings, - BLACK_METAMEMBER(allowExcludeModels) - ); - }; - - //! Trait for simulator settings - struct TModel : public BlackMisc::TSettingTrait - { - //! Key in data cache - static const char *key() { return "settingsmodels"; } - }; - - //! Mapping preferences for model distributor list - struct TDistributorListPreferences : public BlackMisc::TSettingTrait - { - //! \copydoc BlackMisc::TSettingTrait::key - static const char *key() { return "mapping/distributorpreferences"; } - }; - } // ns -} // ns - -Q_DECLARE_METATYPE(BlackMisc::Simulation::CModelSettings) -Q_DECLARE_METATYPE(BlackMisc::CCollection) -Q_DECLARE_METATYPE(BlackMisc::CSequence) - -#endif // guard diff --git a/src/blackmisc/simulation/settings/modelsettings.cpp b/src/blackmisc/simulation/settings/modelsettings.cpp new file mode 100644 index 000000000..438bdef24 --- /dev/null +++ b/src/blackmisc/simulation/settings/modelsettings.cpp @@ -0,0 +1,58 @@ +/* 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 "modelsettings.h" +#include "blackmisc/stringutils.h" + +namespace BlackMisc +{ + namespace Simulation + { + namespace Settings + { + CModelSettings::CModelSettings() + { } + + QString CModelSettings::convertToQString(bool i18n) const + { + Q_UNUSED(i18n); + static const QString ms("Allow exclude: %1"); + return ms.arg(boolToYesNo(this->m_allowExcludeModels)); + } + + CVariant CModelSettings::propertyByIndex(const CPropertyIndex &index) const + { + if (index.isMyself()) { return CVariant::from(*this); } + const ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexAllowExclude: + return CVariant::fromValue(this->m_allowExcludeModels); + default: + return CValueObject::propertyByIndex(index); + } + } + + void CModelSettings::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant) + { + if (index.isMyself()) { (*this) = variant.to(); return; } + const ColumnIndex i = index.frontCasted(); + switch (i) + { + case IndexAllowExclude: + this->setAllowExcludedModels(variant.toBool()); + break; + default: + CValueObject::setPropertyByIndex(index, variant); + break; + } + } + } // ns + } // ns +} // ns diff --git a/src/blackmisc/simulation/settings/modelsettings.h b/src/blackmisc/simulation/settings/modelsettings.h new file mode 100644 index 000000000..65eb8670a --- /dev/null +++ b/src/blackmisc/simulation/settings/modelsettings.h @@ -0,0 +1,85 @@ +/* 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_MODELSETTINGS_H +#define BLACKMISC_SIMULATION_SETTINGS_MODELSETTINGS_H + +#include "blackmisc/simulation/distributorlistpreferences.h" +#include "blackmisc/settingscache.h" +#include "blackmisc/blackmiscexport.h" +#include "blackmisc/propertyindex.h" + +namespace BlackMisc +{ + namespace Simulation + { + namespace Settings + { + //! Settings for models + class BLACKMISC_EXPORT CModelSettings : + public BlackMisc::CValueObject + { + public: + //! Properties by index + enum ColumnIndex + { + IndexAllowExclude = BlackMisc::CPropertyIndex::GlobalIndexCSimulatorSettings + }; + + //! Default constructor + CModelSettings(); + + //! Allow excluded models? + bool getAllowExcludedModels() const { return m_allowExcludeModels; } + + //! Allow excluded models? + void setAllowExcludedModels(bool allow) { m_allowExcludeModels = allow; } + + //! \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: + bool m_allowExcludeModels = false; //!< Allow excluded models in sets + + BLACK_METACLASS( + CModelSettings, + BLACK_METAMEMBER(allowExcludeModels) + ); + }; + + //! Trait for simulator settings + struct TModel : public BlackMisc::TSettingTrait + { + //! Key in data cache + static const char *key() { return "settingsmodels"; } + }; + + //! Mapping preferences for model distributor list + struct TDistributorListPreferences : public BlackMisc::TSettingTrait + { + //! \copydoc BlackMisc::TSettingTrait::key + static const char *key() { return "mapping/distributorpreferences"; } + }; + } // ns + } // ns +} // ns + +Q_DECLARE_METATYPE(BlackMisc::Simulation::Settings::CModelSettings) +Q_DECLARE_METATYPE(BlackMisc::CCollection) +Q_DECLARE_METATYPE(BlackMisc::CSequence) + +#endif // guard diff --git a/src/blackmisc/simulation/settings/simulatorsettings.cpp b/src/blackmisc/simulation/settings/simulatorsettings.cpp new file mode 100644 index 000000000..05e0097da --- /dev/null +++ b/src/blackmisc/simulation/settings/simulatorsettings.cpp @@ -0,0 +1,450 @@ +/* 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 "simulatorsettings.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 + { + CSimulatorSettings::CSimulatorSettings() + { } + + void CSimulatorSettings::setSimulatorDirectory(const QString &simulatorDirectory) + { + this->m_simulatorDirectory = simulatorDirectory.trimmed(); + } + + const QString &CSimulatorSettings::getSimulatorDirectory() const + { + return this->m_simulatorDirectory; + } + + void CSimulatorSettings::setModelDirectories(const QStringList &modelDirectories) + { + this->m_modelDirectories = modelDirectories; + } + + void CSimulatorSettings::setModelDirectory(const QString &modelDirectory) + { + this->m_modelDirectories = QStringList({ modelDirectory }); + } + + const QStringList &CSimulatorSettings::getModelDirectories() const + { + return this->m_modelDirectories; + } + + void CSimulatorSettings::setModelExcludeDirectories(const QStringList &excludeDirectories) + { + this->m_excludeDirectoryPatterns = excludeDirectories; + } + + const QStringList &CSimulatorSettings::getModelExcludeDirectoryPatterns() const + { + return m_excludeDirectoryPatterns; + } + + void CSimulatorSettings::resetPaths() + { + this->m_excludeDirectoryPatterns.clear(); + this->m_modelDirectories.clear(); + this->m_simulatorDirectory.clear(); + } + + QString CSimulatorSettings::convertToQString(bool i18n) const + { + return convertToQString(", ", i18n); + } + + QString CSimulatorSettings::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 CSimulatorSettings::propertyByIndex(const CPropertyIndex &index) const + { + if (index.isMyself()) { return CVariant::from(*this); } + const 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 CSimulatorSettings::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant) + { + if (index.isMyself()) { (*this) = variant.to(); return; } + const 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 + } + + CSimulatorSettings 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 CSimulatorSettings(); + } + + CStatusMessage CMultiSimulatorSettings::setSettings(const CSimulatorSettings &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 CSimulatorSettings &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 CSimulatorSettings 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 CSimulatorSettings 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 CSimulatorSettings 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) + { + CSimulatorSettings s = this->getSettings(simulator); + s.resetPaths(); + this->setAndSaveSettings(s, simulator); + } + + CSimulatorMessagesSettings::CSimulatorMessagesSettings() + { + // void + } + + void CSimulatorMessagesSettings::setTechnicalLogSeverity(CStatusMessage::StatusSeverity severity) + { + this->m_technicalLogLevel = static_cast(severity); + } + + void CSimulatorMessagesSettings::disableTechnicalMessages() + { + this->m_technicalLogLevel = -1; + } + + bool CSimulatorMessagesSettings::isRelayedErrorsMessages() const + { + if (this->m_technicalLogLevel < 0) { return false; } + return (this->m_technicalLogLevel <= CStatusMessage::SeverityError); + } + + bool CSimulatorMessagesSettings::isRelayedWarningMessages() const + { + if (this->m_technicalLogLevel < 0) { return false; } + return (this->m_technicalLogLevel <= CStatusMessage::SeverityWarning); + } + + bool CSimulatorMessagesSettings::isRelayedInfoMessages() const + { + if (this->m_technicalLogLevel < 0) { return false; } + return (this->m_technicalLogLevel <= CStatusMessage::SeverityInfo); + } + + bool CSimulatorMessagesSettings::isRelayedTechnicalMessages() const + { + return (this->m_technicalLogLevel >= 0); + } + + void CSimulatorMessagesSettings::setRelayedTextMessages(CSimulatorMessagesSettings::TextMessageType messageType) + { + this->m_messageType = static_cast(messageType); + } + + bool CSimulatorMessagesSettings::isRelayedSupervisorTextMessages() const + { + return this->getRelayedTextMessageTypes().testFlag(TextMessageSupervisor); + } + + bool CSimulatorMessagesSettings::isRelayedPrivateTextMessages() const + { + return this->getRelayedTextMessageTypes().testFlag(TextMessagePrivate); + } + + bool CSimulatorMessagesSettings::isRelayedUnicomTextMessages() const + { + return this->getRelayedTextMessageTypes().testFlag(TextMessagesUnicom); + } + + bool CSimulatorMessagesSettings::isRelayedCom1TextMessages() const + { + return this->getRelayedTextMessageTypes().testFlag(TextMessagesCom1); + } + + bool CSimulatorMessagesSettings::isRelayedCom2TextMessages() const + { + return this->getRelayedTextMessageTypes().testFlag(TextMessagesCom2); + } + + bool CSimulatorMessagesSettings::relayThisStatusMessage(const CStatusMessage &message) const + { + if (message.isEmpty()) { return false; } + if (!this->isGloballyEnabled()) { return false; } + if (!this->isRelayedTechnicalMessages()) { return false; } + int s = static_cast(message.getSeverity()); + return (s >= this->m_technicalLogLevel); + } + + bool CSimulatorMessagesSettings::relayThisTextMessage(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; + } + + CSimulatorMessagesSettings::TextMessageType CSimulatorMessagesSettings::getRelayedTextMessageTypes() const + { + return static_cast(this->m_messageType); + } + + QString CSimulatorMessagesSettings::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 CSimulatorMessagesSettings::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 CSimulatorMessagesSettings::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/simulatorsettings.h b/src/blackmisc/simulation/settings/simulatorsettings.h new file mode 100644 index 000000000..6714b28f1 --- /dev/null +++ b/src/blackmisc/simulation/settings/simulatorsettings.h @@ -0,0 +1,315 @@ +/* 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_SIMULATORSETTINGS_H +#define BLACKMISC_SIMULATION_SETTINGS_SIMULATORSETTINGS_H + +#include "blackmisc/simulation/simulatedaircraft.h" +#include "blackmisc/simulation/simulatorinfo.h" +#include "blackmisc/network/textmessage.h" +#include "blackmisc/weather/weatherscenario.h" +#include "blackmisc/settingscache.h" +#include "blackmisc/statusmessage.h" +#include "blackmisc/blackmiscexport.h" +#include "blackmisc/propertyindex.h" + +#include +#include + +namespace BlackMisc +{ + namespace Simulation + { + namespace Settings + { + //! Settings for simulator + //! Driver independent part also used in loaders (such as directories) + class BLACKMISC_EXPORT CSimulatorSettings : + public BlackMisc::CValueObject + { + public: + //! Properties by index + enum ColumnIndex + { + IndexSimulatorDirectory = BlackMisc::CPropertyIndex::GlobalIndexCSimulatorSettings, + IndexModelDirectory, + IndexModelExcludeDirectoryPatterns + }; + + //! Default constructor + CSimulatorSettings(); + + //! 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( + CSimulatorSettings, + 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 + CSimulatorSettings getSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; + + //! Set settings per simulator + BlackMisc::CStatusMessage setSettings(const BlackMisc::Simulation::Settings::CSimulatorSettings &settings, const BlackMisc::Simulation::CSimulatorInfo &simulator); + + //! Set settings per simulator + BlackMisc::CStatusMessage setAndSaveSettings(const BlackMisc::Simulation::Settings::CSimulatorSettings &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 CSimulatorMessagesSettings : + 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 + CSimulatorMessagesSettings(); + + //! 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::CSimulatorMessagesSettings::TextMessageType messageType); + + //! Relay supervisor messages + bool isRelayedSupervisorTextMessages() const; + + //! Relay private messages + bool isRelayedPrivateTextMessages() const; + + //! Relay UNICOM messages + bool isRelayedUnicomTextMessages() const; + + //! Relay COM1 text message + bool isRelayedCom1TextMessages() const; + + //! Relay COM2 text message + bool isRelayedCom2TextMessages() const; + + //! Relay given text message + bool relayThisTextMessage(const BlackMisc::Network::CTextMessage &msg, const BlackMisc::Simulation::CSimulatedAircraft &aircraft) const; + + //! Relay this particular message + bool relayThisStatusMessage(const BlackMisc::CStatusMessage &message) const; + + //! Relayed text messages + CSimulatorMessagesSettings::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( + CSimulatorMessagesSettings, + 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"; } + }; + + //! Selected weather scenario + struct TSelectedWeatherScenario : public BlackMisc::TSettingTrait + { + //! \copydoc BlackMisc::TSettingTrait::key + static const char *key() { return "simulator/selectedweatherscenario"; } + + //! \copydoc BlackMisc::TSettingTrait::defaultValue + static const BlackMisc::Weather::CWeatherScenario &defaultValue() + { + static const BlackMisc::Weather::CWeatherScenario scenario {}; + return scenario; + } + }; + } // ns + } // ns +} // ns + +Q_DECLARE_METATYPE(BlackMisc::Simulation::Settings::CSimulatorSettings) +Q_DECLARE_METATYPE(BlackMisc::CCollection) +Q_DECLARE_METATYPE(BlackMisc::CSequence) +Q_DECLARE_METATYPE(BlackMisc::Simulation::Settings::CSimulatorMessagesSettings) +Q_DECLARE_METATYPE(BlackMisc::CCollection) +Q_DECLARE_METATYPE(BlackMisc::CSequence) +Q_DECLARE_METATYPE(BlackMisc::Simulation::Settings::CSimulatorMessagesSettings::TextMessageTypeFlag) +Q_DECLARE_METATYPE(BlackMisc::Simulation::Settings::CSimulatorMessagesSettings::TextMessageType) +Q_DECLARE_OPERATORS_FOR_FLAGS(BlackMisc::Simulation::Settings::CSimulatorMessagesSettings::TextMessageType) + +#endif // guard diff --git a/src/blackmisc/simulation/simulation.h b/src/blackmisc/simulation/simulation.h index 090a0cd25..b2a5d17f1 100644 --- a/src/blackmisc/simulation/simulation.h +++ b/src/blackmisc/simulation/simulation.h @@ -22,17 +22,17 @@ #include "blackmisc/simulation/interpolationhints.h" #include "blackmisc/simulation/interpolationrenderingsetup.h" #include "blackmisc/simulation/matchingstatistics.h" -#include "blackmisc/simulation/modelsettings.h" #include "blackmisc/simulation/simulatedaircraft.h" #include "blackmisc/simulation/simulatedaircraftlist.h" #include "blackmisc/simulation/simulatorinfolist.h" #include "blackmisc/simulation/simulatorinternals.h" #include "blackmisc/simulation/simulatorplugininfo.h" #include "blackmisc/simulation/simulatorplugininfolist.h" -#include "blackmisc/simulation/simulatorsettings.h" #include "blackmisc/simulation/fscommon/aircraftcfgentrieslist.h" #include "blackmisc/simulation/fscommon/vpilotmodelruleset.h" #include "blackmisc/simulation/fsx/simconnectutilities.h" +#include "blackmisc/simulation/settings/modelsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/simulation/settings/swiftpluginsettings.h" #endif // guard diff --git a/src/blackmisc/simulation/simulatorsettings.cpp b/src/blackmisc/simulation/simulatorsettings.cpp deleted file mode 100644 index 420287f42..000000000 --- a/src/blackmisc/simulation/simulatorsettings.cpp +++ /dev/null @@ -1,447 +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 "simulatorsettings.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 - { - CSimulatorSettings::CSimulatorSettings() - { } - - void CSimulatorSettings::setSimulatorDirectory(const QString &simulatorDirectory) - { - this->m_simulatorDirectory = simulatorDirectory.trimmed(); - } - - const QString &CSimulatorSettings::getSimulatorDirectory() const - { - return this->m_simulatorDirectory; - } - - void CSimulatorSettings::setModelDirectories(const QStringList &modelDirectories) - { - this->m_modelDirectories = modelDirectories; - } - - void CSimulatorSettings::setModelDirectory(const QString &modelDirectory) - { - this->m_modelDirectories = QStringList({ modelDirectory }); - } - - const QStringList &CSimulatorSettings::getModelDirectories() const - { - return this->m_modelDirectories; - } - - void CSimulatorSettings::setModelExcludeDirectories(const QStringList &excludeDirectories) - { - this->m_excludeDirectoryPatterns = excludeDirectories; - } - - const QStringList &CSimulatorSettings::getModelExcludeDirectoryPatterns() const - { - return m_excludeDirectoryPatterns; - } - - void CSimulatorSettings::resetPaths() - { - this->m_excludeDirectoryPatterns.clear(); - this->m_modelDirectories.clear(); - this->m_simulatorDirectory.clear(); - } - - QString CSimulatorSettings::convertToQString(bool i18n) const - { - return convertToQString(", ", i18n); - } - - QString CSimulatorSettings::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 CSimulatorSettings::propertyByIndex(const CPropertyIndex &index) const - { - if (index.isMyself()) { return CVariant::from(*this); } - const 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 CSimulatorSettings::setPropertyByIndex(const CPropertyIndex &index, const CVariant &variant) - { - if (index.isMyself()) { (*this) = variant.to(); return; } - const 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 - } - - CSimulatorSettings 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 CSimulatorSettings(); - } - - CStatusMessage CMultiSimulatorSettings::setSettings(const CSimulatorSettings &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 CSimulatorSettings &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 CSimulatorSettings 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 CSimulatorSettings 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 CSimulatorSettings 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) - { - CSimulatorSettings s = this->getSettings(simulator); - s.resetPaths(); - this->setAndSaveSettings(s, simulator); - } - - CSimulatorMessagesSettings::CSimulatorMessagesSettings() - { - // void - } - - void CSimulatorMessagesSettings::setTechnicalLogSeverity(CStatusMessage::StatusSeverity severity) - { - this->m_technicalLogLevel = static_cast(severity); - } - - void CSimulatorMessagesSettings::disableTechnicalMessages() - { - this->m_technicalLogLevel = -1; - } - - bool CSimulatorMessagesSettings::isRelayedErrorsMessages() const - { - if (this->m_technicalLogLevel < 0) { return false; } - return (this->m_technicalLogLevel <= CStatusMessage::SeverityError); - } - - bool CSimulatorMessagesSettings::isRelayedWarningMessages() const - { - if (this->m_technicalLogLevel < 0) { return false; } - return (this->m_technicalLogLevel <= CStatusMessage::SeverityWarning); - } - - bool CSimulatorMessagesSettings::isRelayedInfoMessages() const - { - if (this->m_technicalLogLevel < 0) { return false; } - return (this->m_technicalLogLevel <= CStatusMessage::SeverityInfo); - } - - bool CSimulatorMessagesSettings::isRelayedTechnicalMessages() const - { - return (this->m_technicalLogLevel >= 0); - } - - void CSimulatorMessagesSettings::setRelayedTextMessages(CSimulatorMessagesSettings::TextMessageType messageType) - { - this->m_messageType = static_cast(messageType); - } - - bool CSimulatorMessagesSettings::isRelayedSupervisorTextMessages() const - { - return this->getRelayedTextMessageTypes().testFlag(TextMessageSupervisor); - } - - bool CSimulatorMessagesSettings::isRelayedPrivateTextMessages() const - { - return this->getRelayedTextMessageTypes().testFlag(TextMessagePrivate); - } - - bool CSimulatorMessagesSettings::isRelayedUnicomTextMessages() const - { - return this->getRelayedTextMessageTypes().testFlag(TextMessagesUnicom); - } - - bool CSimulatorMessagesSettings::isRelayedCom1TextMessages() const - { - return this->getRelayedTextMessageTypes().testFlag(TextMessagesCom1); - } - - bool CSimulatorMessagesSettings::isRelayedCom2TextMessages() const - { - return this->getRelayedTextMessageTypes().testFlag(TextMessagesCom2); - } - - bool CSimulatorMessagesSettings::relayThisStatusMessage(const CStatusMessage &message) const - { - if (message.isEmpty()) { return false; } - if (!this->isGloballyEnabled()) { return false; } - if (!this->isRelayedTechnicalMessages()) { return false; } - int s = static_cast(message.getSeverity()); - return (s >= this->m_technicalLogLevel); - } - - bool CSimulatorMessagesSettings::relayThisTextMessage(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; - } - - CSimulatorMessagesSettings::TextMessageType CSimulatorMessagesSettings::getRelayedTextMessageTypes() const - { - return static_cast(this->m_messageType); - } - - QString CSimulatorMessagesSettings::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 CSimulatorMessagesSettings::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 CSimulatorMessagesSettings::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/simulatorsettings.h b/src/blackmisc/simulation/simulatorsettings.h deleted file mode 100644 index 16a7d3054..000000000 --- a/src/blackmisc/simulation/simulatorsettings.h +++ /dev/null @@ -1,313 +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_SIMULATORSETTINGS_H -#define BLACKMISC_SIMULATION_SIMULATORSETTINGS_H - -#include "blackmisc/simulation/simulatorinfo.h" -#include "blackmisc/network/textmessage.h" -#include "blackmisc/weather/weatherscenario.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 CSimulatorSettings : - public BlackMisc::CValueObject - { - public: - //! Properties by index - enum ColumnIndex - { - IndexSimulatorDirectory = BlackMisc::CPropertyIndex::GlobalIndexCSimulatorSettings, - IndexModelDirectory, - IndexModelExcludeDirectoryPatterns - }; - - //! Default constructor - CSimulatorSettings(); - - //! 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( - CSimulatorSettings, - 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 - CSimulatorSettings getSettings(const BlackMisc::Simulation::CSimulatorInfo &simulator) const; - - //! Set settings per simulator - BlackMisc::CStatusMessage setSettings(const BlackMisc::Simulation::CSimulatorSettings &settings, const BlackMisc::Simulation::CSimulatorInfo &simulator); - - //! Set settings per simulator - BlackMisc::CStatusMessage setAndSaveSettings(const BlackMisc::Simulation::CSimulatorSettings &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 CSimulatorMessagesSettings : - 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 - CSimulatorMessagesSettings(); - - //! 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::CSimulatorMessagesSettings::TextMessageType messageType); - - //! Relay supervisor messages - bool isRelayedSupervisorTextMessages() const; - - //! Relay private messages - bool isRelayedPrivateTextMessages() const; - - //! Relay UNICOM messages - bool isRelayedUnicomTextMessages() const; - - //! Relay COM1 text message - bool isRelayedCom1TextMessages() const; - - //! Relay COM2 text message - bool isRelayedCom2TextMessages() const; - - //! Relay given text message - bool relayThisTextMessage(const BlackMisc::Network::CTextMessage &msg, const BlackMisc::Simulation::CSimulatedAircraft &aircraft) const; - - //! Relay this particular message - bool relayThisStatusMessage(const BlackMisc::CStatusMessage &message) const; - - //! Relayed text messages - CSimulatorMessagesSettings::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( - CSimulatorMessagesSettings, - 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"; } - }; - - //! Selected weather scenario - struct TSelectedWeatherScenario : public BlackMisc::TSettingTrait - { - //! \copydoc BlackMisc::TSettingTrait::key - static const char *key() { return "simulator/selectedweatherscenario"; } - - //! \copydoc BlackMisc::TSettingTrait::defaultValue - static const BlackMisc::Weather::CWeatherScenario &defaultValue() - { - static const BlackMisc::Weather::CWeatherScenario scenario {}; - return scenario; - } - }; - } // ns -} // ns - -Q_DECLARE_METATYPE(BlackMisc::Simulation::CSimulatorSettings) -Q_DECLARE_METATYPE(BlackMisc::CCollection) -Q_DECLARE_METATYPE(BlackMisc::CSequence) -Q_DECLARE_METATYPE(BlackMisc::Simulation::CSimulatorMessagesSettings) -Q_DECLARE_METATYPE(BlackMisc::CCollection) -Q_DECLARE_METATYPE(BlackMisc::CSequence) -Q_DECLARE_METATYPE(BlackMisc::Simulation::CSimulatorMessagesSettings::TextMessageTypeFlag) -Q_DECLARE_METATYPE(BlackMisc::Simulation::CSimulatorMessagesSettings::TextMessageType) -Q_DECLARE_OPERATORS_FOR_FLAGS(BlackMisc::Simulation::CSimulatorMessagesSettings::TextMessageType) - -#endif // guard diff --git a/src/plugins/simulator/fs9/simulatorfs9.h b/src/plugins/simulator/fs9/simulatorfs9.h index 5d4244d02..7cda4edd5 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.h +++ b/src/plugins/simulator/fs9/simulatorfs9.h @@ -16,7 +16,7 @@ #include "fs9client.h" #include "lobbyclient.h" #include "../fscommon/simulatorfscommon.h" -#include "blackmisc/simulation/simulatorsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackcore/simulator.h" #include "blackmisc/simulation/interpolator.h" #include "blackmisc/simulation/simulatedaircraft.h" diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h index eb5831eba..4a99dc0f3 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h @@ -18,7 +18,7 @@ #include "blackcore/simulator.h" #include "blackmisc/simulation/interpolatorlinear.h" #include "blackmisc/simulation/simulatorplugininfo.h" -#include "blackmisc/simulation/simulatorsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/simulation/aircraftmodel.h" #include "blackmisc/simulation/simulatedaircraft.h" #include "blackmisc/aviation/airportlist.h" diff --git a/src/plugins/simulator/xplane/simulatorxplane.h b/src/plugins/simulator/xplane/simulatorxplane.h index ad86c7c0e..73d3404ad 100644 --- a/src/plugins/simulator/xplane/simulatorxplane.h +++ b/src/plugins/simulator/xplane/simulatorxplane.h @@ -22,7 +22,7 @@ #include "blackmisc/pq/units.h" #include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/data/modelcaches.h" -#include "blackmisc/simulation/simulatorsettings.h" +#include "blackmisc/simulation/settings/simulatorsettings.h" #include "blackmisc/weather/weathergrid.h" #include "blackmisc/settingscache.h" #include "blackmisc/statusmessage.h"