summaryrefslogtreecommitdiff
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/include/turns/ui/participant_editor.hpp1
-rw-r--r--ui/src/participant_editor.cpp40
-rw-r--r--ui/src/tracker/actions.cpp5
3 files changed, 24 insertions, 22 deletions
diff --git a/ui/include/turns/ui/participant_editor.hpp b/ui/include/turns/ui/participant_editor.hpp
index 3dfd7fb..4e6bdf4 100644
--- a/ui/include/turns/ui/participant_editor.hpp
+++ b/ui/include/turns/ui/participant_editor.hpp
@@ -62,6 +62,7 @@ namespace turns::ui
auto handle_finish_clicked() -> void;
auto handle_item_bind(Glib::RefPtr<Gtk::ListItem> item) -> void;
auto handle_item_setup(Glib::RefPtr<Gtk::ListItem> item) -> void;
+ auto handle_participant_changed() -> void;
Adwaita::ComboRow * m_disposition;
Gtk::Button * m_finish;
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);
}