diff --git a/src/blackcore/application.h b/src/blackcore/application.h index 1c3cc032f..7f8f7e061 100644 --- a/src/blackcore/application.h +++ b/src/blackcore/application.h @@ -457,7 +457,7 @@ namespace BlackCore #ifdef BLACK_USE_CRASHPAD std::unique_ptr m_crashpadClient; std::unique_ptr m_crashReportDatabase; - BlackMisc::CSetting m_crashDumpUploadEnabled { this, &CApplication::crashDumpUploadEnabledChanged }; + BlackMisc::CSettingReadOnly m_crashDumpUploadEnabled { this, &CApplication::crashDumpUploadEnabledChanged }; #endif }; } // namespace diff --git a/src/blackgui/components/settingscomponent.cpp b/src/blackgui/components/settingscomponent.cpp index 67cb3818f..4c2e8d57b 100644 --- a/src/blackgui/components/settingscomponent.cpp +++ b/src/blackgui/components/settingscomponent.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -43,6 +44,9 @@ namespace BlackGui ui(new Ui::CSettingsComponent) { ui->setupUi(this); + ui->cb_SettingsGuiWidgetStyle->clear(); + ui->cb_SettingsGuiWidgetStyle->insertItems(0, QStyleFactory::keys()); + this->tabBar()->setExpanding(false); this->tabBar()->setUsesScrollButtons(true); @@ -66,7 +70,11 @@ namespace BlackGui connected = this->connect(this->ui->cb_SettingsGuiFontStyle, SIGNAL(currentIndexChanged(QString)), this, SLOT(ps_fontChanged())); Q_ASSERT(connected); this->connect(this->ui->tb_SettingsGuiFontColor, &QToolButton::clicked, this, &CSettingsComponent::ps_fontColorDialog); + this->connect(this->ui->cb_SettingsGuiWidgetStyle, static_cast(&QComboBox::currentIndexChanged), + this, &CSettingsComponent::widgetStyleChanged); Q_UNUSED(connected); + + reloadWidgetStyleFromSettings(); } CSettingsComponent::~CSettingsComponent() @@ -132,5 +140,21 @@ namespace BlackGui this->ui->le_SettingsGuiFontColor->setText(this->m_fontColor.name()); this->ps_fontChanged(); } + + void CSettingsComponent::reloadWidgetStyleFromSettings() + { + int index = ui->cb_SettingsGuiWidgetStyle->findText(m_settingsWidgetStyle.get()); + ui->cb_SettingsGuiWidgetStyle->setCurrentIndex(index); + } + + void CSettingsComponent::widgetStyleChanged(const QString &widgetStyle) + { + if (widgetStyle == m_settingsWidgetStyle.get()) { return; } + auto availableStyles = QStyleFactory::keys(); + if (availableStyles.contains(widgetStyle)) + { + m_settingsWidgetStyle.set(widgetStyle); + } + } } } // namespace diff --git a/src/blackgui/components/settingscomponent.h b/src/blackgui/components/settingscomponent.h index cfea06eaa..09eecb5b8 100644 --- a/src/blackgui/components/settingscomponent.h +++ b/src/blackgui/components/settingscomponent.h @@ -13,6 +13,7 @@ #define BLACKGUI_COMPONENTS_SETTINGSCOMPONENT_H #include "blackgui/blackguiexport.h" +#include "blackgui/settings/guisettings.h" #include #include @@ -92,8 +93,12 @@ namespace BlackGui void ps_fontColorDialog(); private: + void reloadWidgetStyleFromSettings(); + void widgetStyleChanged(const QString &widgetStyle); + QScopedPointer ui; QColor m_fontColor; + BlackMisc::CSetting m_settingsWidgetStyle { this, &CSettingsComponent::reloadWidgetStyleFromSettings }; }; } } // namespace diff --git a/src/blackgui/components/settingscomponent.ui b/src/blackgui/components/settingscomponent.ui index 5c8d9d0c7..9b43c359c 100644 --- a/src/blackgui/components/settingscomponent.ui +++ b/src/blackgui/components/settingscomponent.ui @@ -290,14 +290,14 @@ General - + Opacity (0-100%) - + @@ -319,6 +319,16 @@ + + + + + + + Widget Style + + + diff --git a/src/blackgui/guiapplication.cpp b/src/blackgui/guiapplication.cpp index c6aff7c0a..29578c59e 100644 --- a/src/blackgui/guiapplication.cpp +++ b/src/blackgui/guiapplication.cpp @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include #include @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -76,6 +77,7 @@ namespace BlackGui this->setWindowIcon(icon); sGui = this; connect(&this->m_styleSheetUtility, &CStyleSheetUtility::styleSheetsChanged, this, &CGuiApplication::styleSheetsChanged); + reloadWidgetStyleFromSettings(); } } @@ -542,4 +544,14 @@ namespace BlackGui { return true; } + + void CGuiApplication::reloadWidgetStyleFromSettings() + { + auto widgetStyle = m_settingsWidgetStyle.get(); + auto availableStyles = QStyleFactory::keys(); + if (availableStyles.contains(widgetStyle)) + { + QApplication::setStyle(QStyleFactory::create(widgetStyle)); + } + } } // ns diff --git a/src/blackgui/guiapplication.h b/src/blackgui/guiapplication.h index a733eb811..b8458f0f7 100644 --- a/src/blackgui/guiapplication.h +++ b/src/blackgui/guiapplication.h @@ -16,6 +16,7 @@ #include "blackgui/blackguiexport.h" #include "blackgui/enableforframelesswindow.h" #include "blackgui/mainwindowaccess.h" +#include "blackgui/settings/guisettings.h" #include "blackgui/stylesheetutility.h" #include "blackmisc/icons.h" #include "blackmisc/statusmessage.h" @@ -193,8 +194,13 @@ namespace BlackGui QScopedPointer m_splashScreen; //!< splash screen BlackGui::Components::CApplicationCloseDialog *m_closeDialog = nullptr; //!< close dialog (no QScopedPointer because I need to set parent) + BlackMisc::CSettingReadOnly m_settingsWidgetStyle{ this, &CGuiApplication::reloadWidgetStyleFromSettings }; + //! Qt help message to formatted HTML static QString beautifyHelpMessage(const QString &helpText); + + //! Reload widget style from settings + void reloadWidgetStyleFromSettings(); }; } // ns diff --git a/src/blackgui/settings/guisettings.h b/src/blackgui/settings/guisettings.h index ab27a500a..0168d251a 100644 --- a/src/blackgui/settings/guisettings.h +++ b/src/blackgui/settings/guisettings.h @@ -16,6 +16,8 @@ #include "blackmisc/settingscache.h" #include "blackmisc/simulation/aircraftmodel.h" +#include + namespace BlackGui { namespace Settings @@ -26,6 +28,17 @@ namespace BlackGui //! Key in data cache static const char *key() { return "guinownaircraftmodel"; } }; + + //! Widget Style + struct TWidgetStyle : public BlackMisc::TSettingTrait + { + //! \copydoc BlackCore::TSettingTrait::key + static const char *key() { return "application/widgetstyle"; } + + //! \copydoc BlackCore::TSettingTrait::defaultValue + static QString defaultValue() { return QStringLiteral("Fusion"); } + }; + } // ns } // ns