diff --git a/deps/ox/src/ox/oc/write.hpp b/deps/ox/src/ox/oc/write.hpp index a6a11038..b6e22239 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 e48001b8..8f9c8397 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 a77c4e3b..312ea0f4 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 fbccc985..5b1765c4 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,