summaryrefslogtreecommitdiff
path: root/ui
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
commitfb917713e55147c6b0de514924c4867d9e8d5894 (patch)
tree5668c2772759a5b4d01cbca15cc03ce36199cbed /ui
parent46c93e74067de844b35c1249122fcf878a0db924 (diff)
downloadturns-fb917713e55147c6b0de514924c4867d9e8d5894.tar.xz
turns-fb917713e55147c6b0de514924c4867d9e8d5894.zip
ui: add participant shading color preferences
Diffstat (limited to 'ui')
-rw-r--r--ui/CMakeLists.txt1
-rw-r--r--ui/include/turns/ui/widgets/preferences.hpp42
-rw-r--r--ui/include/turns/ui/windows/tracker.hpp8
-rw-r--r--ui/res/CMakeLists.txt1
-rw-r--r--ui/res/ui.cmb24
-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
8 files changed, 155 insertions, 8 deletions
diff --git a/ui/CMakeLists.txt b/ui/CMakeLists.txt
index b3a03c9..844460a 100644
--- a/ui/CMakeLists.txt
+++ b/ui/CMakeLists.txt
@@ -3,6 +3,7 @@
add_library("ui"
"src/init.cpp"
"src/widgets/participant_row.cpp"
+ "src/widgets/preferences.cpp"
"src/widgets/turn_order_view.cpp"
"src/windows/participant_editor.cpp"
"src/windows/tracker.cpp"
diff --git a/ui/include/turns/ui/widgets/preferences.hpp b/ui/include/turns/ui/widgets/preferences.hpp
new file mode 100644
index 0000000..21b6eef
--- /dev/null
+++ b/ui/include/turns/ui/widgets/preferences.hpp
@@ -0,0 +1,42 @@
+#ifndef TURNS_UI_WIDGETS_PREFERENCES_HPP
+#define TURNS_UI_WIDGETS_PREFERENCES_HPP
+
+#include "turns/adw/actionrow.hpp"
+#include "turns/adw/preferencespage.hpp"
+#include "turns/ui/widgets/template_widget.hpp"
+
+#include <glibmm/refptr.h>
+
+#include <giomm/settings.h>
+
+#include <gtkmm/colordialogbutton.h>
+
+#include <array>
+
+namespace turns::ui::widgets
+{
+ struct preferences : template_widget<preferences, adw::PreferencesPage>
+ {
+
+ auto constexpr inline static children = std::array{
+ "friendly",
+ "hostile",
+ "secret",
+ };
+
+ explicit preferences(Glib::RefPtr<Gio::Settings> settings = {});
+
+ private:
+ Glib::RefPtr<Gio::Settings> m_settings;
+
+ adw::ActionRow * m_friendly;
+ adw::ActionRow * m_hostile;
+ adw::ActionRow * m_secret;
+
+ Gtk::ColorDialogButton m_friendly_button{};
+ Gtk::ColorDialogButton m_hostile_button{};
+ Gtk::ColorDialogButton m_secret_button{};
+ };
+} // namespace turns::ui::widgets
+
+#endif \ No newline at end of file
diff --git a/ui/include/turns/ui/windows/tracker.hpp b/ui/include/turns/ui/windows/tracker.hpp
index e14f08a..c6cbccb 100644
--- a/ui/include/turns/ui/windows/tracker.hpp
+++ b/ui/include/turns/ui/windows/tracker.hpp
@@ -3,6 +3,7 @@
#include "turns/adw/toastoverlay.hpp"
#include "turns/core/turn_order.hpp"
+#include "turns/ui/widgets/preferences.hpp"
#include "turns/ui/widgets/turn_order_view.hpp"
#include <glibmm/propertyproxy.h>
@@ -17,11 +18,13 @@
#include <gtkmm/applicationwindow.h>
#include <gtkmm/builder.h>
#include <gtkmm/button.h>
+#include <gtkmm/cssprovider.h>
#include <gtkmm/filedialog.h>
#include <gtkmm/revealer.h>
#include <gtkmm/stack.h>
#include <gtkmm/widget.h>
-#include <gtkmm/cssprovider.h>
+
+#include <adwaita.h>
#include <exception>
#include <string>
@@ -45,6 +48,7 @@ namespace turns::ui::windows
auto delete_participant(Glib::VariantBase param) -> void;
auto edit_participant(Glib::VariantBase param) -> void;
auto open() -> void;
+ auto preferences() -> void;
auto save(bool force_ask) -> void;
auto stop() -> void;
@@ -70,6 +74,7 @@ namespace turns::ui::windows
Gtk::Widget * m_title;
Glib::RefPtr<core::turn_order> m_turn_order;
widgets::turn_order_view * m_turn_order_view;
+ Glib::RefPtr<Gio::Settings> m_settings{};
Glib::PropertyProxy<Glib::ustring> m_subtitle;
Glib::RefPtr<Gio::File> m_file{};
@@ -77,7 +82,6 @@ namespace turns::ui::windows
std::string m_file_buffer{};
Glib::RefPtr<Gtk::CssProvider> m_css{};
- Glib::RefPtr<Gio::Settings> m_settings{};
};
} // namespace turns::ui::windows
diff --git a/ui/res/CMakeLists.txt b/ui/res/CMakeLists.txt
index 94d41ef..ff58108 100644
--- a/ui/res/CMakeLists.txt
+++ b/ui/res/CMakeLists.txt
@@ -6,6 +6,7 @@ target_link_libraries("ui-res" PRIVATE
set(UI_FILES
"widgets/participant_row.ui"
+ "widgets/preferences.ui"
"widgets/turn_order_view.ui"
"windows/participant_editor.ui"
"windows/tracker.ui"
diff --git a/ui/res/ui.cmb b/ui/res/ui.cmb
index 28ef448..0e3de6d 100644
--- a/ui/res/ui.cmb
+++ b/ui/res/ui.cmb
@@ -5,7 +5,8 @@
(1,None,None,"windows/tracker.ui",None,None,None,None,None,None,None),
(2,None,None,"windows/participant_editor.ui",None,None,None,None,None,None,None),
(3,1,None,"widgets/participant_row.ui",None,None,None,None,None,None,None),
- (4,1,None,"widgets/turn_order_view.ui",None,None,None,None,None,None,None)
+ (4,1,None,"widgets/turn_order_view.ui",None,None,None,None,None,None,None),
+ (6,1,None,"widgets/preferences.ui",None,None,None,None,None,None,None)
</ui>
<ui_library>
(1,"gtk","4.14",None),
@@ -39,6 +40,7 @@
(1,32,"GtkButton",None,31,None,None,None,None,None,None),
(1,33,"(item)",None,9,None,None,None,3,None,None),
(1,34,"(item)",None,9,None,None,None,1,None,None),
+ (1,44,"(item)",None,9,None,None,None,5,None,None),
(2,1,"AdwDialog","participant_editor",None,None,None,None,-1,None,None),
(2,2,"AdwToolbarView",None,1,None,None,None,-1,None,None),
(2,3,"AdwHeaderBar",None,2,None,"top",None,-1,None,None),
@@ -64,7 +66,12 @@
(4,2,"GtkProgressBar","progress",1,None,None,None,None,None,None),
(4,3,"GtkScrolledWindow",None,1,None,None,None,1,None,None),
(4,4,"AdwClamp",None,3,None,None,None,-1,None,None),
- (4,5,"GtkListBox","view",4,None,None,None,-1,None,None)
+ (4,5,"GtkListBox","view",4,None,None,None,-1,None,None),
+ (6,1,"AdwPreferencesPage","gtkmm__CustomObject_preferences",None,None,None,None,None,None,None),
+ (6,2,"AdwPreferencesGroup","colors",1,None,None,None,None,None,None),
+ (6,3,"AdwActionRow","friendly",2,None,None,None,None,None,None),
+ (6,4,"AdwActionRow","hostile",2,None,None,None,1,None,None),
+ (6,5,"AdwActionRow","secret",2,None,None,None,2,None,None)
</object>
<object_property>
(1,1,"AdwApplicationWindow","content",None,None,None,None,None,2,None,None,None,None),
@@ -84,8 +91,8 @@
(1,8,"GtkActionable","action-name","win.add_participant",None,None,None,None,None,None,None,None,None),
(1,8,"GtkButton","icon-name","contact-new",None,None,None,None,None,None,None,None,None),
(1,8,"GtkWidget","tooltip-text","Add participant",1,None,None,None,None,None,None,None,None),
- (1,10,"(item)","action","app.quit",None,None,None,None,None,None,None,None,None),
- (1,10,"(item)","label","_Quit",1,None,None,None,None,None,None,None,None),
+ (1,10,"(item)","action","win.preferences",None,None,None,None,None,None,None,None,None),
+ (1,10,"(item)","label","_Preferences",1,None,None,None,None,None,None,None,None),
(1,18,"GtkActionable","action-name","win.start",None,None,None,None,None,None,None,None,None),
(1,18,"GtkButton","icon-name","media-playback-start-symbolic",None,None,None,None,None,None,None,None,None),
(1,18,"GtkWidget","tooltip-text","Start turn order",1,None,None,None,None,None,None,None,None),
@@ -114,6 +121,8 @@
(1,33,"(item)","label","Save as...",1,None,None,None,None,None,None,None,None),
(1,34,"(item)","action","win.open",None,None,None,None,None,None,None,None,None),
(1,34,"(item)","label","_Open...",1,None,None,None,None,None,None,None,None),
+ (1,44,"(item)","action","app.quit",None,None,None,None,None,None,None,None,None),
+ (1,44,"(item)","label","_Quit",1,None,None,None,None,None,None,None,None),
(2,1,"AdwDialog","child",None,None,None,None,None,2,None,None,None,None),
(2,1,"AdwDialog","default-widget",None,None,None,None,None,None,None,None,None,None),
(2,1,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None),
@@ -166,7 +175,12 @@
(4,4,"GtkWidget","margin-end","12",None,None,None,None,None,None,None,None,None),
(4,4,"GtkWidget","margin-start","12",None,None,None,None,None,None,None,None,None),
(4,4,"GtkWidget","margin-top","12",None,None,None,None,None,None,None,None,None),
- (4,5,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None)
+ (4,5,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None),
+ (6,1,"AdwPreferencesPage","icon-name","preferences-system-symbolic",None,None,None,None,None,None,None,None,None),
+ (6,2,"AdwPreferencesGroup","title","Colors",1,None,None,None,None,None,None,None,None),
+ (6,3,"AdwPreferencesRow","title","Friendly",1,None,None,None,None,None,None,None,None),
+ (6,4,"AdwPreferencesRow","title","Hostile",1,None,None,None,None,None,None,None,None),
+ (6,5,"AdwPreferencesRow","title","Secret",1,None,None,None,None,None,None,None,None)
</object_property>
<object_data>
(1,1,"GtkWidget",2,2,None,1,None,None,None,None),
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)