diff options
Diffstat (limited to 'app/src/widgets')
| -rw-r--r-- | app/src/widgets/turn_order_view.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
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 <algorithm> #include <format> #include <sigc++/functors/mem_fun.h> @@ -23,6 +24,7 @@ namespace turns::app::widgets , m_view{get_widget<Gtk::ListBox>("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<domain::turn_order> @@ -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<domain::turn_order::active_participant_type>::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<Glib::Object> const item) -> Gtk::Widget * { auto participant = std::dynamic_pointer_cast<domain::participant>(item); |
