summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
Diffstat (limited to 'core/src')
-rw-r--r--core/src/disposition.cpp37
-rw-r--r--core/src/init.cpp5
-rw-r--r--core/src/participant.cpp10
-rw-r--r--core/src/turn_order.cpp2
4 files changed, 42 insertions, 12 deletions
diff --git a/core/src/disposition.cpp b/core/src/disposition.cpp
index 81fb410..4a1a496 100644
--- a/core/src/disposition.cpp
+++ b/core/src/disposition.cpp
@@ -3,24 +3,49 @@
#include <glibmm/i18n.h>
#include <glibmm/ustring.h>
+#include <glib-object.h>
+
+#include <array>
+#include <atomic>
+
namespace turns::core
{
- auto presentation_name_for(disposition value) -> Glib::ustring
+ auto presentation_name_for(Disposition value) -> Glib::ustring
{
switch (value)
{
- case disposition::neutral:
+ case Disposition::neutral:
return _("Neutral");
- case disposition::friendly:
+ case Disposition::friendly:
return _("Friendly");
- case disposition::hostile:
+ case Disposition::hostile:
return _("Hostile");
- case disposition::secret:
+ case Disposition::secret:
return _("Secret");
default:
return _("Unknown disposition value");
}
}
-} // namespace turns::core \ No newline at end of file
+} // namespace turns::core
+
+namespace Glib
+{
+ auto Value<turns::core::Disposition>::value_type() -> GType
+ {
+ auto static is_initialized = std::atomic_flag{false};
+ auto static const values = std::array{
+ GEnumValue{static_cast<int>(turns::core::Disposition::neutral), "TURNS_DISPOSITION_NEUTRAL", "neutral" },
+ GEnumValue{static_cast<int>(turns::core::Disposition::friendly), "TURNS_DISPOSITION_FRIENDLY", "friendly"},
+ GEnumValue{static_cast<int>(turns::core::Disposition::hostile), "TURNS_DISPOSITION_HOSTILE", "hostile" },
+ GEnumValue{static_cast<int>(turns::core::Disposition::secret), "TURNS_DISPOSITION_SECRET", "secret" },
+ GEnumValue{0, nullptr, nullptr },
+ };
+ if (!is_initialized.test_and_set())
+ {
+ gtype_ = g_enum_register_static("TurnsDisposition", values.data());
+ }
+ return gtype_;
+ }
+} // namespace Glib \ No newline at end of file
diff --git a/core/src/init.cpp b/core/src/init.cpp
index 3991248..3434f91 100644
--- a/core/src/init.cpp
+++ b/core/src/init.cpp
@@ -1,8 +1,11 @@
#include "turns/core/init.hpp"
+#include "turns/core/disposition.hpp"
#include "turns/core/participant.hpp"
#include "turns/core/turn_order.hpp"
+#include <glib-object.h>
+
namespace turns::core
{
@@ -10,6 +13,8 @@ namespace turns::core
{
static_cast<void>(Participant{});
static_cast<void>(turn_order{});
+
+ g_type_ensure(Glib::Value<Disposition>::value_type());
}
} // namespace turns::core \ No newline at end of file
diff --git a/core/src/participant.cpp b/core/src/participant.cpp
index 343d461..242b1b2 100644
--- a/core/src/participant.cpp
+++ b/core/src/participant.cpp
@@ -15,14 +15,14 @@
namespace turns::core
{
- auto Participant::create(Glib::ustring name, float priority, core::disposition disposition) -> Glib::RefPtr<Participant>
+ auto Participant::create(Glib::ustring name, float priority, core::Disposition disposition) -> Glib::RefPtr<Participant>
{
return Glib::make_refptr_for_instance(new Participant{name, priority, disposition});
}
auto Participant::create(nlohmann::json const & serialized) -> Glib::RefPtr<Participant>
{
- auto disposition = serialized.value("disposition", disposition::neutral);
+ auto disposition = serialized.value("disposition", Disposition::neutral);
auto priority = serialized.value("priority", 0.0f);
auto name = serialized.value("name", std::string{});
@@ -40,7 +40,7 @@ namespace turns::core
{
}
- Participant::Participant(Glib::ustring name, float priority, core::disposition disposition)
+ Participant::Participant(Glib::ustring name, float priority, core::Disposition disposition)
: Participant()
{
m_name = name;
@@ -53,7 +53,7 @@ namespace turns::core
return m_priority <=> other.m_priority;
}
- auto Participant::get_disposition() const -> disposition
+ auto Participant::get_disposition() const -> Disposition
{
return m_disposition.get_value();
}
@@ -78,7 +78,7 @@ namespace turns::core
return m_priority.get_value();
}
- auto Participant::set_disposition(disposition value) -> void
+ auto Participant::set_disposition(Disposition value) -> void
{
return m_disposition.set_value(value);
}
diff --git a/core/src/turn_order.cpp b/core/src/turn_order.cpp
index ef7bde6..669f746 100644
--- a/core/src/turn_order.cpp
+++ b/core/src/turn_order.cpp
@@ -100,7 +100,7 @@ namespace turns::core
/** Modifiers */
- auto turn_order::add(Glib::ustring const & name, float priority, disposition disposition) -> void
+ auto turn_order::add(Glib::ustring const & name, float priority, Disposition disposition) -> void
{
auto entry = Participant::create(name, priority, disposition);
entry->property_priority().signal_changed().connect(sigc::bind(sigc::mem_fun(*this, &turn_order::handle_priority_changed), entry));