From 2abbc258a55c77250c398481515beb16b957784c Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Sat, 20 Jan 2024 15:00:40 -0600 Subject: [PATCH] Squashed 'deps/nostalgia/' changes from 5848bc8e..c2e34b64 c2e34b64 Merge commit 'a9128caf4ddd187f14496b84242dfe07ee9a6467' 173d3f4b [olympic/studio] Add PushButton, PopupBtns, ComboBox, and IDStackItem to ImGui utils 8a29c095 [olympic/studio] Fix imguiutil.hpp name, add StudioContext::tctx git-subtree-dir: deps/nostalgia git-subtree-split: c2e34b64568172a12d25ca4b54796d2d4a56a652 --- src/olympic/studio/applib/src/aboutpopup.cpp | 2 +- src/olympic/studio/applib/src/main.cpp | 2 +- src/olympic/studio/applib/src/newmenu.cpp | 2 +- src/olympic/studio/applib/src/newproject.cpp | 2 +- .../studio/modlib/include/studio/context.hpp | 4 ++ .../modlib/include/studio/imguiuitl.hpp | 13 ------ .../modlib/include/studio/imguiutil.hpp | 43 +++++++++++++++++++ .../studio/modlib/include/studio/studio.hpp | 2 +- src/olympic/studio/modlib/src/imguiutil.cpp | 41 ++++++++++++++++++ src/olympic/studio/modlib/src/popup.cpp | 2 +- 10 files changed, 94 insertions(+), 19 deletions(-) delete mode 100644 src/olympic/studio/modlib/include/studio/imguiuitl.hpp create mode 100644 src/olympic/studio/modlib/include/studio/imguiutil.hpp diff --git a/src/olympic/studio/applib/src/aboutpopup.cpp b/src/olympic/studio/applib/src/aboutpopup.cpp index f593052..ebd93dd 100644 --- a/src/olympic/studio/applib/src/aboutpopup.cpp +++ b/src/olympic/studio/applib/src/aboutpopup.cpp @@ -4,7 +4,7 @@ #include -#include +#include #include "aboutpopup.hpp" namespace olympic { diff --git a/src/olympic/studio/applib/src/main.cpp b/src/olympic/studio/applib/src/main.cpp index 4e2de23..135186a 100644 --- a/src/olympic/studio/applib/src/main.cpp +++ b/src/olympic/studio/applib/src/main.cpp @@ -48,7 +48,7 @@ static ox::Error runApp( turbine::setUpdateHandler(*ctx, updateHandler); turbine::setKeyEventHandler(*ctx, keyEventHandler); turbine::setConstantRefresh(*ctx, false); - studio::StudioContext studioCtx; + studio::StudioContext studioCtx(*ctx); turbine::setApplicationData(*ctx, &studioCtx); StudioUI ui(*ctx, projectDataDir); studioCtx.ui = &ui; diff --git a/src/olympic/studio/applib/src/newmenu.cpp b/src/olympic/studio/applib/src/newmenu.cpp index 21897b2..e5786ca 100644 --- a/src/olympic/studio/applib/src/newmenu.cpp +++ b/src/olympic/studio/applib/src/newmenu.cpp @@ -6,7 +6,7 @@ #include -#include +#include #include "newmenu.hpp" diff --git a/src/olympic/studio/applib/src/newproject.cpp b/src/olympic/studio/applib/src/newproject.cpp index 1c624b7..647dd25 100644 --- a/src/olympic/studio/applib/src/newproject.cpp +++ b/src/olympic/studio/applib/src/newproject.cpp @@ -4,7 +4,7 @@ #include -#include +#include #include #include "filedialogmanager.hpp" diff --git a/src/olympic/studio/modlib/include/studio/context.hpp b/src/olympic/studio/modlib/include/studio/context.hpp index f3b93d3..c7101ba 100644 --- a/src/olympic/studio/modlib/include/studio/context.hpp +++ b/src/olympic/studio/modlib/include/studio/context.hpp @@ -6,6 +6,8 @@ #include +#include + #include "project.hpp" namespace studio { @@ -13,6 +15,8 @@ namespace studio { struct StudioContext { class StudioUI *ui = nullptr; Project *project = nullptr; + turbine::Context &tctx; + inline explicit StudioContext(turbine::Context &pTctx) noexcept: tctx(pTctx) {} }; } diff --git a/src/olympic/studio/modlib/include/studio/imguiuitl.hpp b/src/olympic/studio/modlib/include/studio/imguiuitl.hpp deleted file mode 100644 index d72d920..0000000 --- a/src/olympic/studio/modlib/include/studio/imguiuitl.hpp +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright 2016 - 2024 Gary Talent (gary@drinkingtea.net). All rights reserved. - */ - -#include - -#include - -namespace studio::ig { - -void centerNextWindow(turbine::Context &ctx) noexcept; - -} \ No newline at end of file diff --git a/src/olympic/studio/modlib/include/studio/imguiutil.hpp b/src/olympic/studio/modlib/include/studio/imguiutil.hpp new file mode 100644 index 0000000..f92ea7f --- /dev/null +++ b/src/olympic/studio/modlib/include/studio/imguiutil.hpp @@ -0,0 +1,43 @@ +/* + * Copyright 2016 - 2024 Gary Talent (gary@drinkingtea.net). All rights reserved. + */ + +#pragma once + +#include + +#include + +namespace studio::ig { + +inline constexpr auto BtnSz = ImVec2{50, 22}; + +template +class IDStackItem { + private: + T m_id; + public: + explicit IDStackItem(T id) noexcept: m_id(id) { + ImGui::PushID(m_id); + } + ~IDStackItem() noexcept { + ImGui::PopID(); + } +}; + +void centerNextWindow(turbine::Context &ctx) noexcept; + +bool PushButton(ox::CStringView lbl, ImVec2 const&btnSz = BtnSz) noexcept; + +void PopupBtns(float popupWidth, bool &popupOpen); + +/** + * + * @param lbl + * @param list + * @param selectedIdx + * @return true if new value selected, false otherwise + */ +bool ComboBox(ox::CStringView lbl, ox::SpanView list, size_t &selectedIdx) noexcept; + +} \ No newline at end of file diff --git a/src/olympic/studio/modlib/include/studio/studio.hpp b/src/olympic/studio/modlib/include/studio/studio.hpp index 40de738..13d2ab0 100644 --- a/src/olympic/studio/modlib/include/studio/studio.hpp +++ b/src/olympic/studio/modlib/include/studio/studio.hpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/olympic/studio/modlib/src/imguiutil.cpp b/src/olympic/studio/modlib/src/imguiutil.cpp index f4e0090..e52f315 100644 --- a/src/olympic/studio/modlib/src/imguiutil.cpp +++ b/src/olympic/studio/modlib/src/imguiutil.cpp @@ -6,6 +6,8 @@ #include +#include + namespace studio::ig { void centerNextWindow(turbine::Context &ctx) noexcept { @@ -16,4 +18,43 @@ void centerNextWindow(turbine::Context &ctx) noexcept { ImGui::SetNextWindowPos(ImVec2(screenW / mod, screenH / mod), ImGuiCond_Always, ImVec2(0.5f, 0.5f)); } +bool PushButton(ox::CStringView lbl, ImVec2 const&btnSz) noexcept { + return ImGui::Button(lbl.c_str(), btnSz); +} + +void PopupBtns(float popupWidth, bool &popupOpen) { + constexpr auto btnSz = ImVec2{50, BtnSz.y}; + ImGui::Separator(); + ImGui::SetCursorPosX(popupWidth - 118); + if (ImGui::Button("OK", btnSz)) { + ImGui::CloseCurrentPopup(); + popupOpen = false; + } + ImGui::SameLine(); + if (ImGui::Button("Cancel", btnSz)) { + ImGui::CloseCurrentPopup(); + popupOpen = false; + } +} + +bool ComboBox( + ox::CStringView lbl, + ox::SpanView list, + size_t &selectedIdx) noexcept { + bool out{}; + auto const first = selectedIdx < list.size() ? list[selectedIdx].c_str() : ""; + if (ImGui::BeginCombo(lbl.c_str(), first, 0)) { + for (auto i = 0u; i < list.size(); ++i) { + const auto selected = (selectedIdx == i); + if (ImGui::Selectable(list[i].c_str(), selected) && selectedIdx != i) { + selectedIdx = i; + //oxLogError(m_model.setPalette(list[n])); + out = true; + } + } + ImGui::EndCombo(); + } + return out; +} + } diff --git a/src/olympic/studio/modlib/src/popup.cpp b/src/olympic/studio/modlib/src/popup.cpp index a3b2639..65a3d09 100644 --- a/src/olympic/studio/modlib/src/popup.cpp +++ b/src/olympic/studio/modlib/src/popup.cpp @@ -2,7 +2,7 @@ * Copyright 2016 - 2024 Gary Talent (gary@drinkingtea.net). All rights reserved. */ -#include +#include #include namespace studio {