From 752295fa63f75b53d5cf3d00a02fb8b21f8998c4 Mon Sep 17 00:00:00 2001 From: Vasily Date: Mon, 9 Dec 2019 17:54:50 +0100 Subject: [PATCH] Make currently used settings be printed out at application start Due to the SettingsController being a static object it will be initialized before the main method has been run. This will cause easylogging to log using the default logging style instead of the defined application style. Because of this the settings are propogated up through a function into the main method. --- src/main.cpp | 7 ++- src/settings/internal/settings_controller.h | 48 ++++++++++++++++++++- src/settings/settings.cpp | 5 +++ src/settings/settings.h | 2 + 4 files changed, 58 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 4ac6407..34033a1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,6 +7,11 @@ int main( int argc, char* argv[] ) { setUpLogging(); + LOG( INFO ) << "Settings File: " + << settings::initializeAndGetSettingsPath(); + + LOG( INFO ) << settings::getSettingsAndValues(); + MyQApplication mainEventLoop( argc, argv ); mainEventLoop.setOrganizationName( application_strings::applicationOrganizationName ); @@ -40,8 +45,6 @@ int main( int argc, char* argv[] ) mainEventLoop.organizationName(), mainEventLoop.applicationName() ); advsettings::OverlayController::setAppSettings( &appSettings ); - LOG( INFO ) << "Settings File: " - << settings::initializeAndGetSettingsPath(); QQmlEngine qmlEngine; diff --git a/src/settings/internal/settings_controller.h b/src/settings/internal/settings_controller.h index 55a2b25..14d5d89 100644 --- a/src/settings/internal/settings_controller.h +++ b/src/settings/internal/settings_controller.h @@ -10,6 +10,38 @@ namespace settings { +template std::string valueToString( Value value ) +{ + using std::is_same; + if constexpr ( is_same::value ) + { + return value ? "true" : "false"; + } + else if constexpr ( is_same::value + || is_same::value ) + { + return std::to_string( value ); + } + if constexpr ( is_same::value ) + { + return value; + } +} + +template +[[nodiscard]] std::string + returnSettingsAndValues( std::array v ) +{ + std::string s = "default"; + + for ( const auto& setting : v ) + { + s += setting.qtInfo().settingName + ": '" + + valueToString( setting.value() ) + "' | "; + } + + return s; +} template void verifySettings( std::array v ) noexcept { @@ -40,8 +72,6 @@ void verifySettings( std::array v ) noexcept exit( ReturnErrorCode::SETTING_INCORRECT_INDEX ); } } - - LOG( DEBUG ) << "Settings for '" << typeid( Enum ).name() << "' verified."; } class SettingsController @@ -58,6 +88,20 @@ public: verifySettings( m_intSettings ); } + std::string getSettingsAndValues() const noexcept + { + std::string s; + s += returnSettingsAndValues( m_boolSettings ); + + s += returnSettingsAndValues( m_doubleSettings ); + + s += returnSettingsAndValues( m_stringSettings ); + + s += returnSettingsAndValues( m_intSettings ); + + return s; + } + std::string getSettingsFileName() const noexcept { return getQSettings().fileName().toStdString(); diff --git a/src/settings/settings.cpp b/src/settings/settings.cpp index dd32d50..61ec2a9 100644 --- a/src/settings/settings.cpp +++ b/src/settings/settings.cpp @@ -68,4 +68,9 @@ std::string initializeAndGetSettingsPath() return settingController.getSettingsFileName(); } +std::string getSettingsAndValues() +{ + return settingController.getSettingsAndValues(); +} + } // namespace settings diff --git a/src/settings/settings.h b/src/settings/settings.h index 993d2ea..26dc546 100644 --- a/src/settings/settings.h +++ b/src/settings/settings.h @@ -102,6 +102,8 @@ enum class IntSetting std::string initializeAndGetSettingsPath(); +std::string getSettingsAndValues(); + void saveChangedSettings(); void saveAllSettings();