X-Git-Url: http://git.code-monkey.de/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdialogs%2Fsettings.cpp;h=2bbab122ffb3731159f2385f8c6457150ee0d1a2;hp=ad4fd4a5f6c31519175e3877457179bd8c9340d9;hb=829b23f65ebc0dd81e6ee94f7ea72a691dff1907;hpb=4521022bf4ea07aff38bfa09fe0f7d5702b26475 diff --git a/pv/dialogs/settings.cpp b/pv/dialogs/settings.cpp index ad4fd4a..2bbab12 100644 --- a/pv/dialogs/settings.cpp +++ b/pv/dialogs/settings.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -54,7 +55,6 @@ #include #endif -using std::shared_ptr; using pv::widgets::ColorButton; namespace pv { @@ -126,6 +126,15 @@ Settings::Settings(DeviceManager &device_manager, QWidget *parent) : void Settings::create_pages() { + // General page + pages->addWidget(get_general_settings_form(pages)); + + QListWidgetItem *generalButton = new QListWidgetItem(page_list); + generalButton->setIcon(QIcon(":/icons/settings-general.png")); + generalButton->setText(tr("General")); + generalButton->setTextAlignment(Qt::AlignVCenter); + generalButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + // View page pages->addWidget(get_view_settings_form(pages)); @@ -192,6 +201,57 @@ QPlainTextEdit *Settings::create_log_view() const return log_view; } +QWidget *Settings::get_general_settings_form(QWidget *parent) const +{ + GlobalSettings settings; + + QWidget *form = new QWidget(parent); + QVBoxLayout *form_layout = new QVBoxLayout(form); + + // General settings + QGroupBox *general_group = new QGroupBox(tr("General")); + form_layout->addWidget(general_group); + + QFormLayout *general_layout = new QFormLayout(); + general_group->setLayout(general_layout); + + QComboBox *theme_cb = new QComboBox(); + for (const pair& entry : Themes) + theme_cb->addItem(entry.first, entry.second); + + theme_cb->setCurrentIndex( + settings.value(GlobalSettings::Key_General_Theme).toInt()); + connect(theme_cb, SIGNAL(currentIndexChanged(int)), + this, SLOT(on_general_theme_changed_changed(int))); + general_layout->addRow(tr("User interface theme"), theme_cb); + + QLabel *description_1 = new QLabel(tr("(You may need to restart PulseView for all UI elements to update)")); + 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; +} + QWidget *Settings::get_view_settings_form(QWidget *parent) const { GlobalSettings settings; @@ -240,7 +300,7 @@ QWidget *Settings::get_view_settings_form(QWidget *parent) const settings.value(GlobalSettings::Key_View_FillSignalHighAreaColor).value())); connect(high_fill_cb, SIGNAL(selected(QColor)), this, SLOT(on_view_fillSignalHighAreaColor_changed(QColor))); - trace_view_layout->addRow(tr("Fill high areas of logic signals"), high_fill_cb); + trace_view_layout->addRow(tr("Color to fill high areas of logic signals with"), high_fill_cb); cb = create_checkbox(GlobalSettings::Key_View_ShowAnalogMinorGrid, SLOT(on_view_showAnalogMinorGrid_changed(int))); @@ -259,6 +319,13 @@ QWidget *Settings::get_view_settings_form(QWidget *parent) const SLOT(on_view_snapDistance_changed(int))); trace_view_layout->addRow(tr("Maximum distance from edges before cursors snap to them"), snap_distance_sb); + ColorButton* cursor_fill_cb = new ColorButton(parent); + cursor_fill_cb->set_color(QColor::fromRgba( + settings.value(GlobalSettings::Key_View_CursorFillColor).value())); + connect(cursor_fill_cb, SIGNAL(selected(QColor)), + this, SLOT(on_view_cursorFillColor_changed(QColor))); + trace_view_layout->addRow(tr("Color to fill cursor area with"), cursor_fill_cb); + QComboBox *thr_disp_mode_cb = new QComboBox(); thr_disp_mode_cb->addItem(tr("None"), GlobalSettings::ConvThrDispMode_None); thr_disp_mode_cb->addItem(tr("Background"), GlobalSettings::ConvThrDispMode_Background); @@ -507,6 +574,44 @@ void Settings::on_page_changed(QListWidgetItem *current, QListWidgetItem *previo pages->setCurrentIndex(page_list->row(current)); } +void Settings::on_general_theme_changed_changed(int state) +{ + GlobalSettings settings; + settings.setValue(GlobalSettings::Key_General_Theme, state); + settings.apply_theme(); + + QMessageBox msg(this); + msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msg.setIcon(QMessageBox::Question); + + if (settings.current_theme_is_dark()) { + msg.setText(tr("You selected a dark theme.\n" \ + "Should I set the user-adjustable colors to better suit your choice?\n\n" \ + "Please keep in mind that PulseView may need a restart to display correctly.")); + if (msg.exec() == QMessageBox::Yes) + settings.set_dark_theme_default_colors(); + } else { + msg.setText(tr("You selected a bright theme.\n" \ + "Should I set the user-adjustable colors to better suit your choice?\n\n" \ + "Please keep in mind that PulseView may need a restart to display correctly.")); + if (msg.exec() == QMessageBox::Yes) + settings.set_bright_theme_default_colors(); + } +} + +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; @@ -573,6 +678,12 @@ void Settings::on_view_snapDistance_changed(int value) settings.setValue(GlobalSettings::Key_View_SnapDistance, value); } +void Settings::on_view_cursorFillColor_changed(QColor color) +{ + GlobalSettings settings; + settings.setValue(GlobalSettings::Key_View_CursorFillColor, color.rgba()); +} + void Settings::on_view_conversionThresholdDispMode_changed(int state) { GlobalSettings settings;