summaryrefslogtreecommitdiff
path: root/domain/src/turn_order.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'domain/src/turn_order.cpp')
-rw-r--r--domain/src/turn_order.cpp63
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