summaryrefslogtreecommitdiff
path: root/ui/src/participant_editor.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2025-04-29 16:49:24 +0200
committerFelix Morgner <felix.morgner@gmail.com>2025-04-29 16:49:24 +0200
commit9233c81e68555be6e451e371eccc2914269dd08a (patch)
tree42ec324f0d7da75931142fc8a8b1bc9a4f7c0194 /ui/src/participant_editor.cpp
parent3ff5bd46952144926d9bd9beedf50023a51913ee (diff)
downloadturns-9233c81e68555be6e451e371eccc2914269dd08a.tar.xz
turns-9233c81e68555be6e451e371eccc2914269dd08a.zip
ui: convert object to property for ParticipantEditor
Diffstat (limited to 'ui/src/participant_editor.cpp')
-rw-r--r--ui/src/participant_editor.cpp51
1 files changed, 34 insertions, 17 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();
}