#ifndef PULSEVIEW_GLOBALSETTINGS_HPP
#define PULSEVIEW_GLOBALSETTINGS_HPP
-#include <functional>
#include <map>
+#include <glib.h>
+#include <glibmm/variant.h>
+
+#include <QPalette>
#include <QSettings>
#include <QString>
#include <QVariant>
+using std::map;
+using std::pair;
+using std::vector;
+
namespace pv {
+extern const vector< pair<QString, QString> > Themes;
+
+
+class GlobalSettingsInterface
+{
+public:
+ virtual void on_setting_changed(const QString &key, const QVariant &value) = 0;
+};
+
+
class GlobalSettings : public QSettings
{
Q_OBJECT
public:
- static const QString Key_View_AlwaysZoomToFit;
- static const QString Key_View_ColouredBG;
+ static const QString Key_General_Theme;
+ static const QString Key_General_Style;
+ static const QString Key_General_SaveWithSetup;
+ static const QString Key_View_ZoomToFitDuringAcq;
+ static const QString Key_View_ZoomToFitAfterAcq;
+ static const QString Key_View_TriggerIsZeroTime;
+ static const QString Key_View_ColoredBG;
static const QString Key_View_StickyScrolling;
static const QString Key_View_ShowSamplingPoints;
+ static const QString Key_View_FillSignalHighAreas;
+ static const QString Key_View_FillSignalHighAreaColor;
+ static const QString Key_View_ShowAnalogMinorGrid;
+ static const QString Key_View_ConversionThresholdDispMode;
+ static const QString Key_View_DefaultDivHeight;
+ static const QString Key_View_DefaultLogicHeight;
+ static const QString Key_View_ShowHoverMarker;
+ static const QString Key_View_SnapDistance;
+ static const QString Key_View_CursorFillColor;
+ static const QString Key_Dec_InitialStateConfigurable;
+ static const QString Key_Dec_ExportFormat;
+ static const QString Key_Log_BufferSize;
+ static const QString Key_Log_NotifyOfStacktrace;
+
+ enum ConvThrDispMode {
+ ConvThrDispMode_None = 0,
+ ConvThrDispMode_Background,
+ ConvThrDispMode_Dots
+ };
public:
GlobalSettings();
- static void register_change_handler(const QString key,
- std::function<void(QVariant)> cb);
+ void save_internal_defaults();
+ void set_defaults_where_needed();
+ void set_bright_theme_default_colors();
+ void set_dark_theme_default_colors();
+
+ bool current_theme_is_dark();
+ void apply_theme();
+
+ static void add_change_handler(GlobalSettingsInterface *cb);
+ static void remove_change_handler(GlobalSettingsInterface *cb);
void setValue(const QString& key, const QVariant& value);
*/
void undo_tracked_changes();
+ static void store_gvariant(QSettings &settings, GVariant *v);
+
+ static GVariant* restore_gvariant(QSettings &settings);
+
+ static void store_variantbase(QSettings &settings, Glib::VariantBase v);
+
+ static Glib::VariantBase restore_variantbase(QSettings &settings);
+
private:
- static std::multimap< QString, std::function<void(QVariant)> > callbacks_;
+ static vector<GlobalSettingsInterface*> callbacks_;
static bool tracking_;
- static std::map<QString, QVariant> tracked_changes_;
+ static map<QString, QVariant> tracked_changes_;
+
+ static QString default_style_;
+ static QPalette default_palette_;
+
+ bool is_dark_theme_;
};
} // namespace pv