summaryrefslogtreecommitdiff
path: root/ui/src
diff options
context:
space:
mode:
Diffstat (limited to 'ui/src')
-rw-r--r--ui/src/widgets/preferences.cpp78
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