summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/src/windows/main.cpp2
-rw-r--r--domain/include/turns/domain/participant.hpp19
-rw-r--r--domain/src/participant.cpp28
-rw-r--r--domain/tests/participant.cpp22
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")
{