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 /ui/src | |
| parent | 3ff5bd46952144926d9bd9beedf50023a51913ee (diff) | |
| download | turns-9233c81e68555be6e451e371eccc2914269dd08a.tar.xz turns-9233c81e68555be6e451e371eccc2914269dd08a.zip | |
ui: convert object to property for ParticipantEditor
Diffstat (limited to 'ui/src')
| -rw-r--r-- | ui/src/participant_editor.cpp | 51 | ||||
| -rw-r--r-- | ui/src/tracker/actions.cpp | 7 |
2 files changed, 40 insertions, 18 deletions
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); } |
