From 5433e1b9460cf61299de7ac0bb7e9ae347842274 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Sun, 14 Jul 2024 15:17:21 +0200 Subject: domain/participant: convert to properties --- app/src/windows/main.cpp | 2 +- domain/include/turns/domain/participant.hpp | 19 ++++++++++--------- domain/src/participant.cpp | 28 +++++++++++++++------------- domain/tests/participant.cpp | 22 +++++++++++----------- 4 files changed, 37 insertions(+), 34 deletions(-) diff --git a/app/src/windows/main.cpp b/app/src/windows/main.cpp index 28527cd..d248229 100644 --- a/app/src/windows/main.cpp +++ b/app/src/windows/main.cpp @@ -43,7 +43,7 @@ namespace turns::app::windows { auto participant = std::dynamic_pointer_cast(item); auto widget = Gtk::make_managed(); - widget->set_title(participant->name()); + widget->set_title(participant->property_name()); return widget; } diff --git a/domain/include/turns/domain/participant.hpp b/domain/include/turns/domain/participant.hpp index f6ceff7..7c047ea 100644 --- a/domain/include/turns/domain/participant.hpp +++ b/domain/include/turns/domain/participant.hpp @@ -4,6 +4,8 @@ #include #include +#include +#include #include #include @@ -14,19 +16,18 @@ namespace turns::domain { auto static create(Glib::ustring name, float order_value) -> Glib::RefPtr; - auto operator<=>(participant const & other) const noexcept -> std::partial_ordering; + participant(Glib::ustring name, float order_value); - auto name() const noexcept -> Glib::ustring const &; - auto name(Glib::ustring value) -> participant &; + auto operator<=>(participant const & other) const noexcept -> std::partial_ordering; - auto order() const noexcept -> float; - auto order(float) noexcept -> participant &; + auto property_name() -> Glib::PropertyProxy; + auto property_name() const -> Glib::PropertyProxy_ReadOnly; + auto property_over_value() -> Glib::PropertyProxy; + auto property_over_value() const -> Glib::PropertyProxy_ReadOnly; private: - participant(Glib::ustring name, float order_value); - - Glib::ustring m_name; - float m_order_value; + Glib::Property m_name; + Glib::Property m_order_value; }; auto operator<=>(Glib::RefPtr const & lhs, Glib::RefPtr const & rhs) -> std::partial_ordering; diff --git a/domain/src/participant.cpp b/domain/src/participant.cpp index d7e6b30..8b16916 100644 --- a/domain/src/participant.cpp +++ b/domain/src/participant.cpp @@ -1,6 +1,7 @@ #include "turns/domain/participant.hpp" #include +#include namespace turns::domain { @@ -11,36 +12,37 @@ namespace turns::domain } participant::participant(Glib::ustring name, float order_value) - : m_name{std::move(name)} - , m_order_value{order_value} + : Glib::ObjectBase{typeid(participant)} + , m_name{*this, "name"} + , m_order_value{*this, "order_value"} { + m_name = name; + m_order_value = order_value; } auto participant::operator<=>(participant const & other) const noexcept -> std::partial_ordering { - return order() <=> other.order(); + return m_order_value <=> other.m_order_value; } - auto participant::name() const noexcept -> Glib::ustring const & + auto participant::property_name() -> Glib::PropertyProxy { - return m_name; + return m_name.get_proxy(); } - auto participant::name(Glib::ustring value) -> participant & + auto participant::property_name() const -> Glib::PropertyProxy_ReadOnly { - m_name = std::move(value); - return *this; + return m_name.get_proxy(); } - auto participant::order() const noexcept -> float + auto participant::property_over_value() -> Glib::PropertyProxy { - return m_order_value; + return m_order_value.get_proxy(); } - auto participant::order(float value) noexcept -> participant & + auto participant::property_over_value() const -> Glib::PropertyProxy_ReadOnly { - m_order_value = value; - return *this; + return m_order_value.get_proxy(); } auto operator<=>(Glib::RefPtr const & lhs, Glib::RefPtr const & rhs) -> std::partial_ordering diff --git a/domain/tests/participant.cpp b/domain/tests/participant.cpp index ee8af74..aa6ddcb 100644 --- a/domain/tests/participant.cpp +++ b/domain/tests/participant.cpp @@ -13,40 +13,40 @@ namespace turns::domain::tests { auto constexpr constructed_name = "Vana Thistletop"; auto constexpr constructed_order = 17; - auto instance = participant::create(constructed_name, constructed_order); + auto instance = participant{constructed_name, constructed_order}; SECTION("can be created") { - REQUIRE(instance); + REQUIRE(participant::create(constructed_name, constructed_order)); } SECTION("the name can be read") { - REQUIRE(instance->name() == constructed_name); + REQUIRE(instance.property_name() == constructed_name); } SECTION("the name can be changed") { - instance->name("replaced"); - REQUIRE(instance->name() == "replaced"); + instance.property_name() = "replaced"; + REQUIRE(instance.property_name() == "replaced"); } SECTION("the order can be read") { - REQUIRE(instance->order() == constructed_order); + REQUIRE(instance.property_over_value() == constructed_order); } SECTION("the order can be changed") { - instance->order(8); - REQUIRE(instance->order() == 8); + instance.property_over_value() = 8; + REQUIRE(instance.property_over_value() == 8); } SECTION("can be compared with another participant") { - auto equivalent_instance = participant::create("Equivalent", constructed_order); - auto lesser_instance = participant::create("Lesser", constructed_order - 1); - auto greater_instance = participant::create("Greater", constructed_order + 1); + auto equivalent_instance = participant{"Equivalent", constructed_order}; + auto lesser_instance = participant{"Lesser", constructed_order - 1}; + auto greater_instance = participant{"Greater", constructed_order + 1}; SECTION("yielding std::partial_ordering::equivalent for itself") { -- cgit v1.2.3