diff options
Diffstat (limited to 'domain/src/turn_order.cpp')
| -rw-r--r-- | domain/src/turn_order.cpp | 63 |
1 files changed, 56 insertions, 7 deletions
diff --git a/domain/src/turn_order.cpp b/domain/src/turn_order.cpp index 7216239..6435db9 100644 --- a/domain/src/turn_order.cpp +++ b/domain/src/turn_order.cpp @@ -3,7 +3,9 @@ #include "turns/domain/participant.hpp" #include <compare> +#include <typeinfo> +#include <glibmm/binding.h> #include <glibmm/refptr.h> namespace turns::domain @@ -34,14 +36,22 @@ namespace turns::domain return Glib::make_refptr_for_instance(new turn_order{}); } + turn_order::turn_order() + : Glib::ObjectBase{typeid(turn_order)} + , m_model{Gio::ListStore<participant>::create()} + , m_empty{*this, "empty", true} + { + Glib::Binding::bind_property(m_model->property_n_items(), m_empty.get_proxy(), Glib::Binding::Flags::DEFAULT, [](auto n) { + return n == 0; + }); + } + auto turn_order::append(Glib::RefPtr<participant> item) -> void { - if (auto [found, index] = find(item, equal_comparator); !found) + if (auto [found, index] = m_model->find(item, equal_comparator); !found) { - insert_sorted(item, comparator); - item->property_priority().signal_changed().connect([this] { - sort(comparator); - }); + m_model->insert_sorted(item, comparator); + item->property_priority().signal_changed().connect([this] { m_model->sort(comparator); }); } } @@ -51,12 +61,51 @@ namespace turns::domain append(participant); } + auto turn_order::get_participant(unsigned int index) -> Glib::RefPtr<participant> + { + return m_model->get_item(index); + } + + auto turn_order::list_model() -> Glib::RefPtr<Gio::ListModel> + { + return m_model; + } + + auto turn_order::n_participants() -> unsigned int + { + return m_model->get_n_items(); + } + auto turn_order::remove(Glib::RefPtr<participant> item) -> void { - if (auto [was_found, index] = find(item); was_found) + if (auto [was_found, index] = m_model->find(item); was_found) { - super::remove(index); + remove(index); } } + auto turn_order::remove(unsigned int index) -> void + { + m_model->remove(index); + } + + auto turn_order::remove_all() -> void + { + m_model->remove_all(); + } + + auto turn_order::start() -> void + { + } + + auto turn_order::get_empty() const noexcept -> bool + { + return m_empty; + } + + auto turn_order::property_empty() const -> Glib::PropertyProxy_ReadOnly<bool> + { + return m_empty.get_proxy(); + } + } // namespace turns::domain
\ No newline at end of file |
