From 225bfa26409243db96a0d36100561c257d0488f9 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Tue, 16 Jul 2024 20:26:15 +0200 Subject: domain: clean up turn_order api --- app/src/windows/tracker.cpp | 6 +- domain/include/turns/domain/turn_order.hpp | 16 ++-- domain/src/turn_order.cpp | 31 +++----- domain/tests/turn_order.cpp | 113 ++++++----------------------- 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(param); auto index = Glib::VariantBase::cast_dynamic>(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 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; + auto clear() -> void; - auto list_model() -> Glib::RefPtr; + auto empty() const noexcept -> bool; - auto n_participants() -> unsigned int; + auto get(unsigned int index) -> Glib::RefPtr; - auto remove(Glib::RefPtr 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; + auto property_empty() const -> Glib::PropertyProxy_ReadOnly; 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 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 + auto turn_order::get(unsigned int index) -> Glib::RefPtr { 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 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); } } -- cgit v1.2.3