Settings: Allow user to choose the Qt UI style
[pulseview.git] / pv / dialogs / settings.cpp
index 0795879675054403477a3744ebec6079c7a34246..b79772ff0dc078e99916cc678aef7a849043184d 100644 (file)
@@ -35,6 +35,7 @@
 #include <QScrollBar>
 #include <QSpinBox>
 #include <QString>
+#include <QStyleFactory>
 #include <QTextBrowser>
 #include <QTextDocument>
 #include <QTextStream>
@@ -54,7 +55,6 @@
 #include <libsigrokdecode/libsigrokdecode.h>
 #endif
 
-using std::shared_ptr;
 using pv::widgets::ColorButton;
 
 namespace pv {
@@ -216,7 +216,7 @@ QWidget *Settings::get_general_settings_form(QWidget *parent) const
        general_group->setLayout(general_layout);
 
        QComboBox *theme_cb = new QComboBox();
-       for (pair<QString, QString> entry : Themes)
+       for (const pair<QString, QString>& entry : Themes)
                theme_cb->addItem(entry.first, entry.second);
 
        theme_cb->setCurrentIndex(
@@ -229,6 +229,26 @@ QWidget *Settings::get_general_settings_form(QWidget *parent) const
        description_1->setAlignment(Qt::AlignRight);
        general_layout->addRow(description_1);
 
+       QComboBox *style_cb = new QComboBox();
+       style_cb->addItem(tr("System Default"), "");
+       for (QString& s : QStyleFactory::keys())
+               style_cb->addItem(s, s);
+
+       const QString current_style =
+               settings.value(GlobalSettings::Key_General_Style).toString();
+       if (current_style.isEmpty())
+               style_cb->setCurrentIndex(0);
+       else
+               style_cb->setCurrentIndex(style_cb->findText(current_style, 0));
+
+       connect(style_cb, SIGNAL(currentIndexChanged(int)),
+               this, SLOT(on_general_style_changed(int)));
+       general_layout->addRow(tr("Qt widget style"), style_cb);
+
+       QLabel *description_2 = new QLabel(tr("(Dark themes look best with the Fusion style)"));
+       description_2->setAlignment(Qt::AlignRight);
+       general_layout->addRow(description_2);
+
        return form;
 }
 
@@ -554,6 +574,19 @@ void Settings::on_general_theme_changed_changed(int state)
        settings.apply_theme();
 }
 
+void Settings::on_general_style_changed(int state)
+{
+       GlobalSettings settings;
+
+       if (state == 0)
+               settings.setValue(GlobalSettings::Key_General_Style, "");
+       else
+               settings.setValue(GlobalSettings::Key_General_Style,
+                       QStyleFactory::keys().at(state - 1));
+
+       settings.apply_theme();
+}
+
 void Settings::on_view_zoomToFitDuringAcq_changed(int state)
 {
        GlobalSettings settings;