diff options
Diffstat (limited to 'app/src/widgets')
| -rw-r--r-- | app/src/widgets/participant_row.cpp | 20 | ||||
| -rw-r--r-- | app/src/widgets/turn_order_view.cpp | 66 |
2 files changed, 72 insertions, 14 deletions
diff --git a/app/src/widgets/participant_row.cpp b/app/src/widgets/participant_row.cpp index 9e0419a..75321e5 100644 --- a/app/src/widgets/participant_row.cpp +++ b/app/src/widgets/participant_row.cpp @@ -45,22 +45,14 @@ namespace turns::app::widgets if (participant) { - set_title(participant->get_name()); - auto priority = participant->get_priority(); - set_subtitle(std::vformat(_(lang::priority_number), std::make_format_args(priority))); - } - } - - auto participant_row::set_subtitle(Glib::ustring const & value) -> void - { - m_subtitle->property_label() = value; - } + m_title_label = Glib::Binding::bind_property(participant->property_name(), m_title->property_label(), Glib::Binding::Flags::SYNC_CREATE); - auto participant_row::set_title(Glib::ustring const & value) -> void - { - m_title->property_label() = value; + m_subtitle_label = Glib::Binding::bind_property(participant->property_priority(), + m_subtitle->property_label(), + Glib::Binding::Flags::SYNC_CREATE, + [](auto n) { return std::vformat(_(lang::priority_number), std::make_format_args(n)); }); + } } - auto participant_row::handle_delete() -> void { auto index = Glib::Variant<int>::create(get_index()); diff --git a/app/src/widgets/turn_order_view.cpp b/app/src/widgets/turn_order_view.cpp new file mode 100644 index 0000000..9d49ad8 --- /dev/null +++ b/app/src/widgets/turn_order_view.cpp @@ -0,0 +1,66 @@ +#include "turns/app/widgets/turn_order_view.hpp" + +#include "turns/app/widgets/participant_row.hpp" +#include "turns/domain/participant.hpp" +#include "turns/lang/messages.hpp" + +#include <format> + +#include <sigc++/functors/mem_fun.h> + +namespace turns::app::widgets +{ + namespace + { + auto constexpr static TYPE_NAME = "turn_order_view"; + auto constexpr static TEMPLATE = "/ch/arknet/Turns/widgets/turn_order_view.ui"; + } // namespace + + turn_order_view::turn_order_view() + : Glib::ObjectBase(TYPE_NAME) + , template_widget<turn_order_view, Gtk::ScrolledWindow>{TEMPLATE} + , m_model{domain::turn_order::create()} + , m_view{get_widget<Gtk::ListBox>("view")} + , m_n_items{m_model.get(), "n_items"} + { + m_view->bind_model(m_model, sigc::mem_fun(*this, &turn_order_view::handle_create_row)); + } + + auto turn_order_view::append(Glib::ustring name, float priority, domain::disposition disposition) -> void + { + auto participant = domain::participant::create(name, priority, disposition); + m_model->append(participant); + } + + auto turn_order_view::clear() -> void + { + m_model->remove_all(); + } + + auto turn_order_view::get(std::size_t index) -> Glib::RefPtr<domain::participant> + { + return m_model->get_item(index); + } + + auto turn_order_view::remove(std::size_t index) -> void + { + m_model->remove(index); + } + + auto turn_order_view::get_n_items() const noexcept -> unsigned int + { + return m_n_items; + } + + auto turn_order_view::property_n_items() const -> Glib::PropertyProxy_ReadOnly<unsigned int> + { + return m_n_items; + } + + auto turn_order_view::handle_create_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget * + { + auto participant = std::dynamic_pointer_cast<domain::participant>(item); + return Gtk::make_managed<widgets::participant_row>(participant); + } + +} // namespace turns::app::widgets
\ No newline at end of file |
