diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2024-08-17 13:52:39 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2024-08-17 13:52:39 +0200 |
| commit | 7b7374b220b51f73b76823762666d9e8b82dccf4 (patch) | |
| tree | 78b63ad583a802c7fb7325caff60797e2bb5fb65 /ui/src | |
| parent | a98edafdaa4bb504d7253d4a67901d2a36eefabf (diff) | |
| download | turns-7b7374b220b51f73b76823762666d9e8b82dccf4.tar.xz turns-7b7374b220b51f73b76823762666d9e8b82dccf4.zip | |
ui: add color reset buttons
Implements: #7
Diffstat (limited to 'ui/src')
| -rw-r--r-- | ui/src/widgets/preferences.cpp | 78 |
1 files changed, 47 insertions, 31 deletions
diff --git a/ui/src/widgets/preferences.cpp b/ui/src/widgets/preferences.cpp index 24de613..187da2e 100644 --- a/ui/src/widgets/preferences.cpp +++ b/ui/src/widgets/preferences.cpp @@ -1,14 +1,19 @@ #include "turns/ui/widgets/preferences.hpp" -#include "turns/adw/actionrow.hpp" #include "turns/ui/widgets/template_widget.hpp" +#include <sigc++/functors/mem_fun.h> + +#include <glibmm/binding.h> #include <glibmm/objectbase.h> #include <glibmm/refptr.h> +#include <glibmm/ustring.h> +#include <glibmm/variant.h> #include <giomm/settings.h> #include <gtkmm/colordialog.h> +#include <gtkmm/colordialogbutton.h> #include <gtkmm/enums.h> #include <gdkmm/rgba.h> @@ -25,44 +30,55 @@ namespace turns::ui::widgets : Glib::ObjectBase{TYPE_NAME} , template_widget{TEMPLATE} , m_settings{settings} - , m_friendly{get_widget<adw::ActionRow>("friendly")} - , m_hostile{get_widget<adw::ActionRow>("hostile")} - , m_secret{get_widget<adw::ActionRow>("secret")} + , m_friendly_reset_button{get_widget<Gtk::Button>("friendly_reset_button")} + , m_hostile_reset_button{get_widget<Gtk::Button>("hostile_reset_button")} + , m_secret_reset_button{get_widget<Gtk::Button>("secret_reset_button")} + , m_friendly_color_button{get_widget<Gtk::ColorDialogButton>("friendly_color_button")} + , m_hostile_color_button{get_widget<Gtk::ColorDialogButton>("hostile_color_button")} + , m_secret_color_button{get_widget<Gtk::ColorDialogButton>("secret_color_button")} { if (!m_settings) { return; } - m_friendly->add_suffix(m_friendly_button); - m_friendly->set_activatable_widget(m_friendly_button); - m_friendly_button.set_dialog(Gtk::ColorDialog::create()); - m_friendly_button.set_valign(Gtk::Align::CENTER); - m_settings->bind<Glib::ustring, Gdk::RGBA>("disposition-color-friendly", - m_friendly_button.property_rgba(), - Gio::Settings::BindFlags::DEFAULT, - [](auto value) { return Gdk::RGBA{value}; }, - [](auto color) { return color.to_string(); }); + { + 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)); + } - m_hostile->add_suffix(m_hostile_button); - m_hostile->set_activatable_widget(m_hostile_button); - m_hostile_button.set_dialog(Gtk::ColorDialog::create()); - m_hostile_button.set_valign(Gtk::Align::CENTER); - m_settings->bind<Glib::ustring, Gdk::RGBA>("disposition-color-hostile", - m_hostile_button.property_rgba(), - Gio::Settings::BindFlags::DEFAULT, - [](auto value) { return Gdk::RGBA{value}; }, - [](auto color) { return color.to_string(); }); + auto preferences::bind_setting(Glib::ustring const & key, Gtk::ColorDialogButton * button) -> void + { + m_settings->bind<Glib::ustring, Gdk::RGBA>(key, button->property_rgba(), Gio::Settings::BindFlags::DEFAULT, [](auto value) { + return Gdk::RGBA{value}; + }, [](auto color) { return color.to_string(); }); + } - m_secret->add_suffix(m_secret_button); - m_secret->set_activatable_widget(m_secret_button); - m_secret_button.set_dialog(Gtk::ColorDialog::create()); - m_secret_button.set_valign(Gtk::Align::CENTER); - m_settings->bind<Glib::ustring, Gdk::RGBA>("disposition-color-secret", - m_secret_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<Glib::ustring>{}; + button->set_sensitive(m_settings->get_user_value(key, v)); } } // namespace turns::ui::widgets
\ No newline at end of file |
