From 9233c81e68555be6e451e371eccc2914269dd08a Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Tue, 29 Apr 2025 16:49:24 +0200 Subject: ui: convert object to property for ParticipantEditor --- ui/include/turns/ui/participant_editor.hpp | 14 ++++++-- ui/src/participant_editor.cpp | 51 ++++++++++++++++++++---------- ui/src/tracker/actions.cpp | 7 +++- 3 files changed, 51 insertions(+), 21 deletions(-) (limited to 'ui') diff --git a/ui/include/turns/ui/participant_editor.hpp b/ui/include/turns/ui/participant_editor.hpp index e2017fd..0b1e0f1 100644 --- a/ui/include/turns/ui/participant_editor.hpp +++ b/ui/include/turns/ui/participant_editor.hpp @@ -3,10 +3,13 @@ #include "turns/core/disposition.hpp" #include "turns/core/fwd.hpp" +#include "turns/core/participant.hpp" #include "turns/ui/template_widget.hpp" #include +#include +#include #include #include @@ -38,16 +41,21 @@ namespace turns::ui "priority", }; - ParticipantEditor(Glib::RefPtr participant); + explicit ParticipantEditor(Glib::RefPtr participant); [[nodiscard]] auto get_disposition() const -> core::disposition; [[nodiscard]] auto get_name() const -> Glib::ustring; + [[nodiscard]] auto get_participant() const -> Glib::RefPtr; [[nodiscard]] auto get_priority() const -> double; auto set_disposition(core::disposition value) -> void; auto set_name(Glib::ustring const & value) -> void; + auto set_participant(Glib::RefPtr const & value) -> void; auto set_priority(double value) -> void; + [[nodiscard]] auto property_participant() -> Glib::PropertyProxy>; + [[nodiscard]] auto property_participant() const -> Glib::PropertyProxy_ReadOnly>; + auto signal_finished() -> SignalFinishedType; private: @@ -63,11 +71,11 @@ namespace turns::ui Glib::RefPtr m_disposition_factory; Glib::RefPtr m_disposition_model; - Glib::RefPtr m_participant; + Glib::Property> m_participant; SignalFinishedType m_signal_finished{}; }; -} // namespace turns::ui::widgets +} // namespace turns::ui #endif \ No newline at end of file diff --git a/ui/src/participant_editor.cpp b/ui/src/participant_editor.cpp index 8598139..0016c02 100644 --- a/ui/src/participant_editor.cpp +++ b/ui/src/participant_editor.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -48,10 +49,8 @@ namespace turns::ui , m_priority{get_widget("priority")} , m_disposition_factory{Gtk::SignalListItemFactory::create()} , m_disposition_model{Gtk::StringList::create()} - , m_participant{participant} + , m_participant{*this, "participant", nullptr} { - set_title(_(m_participant ? lang::edit_participant : lang::add_participant)); - m_finish->signal_clicked().connect(sigc::mem_fun(*this, &ParticipantEditor::handle_finish_clicked)); for (auto n : std::views::iota(std::uint8_t{}, static_cast(core::disposition::END))) @@ -65,12 +64,18 @@ namespace turns::ui m_disposition->set_factory(m_disposition_factory); m_disposition->set_model(m_disposition_model); - if (m_participant) - { - set_name(m_participant->property_name().get_value()); - set_priority(m_participant->property_priority()); - set_disposition(m_participant->property_disposition().get_value()); - } + 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()); + } + }); + + set_participant(participant); } auto ParticipantEditor::get_disposition() const -> core::disposition @@ -83,6 +88,11 @@ namespace turns::ui return m_name->get_text(); } + auto ParticipantEditor::get_participant() const -> Glib::RefPtr + { + return m_participant.get_value(); + } + auto ParticipantEditor::get_priority() const -> double { return m_priority->get_value(); @@ -98,11 +108,26 @@ namespace turns::ui m_name->set_text(value); } + auto ParticipantEditor::set_participant(Glib::RefPtr const & value) -> void + { + m_participant.set_value(value); + } + auto ParticipantEditor::set_priority(double value) -> void { m_priority->set_value(value); } + auto ParticipantEditor::property_participant() -> Glib::PropertyProxy> + { + return m_participant.get_proxy(); + } + + auto ParticipantEditor::property_participant() const -> Glib::PropertyProxy_ReadOnly> + { + return m_participant.get_proxy(); + } + auto ParticipantEditor::signal_finished() -> SignalFinishedType { return m_signal_finished; @@ -113,14 +138,6 @@ namespace turns::ui auto name = m_name->get_text(); auto priority = m_priority->get_value(); auto disposition = static_cast(m_disposition->get_selected()); - - if (m_participant) - { - m_participant->property_name() = name; - m_participant->property_priority() = priority; - m_participant->property_disposition() = disposition; - } - m_signal_finished.emit(name, priority, disposition); close(); } diff --git a/ui/src/tracker/actions.cpp b/ui/src/tracker/actions.cpp index 51642f8..5f1d2e0 100644 --- a/ui/src/tracker/actions.cpp +++ b/ui/src/tracker/actions.cpp @@ -49,8 +49,8 @@ namespace turns::ui auto tracker::add_participant() -> void { auto dialog = Gtk::make_managed(nullptr); - dialog->present(this); dialog->signal_finished().connect([this](auto n, auto p, auto d) { m_turn_order->add(n, p, d); }); + dialog->present(this); } auto tracker::delete_participant(Glib::VariantBase param) -> void @@ -64,6 +64,11 @@ 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