From 3ff5bd46952144926d9bd9beedf50023a51913ee Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Tue, 29 Apr 2025 16:33:32 +0200 Subject: ui: flatten namespace hierarchy --- ui/src/preferences.cpp | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 ui/src/preferences.cpp (limited to 'ui/src/preferences.cpp') diff --git a/ui/src/preferences.cpp b/ui/src/preferences.cpp new file mode 100644 index 0000000..b521a25 --- /dev/null +++ b/ui/src/preferences.cpp @@ -0,0 +1,81 @@ +#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 \ No newline at end of file -- cgit v1.2.3