/* * SPDX-FileCopyrightText: 2025 Felix Morgner * SPDX-License-Identifier: LGPL-2.1-only */ #include "preferences.hpp" #include "resources.hpp" #include "settings.hpp" #include "template_widget.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Turns::gui { namespace { 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::ObjectBase{TYPE_NAME} , template_widget{TEMPLATE} , 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")} { } Preferences::Preferences(Glib::RefPtr settings) : Preferences{} { 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); settings->bind(settings::key::skip_defeated, m_skip_defeated->property_active()); } } // namespace Turns::gui