From a3da855cddff3c3c71311af6ce3e7629a459024d Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Sat, 22 Jul 2017 23:18:26 +0200 Subject: Add application config for GUI QT5 stored in .config/org.the_jk/tp.Monitor.conf on Linux GTK stored in dconf --- src/gui_gtk.cc | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) (limited to 'src/gui_gtk.cc') diff --git a/src/gui_gtk.cc b/src/gui_gtk.cc index 99172e3..4c1cc13 100644 --- a/src/gui_gtk.cc +++ b/src/gui_gtk.cc @@ -10,6 +10,7 @@ #include #include "gui_about.hh" +#include "gui_config.hh" #include "gui_form.hh" #include "gui_formapply.hh" #include "gui_listmodel.hh" @@ -510,11 +511,53 @@ private: std::unordered_map tags_; }; +class GtkConfig : public GuiConfig { +public: + GtkConfig() + : settings_(g_settings_new("org.the_jk.tp.Monitor")) { + } + + ~GtkConfig() override { + g_settings_sync(); + } + + using Config::get; + std::string const& get(std::string const& key, + std::string const& fallback) override { + auto variant = g_settings_get_user_value(settings_.get(), key.c_str()); + if (!variant) return fallback; + memory_[key] = g_variant_get_string(variant, nullptr); + g_variant_unref(variant); + return memory_[key]; + } + char const* get(std::string const& key, + char const* fallback) override { + auto variant = g_settings_get_user_value(settings_.get(), key.c_str()); + if (!variant) return fallback; + memory_[key] = g_variant_get_string(variant, nullptr); + g_variant_unref(variant); + return memory_[key].c_str(); + } + bool is_set(std::string const& key) override { + auto variant = g_settings_get_user_value(settings_.get(), key.c_str()); + if (!variant) return false; + g_variant_unref(variant); + return true; + } + void set(std::string const& key, std::string const& value) override { + g_settings_set_string(settings_.get(), key.c_str(), value.c_str()); + } + +private: + shared_gobject settings_; + std::unordered_map memory_; +}; + class GtkGuiMain : public virtual GuiMain, public GtkGuiWindow { public: GtkGuiMain(std::string const& title, uint32_t width, uint32_t height) : title_(title), width_(width), height_(height), split_(0.5), - menu_(nullptr), statusbar_(nullptr) { + config_(new GtkConfig()), menu_(nullptr), statusbar_(nullptr) { } void set_menu(GuiMenu* menu) override { @@ -643,6 +686,10 @@ private: return true; } + Config* config() override { + return config_.get(); + } + std::string title_; uint32_t width_; uint32_t height_; @@ -651,6 +698,7 @@ private: shared_gobject app_; shared_gobject listmodel_; std::unique_ptr package_; + std::unique_ptr config_; Observers observers_; GuiMenu* menu_; GuiStatusBar* statusbar_; -- cgit v1.2.3-70-g09d2