From ef9cb8bea4bbe5ea58b813d19f285a14d00714f3 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Tue, 30 Jan 2024 21:46:38 -0600 Subject: [PATCH] [olympic/modlib] Add ListBox to ImGui util --- .../studio/modlib/include/studio/imguiutil.hpp | 8 ++++++++ src/olympic/studio/modlib/src/imguiutil.cpp | 18 ++++++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) 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,