diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2024-07-17 01:07:22 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2024-07-17 01:07:22 +0200 |
| commit | 1435da0c878b705035fda0dfbdb31013645ce2f9 (patch) | |
| tree | 09cc77f78544b6f21c6bc635722e6fdcf8b26c67 /app/src/widgets | |
| parent | 225bfa26409243db96a0d36100561c257d0488f9 (diff) | |
| download | turns-1435da0c878b705035fda0dfbdb31013645ce2f9.tar.xz turns-1435da0c878b705035fda0dfbdb31013645ce2f9.zip | |
app/ui: implement basic turn tracking
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); |
