diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2025-04-30 20:06:28 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2025-04-30 20:06:28 +0200 |
| commit | 8c00eef46ac5d917292cd3d64b700b3965a06f63 (patch) | |
| tree | 684890735c51ebcba34016d2c8d433841966c481 | |
| parent | adaba10aa7d8e504d3d10bfda42cb79b3ade459e (diff) | |
| download | turns-8c00eef46ac5d917292cd3d64b700b3965a06f63.tar.xz turns-8c00eef46ac5d917292cd3d64b700b3965a06f63.zip | |
ui: use bindings in ParticipantEditor
| -rw-r--r-- | ui/include/turns/ui/participant_editor.hpp | 1 | ||||
| -rw-r--r-- | ui/src/participant_editor.cpp | 40 | ||||
| -rw-r--r-- | ui/src/tracker/actions.cpp | 5 |
3 files changed, 24 insertions, 22 deletions
diff --git a/ui/include/turns/ui/participant_editor.hpp b/ui/include/turns/ui/participant_editor.hpp index 3dfd7fb..4e6bdf4 100644 --- a/ui/include/turns/ui/participant_editor.hpp +++ b/ui/include/turns/ui/participant_editor.hpp @@ -62,6 +62,7 @@ namespace turns::ui auto handle_finish_clicked() -> void; auto handle_item_bind(Glib::RefPtr<Gtk::ListItem> item) -> void; auto handle_item_setup(Glib::RefPtr<Gtk::ListItem> item) -> void; + auto handle_participant_changed() -> void; Adwaita::ComboRow * m_disposition; Gtk::Button * m_finish; 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 <sigc++/functors/mem_fun.h> +#include <glibmm/binding.h> #include <glibmm/i18n.h> #include <glibmm/objectbase.h> #include <glibmm/propertyproxy.h> @@ -22,12 +23,9 @@ #include <gtkmm/stringobject.h> #include <adwaitamm/comborow.hpp> -#include <adwaitamm/dialog.hpp> #include <adwaitamm/entryrow.hpp> #include <adwaitamm/spinrow.hpp> -#include <glib/gi18n.h> - #include <cstdint> #include <memory> #include <ranges> @@ -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<core::disposition>(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<core::disposition>(m_disposition->get_selected())); close(); } @@ -153,4 +139,24 @@ namespace turns::ui item->set_child(*Gtk::make_managed<Gtk::Label>()); } + 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<unsigned>(value); }, + [](auto value) { return static_cast<core::disposition>(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<Glib::Variant<int>>(param); auto participant = m_turn_order->get_typed_object<core::Participant>(index.get()); auto dialog = Gtk::make_managed<ParticipantEditor>(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); } |
