summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
Diffstat (limited to 'app/src')
-rw-r--r--app/src/windows/participant_editor.cpp36
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