From 8c00eef46ac5d917292cd3d64b700b3965a06f63 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Wed, 30 Apr 2025 20:06:28 +0200 Subject: ui: use bindings in ParticipantEditor --- ui/src/participant_editor.cpp | 40 +++++++++++++++++++++++----------------- ui/src/tracker/actions.cpp | 5 ----- 2 files changed, 23 insertions(+), 22 deletions(-) (limited to 'ui/src') diff --git a/ui/src/participant_editor.cpp b/ui/src/participant_editor.cpp index 9c0e0f1..09feb7e 100644 --- a/ui/src/participant_editor.cpp +++ b/ui/src/participant_editor.cpp @@ -7,6 +7,7 @@ #include +#include #include #include #include @@ -22,12 +23,9 @@ #include #include -#include #include #include -#include - #include #include #include @@ -64,16 +62,7 @@ namespace turns::ui m_disposition->set_factory(m_disposition_factory); m_disposition->set_model(m_disposition_model); - property_participant().signal_changed().connect([this] { - auto participant = property_participant().get_value(); - set_title(_(participant ? lang::edit_participant : lang::add_participant)); - if (participant) - { - set_name(participant->property_name().get_value()); - set_priority(participant->property_priority()); - set_disposition(participant->property_disposition().get_value()); - } - }); + property_participant().signal_changed().connect(sigc::mem_fun(*this, &ParticipantEditor::handle_participant_changed)); set_participant(participant); } @@ -135,10 +124,7 @@ namespace turns::ui auto ParticipantEditor::handle_finish_clicked() -> void { - auto name = m_name->get_text(); - auto priority = m_priority->get_value(); - auto disposition = static_cast(m_disposition->get_selected()); - m_signal_finished.emit(name, priority, disposition); + m_signal_finished.emit(m_name->get_text(), m_priority->get_value(), static_cast(m_disposition->get_selected())); close(); } @@ -153,4 +139,24 @@ namespace turns::ui item->set_child(*Gtk::make_managed()); } + auto ParticipantEditor::handle_participant_changed() -> void + { + auto value = m_participant.get_value(); + set_title(_(value ? lang::edit_participant : lang::add_participant)); + if (value) + { + Glib::Binding::bind_property(value->property_name(), + m_name->property_text(), + Glib::Binding::Flags::BIDIRECTIONAL | Glib::Binding::Flags::SYNC_CREATE); + Glib::Binding::bind_property(value->property_priority(), + m_priority->property_value(), + Glib::Binding::Flags::BIDIRECTIONAL | Glib::Binding::Flags::SYNC_CREATE); + Glib::Binding::bind_property(value->property_disposition(), + m_disposition->property_selected(), + Glib::Binding::Flags::BIDIRECTIONAL | Glib::Binding::Flags::SYNC_CREATE, + [](auto value) { return static_cast(value); }, + [](auto value) { return static_cast(value); }); + } + } + } // namespace turns::ui \ No newline at end of file diff --git a/ui/src/tracker/actions.cpp b/ui/src/tracker/actions.cpp index 08d321a..ba48177 100644 --- a/ui/src/tracker/actions.cpp +++ b/ui/src/tracker/actions.cpp @@ -64,11 +64,6 @@ namespace turns::ui auto index = Glib::VariantBase::cast_dynamic>(param); auto participant = m_turn_order->get_typed_object(index.get()); auto dialog = Gtk::make_managed(participant); - dialog->signal_finished().connect([participant](auto n, auto p, auto d) { - participant->property_name() = n; - participant->property_priority() = p; - participant->property_disposition() = d; - }); dialog->present(this); } -- cgit v1.2.3