From 1435da0c878b705035fda0dfbdb31013645ce2f9 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Wed, 17 Jul 2024 01:07:22 +0200 Subject: app/ui: implement basic turn tracking --- app/src/widgets/turn_order_view.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'app/src/widgets') diff --git a/app/src/widgets/turn_order_view.cpp b/app/src/widgets/turn_order_view.cpp index 700dfd3..c2b4afa 100644 --- a/app/src/widgets/turn_order_view.cpp +++ b/app/src/widgets/turn_order_view.cpp @@ -4,6 +4,7 @@ #include "turns/domain/participant.hpp" #include "turns/lang/messages.hpp" +#include #include #include @@ -23,6 +24,7 @@ namespace turns::app::widgets , m_view{get_widget("view")} { m_view->bind_model(m_model->list_model(), sigc::mem_fun(*this, &turn_order_view::handle_create_row)); + m_model->property_active_participant().signal_changed().connect(sigc::mem_fun(*this, &turn_order_view::handle_active_participant_changed)); } auto turn_order_view::get_model() const noexcept -> Glib::RefPtr @@ -30,6 +32,19 @@ namespace turns::app::widgets return m_model; } + auto turn_order_view::handle_active_participant_changed() -> void + { + std::ranges::for_each(m_view->get_children(), [](auto c) { c->remove_css_class("active-participant"); }); + + auto index = m_model->active_participant(); + if (index != std::numeric_limits::max()) + { + auto row = m_view->get_row_at_index(index); + row->add_css_class("active-participant"); + row->grab_focus(); + } + } + auto turn_order_view::handle_create_row(Glib::RefPtr const item) -> Gtk::Widget * { auto participant = std::dynamic_pointer_cast(item); -- cgit v1.2.3