summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/windows/tracker.cpp6
-rw-r--r--domain/include/turns/domain/turn_order.hpp16
-rw-r--r--domain/src/turn_order.cpp31
-rw-r--r--domain/tests/turn_order.cpp113
4 files changed, 42 insertions, 124 deletions
diff --git a/app/src/windows/tracker.cpp b/app/src/windows/tracker.cpp
index 639cf8a..5af405b 100644
--- a/app/src/windows/tracker.cpp
+++ b/app/src/windows/tracker.cpp
@@ -36,7 +36,7 @@ namespace turns::app::windows
{
m_stack->add(*m_turn_order);
- auto clear_action = add_action("clear", sigc::mem_fun(*m_turn_order->get_model(), &domain::turn_order::remove_all));
+ auto clear_action = add_action("clear", sigc::mem_fun(*m_turn_order->get_model(), &domain::turn_order::clear));
add_action("add_participant", sigc::mem_fun(*this, &tracker::handle_add_participant));
add_action_with_parameter("delete", Glib::VARIANT_TYPE_INT32, sigc::mem_fun(*this, &tracker::handle_delete_participant));
add_action_with_parameter("edit", Glib::VARIANT_TYPE_INT32, sigc::mem_fun(*this, &tracker::handle_edit_participant));
@@ -73,7 +73,7 @@ namespace turns::app::windows
{
auto [lifeline, dialog] = editor_for(nullptr);
dialog->present(this);
- dialog->signal_finished().connect([this](auto n, auto p, auto d) { m_turn_order->get_model()->append(n, p, d); });
+ dialog->signal_finished().connect([this](auto n, auto p, auto d) { m_turn_order->get_model()->add(n, p, d); });
}
auto tracker::handle_delete_participant(Glib::VariantBase param) -> void
@@ -86,7 +86,7 @@ namespace turns::app::windows
{
static_cast<void>(param);
auto index = Glib::VariantBase::cast_dynamic<Glib::Variant<int>>(param);
- auto participant = m_turn_order->get_model()->get_participant(index.get());
+ auto participant = m_turn_order->get_model()->get(index.get());
auto [lifeline, dialog] = editor_for(participant);
dialog->present(this);
}
diff --git a/domain/include/turns/domain/turn_order.hpp b/domain/include/turns/domain/turn_order.hpp
index 8f65104..d3f74eb 100644
--- a/domain/include/turns/domain/turn_order.hpp
+++ b/domain/include/turns/domain/turn_order.hpp
@@ -18,22 +18,22 @@ namespace turns::domain
turn_order();
- auto append(Glib::RefPtr<participant> item) -> void;
- auto append(Glib::ustring const & name, float priority, disposition disposition) -> void;
+ auto add(Glib::ustring const & name, float priority, disposition disposition) -> void;
- auto get_participant(unsigned int index) -> Glib::RefPtr<participant>;
+ auto clear() -> void;
- auto list_model() -> Glib::RefPtr<Gio::ListModel>;
+ auto empty() const noexcept -> bool;
- auto n_participants() -> unsigned int;
+ auto get(unsigned int index) -> Glib::RefPtr<participant>;
- auto remove(Glib::RefPtr<participant> item) -> void;
auto remove(unsigned int index) -> void;
- auto remove_all() -> void;
+
+ auto size() -> unsigned int;
auto start() -> void;
- auto get_empty() const noexcept -> bool;
+ auto list_model() -> Glib::RefPtr<Gio::ListModel>;
+
auto property_empty() const -> Glib::PropertyProxy_ReadOnly<bool>;
private:
diff --git a/domain/src/turn_order.cpp b/domain/src/turn_order.cpp
index 6435db9..990e9c1 100644
--- a/domain/src/turn_order.cpp
+++ b/domain/src/turn_order.cpp
@@ -46,22 +46,17 @@ namespace turns::domain
});
}
- auto turn_order::append(Glib::RefPtr<participant> item) -> void
+ auto turn_order::add(Glib::ustring const & name, float priority, disposition disposition) -> void
{
- if (auto [found, index] = m_model->find(item, equal_comparator); !found)
+ auto participant = participant::create(name, priority, disposition);
+ if (auto [found, index] = m_model->find(participant, equal_comparator); !found)
{
- m_model->insert_sorted(item, comparator);
- item->property_priority().signal_changed().connect([this] { m_model->sort(comparator); });
+ m_model->insert_sorted(participant, comparator);
+ participant->property_priority().signal_changed().connect([this] { m_model->sort(comparator); });
}
}
- auto turn_order::append(Glib::ustring const & name, float priority, disposition disposition) -> void
- {
- auto participant = participant::create(name, priority, disposition);
- append(participant);
- }
-
- auto turn_order::get_participant(unsigned int index) -> Glib::RefPtr<participant>
+ auto turn_order::get(unsigned int index) -> Glib::RefPtr<participant>
{
return m_model->get_item(index);
}
@@ -71,25 +66,17 @@ namespace turns::domain
return m_model;
}
- auto turn_order::n_participants() -> unsigned int
+ auto turn_order::size() -> unsigned int
{
return m_model->get_n_items();
}
- auto turn_order::remove(Glib::RefPtr<participant> item) -> void
- {
- if (auto [was_found, index] = m_model->find(item); was_found)
- {
- remove(index);
- }
- }
-
auto turn_order::remove(unsigned int index) -> void
{
m_model->remove(index);
}
- auto turn_order::remove_all() -> void
+ auto turn_order::clear() -> void
{
m_model->remove_all();
}
@@ -98,7 +85,7 @@ namespace turns::domain
{
}
- auto turn_order::get_empty() const noexcept -> bool
+ auto turn_order::empty() const noexcept -> bool
{
return m_empty;
}
diff --git a/domain/tests/turn_order.cpp b/domain/tests/turn_order.cpp
index 9feb47a..5bdc157 100644
--- a/domain/tests/turn_order.cpp
+++ b/domain/tests/turn_order.cpp
@@ -22,119 +22,50 @@ namespace turns::domain::tests
SECTION("has 0 items")
{
- REQUIRE(instance->n_participants() == 0);
+ REQUIRE(instance->size() == 0);
}
- SECTION("accepts a new participant in form of a refptr")
+ SECTION("accepts a new participant")
{
- instance->append(participant::create("Honey Bunches of Oats", 12, disposition::friendly));
- REQUIRE(instance->n_participants() == 1);
+ instance->add("River along the Field", 14, disposition::friendly);
+ REQUIRE(instance->size() == 1);
}
- SECTION("accepts a new participant in form of components")
- {
- instance->append("River along the Field", 14, disposition::friendly);
- REQUIRE(instance->n_participants() == 1);
- }
-
- SECTION("does nothing when trying to remove an item by refptr if no items were added beforehand")
- {
- instance->remove(participant::create("Patch in the Forest", 3, disposition::friendly));
- REQUIRE(instance->n_participants() == 0);
- }
-
- SECTION("does nothing when trying to remove an item by index if no items were added beforehand")
+ SECTION("does nothing when trying to remove an item if no items were added beforehand")
{
instance->remove(5);
- REQUIRE(instance->n_participants() == 0);
+ REQUIRE(instance->size() == 0);
}
- SECTION("allows the removal of an item by refptr if the same item was added beforehand")
+ SECTION("automatically sorts elements added in descending order of priority")
{
- auto item = participant::create("Blank Canvas", 23, disposition::friendly);
- instance->append(item);
- instance->remove(item);
- REQUIRE(instance->n_participants() == 0);
- }
-
- SECTION("does nothing when trying to remove an item by refptr that was not added beforehand")
- {
- auto item = participant::create("Blank Canvas", 23, disposition::friendly);
- instance->append(item);
- instance->remove(participant::create("Spell of Rain", 6, disposition::friendly));
- REQUIRE(instance->n_participants() == 1);
- }
-
- SECTION("automatically sorts appended refptrs in descending order of priority")
- {
- SECTION("when appending the higher one last")
+ SECTION("when adding the higher one last")
{
- instance->append(participant::create("Snow on the Field", 2, disposition::friendly));
- instance->append(participant::create("Bees behind the Cottage", 8, disposition::friendly));
- REQUIRE(instance->get_participant(0)->get_name() == "Bees behind the Cottage");
+ instance->add("Tree Blossom", 6, disposition::friendly);
+ instance->add("Fish in the River", 12, disposition::friendly);
+ REQUIRE(instance->get(0)->get_name() == "Fish in the River");
}
- SECTION("when appending the higher one first")
+ SECTION("when adding the higher one first")
{
- instance->append(participant::create("Bees behind the Cottage", 8, disposition::friendly));
- instance->append(participant::create("Snow on the Field", 2, disposition::friendly));
- REQUIRE(instance->get_participant(0)->get_name() == "Bees behind the Cottage");
+ instance->add("Fish in the River", 12, disposition::friendly);
+ instance->add("Tree Blossom", 6, disposition::friendly);
+ REQUIRE(instance->get(0)->get_name() == "Fish in the River");
}
- SECTION("keeping the insertion order when appending items with equal priority")
+ SECTION("keeping the insertion order when adding items with equal priority")
{
- instance->append(participant::create("Snow on the Field", 8, disposition::friendly));
- instance->append(participant::create("Bees behind the Cottage", 8, disposition::friendly));
- REQUIRE(instance->get_participant(0)->get_name() == "Snow on the Field");
+ instance->add("Fish in the River", 6, disposition::friendly);
+ instance->add("Tree Blossom", 6, disposition::friendly);
+ REQUIRE(instance->get(0)->get_name() == "Fish in the River");
}
}
- SECTION("automatically sorts elements appended by components in descending order of priority")
- {
- SECTION("when appending the higher one last")
- {
- instance->append("Tree Blossom", 6, disposition::friendly);
- instance->append("Fish in the River", 12, disposition::friendly);
- REQUIRE(instance->get_participant(0)->get_name() == "Fish in the River");
- }
-
- SECTION("when appending the higher one first")
- {
- instance->append("Fish in the River", 12, disposition::friendly);
- instance->append("Tree Blossom", 6, disposition::friendly);
- REQUIRE(instance->get_participant(0)->get_name() == "Fish in the River");
- }
-
- SECTION("keeping the insertion order when appending items with equal priority")
- {
- instance->append("Fish in the River", 6, disposition::friendly);
- instance->append("Tree Blossom", 6, disposition::friendly);
- REQUIRE(instance->get_participant(0)->get_name() == "Fish in the River");
- }
- }
-
- SECTION("does not accept the same item twice by the same refptr")
- {
- auto item = participant::create("Angelic Berry", 9, disposition::friendly);
- instance->append(item);
- instance->append(item);
- REQUIRE(instance->n_participants() == 1);
- }
-
- SECTION("does not accept the same item twice by different refptrs")
- {
- auto item_one = participant::create("Misty Meadow", 14.2, disposition::friendly);
- auto item_two = participant::create("Misty Meadow", 14.2, disposition::friendly);
- instance->append(item_one);
- instance->append(item_two);
- REQUIRE(instance->n_participants() == 1);
- }
-
SECTION("does not accept the same item twice by components")
{
- instance->append("Frozen Apple Tree", 2.1, disposition::friendly);
- instance->append("Frozen Apple Tree", 2.1, disposition::friendly);
- REQUIRE(instance->n_participants() == 1);
+ instance->add("Frozen Apple Tree", 2.1, disposition::friendly);
+ instance->add("Frozen Apple Tree", 2.1, disposition::friendly);
+ REQUIRE(instance->size() == 1);
}
}