diff --git a/scwx-qt/source/scwx/qt/main/main.cpp b/scwx-qt/source/scwx/qt/main/main.cpp index 566e9772..d93133a3 100644 --- a/scwx-qt/source/scwx/qt/main/main.cpp +++ b/scwx-qt/source/scwx/qt/main/main.cpp @@ -25,11 +25,13 @@ #include #include #include +#include #include static const std::string logPrefix_ = "scwx::main"; static const auto logger_ = scwx::util::Logger::Create(logPrefix_); +static void ConfigureTheme(const std::vector& args); static void OverrideDefaultStyle(const std::vector& args); int main(int argc, char* argv[]) @@ -103,18 +105,7 @@ int main(int argc, char* argv[]) scwx::qt::manager::ResourceManager::Initialize(); // Theme - auto uiStyle = scwx::qt::types::GetUiStyle( - scwx::qt::settings::GeneralSettings::Instance().theme().GetValue()); - - if (uiStyle == scwx::qt::types::UiStyle::Default) - { - OverrideDefaultStyle(args); - } - else - { - QApplication::setStyle( - QString::fromStdString(scwx::qt::types::GetUiStyleName(uiStyle))); - } + ConfigureTheme(args); // Run initial setup if required if (scwx::qt::ui::setup::SetupWizard::IsSetupRequired()) @@ -152,6 +143,27 @@ int main(int argc, char* argv[]) return result; } +static void ConfigureTheme(const std::vector& args) +{ + auto& generalSettings = scwx::qt::settings::GeneralSettings::Instance(); + + auto uiStyle = + scwx::qt::types::GetUiStyle(generalSettings.theme().GetValue()); + auto qtColorScheme = scwx::qt::types::GetQtColorScheme(uiStyle); + + if (uiStyle == scwx::qt::types::UiStyle::Default) + { + OverrideDefaultStyle(args); + } + else + { + QApplication::setStyle( + QString::fromStdString(scwx::qt::types::GetQtStyleName(uiStyle))); + } + + QGuiApplication::styleHints()->setColorScheme(qtColorScheme); +} + static void OverrideDefaultStyle([[maybe_unused]] const std::vector& args) { diff --git a/scwx-qt/source/scwx/qt/types/qt_types.cpp b/scwx-qt/source/scwx/qt/types/qt_types.cpp index 37717646..da2ef622 100644 --- a/scwx-qt/source/scwx/qt/types/qt_types.cpp +++ b/scwx-qt/source/scwx/qt/types/qt_types.cpp @@ -1,4 +1,5 @@ #include +#include #include @@ -9,27 +10,37 @@ namespace qt namespace types { +static const std::unordered_map qtStyleName_ { + {UiStyle::Default, "Default"}, + {UiStyle::Fusion, "Fusion"}, + {UiStyle::FusionLight, "Fusion"}, + {UiStyle::FusionDark, "Fusion"}, + {UiStyle::Unknown, "?"}}; + static const std::unordered_map uiStyleName_ { {UiStyle::Default, "Default"}, {UiStyle::Fusion, "Fusion"}, + {UiStyle::FusionLight, "Fusion Light"}, + {UiStyle::FusionDark, "Fusion Dark"}, {UiStyle::Unknown, "?"}}; -UiStyle GetUiStyle(const std::string& name) -{ - auto result = - std::find_if(uiStyleName_.cbegin(), - uiStyleName_.cend(), - [&](const std::pair& pair) -> bool - { return boost::iequals(pair.second, name); }); +static const std::unordered_map qtColorSchemeMap_ { + {UiStyle::Default, Qt::ColorScheme::Unknown}, + {UiStyle::Fusion, Qt::ColorScheme::Unknown}, + {UiStyle::FusionLight, Qt::ColorScheme::Light}, + {UiStyle::FusionDark, Qt::ColorScheme::Dark}, + {UiStyle::Unknown, Qt::ColorScheme::Unknown}}; - if (result != uiStyleName_.cend()) - { - return result->first; - } - else - { - return UiStyle::Unknown; - } +SCWX_GET_ENUM(UiStyle, GetUiStyle, uiStyleName_) + +Qt::ColorScheme GetQtColorScheme(UiStyle uiStyle) +{ + return qtColorSchemeMap_.at(uiStyle); +} + +std::string GetQtStyleName(UiStyle uiStyle) +{ + return qtStyleName_.at(uiStyle); } std::string GetUiStyleName(UiStyle uiStyle) diff --git a/scwx-qt/source/scwx/qt/types/qt_types.hpp b/scwx-qt/source/scwx/qt/types/qt_types.hpp index 26a41c25..817d5ca1 100644 --- a/scwx-qt/source/scwx/qt/types/qt_types.hpp +++ b/scwx-qt/source/scwx/qt/types/qt_types.hpp @@ -20,17 +20,22 @@ enum ItemDataRole RawDataRole }; -enum UiStyle +enum class UiStyle { Default, Fusion, + FusionLight, + FusionDark, Unknown }; -typedef scwx::util::Iterator +typedef scwx::util::Iterator UiStyleIterator; +Qt::ColorScheme GetQtColorScheme(UiStyle uiStyle); +std::string GetQtStyleName(UiStyle uiStyle); + UiStyle GetUiStyle(const std::string& name); -std::string GetUiStyleName(UiStyle alertAction); +std::string GetUiStyleName(UiStyle uiStyle); } // namespace types } // namespace qt