summaryrefslogtreecommitdiff
path: root/app/src/widgets
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2024-07-17 01:07:22 +0200
committerFelix Morgner <felix.morgner@gmail.com>2024-07-17 01:07:22 +0200
commit1435da0c878b705035fda0dfbdb31013645ce2f9 (patch)
tree09cc77f78544b6f21c6bc635722e6fdcf8b26c67 /app/src/widgets
parent225bfa26409243db96a0d36100561c257d0488f9 (diff)
downloadturns-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.cpp15
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);