#include "turns/ui/preferences.hpp" #include "turns/core/settings.hpp" #include "turns/ui/template_widget.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace turns::ui { namespace { auto constexpr static TYPE_NAME = "Preferences"; auto constexpr static TEMPLATE = "/ch/arknet/Turns/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")} , m_skip_defeated{get_widget("skip_defeated")} { if (!m_settings) { return; } bind_reset(core::settings::key::disposition_friendly_color, m_friendly_reset_button); bind_setting(core::settings::key::disposition_friendly_color, m_friendly_color_button); bind_reset(core::settings::key::disposition_hostile_color, m_hostile_reset_button); bind_setting(core::settings::key::disposition_hostile_color, m_hostile_color_button); bind_reset(core::settings::key::disposition_secret_color, m_secret_reset_button); bind_setting(core::settings::key::disposition_secret_color, m_secret_color_button); m_settings->bind(core::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 { 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