diff options
Diffstat (limited to 'ui/src')
| -rw-r--r-- | ui/src/participant_editor.cpp | 40 | ||||
| -rw-r--r-- | ui/src/tracker/actions.cpp | 5 |
2 files changed, 23 insertions, 22 deletions
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); } |
