From b6b4399b20648de28def5411d90c4a3536da5b01 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 9 Jun 2025 08:44:54 +0200 Subject: gui: make Preferences default constructible --- gui/include/preferences.hpp | 9 ++----- gui/src/preferences.cpp | 61 ++++++++++++++++++++++----------------------- 2 files changed, 32 insertions(+), 38 deletions(-) diff --git a/gui/include/preferences.hpp b/gui/include/preferences.hpp index 9bd2e77..81e4cef 100644 --- a/gui/include/preferences.hpp +++ b/gui/include/preferences.hpp @@ -33,15 +33,10 @@ namespace Turns::gui "skip_defeated", }; - explicit Preferences(Glib::RefPtr settings = {}); + Preferences(); + explicit Preferences(Glib::RefPtr settings); private: - auto bind_reset(Glib::ustring const & key, Gtk::Button * button) -> void; - auto bind_setting(Glib::ustring const & key, Gtk::ColorDialogButton * button) -> void; - auto update_sensitive(Glib::ustring const & key, Gtk::Button * button) -> void; - - Glib::RefPtr m_settings; - Gtk::Button * m_friendly_reset_button{}; Gtk::Button * m_hostile_reset_button{}; Gtk::Button * m_secret_reset_button{}; diff --git a/gui/src/preferences.cpp b/gui/src/preferences.cpp index 7a80aa2..6aa4704 100644 --- a/gui/src/preferences.cpp +++ b/gui/src/preferences.cpp @@ -31,12 +31,31 @@ namespace Turns::gui { auto constexpr static TYPE_NAME = "Preferences"; auto constexpr static TEMPLATE = resource::preferences_ui; + + auto update_sensitive(Glib::ustring const & key, Gtk::Button * button, Glib::RefPtr const & settings) -> void + { + auto v = Glib::Variant{}; + button->set_sensitive(settings->get_user_value(key, v)); + } + + auto bind_reset(Glib::ustring const & key, Gtk::Button * button, Glib::RefPtr const & settings) -> void + { + settings->signal_changed(key).connect([=](auto) { update_sensitive(key, button, settings); }); + update_sensitive(key, button, settings); + button->signal_clicked().connect(sigc::bind(sigc::mem_fun(*settings, &Gio::Settings::reset), key)); + } + + auto bind_setting(Glib::ustring const & key, Gtk::ColorDialogButton * button, Glib::RefPtr const & settings) -> void + { + settings->bind(key, button->property_rgba(), Gio::Settings::BindFlags::DEFAULT, [](auto value) { + return Gdk::RGBA{value}; + }, [](auto color) { return color.to_string(); }); + } } // namespace - Preferences::Preferences(Glib::RefPtr settings) + Preferences::Preferences() : Glib::ObjectBase{TYPE_NAME} , template_widget{TEMPLATE} - , m_settings{settings} , m_friendly_reset_button{get_widget("friendly_reset_button")} , m_hostile_reset_button{get_widget("hostile_reset_button")} , m_secret_reset_button{get_widget("secret_reset_button")} @@ -45,39 +64,19 @@ namespace Turns::gui , m_secret_color_button{get_widget("secret_color_button")} , m_skip_defeated{get_widget("skip_defeated")} { - if (!m_settings) - { - return; - } - - bind_reset(settings::key::disposition_friendly_color, m_friendly_reset_button); - bind_setting(settings::key::disposition_friendly_color, m_friendly_color_button); - bind_reset(settings::key::disposition_hostile_color, m_hostile_reset_button); - bind_setting(settings::key::disposition_hostile_color, m_hostile_color_button); - bind_reset(settings::key::disposition_secret_color, m_secret_reset_button); - bind_setting(settings::key::disposition_secret_color, m_secret_color_button); - - m_settings->bind(settings::key::skip_defeated, m_skip_defeated->property_active()); - } - - auto Preferences::bind_reset(Glib::ustring const & key, Gtk::Button * button) -> void - { - m_settings->signal_changed(key).connect([=, this](auto) { update_sensitive(key, button); }); - update_sensitive(key, button); - button->signal_clicked().connect(sigc::bind(sigc::mem_fun(*m_settings, &Gio::Settings::reset), key)); } - auto Preferences::bind_setting(Glib::ustring const & key, Gtk::ColorDialogButton * button) -> void + Preferences::Preferences(Glib::RefPtr settings) + : Preferences{} { - m_settings->bind(key, button->property_rgba(), Gio::Settings::BindFlags::DEFAULT, [](auto value) { - return Gdk::RGBA{value}; - }, [](auto color) { return color.to_string(); }); - } + bind_reset(settings::key::disposition_friendly_color, m_friendly_reset_button, settings); + bind_setting(settings::key::disposition_friendly_color, m_friendly_color_button, settings); + bind_reset(settings::key::disposition_hostile_color, m_hostile_reset_button, settings); + bind_setting(settings::key::disposition_hostile_color, m_hostile_color_button, settings); + bind_reset(settings::key::disposition_secret_color, m_secret_reset_button, settings); + bind_setting(settings::key::disposition_secret_color, m_secret_color_button, settings); - auto Preferences::update_sensitive(Glib::ustring const & key, Gtk::Button * button) -> void - { - auto v = Glib::Variant{}; - button->set_sensitive(m_settings->get_user_value(key, v)); + settings->bind(settings::key::skip_defeated, m_skip_defeated->property_active()); } } // namespace Turns::gui \ No newline at end of file -- cgit v1.2.3