summaryrefslogtreecommitdiff
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
parent05da3897f944f5775d25de2136ea985d4b0078eb (diff)
downloadturns-9c1a9f41e2cef7f6e151a5f08367607e16d0f908.tar.xz
turns-9c1a9f41e2cef7f6e151a5f08367607e16d0f908.zip
app/ui: enable deletion of participants
-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
-rw-r--r--domain/include/turns/domain/turn_order.hpp3
-rw-r--r--res/widgets/participant_list_row.ui12
-rw-r--r--res/widgets/widgets.cmb17
6 files changed, 45 insertions, 5 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
diff --git a/domain/include/turns/domain/turn_order.hpp b/domain/include/turns/domain/turn_order.hpp
index de7ac8a..6495a27 100644
--- a/domain/include/turns/domain/turn_order.hpp
+++ b/domain/include/turns/domain/turn_order.hpp
@@ -15,6 +15,9 @@ namespace turns::domain
using super = Gio::ListStore<participant>;
using super::super;
+ using super::remove;
+ using super::append;
+
auto static create() -> Glib::RefPtr<turn_order>;
auto append(Glib::ustring const & name, float order_value) -> void;
diff --git a/res/widgets/participant_list_row.ui b/res/widgets/participant_list_row.ui
index e78f79b..b3cab2e 100644
--- a/res/widgets/participant_list_row.ui
+++ b/res/widgets/participant_list_row.ui
@@ -4,6 +4,7 @@
<!-- interface-name participant_list_item.ui -->
<requires lib="gtk" version="4.14"/>
<template class="gtkmm__CustomObject_participant_list_row" parent="GtkListBoxRow">
+ <property name="activatable">False</property>
<property name="child">
<object class="GtkBox">
<property name="css-classes">header</property>
@@ -62,6 +63,17 @@
<object class="GtkBox">
<property name="valign">center</property>
<child>
+ <object class="GtkButton" id="delete">
+ <property name="icon-name">edit-delete-symbolic</property>
+ <!-- Custom object fragments -->
+ <property name="sensitive" bind-source="toggle_defeated" bind-property="active" bind-flags="sync-create|invert-boolean"/>
+ <style>
+ <class name="circular"/>
+ <class name="destructive-action"/>
+ </style>
+ </object>
+ </child>
+ <child>
<object class="GtkButton" id="edit">
<property name="icon-name">document-edit-symbolic</property>
<style>
diff --git a/res/widgets/widgets.cmb b/res/widgets/widgets.cmb
index de76966..373bd40 100644
--- a/res/widgets/widgets.cmb
+++ b/res/widgets/widgets.cmb
@@ -16,9 +16,11 @@
(1,8,"GtkBox",None,2,None,None,None,-1,None,None),
(1,10,"GtkEditableLabel","title",5,None,None,None,None,"&lt;property name=\"sensitive\"\n bind-source=\"toggle_defeated\"\n bind-property=\"active\"\n bind-flags=\"sync-create|invert-boolean\" /&gt;",None),
(1,12,"GtkToggleButton","toggle_defeated",3,None,None,None,-1,None,None),
- (1,13,"GtkButton","edit",8,None,None,None,-1,"&lt;property name=\"sensitive\"\n bind-source=\"toggle_defeated\"\n bind-property=\"active\"\n bind-flags=\"sync-create|invert-boolean\" /&gt;",None)
+ (1,13,"GtkButton","edit",8,None,None,None,1,"&lt;property name=\"sensitive\"\n bind-source=\"toggle_defeated\"\n bind-property=\"active\"\n bind-flags=\"sync-create|invert-boolean\" /&gt;",None),
+ (1,14,"GtkButton","delete",8,None,None,None,None,None,None)
</object>
<object_property>
+ (1,1,"GtkListBoxRow","activatable","False",None,None,None,None,None,None,None,None,None),
(1,1,"GtkListBoxRow","child",None,None,None,None,None,2,None,None,None,None),
(1,1,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
(1,2,"GtkWidget","css-classes","header",None,None,None,None,None,None,None,None,None),
@@ -35,7 +37,9 @@
(1,12,"GtkButton","icon-name","face-smile-symbolic",None,None,None,None,None,None,None,None,None),
(1,12,"GtkWidget","halign","center",None,None,None,None,None,None,None,None,None),
(1,12,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None),
- (1,13,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None)
+ (1,13,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None),
+ (1,14,"GtkButton","icon-name","edit-delete-symbolic",None,None,None,None,None,None,None,None,None),
+ (1,14,"GtkWidget","sensitive",None,None," Custom object fragments ",None,None,None,12,"GtkToggleButton","active","sync-create|invert-boolean")
</object_property>
<object_data>
(1,5,"GtkWidget",1,1,None,None,None,None,None,None),
@@ -54,7 +58,10 @@
(1,12,"GtkWidget",2,2,None,1,None,None,None,None),
(1,13,"GtkWidget",1,1,None,None,None,None,None,None),
(1,13,"GtkWidget",2,2,None,1,None,None,None,None),
- (1,13,"GtkWidget",2,3,None,1,None,None,None,None)
+ (1,13,"GtkWidget",2,3,None,1,None,None,None,None),
+ (1,14,"GtkWidget",1,1,None,None,None,None,None,None),
+ (1,14,"GtkWidget",2,2,None,1,None,None,None,None),
+ (1,14,"GtkWidget",2,3,None,1,None,None,None,None)
</object_data>
<object_data_arg>
(1,5,"GtkWidget",2,2,"name","title"),
@@ -65,6 +72,8 @@
(1,10,"GtkWidget",2,2,"name","title"),
(1,12,"GtkWidget",2,2,"name","circular"),
(1,13,"GtkWidget",2,2,"name","circular"),
- (1,13,"GtkWidget",2,3,"name","suggested-action")
+ (1,13,"GtkWidget",2,3,"name","suggested-action"),
+ (1,14,"GtkWidget",2,2,"name","circular"),
+ (1,14,"GtkWidget",2,3,"name","destructive-action")
</object_data_arg>
</cambalache-project>