diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/include/turns/app/windows/participant_editor.hpp | 14 | ||||
| -rw-r--r-- | app/src/windows/participant_editor.cpp | 36 |
2 files changed, 43 insertions, 7 deletions
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 <gtkmm/builder.h> #include <gtkmm/button.h> #include <gtkmm/widget.h> +#include <gtkmm/stringlist.h> +#include <gtkmm/signallistitemfactory.h> +#include <gtkmm/listitem.h> #include <sigc++/signal.h> @@ -26,12 +29,17 @@ namespace turns::app::windows private: 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; 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<Gtk::SignalListItemFactory> m_disposition_factory; + Glib::RefPtr<Gtk::StringList> m_disposition_model; Glib::RefPtr<domain::participant> 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 <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 |
