diff options
| -rw-r--r-- | app/src/windows/main.cpp | 2 | ||||
| -rw-r--r-- | domain/include/turns/domain/participant.hpp | 19 | ||||
| -rw-r--r-- | domain/src/participant.cpp | 28 | ||||
| -rw-r--r-- | 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<domain::participant>(item); auto widget = Gtk::make_managed<widgets::participant_list_row>(); - 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 <compare> #include <glibmm/object.h> +#include <glibmm/property.h> +#include <glibmm/propertyproxy.h> #include <glibmm/refptr.h> #include <glibmm/ustring.h> @@ -14,19 +16,18 @@ namespace turns::domain { auto static create(Glib::ustring name, float order_value) -> Glib::RefPtr<participant>; - 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<Glib::ustring>; + auto property_name() const -> Glib::PropertyProxy_ReadOnly<Glib::ustring>; + auto property_over_value() -> Glib::PropertyProxy<float>; + auto property_over_value() const -> Glib::PropertyProxy_ReadOnly<float>; private: - participant(Glib::ustring name, float order_value); - - Glib::ustring m_name; - float m_order_value; + Glib::Property<Glib::ustring> m_name; + Glib::Property<float> m_order_value; }; auto operator<=>(Glib::RefPtr<participant> const & lhs, Glib::RefPtr<participant> 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 <utility> +#include <typeinfo> 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<Glib::ustring> { - return m_name; + return m_name.get_proxy(); } - auto participant::name(Glib::ustring value) -> participant & + auto participant::property_name() const -> Glib::PropertyProxy_ReadOnly<Glib::ustring> { - 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<float> { - 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<float> { - m_order_value = value; - return *this; + return m_order_value.get_proxy(); } auto operator<=>(Glib::RefPtr<participant> const & lhs, Glib::RefPtr<participant> 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") { |
