From 4e3b7165738d6d3648af70553da7fa2096606eb3 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Tue, 16 Jul 2024 09:39:45 +0200 Subject: app/gui: attach model to disposition dropdown --- .../turns/app/windows/participant_editor.hpp | 14 +++++++-- app/src/windows/participant_editor.cpp | 36 +++++++++++++++++++--- 2 files changed, 43 insertions(+), 7 deletions(-) (limited to 'app') diff --git a/app/include/turns/app/windows/participant_editor.hpp b/app/include/turns/app/windows/participant_editor.hpp index cfa2245..36c1d37 100644 --- a/app/include/turns/app/windows/participant_editor.hpp +++ b/app/include/turns/app/windows/participant_editor.hpp @@ -8,6 +8,9 @@ #include #include #include +#include +#include +#include #include @@ -26,12 +29,17 @@ namespace turns::app::windows private: auto handle_finish_clicked() -> void; + auto handle_item_bind(Glib::RefPtr item) -> void; + auto handle_item_setup(Glib::RefPtr item) -> void; AdwDialog * m_adw; - AdwComboRow * m_disposition{}; + AdwComboRow * m_disposition; Gtk::Button * m_finish; - AdwEntryRow * m_name{}; - AdwSpinRow * m_priority{}; + AdwEntryRow * m_name; + AdwSpinRow * m_priority; + + Glib::RefPtr m_disposition_factory; + Glib::RefPtr m_disposition_model; Glib::RefPtr m_participant; diff --git a/app/src/windows/participant_editor.cpp b/app/src/windows/participant_editor.cpp index dd21248..5ca6602 100644 --- a/app/src/windows/participant_editor.cpp +++ b/app/src/windows/participant_editor.cpp @@ -1,12 +1,15 @@ #include "turns/app/windows/participant_editor.hpp" +#include "turns/domain/disposition.hpp" #include "turns/lang/messages.hpp" -#include +#include #include #include +#include #include +#include namespace turns::app::windows { @@ -18,17 +21,30 @@ namespace turns::app::windows , m_finish{builder->get_widget("finish")} , m_name{ADW_ENTRY_ROW(builder->get_widget("name")->gobj())} , m_priority{ADW_SPIN_ROW(builder->get_widget("priority")->gobj())} + , m_disposition_factory{Gtk::SignalListItemFactory::create()} + , m_disposition_model{Gtk::StringList::create()} , m_participant{obj} { + adw_dialog_set_title(m_adw, _(obj ? lang::edit_participant : lang::add_participant)); + m_finish->signal_clicked().connect(sigc::mem_fun(*this, &participant_editor::handle_finish_clicked)); + + for (auto n : std::views::iota(std::uint8_t{}, static_cast(domain::disposition::END))) + { + m_disposition_model->append(presentation_name_for(domain::disposition{n})); + } + + m_disposition_factory->signal_bind().connect(sigc::mem_fun(*this, &participant_editor::handle_item_bind)); + m_disposition_factory->signal_setup().connect(sigc::mem_fun(*this, &participant_editor::handle_item_setup)); + + adw_combo_row_set_factory(m_disposition, GTK_LIST_ITEM_FACTORY(m_disposition_factory->gobj())); + adw_combo_row_set_model(m_disposition, G_LIST_MODEL(m_disposition_model->gobj())); + if (obj) { gtk_editable_set_text(GTK_EDITABLE(m_name), m_participant->property_name().get_value().c_str()); adw_spin_row_set_value(m_priority, m_participant->property_priority().get_value()); } - - adw_dialog_set_title(m_adw, _(obj ? lang::edit_participant : lang::add_participant)); - m_finish->signal_clicked().connect(sigc::mem_fun(*this, &participant_editor::handle_finish_clicked)); } auto participant_editor::present(Gtk::Widget * parent) -> void @@ -55,4 +71,16 @@ namespace turns::app::windows m_signal_finished.emit(name, priority); adw_dialog_close(m_adw); } + + auto participant_editor::handle_item_bind(Glib::RefPtr item) -> void + { + auto value = std::dynamic_pointer_cast(item->get_item())->get_string(); + dynamic_cast(item->get_child())->set_label(value); + } + + auto participant_editor::handle_item_setup(Glib::RefPtr item) -> void + { + item->set_child(*Gtk::make_managed()); + } + } // namespace turns::app::windows \ No newline at end of file -- cgit v1.2.3