summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2024-07-14 22:39:04 +0200
committerFelix Morgner <felix.morgner@gmail.com>2024-07-14 22:39:04 +0200
commit9c1a9f41e2cef7f6e151a5f08367607e16d0f908 (patch)
treed7abb8ab7e3ea86c920bbe0698233795ad96d171 /app
parent05da3897f944f5775d25de2136ea985d4b0078eb (diff)
downloadturns-9c1a9f41e2cef7f6e151a5f08367607e16d0f908.tar.xz
turns-9c1a9f41e2cef7f6e151a5f08367607e16d0f908.zip
app/ui: enable deletion of participants
Diffstat (limited to 'app')
-rw-r--r--app/include/turns/app/widgets/participant_list_row.hpp3
-rw-r--r--app/src/widgets/participant_list_row.cpp9
-rw-r--r--app/src/windows/main.cpp6
3 files changed, 17 insertions, 1 deletions
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<participant_list_row, Gtk::ListBoxRow>
{
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 <glibmm/i18n.h>
#include <glibmm/ustring.h>
+#include <glibmm/variant.h>
namespace turns::app::widgets
{
@@ -17,11 +18,19 @@ namespace turns::app::widgets
: Glib::ObjectBase(TYPE_NAME)
, template_widget<participant_list_row, Gtk::ListBoxRow>{TEMPLATE}
{
+ m_delete = get_widget<Gtk::Button>("delete");
m_edit = get_widget<Gtk::Button>("edit");
m_subtitle = get_widget<Gtk::Label>("subtitle");
m_title = get_widget<Gtk::EditableLabel>("title");
m_toggle_defeated = get_widget<Gtk::ToggleButton>("toggle_defeated");
+ signal_map().connect([this]{
+ m_delete->set_action_target_value(Glib::Variant<int>::create(get_index()));
+ m_delete->set_action_name("win.delete");
+ m_edit->set_action_target_value(Glib::Variant<int>::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<Glib::Variant<int>>(param);
+ m_participants->remove(index.get());
+ });
}
auto main::handle_create_list_row(Glib::RefPtr<Glib::Object> 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<windows::create_participant>(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