#include "turns/ui/widgets/preferences.hpp" #include "turns/ui/widgets/template_widget.hpp" #include #include #include #include #include #include #include #include #include #include #include namespace turns::ui::widgets { namespace { auto constexpr static TYPE_NAME = "preferences"; auto constexpr static TEMPLATE = "/widgets/preferences.ui"; } // namespace preferences::preferences(Glib::RefPtr settings) : 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")} , m_friendly_color_button{get_widget("friendly_color_button")} , m_hostile_color_button{get_widget("hostile_color_button")} , m_secret_color_button{get_widget("secret_color_button")} { if (!m_settings) { return; } { auto key = "disposition-color-friendly"; bind_reset(key, m_friendly_reset_button); bind_setting(key, m_friendly_color_button); } { auto key = "disposition-color-hostile"; bind_reset(key, m_hostile_reset_button); bind_setting(key, m_hostile_color_button); } { auto key = "disposition-color-secret"; bind_reset(key, m_secret_reset_button); bind_setting(key, m_secret_color_button); } } 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 { m_settings->bind(key, button->property_rgba(), Gio::Settings::BindFlags::DEFAULT, [](auto value) { return Gdk::RGBA{value}; }, [](auto color) { return color.to_string(); }); } 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)); } } // namespace turns::ui::widgets