summaryrefslogtreecommitdiff
path: root/ui/src
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2024-08-17 11:41:43 +0200
committerFelix Morgner <felix.morgner@gmail.com>2024-08-17 11:41:43 +0200
commita98edafdaa4bb504d7253d4a67901d2a36eefabf (patch)
tree5668c2772759a5b4d01cbca15cc03ce36199cbed /ui/src
parent46c93e74067de844b35c1249122fcf878a0db924 (diff)
parentfb917713e55147c6b0de514924c4867d9e8d5894 (diff)
downloadturns-a98edafdaa4bb504d7253d4a67901d2a36eefabf.tar.xz
turns-a98edafdaa4bb504d7253d4a67901d2a36eefabf.zip
Merge branch 'wip/color-preferences-ui' into 'main'
ui: add participant shading color preferences Closes #2 See merge request fmorgner/turns!1
Diffstat (limited to 'ui/src')
-rw-r--r--ui/src/widgets/preferences.cpp68
-rw-r--r--ui/src/windows/tracker.cpp6
-rw-r--r--ui/src/windows/tracker/actions.cpp13
3 files changed, 86 insertions, 1 deletions
diff --git a/ui/src/widgets/preferences.cpp b/ui/src/widgets/preferences.cpp
new file mode 100644
index 0000000..24de613
--- /dev/null
+++ b/ui/src/widgets/preferences.cpp
@@ -0,0 +1,68 @@
+#include "turns/ui/widgets/preferences.hpp"
+
+#include "turns/adw/actionrow.hpp"
+#include "turns/ui/widgets/template_widget.hpp"
+
+#include <glibmm/objectbase.h>
+#include <glibmm/refptr.h>
+
+#include <giomm/settings.h>
+
+#include <gtkmm/colordialog.h>
+#include <gtkmm/enums.h>
+
+#include <gdkmm/rgba.h>
+
+namespace turns::ui::widgets
+{
+ namespace
+ {
+ auto constexpr static TYPE_NAME = "preferences";
+ auto constexpr static TEMPLATE = "/widgets/preferences.ui";
+ } // namespace
+
+ preferences::preferences(Glib::RefPtr<Gio::Settings> settings)
+ : 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")}
+ {
+ 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(); });
+
+ 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(); });
+
+ 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(); });
+ }
+
+} // namespace turns::ui::widgets \ No newline at end of file
diff --git a/ui/src/windows/tracker.cpp b/ui/src/windows/tracker.cpp
index c6dc731..b9a55c0 100644
--- a/ui/src/windows/tracker.cpp
+++ b/ui/src/windows/tracker.cpp
@@ -4,6 +4,7 @@
#include "turns/adw/toastoverlay.hpp"
#include "turns/core/turn_order.hpp"
#include "turns/lang/messages.hpp"
+#include "turns/ui/widgets/preferences.hpp"
#include "turns/ui/widgets/turn_order_view.hpp"
#include <sigc++/adaptors/bind.h>
@@ -15,6 +16,7 @@
#include <glibmm/refptr.h>
#include <glibmm/ustring.h>
#include <glibmm/varianttype.h>
+#include <glibmm/wrap.h>
#include <giomm/liststore.h>
#include <giomm/settings.h>
@@ -53,9 +55,9 @@ namespace turns::ui::windows
, m_title{builder->get_widget<Gtk::Widget>("title")}
, m_turn_order{core::turn_order::create()}
, m_turn_order_view{Gtk::make_managed<widgets::turn_order_view>(m_turn_order)}
+ , m_settings{Gio::Settings::create("ch.arknet.Turns")}
, m_subtitle{m_title, "subtitle"}
, m_css{Gtk::CssProvider::create()}
- , m_settings{Gio::Settings::create("ch.arknet.Turns")}
{
setup_colors();
setup_actions();
@@ -141,10 +143,12 @@ namespace turns::ui::windows
// win.delete
// win.edit
// win.open
+ // win.preferences
{
add_action_with_parameter("delete", Glib::VARIANT_TYPE_INT32, sigc::mem_fun(*this, &tracker::delete_participant));
add_action_with_parameter("edit", Glib::VARIANT_TYPE_INT32, sigc::mem_fun(*this, &tracker::edit_participant));
add_action("open", sigc::mem_fun(*this, &tracker::open));
+ add_action("preferences", sigc::mem_fun(*this, &tracker::preferences));
}
// win.save
diff --git a/ui/src/windows/tracker/actions.cpp b/ui/src/windows/tracker/actions.cpp
index 3210089..c26afbf 100644
--- a/ui/src/windows/tracker/actions.cpp
+++ b/ui/src/windows/tracker/actions.cpp
@@ -1,6 +1,8 @@
+#include "turns/adw/preferencesdialog.hpp"
#include "turns/core/participant.hpp"
#include "turns/core/turn_order.hpp"
#include "turns/lang/messages.hpp"
+#include "turns/ui/widgets/preferences.hpp"
#include "turns/ui/windows/participant_editor.hpp"
#include "turns/ui/windows/tracker.hpp"
@@ -14,10 +16,12 @@
#include <glibmm/wrap.h>
#include <giomm/liststore.h>
+#include <giomm/settings.h>
#include <gtkmm/builder.h>
#include <gtkmm/filedialog.h>
#include <gtkmm/filefilter.h>
+#include <gtkmm/object.h>
#include <adwaita.h>
#include <gio/gio.h>
@@ -89,6 +93,15 @@ namespace turns::ui::windows
dialog->open(sigc::bind(sigc::mem_fun(*this, &tracker::on_open_response), dialog));
}
+ auto tracker::preferences() -> void
+ {
+ auto preferences = Gtk::make_managed<widgets::preferences>(m_settings);
+ auto dialog = Gtk::make_managed<adw::PreferencesDialog>();
+ dialog->add(*preferences);
+ adw_preferences_dialog_set_visible_page(Glib::unwrap(dialog), Glib::unwrap(preferences));
+ dialog->present(this);
+ }
+
auto tracker::save(bool force_ask) -> void
{
if (m_file && !force_ask)