X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fglobalsettings.cpp;h=3f3711b8ec63a8397892f26eafc1db845e8dfab1;hp=df44162fe3372de01f626e731b928c086eebaae3;hb=b571a8e7e0dc3e3b6daa58f27050e76466f006dd;hpb=fb64180193664005567570724d52b685913e15ed diff --git a/pv/globalsettings.cpp b/pv/globalsettings.cpp index df44162f..3f3711b8 100644 --- a/pv/globalsettings.cpp +++ b/pv/globalsettings.cpp @@ -20,22 +20,35 @@ #include "globalsettings.hpp" #include +#include #include +#include #include +#include #include using std::map; +using std::pair; using std::string; using std::vector; namespace pv { +const vector< pair > Themes { + {"None" , ""}, + {"QDarkStyleSheet", ":/themes/qdarkstyle/style.qss"}, + {"DarkStyle", ":/themes/darkstyle/darkstyle.qss"} +}; + +const QString GlobalSettings::Key_General_Theme = "General_Theme"; const QString GlobalSettings::Key_View_ZoomToFitDuringAcq = "View_ZoomToFitDuringAcq"; const QString GlobalSettings::Key_View_ZoomToFitAfterAcq = "View_ZoomToFitAfterAcq"; const QString GlobalSettings::Key_View_TriggerIsZeroTime = "View_TriggerIsZeroTime"; const QString GlobalSettings::Key_View_ColoredBG = "View_ColoredBG"; const QString GlobalSettings::Key_View_StickyScrolling = "View_StickyScrolling"; const QString GlobalSettings::Key_View_ShowSamplingPoints = "View_ShowSamplingPoints"; +const QString GlobalSettings::Key_View_FillSignalHighAreas = "View_FillSignalHighAreas"; +const QString GlobalSettings::Key_View_FillSignalHighAreaColor = "View_FillSignalHighAreaColor"; const QString GlobalSettings::Key_View_ShowAnalogMinorGrid = "View_ShowAnalogMinorGrid"; const QString GlobalSettings::Key_View_ConversionThresholdDispMode = "View_ConversionThresholdDispMode"; const QString GlobalSettings::Key_View_DefaultDivHeight = "View_DefaultDivHeight"; @@ -50,6 +63,7 @@ const QString GlobalSettings::Key_Log_NotifyOfStacktrace = "Log_NotifyOfStacktra vector GlobalSettings::callbacks_; bool GlobalSettings::tracking_ = false; map GlobalSettings::tracked_changes_; +QPalette GlobalSettings::default_palette_; GlobalSettings::GlobalSettings() : QSettings() @@ -59,6 +73,10 @@ GlobalSettings::GlobalSettings() : void GlobalSettings::set_defaults_where_needed() { + // Use no theme by default + if (!contains(Key_General_Theme)) + setValue(Key_General_Theme, 0); + // Enable zoom-to-fit after acquisition by default if (!contains(Key_View_ZoomToFitAfterAcq)) setValue(Key_View_ZoomToFitAfterAcq, true); @@ -71,6 +89,13 @@ void GlobalSettings::set_defaults_where_needed() if (!contains(Key_View_ShowSamplingPoints)) setValue(Key_View_ShowSamplingPoints, true); + // Enable filling logic signal high areas by default + if (!contains(Key_View_FillSignalHighAreas)) + setValue(Key_View_FillSignalHighAreas, true); + if (!contains(Key_View_FillSignalHighAreaColor)) + setValue(Key_View_FillSignalHighAreaColor, + QColor(0, 0, 0, 5 * 256 / 100).rgba()); + if (!contains(Key_View_DefaultDivHeight)) setValue(Key_View_DefaultDivHeight, 3 * QFontMetrics(QApplication::font()).height()); @@ -79,6 +104,9 @@ void GlobalSettings::set_defaults_where_needed() setValue(Key_View_DefaultLogicHeight, 2 * QFontMetrics(QApplication::font()).height()); + if (!contains(Key_View_ShowHoverMarker)) + setValue(Key_View_ShowHoverMarker, true); + if (!contains(Key_View_SnapDistance)) setValue(Key_View_SnapDistance, 15); @@ -94,6 +122,61 @@ void GlobalSettings::set_defaults_where_needed() setValue(Key_Log_NotifyOfStacktrace, true); } +void GlobalSettings::save_default_palette() +{ + default_palette_ = QApplication::palette(); +} + +void GlobalSettings::apply_theme() +{ + QString theme_name = Themes.at(value(Key_General_Theme).toInt()).first; + QString resource_name = Themes.at(value(Key_General_Theme).toInt()).second; + + if (!resource_name.isEmpty()) { + QFile file(resource_name); + file.open(QFile::ReadOnly | QFile::Text); + qApp->setStyleSheet(file.readAll()); + } else + qApp->setStyleSheet(""); + + qApp->setPalette(default_palette_); + + if (theme_name.compare("QDarkStyleSheet") == 0) { + QPalette dark_palette; + dark_palette.setColor(QPalette::Window, QColor(53, 53, 53)); + dark_palette.setColor(QPalette::WindowText, Qt::white); + dark_palette.setColor(QPalette::Base, QColor(42, 42, 42)); + dark_palette.setColor(QPalette::Dark, QColor(35, 35, 35)); + dark_palette.setColor(QPalette::Highlight, QColor(42, 130, 218)); + qApp->setPalette(dark_palette); + } else if (theme_name.compare("DarkStyle") == 0) { + QPalette dark_palette; + dark_palette.setColor(QPalette::Window, QColor(53, 53, 53)); + dark_palette.setColor(QPalette::WindowText, Qt::white); + dark_palette.setColor(QPalette::Disabled, QPalette::WindowText, QColor(127, 127, 127)); + dark_palette.setColor(QPalette::Base, QColor(42, 42, 42)); + dark_palette.setColor(QPalette::AlternateBase, QColor(66, 66, 66)); + dark_palette.setColor(QPalette::ToolTipBase, Qt::white); + dark_palette.setColor(QPalette::ToolTipText, QColor(53, 53, 53)); + dark_palette.setColor(QPalette::Text, Qt::white); + dark_palette.setColor(QPalette::Disabled, QPalette::Text, QColor(127, 127, 127)); + dark_palette.setColor(QPalette::Dark, QColor(35, 35, 35)); + dark_palette.setColor(QPalette::Shadow, QColor(20, 20, 20)); + dark_palette.setColor(QPalette::Button, QColor(53, 53, 53)); + dark_palette.setColor(QPalette::ButtonText, Qt::white); + dark_palette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(127, 127, 127)); + dark_palette.setColor(QPalette::BrightText, Qt::red); + dark_palette.setColor(QPalette::Link, QColor(42, 130, 218)); + dark_palette.setColor(QPalette::Highlight, QColor(42, 130, 218)); + dark_palette.setColor(QPalette::Disabled, QPalette::Highlight, QColor(80, 80, 80)); + dark_palette.setColor(QPalette::HighlightedText, Qt::white); + dark_palette.setColor(QPalette::Disabled, QPalette::HighlightedText, QColor(127, 127, 127)); + qApp->setPalette(dark_palette); + } + + QPixmapCache::clear(); +} + void GlobalSettings::add_change_handler(GlobalSettingsInterface *cb) { callbacks_.push_back(cb); @@ -141,7 +224,7 @@ void GlobalSettings::undo_tracked_changes() { tracking_ = false; - for (auto entry : tracked_changes_) + for (auto& entry : tracked_changes_) setValue(entry.first, entry.second); tracked_changes_.clear();