diff options
| -rw-r--r-- | app/include/turns/app/widgets/participant_list_row.hpp | 3 | ||||
| -rw-r--r-- | app/src/widgets/participant_list_row.cpp | 9 | ||||
| -rw-r--r-- | app/src/windows/main.cpp | 6 | ||||
| -rw-r--r-- | domain/include/turns/domain/turn_order.hpp | 3 | ||||
| -rw-r--r-- | res/widgets/participant_list_row.ui | 12 | ||||
| -rw-r--r-- | res/widgets/widgets.cmb | 17 |
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,"<property name=\"sensitive\"\n bind-source=\"toggle_defeated\"\n bind-property=\"active\"\n bind-flags=\"sync-create|invert-boolean\" />",None), (1,12,"GtkToggleButton","toggle_defeated",3,None,None,None,-1,None,None), - (1,13,"GtkButton","edit",8,None,None,None,-1,"<property name=\"sensitive\"\n bind-source=\"toggle_defeated\"\n bind-property=\"active\"\n bind-flags=\"sync-create|invert-boolean\" />",None) + (1,13,"GtkButton","edit",8,None,None,None,1,"<property name=\"sensitive\"\n bind-source=\"toggle_defeated\"\n bind-property=\"active\"\n bind-flags=\"sync-create|invert-boolean\" />",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> |
