diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2024-07-16 09:39:45 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2024-07-16 09:39:45 +0200 |
| commit | 4e3b7165738d6d3648af70553da7fa2096606eb3 (patch) | |
| tree | f5642951ac9acb14d45b3f3303885dfdf6ae406d /app/src | |
| parent | cebfd75e95f19b4afb29aee13fc4c39119a1099e (diff) | |
| download | turns-4e3b7165738d6d3648af70553da7fa2096606eb3.tar.xz turns-4e3b7165738d6d3648af70553da7fa2096606eb3.zip | |
app/gui: attach model to disposition dropdown
Diffstat (limited to 'app/src')
| -rw-r--r-- | app/src/windows/participant_editor.cpp | 36 |
1 files changed, 32 insertions, 4 deletions
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 <print> +#include <ranges> #include <glibmm/i18n.h> #include <gtkmm/editable.h> +#include <gtkmm/label.h> #include <gtkmm/listboxrow.h> +#include <gtkmm/stringobject.h> namespace turns::app::windows { @@ -18,17 +21,30 @@ namespace turns::app::windows , m_finish{builder->get_widget<Gtk::Button>("finish")} , m_name{ADW_ENTRY_ROW(builder->get_widget<Gtk::ListBoxRow>("name")->gobj())} , m_priority{ADW_SPIN_ROW(builder->get_widget<Gtk::ListBoxRow>("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<std::uint8_t>(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<Gtk::ListItem> item) -> void + { + auto value = std::dynamic_pointer_cast<Gtk::StringObject>(item->get_item())->get_string(); + dynamic_cast<Gtk::Label *>(item->get_child())->set_label(value); + } + + auto participant_editor::handle_item_setup(Glib::RefPtr<Gtk::ListItem> item) -> void + { + item->set_child(*Gtk::make_managed<Gtk::Label>()); + } + } // namespace turns::app::windows
\ No newline at end of file |
