diff options
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/disposition.cpp | 37 | ||||
| -rw-r--r-- | core/src/init.cpp | 5 | ||||
| -rw-r--r-- | core/src/participant.cpp | 10 | ||||
| -rw-r--r-- | core/src/turn_order.cpp | 2 |
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)); |
