diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2025-04-29 16:49:24 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2025-04-29 16:49:24 +0200 |
| commit | 9233c81e68555be6e451e371eccc2914269dd08a (patch) | |
| tree | 42ec324f0d7da75931142fc8a8b1bc9a4f7c0194 | |
| parent | 3ff5bd46952144926d9bd9beedf50023a51913ee (diff) | |
| download | turns-9233c81e68555be6e451e371eccc2914269dd08a.tar.xz turns-9233c81e68555be6e451e371eccc2914269dd08a.zip | |
ui: convert object to property for ParticipantEditor
| -rw-r--r-- | ui/include/turns/ui/participant_editor.hpp | 14 | ||||
| -rw-r--r-- | ui/src/participant_editor.cpp | 51 | ||||
| -rw-r--r-- | ui/src/tracker/actions.cpp | 7 |
3 files changed, 51 insertions, 21 deletions
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 <sigc++/signal.h> +#include <glibmm/property.h> +#include <glibmm/propertyproxy.h> #include <glibmm/refptr.h> #include <glibmm/ustring.h> @@ -38,16 +41,21 @@ namespace turns::ui "priority", }; - ParticipantEditor(Glib::RefPtr<core::participant> participant); + explicit ParticipantEditor(Glib::RefPtr<core::participant> participant); [[nodiscard]] auto get_disposition() const -> core::disposition; [[nodiscard]] auto get_name() const -> Glib::ustring; + [[nodiscard]] auto get_participant() const -> Glib::RefPtr<core::participant>; [[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<core::participant> const & value) -> void; auto set_priority(double value) -> void; + [[nodiscard]] auto property_participant() -> Glib::PropertyProxy<Glib::RefPtr<core::participant>>; + [[nodiscard]] auto property_participant() const -> Glib::PropertyProxy_ReadOnly<Glib::RefPtr<core::participant>>; + auto signal_finished() -> SignalFinishedType; private: @@ -63,11 +71,11 @@ namespace turns::ui Glib::RefPtr<Gtk::SignalListItemFactory> m_disposition_factory; Glib::RefPtr<Gtk::StringList> m_disposition_model; - Glib::RefPtr<core::participant> m_participant; + Glib::Property<Glib::RefPtr<core::participant>> 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 <glibmm/i18n.h> #include <glibmm/objectbase.h> +#include <glibmm/propertyproxy.h> #include <glibmm/refptr.h> #include <glibmm/ustring.h> @@ -48,10 +49,8 @@ namespace turns::ui , m_priority{get_widget<Adwaita::SpinRow>("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<std::uint8_t>(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<core::participant> + { + 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<core::participant> 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<Glib::RefPtr<core::participant>> + { + return m_participant.get_proxy(); + } + + auto ParticipantEditor::property_participant() const -> Glib::PropertyProxy_ReadOnly<Glib::RefPtr<core::participant>> + { + 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<core::disposition>(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<ParticipantEditor>(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<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); } |
