diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2025-05-23 14:04:27 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2025-05-23 14:04:27 +0200 |
| commit | 5d8f799a1171f92054d4b45ba130cd7fdad0bd01 (patch) | |
| tree | 0f51290b3a60d71d25d7a49b66d5bd54dd7a4156 /core/src | |
| parent | c45004b73bb045328a724d1d860df6d1515af6d4 (diff) | |
| download | turns-5d8f799a1171f92054d4b45ba130cd7fdad0bd01.tar.xz turns-5d8f799a1171f92054d4b45ba130cd7fdad0bd01.zip | |
app: prepare restructuring
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/settings.cpp | 28 | ||||
| -rw-r--r-- | core/src/turn_order_model.cpp | 312 |
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 |
