From 057272347486efe5046691f32f51604e3a594e6a Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Wed, 31 Jan 2024 23:13:34 -0600 Subject: [PATCH] Squashed 'deps/nostalgia/' changes from b75bbc4d..28b1c6dc 28b1c6dc [ox/preloader] Fix case where alignOf always used NativePlatSpec ef9cb8be [olympic/modlib] Add ListBox to ImGui util 0d106bde [ox/oc] Fix objects to always write when members of arrays git-subtree-dir: deps/nostalgia git-subtree-split: 28b1c6dcf4b2d7d1e3c50850f5886ab8d85c9c96 --- deps/ox/src/ox/oc/write.hpp | 4 ++-- deps/ox/src/ox/preloader/platspecs.hpp | 2 +- .../studio/modlib/include/studio/imguiutil.hpp | 8 ++++++++ src/olympic/studio/modlib/src/imguiutil.cpp | 18 ++++++++++++++---- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/deps/ox/src/ox/oc/write.hpp b/deps/ox/src/ox/oc/write.hpp index a6a1103..b6e2223 100644 --- a/deps/ox/src/ox/oc/write.hpp +++ b/deps/ox/src/ox/oc/write.hpp @@ -27,7 +27,7 @@ class OrganicClawWriter { friend Result writeOC(const auto &val) noexcept; protected: - Json::Value m_json; + Json::Value m_json{Json::Value(Json::objectValue)}; Json::ArrayIndex m_fieldIt = 0; int m_unionIdx = -1; @@ -215,7 +215,7 @@ Error OrganicClawWriter::field(const char *key, const T *val) noexcept { OrganicClawWriter w; ModelHandlerInterface handler{&w}; oxReturnError(model(&handler, val)); - if (!w.m_json.isNull()) { + if (!w.m_json.empty() || m_json.isArray()) { value(key) = w.m_json; } } diff --git a/deps/ox/src/ox/preloader/platspecs.hpp b/deps/ox/src/ox/preloader/platspecs.hpp index e48001b..8f9c839 100644 --- a/deps/ox/src/ox/preloader/platspecs.hpp +++ b/deps/ox/src/ox/preloader/platspecs.hpp @@ -51,7 +51,7 @@ constexpr std::size_t alignOf(const T &v) noexcept { typename PlatSpec::PtrType p = 0; return PlatSpec::alignOf(p); } else { - AlignmentCatcher c; + AlignmentCatcher c; oxAssert(model(c.interface(), &v), "Could not get alignment for type"); return c.biggestAlignment; } diff --git a/src/olympic/studio/modlib/include/studio/imguiutil.hpp b/src/olympic/studio/modlib/include/studio/imguiutil.hpp index a77c4e3..312ea0f 100644 --- a/src/olympic/studio/modlib/include/studio/imguiutil.hpp +++ b/src/olympic/studio/modlib/include/studio/imguiutil.hpp @@ -4,6 +4,8 @@ #pragma once +#include + #include #include @@ -59,6 +61,12 @@ bool FileComboBox( ox::StringView fileExt, size_t &selectedIdx) noexcept; +bool ListBox( + ox::CStringView name, + std::function const&f, + size_t strCnt, + size_t &selIdx) noexcept; + /** * * @param name diff --git a/src/olympic/studio/modlib/src/imguiutil.cpp b/src/olympic/studio/modlib/src/imguiutil.cpp index fbccc98..5b1765c 100644 --- a/src/olympic/studio/modlib/src/imguiutil.cpp +++ b/src/olympic/studio/modlib/src/imguiutil.cpp @@ -113,24 +113,34 @@ bool FileComboBox( return out; } -bool ListBox(ox::CStringView name, ox::SpanView const&list, size_t &selIdx) noexcept { +bool ListBox( + ox::CStringView name, + std::function const&f, + size_t strCnt, + size_t &selIdx) noexcept { auto out = false; if (ImGui::BeginListBox(name.c_str())) { - for (auto i = 0u; auto const&obj : list) { + for (auto i = 0u; i < strCnt; ++i) { + auto str = f(i); ig::IDStackItem const idStackItem2(static_cast(i)); - if (ImGui::Selectable(obj.c_str(), selIdx == i)) { + if (ImGui::Selectable(str.c_str(), selIdx == i)) { if (i != selIdx) { selIdx = i; out = true; } } - ++i; } ImGui::EndListBox(); } return out; } +bool ListBox(ox::CStringView name, ox::SpanView const&list, size_t &selIdx) noexcept { + return ig::ListBox(name, [list](size_t i) -> ox::CStringView { + return list[i]; + }, list.size(), selIdx); +} + FilePicker::FilePicker( studio::StudioContext &sctx,