summaryrefslogtreecommitdiff
path: root/core/src
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2025-05-23 14:04:27 +0200
committerFelix Morgner <felix.morgner@gmail.com>2025-05-23 14:04:27 +0200
commit5d8f799a1171f92054d4b45ba130cd7fdad0bd01 (patch)
tree0f51290b3a60d71d25d7a49b66d5bd54dd7a4156 /core/src
parentc45004b73bb045328a724d1d860df6d1515af6d4 (diff)
downloadturns-5d8f799a1171f92054d4b45ba130cd7fdad0bd01.tar.xz
turns-5d8f799a1171f92054d4b45ba130cd7fdad0bd01.zip
app: prepare restructuring
Diffstat (limited to 'core/src')
-rw-r--r--core/src/settings.cpp28
-rw-r--r--core/src/turn_order_model.cpp312
2 files changed, 0 insertions, 340 deletions
diff --git a/core/src/settings.cpp b/core/src/settings.cpp
deleted file mode 100644
index 13cf665..0000000
--- a/core/src/settings.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "turns/core/settings.hpp"
-
-#include <glibmm/refptr.h>
-#include <glibmm/wrap.h>
-
-#include <giomm/settings.h>
-#include <giomm/settingsschemasource.h>
-
-#include <gio/gsettings.h>
-
-namespace turns::core
-{
-
- auto get_settings() -> Glib::RefPtr<Gio::Settings>
- {
- auto constexpr schema_id = "ch.arknet.Turns";
-
-#ifdef TURNS_SETTINGS_SCHEMA_DIR
- auto source = Gio::SettingsSchemaSource::create(TURNS_SETTINGS_SCHEMA_DIR "/glib-2.0/schemas", true);
- auto schema = source->lookup(schema_id, true);
- auto settings = g_settings_new_full(Glib::unwrap(schema), nullptr, nullptr);
- return Glib::wrap(settings);
-#else
- return Gio::Settings::create(schema_id);
-#endif
- }
-
-} // namespace turns::core
diff --git a/core/src/turn_order_model.cpp b/core/src/turn_order_model.cpp
deleted file mode 100644
index e430fed..0000000
--- a/core/src/turn_order_model.cpp
+++ /dev/null
@@ -1,312 +0,0 @@
-#include "turns/core/turn_order_model.hpp"
-
-#include "turns/core/disposition.hpp"
-#include "turns/core/json_ext.hpp"
-#include "turns/core/participant.hpp"
-
-#include <sigc++/adaptors/bind.h>
-#include <sigc++/functors/mem_fun.h>
-
-#include <glibmm/objectbase.h>
-#include <glibmm/propertyproxy.h>
-#include <glibmm/refptr.h>
-#include <glibmm/ustring.h>
-#include <glibmm/wrap.h>
-
-#include <giomm/listmodel.h>
-
-#include <glib-object.h>
-#include <nlohmann/json.hpp>
-
-#include <algorithm>
-#include <functional>
-#include <iterator>
-#include <ranges>
-#include <typeinfo>
-#include <vector>
-
-using namespace std::placeholders;
-
-namespace turns::core
-{
-
- namespace
- {
- auto constexpr comparator = [](auto lhs, auto rhs) {
- return *lhs > *rhs;
- };
- } // namespace
-
- /** Construction */
-
- TurnOderModel::TurnOderModel()
- : Glib::ObjectBase{typeid(TurnOderModel)}
- , Gio::ListModel{}
- {
- }
-
- TurnOderModel::TurnOderModel(nlohmann::json const & from)
- : TurnOderModel{}
- {
- load(from);
- }
-
- auto TurnOderModel::create() -> Glib::RefPtr<TurnOderModel>
- {
- return Glib::make_refptr_for_instance(new TurnOderModel{});
- }
-
- auto TurnOderModel::create(nlohmann::json const & from) -> Glib::RefPtr<TurnOderModel>
- {
- return Glib::make_refptr_for_instance(new TurnOderModel{from});
- }
-
- /** Queries */
-
- auto TurnOderModel::is_empty() const -> Glib::PropertyProxy_ReadOnly<is_empty_type>
- {
- return m_is_empty.get_proxy();
- }
-
- auto TurnOderModel::has_next() const -> Glib::PropertyProxy_ReadOnly<has_next_type>
- {
- return m_has_next.get_proxy();
- }
-
- auto TurnOderModel::has_previous() const -> Glib::PropertyProxy_ReadOnly<has_previous_type>
- {
- return m_has_previous.get_proxy();
- }
-
- auto TurnOderModel::is_running() const -> Glib::PropertyProxy_ReadOnly<is_running_type>
- {
- return m_is_running.get_proxy();
- }
-
- auto TurnOderModel::progress() const -> Glib::PropertyProxy_ReadOnly<progress_type>
- {
- return m_progress.get_proxy();
- }
-
- auto TurnOderModel::round_number() const -> Glib::PropertyProxy_ReadOnly<round_number_type>
- {
- return m_round_number.get_proxy();
- }
-
- auto TurnOderModel::skip_defeated() -> Glib::PropertyProxy<skip_defeated_type>
- {
- return m_skip_defeated.get_proxy();
- }
-
- /** Modifiers */
-
- auto TurnOderModel::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, &TurnOderModel::handle_priority_changed), entry));
- auto position = std::distance(m_data.cbegin(), insert(entry));
- items_changed(position, 0, 1);
-
- if (get_n_items() == 1)
- {
- m_is_empty = false;
- m_has_next = true;
- }
- }
-
- auto TurnOderModel::clear() -> void
- {
- m_is_running = false;
- m_is_empty = true;
- m_has_next = false;
- m_has_previous = false;
- m_active.reset();
- m_round_number = invalid_round_number;
- m_progress = 0;
-
- auto old_size = get_n_items();
- m_data.clear();
- items_changed(0, old_size, 0);
- }
-
- auto TurnOderModel::next() -> void
- {
- auto old_active = *m_active;
- m_active = m_active.transform([this](auto index) { return (index + 1) % get_n_items(); });
-
- m_has_previous = true;
- m_data[old_active]->property_is_active() = false;
- m_data[*m_active]->property_is_active() = true;
-
- m_progress = (static_cast<float>(*m_active) + 1) / get_n_items();
-
- if (m_active == 0)
- {
- m_round_number = m_round_number + 1;
- }
- }
-
- auto TurnOderModel::previous() -> void
- {
- if (!(m_has_previous && m_is_running))
- {
- return;
- }
-
- auto old_active = *m_active;
- m_active = m_active.transform([this](auto index) { return index ? index - 1 : get_n_items() - 1; });
-
- m_has_previous = m_round_number > 0 || m_active > 0;
- m_data[old_active]->property_is_active() = false;
- m_data[*m_active]->property_is_active() = true;
-
- m_progress = (static_cast<float>(*m_active) + 1) / get_n_items();
-
- if (m_active == 0 && m_round_number > 0)
- {
- m_round_number = m_round_number - 1;
- }
- }
-
- auto TurnOderModel::remove(unsigned index) -> void
- {
- if (index >= get_n_items())
- {
- return;
- }
-
- auto position = m_data.begin() + index;
- m_data.erase(position);
- items_changed(index, 1, 0);
- if (get_n_items() == 0)
- {
- m_is_empty = true;
- m_is_running = false;
- m_has_next = false;
- }
- }
-
- auto TurnOderModel::start() -> void
- {
- if (!m_active)
- {
- m_active = 0;
- m_data[*m_active]->property_is_active() = true;
- }
- if (m_round_number == invalid_round_number)
- {
- m_round_number = 0;
- }
- m_is_running = true;
-
- m_progress = (static_cast<float>(*m_active) + 1) / get_n_items();
- }
-
- auto TurnOderModel::stop() -> void
- {
- m_is_running = false;
- m_progress = 0;
- }
-
- /** Serialization */
- auto TurnOderModel::load(nlohmann::json const & from) -> void
- {
- auto old_size = get_n_items();
-
- this->freeze_notify();
-
- m_round_number = from.value("round", invalid_round_number);
-
- m_data.clear();
- auto participants = from.value("participants", std::vector<nlohmann::json>{});
- auto factory = [](auto s) {
- return Participant::create(s);
- };
- auto inserter = std::bind(&TurnOderModel::insert, this, _1);
- std::ranges::for_each(participants | std::views::transform(factory), inserter);
-
- auto active = std::ranges::find_if(m_data, [](auto participant) { return participant->property_is_active(); });
- if (active != std::ranges::end(m_data))
- {
- m_active = std::ranges::distance(std::ranges::begin(m_data), active);
- }
-
- m_is_empty = m_data.empty();
- m_has_next = !m_is_empty;
- m_has_previous = m_round_number > 0 || m_active > 0;
-
- this->thaw_notify();
-
- items_changed(0, old_size, get_n_items());
- }
-
- auto TurnOderModel::serialize() -> nlohmann::json
- {
- auto serialized = nlohmann::json{};
- if (m_round_number != invalid_round_number)
- {
- serialized["round"] = m_round_number;
- }
- serialized["participants"] = m_data | std::views::transform([](auto const & p) { return p->serialize(); }) | std::ranges::to<std::vector>();
- ;
- return serialized;
- }
-
- /** ListModel implementation */
-
- auto TurnOderModel::get_item_type_vfunc() -> GType
- {
- return Participant::get_type();
- }
-
- auto TurnOderModel::get_n_items_vfunc() -> unsigned
- {
- return m_data.size();
- }
-
- auto TurnOderModel::get_item_vfunc(unsigned position) -> void *
- {
- if (position >= get_n_items())
- {
- return nullptr;
- }
- auto item = m_data[position];
- item->reference();
- return Glib::unwrap(item);
- }
-
- /** Signal handlers */
-
- auto TurnOderModel::handle_priority_changed(value_type entry) -> void
- {
- auto original_position = find(entry);
- auto original_index = distance(m_data.cbegin(), original_position);
- auto target_position = std::ranges::upper_bound(m_data, entry, comparator);
- if (original_position == target_position)
- {
- return;
- }
-
- m_data.erase(original_position);
- auto inserted_position = insert(entry);
- items_changed(0, get_n_items(), get_n_items());
- if (m_active == original_index)
- {
- m_active = distance(m_data.cbegin(), inserted_position);
- m_has_previous = m_round_number > 0 || m_active > 0;
- }
- }
-
- /** Data management */
-
- auto TurnOderModel::find(value_type entry) const -> const_iterator
- {
- return std::ranges::find(m_data, entry);
- }
-
- auto TurnOderModel::insert(value_type entry) -> const_iterator
- {
- return m_data.insert(std::ranges::upper_bound(m_data, entry, comparator), entry);
- }
-
-} // namespace turns::core \ No newline at end of file