From 9c1a9f41e2cef7f6e151a5f08367607e16d0f908 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Sun, 14 Jul 2024 22:39:04 +0200 Subject: app/ui: enable deletion of participants --- app/include/turns/app/widgets/participant_list_row.hpp | 3 +++ app/src/widgets/participant_list_row.cpp | 9 +++++++++ app/src/windows/main.cpp | 6 +++++- 3 files changed, 17 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/include/turns/app/widgets/participant_list_row.hpp b/app/include/turns/app/widgets/participant_list_row.hpp index 8ec5979..f282992 100644 --- a/app/include/turns/app/widgets/participant_list_row.hpp +++ b/app/include/turns/app/widgets/participant_list_row.hpp @@ -17,6 +17,7 @@ namespace turns::app::widgets struct participant_list_row : template_widget { auto constexpr inline static children = std::array{ + "delete", "edit", "subtitle", "title", @@ -29,8 +30,10 @@ namespace turns::app::widgets auto set_title(Glib::ustring const & value) -> void; private: + auto handle_delete() -> void; auto handle_toggle_defeated() -> void; + Gtk::Button * m_delete; Gtk::Button * m_edit; Gtk::Label * m_subtitle; Gtk::EditableLabel * m_title; diff --git a/app/src/widgets/participant_list_row.cpp b/app/src/widgets/participant_list_row.cpp index 358a947..11715d3 100644 --- a/app/src/widgets/participant_list_row.cpp +++ b/app/src/widgets/participant_list_row.cpp @@ -4,6 +4,7 @@ #include #include +#include namespace turns::app::widgets { @@ -17,11 +18,19 @@ namespace turns::app::widgets : Glib::ObjectBase(TYPE_NAME) , template_widget{TEMPLATE} { + m_delete = get_widget("delete"); m_edit = get_widget("edit"); m_subtitle = get_widget("subtitle"); m_title = get_widget("title"); m_toggle_defeated = get_widget("toggle_defeated"); + signal_map().connect([this]{ + m_delete->set_action_target_value(Glib::Variant::create(get_index())); + m_delete->set_action_name("win.delete"); + m_edit->set_action_target_value(Glib::Variant::create(get_index())); + m_edit->set_action_name("win.edit"); + }); + m_toggle_defeated->set_tooltip_text(_("Mark as defeated")); m_toggle_defeated->signal_toggled().connect(sigc::mem_fun(*this, &participant_list_row::handle_toggle_defeated)); } diff --git a/app/src/windows/main.cpp b/app/src/windows/main.cpp index 314b8cc..476545e 100644 --- a/app/src/windows/main.cpp +++ b/app/src/windows/main.cpp @@ -40,6 +40,10 @@ namespace turns::app::windows m_participant_list->bind_model(m_participants, sigc::mem_fun(*this, &main::handle_create_list_row)); add_action("add_participant", sigc::mem_fun(*this, &main::handle_add_participant)); + add_action_with_parameter("delete", Glib::VARIANT_TYPE_INT32, [this](auto param) { + auto index = Glib::VariantBase::cast_dynamic>(param); + m_participants->remove(index.get()); + }); } auto main::handle_create_list_row(Glib::RefPtr const item) -> Gtk::Widget * @@ -55,7 +59,7 @@ namespace turns::app::windows auto builder = Gtk::Builder::create_from_resource("/ch/arknet/Turns/windows/create_participant.ui"); auto dialog = Gtk::Builder::get_widget_derived(builder, "create_participant_dialog"); dialog->present(this); - dialog->signal_finished().connect(sigc::mem_fun(*m_participants, &domain::turn_order::append)); + dialog->signal_finished().connect([this](auto name, auto order) { m_participants->append(name, order); }); } } // namespace turns::app::windows -- cgit v1.2.3