From 0003454311f46af59df09ffe1957d3e9f1d10d4d Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Tue, 6 May 2025 01:00:04 -0500 Subject: [PATCH] [studio,nostalgia/gfx/studio] Cleanup --- .../tilesheeteditor/tilesheeteditor-imgui.cpp | 2 +- src/olympic/studio/applib/src/aboutpopup.cpp | 4 ++ .../studio/applib/src/deleteconfirmation.cpp | 4 ++ src/olympic/studio/applib/src/newdir.cpp | 4 ++ src/olympic/studio/applib/src/newmenu.cpp | 4 ++ src/olympic/studio/applib/src/newproject.cpp | 37 +++++++------------ src/olympic/studio/applib/src/newproject.hpp | 2 - src/olympic/studio/applib/src/renamefile.cpp | 4 ++ src/olympic/studio/applib/src/studioui.cpp | 8 ---- src/olympic/studio/applib/src/studioui.hpp | 8 ---- .../studio/modlib/include/studio/popup.hpp | 2 +- src/olympic/studio/modlib/src/imguiutil.cpp | 19 ++++++++++ 12 files changed, 55 insertions(+), 43 deletions(-) diff --git a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp index 6524b47c..324c7bf9 100644 --- a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp +++ b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp @@ -129,7 +129,7 @@ void TileSheetEditorImGui::keyStateChanged(turbine::Key const key, bool const do if (!down) { return; } - if (key == turbine::Key::Escape) { + if (ig::mainWinHasFocus() && key == turbine::Key::Escape) { m_subsheetEditor.close(); m_exportMenu.close(); m_palPicker.close(); diff --git a/src/olympic/studio/applib/src/aboutpopup.cpp b/src/olympic/studio/applib/src/aboutpopup.cpp index 005b52f8..1b554204 100644 --- a/src/olympic/studio/applib/src/aboutpopup.cpp +++ b/src/olympic/studio/applib/src/aboutpopup.cpp @@ -30,6 +30,10 @@ bool AboutPopup::isOpen() const noexcept { } void AboutPopup::draw(StudioContext &sctx) noexcept { + if (ImGui::IsKeyPressed(ImGuiKey_Escape)) { + close(); + return; + } switch (m_stage) { case Stage::Closed: break; diff --git a/src/olympic/studio/applib/src/deleteconfirmation.cpp b/src/olympic/studio/applib/src/deleteconfirmation.cpp index 2fdabb1b..cac39562 100644 --- a/src/olympic/studio/applib/src/deleteconfirmation.cpp +++ b/src/olympic/studio/applib/src/deleteconfirmation.cpp @@ -32,6 +32,10 @@ bool DeleteConfirmation::isOpen() const noexcept { } void DeleteConfirmation::draw(StudioContext &ctx) noexcept { + if (ImGui::IsKeyPressed(ImGuiKey_Escape)) { + close(); + return; + } switch (m_stage) { case Stage::Closed: break; diff --git a/src/olympic/studio/applib/src/newdir.cpp b/src/olympic/studio/applib/src/newdir.cpp index b31644ec..7e299318 100644 --- a/src/olympic/studio/applib/src/newdir.cpp +++ b/src/olympic/studio/applib/src/newdir.cpp @@ -33,6 +33,10 @@ bool NewDir::isOpen() const noexcept { } void NewDir::draw(StudioContext &ctx) noexcept { + if (ImGui::IsKeyPressed(ImGuiKey_Escape)) { + close(); + return; + } switch (m_stage) { case Stage::Closed: break; diff --git a/src/olympic/studio/applib/src/newmenu.cpp b/src/olympic/studio/applib/src/newmenu.cpp index e9f48df2..1183d8a4 100644 --- a/src/olympic/studio/applib/src/newmenu.cpp +++ b/src/olympic/studio/applib/src/newmenu.cpp @@ -45,6 +45,10 @@ bool NewMenu::isOpen() const noexcept { } void NewMenu::draw(StudioContext &sctx) noexcept { + if (ImGui::IsKeyPressed(ImGuiKey_Escape)) { + close(); + return; + } switch (m_stage) { case Stage::Opening: ImGui::OpenPopup(title().c_str()); diff --git a/src/olympic/studio/applib/src/newproject.cpp b/src/olympic/studio/applib/src/newproject.cpp index 136aa8c6..d90cb201 100644 --- a/src/olympic/studio/applib/src/newproject.cpp +++ b/src/olympic/studio/applib/src/newproject.cpp @@ -12,7 +12,8 @@ namespace studio { -NewProject::NewProject(ox::StringParam projectDatadir) noexcept: m_projectDataDir(std::move(projectDatadir)) { +NewProject::NewProject(ox::StringParam projectDatadir) noexcept: + m_projectDataDir{std::move(projectDatadir)} { setTitle("New Project"); setSize({230, 140}); } @@ -32,7 +33,11 @@ bool NewProject::isOpen() const noexcept { return m_open; } -void NewProject::draw(studio::StudioContext &ctx) noexcept { +void NewProject::draw(StudioContext &ctx) noexcept { + if (ImGui::IsKeyPressed(ImGuiKey_Escape)) { + close(); + return; + } switch (m_stage) { case Stage::Opening: ImGui::OpenPopup(title().c_str()); @@ -48,39 +53,25 @@ void NewProject::draw(studio::StudioContext &ctx) noexcept { } } -void NewProject::drawNewProjectName(studio::StudioContext &sctx) noexcept { +void NewProject::drawNewProjectName(StudioContext &sctx) noexcept { drawWindow(sctx.tctx, m_open, [this, &sctx] { ig::InputText("Name", m_projectName); ImGui::Text("Path: %s", m_projectPath.c_str()); - if (ImGui::Button("Browse")) { + if (ig::PushButton("Browse")) { oxLogError(studio::chooseDirectory().moveTo(m_projectPath)); } drawLastPageButtons(sctx); }); } -void NewProject::drawFirstPageButtons() noexcept { - ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetContentRegionAvail().x - 130); - ImGui::SetCursorPosY(ImGui::GetCursorPosY() + ImGui::GetContentRegionAvail().y - 20); - auto const btnSz = ImVec2(60, 20); - if (ImGui::Button("Next", btnSz)) { - m_stage = Stage::NewItemName; - } - ImGui::SameLine(); - if (ImGui::Button("Cancel", btnSz)) { - ImGui::CloseCurrentPopup(); - m_stage = Stage::Closed; - } -} - -void NewProject::drawLastPageButtons(studio::StudioContext&) noexcept { - ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetContentRegionAvail().x - 95); - ImGui::SetCursorPosY(ImGui::GetCursorPosY() + ImGui::GetContentRegionAvail().y - 20); - if (ImGui::Button("Finish")) { +void NewProject::drawLastPageButtons(StudioContext&) noexcept { + ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetContentRegionAvail().x - 110); + ImGui::SetCursorPosY(ImGui::GetCursorPosY() + ImGui::GetContentRegionAvail().y - 22); + if (ig::PushButton("Finish")) { finish(); } ImGui::SameLine(); - if (ImGui::Button("Quit")) { + if (ig::PushButton("Quit")) { ImGui::CloseCurrentPopup(); m_stage = Stage::Closed; } diff --git a/src/olympic/studio/applib/src/newproject.hpp b/src/olympic/studio/applib/src/newproject.hpp index 14e6e502..964e4d81 100644 --- a/src/olympic/studio/applib/src/newproject.hpp +++ b/src/olympic/studio/applib/src/newproject.hpp @@ -47,8 +47,6 @@ class NewProject: public studio::Popup { private: void drawNewProjectName(studio::StudioContext &ctx) noexcept; - void drawFirstPageButtons() noexcept; - void drawLastPageButtons(studio::StudioContext &ctx) noexcept; void finish() noexcept; diff --git a/src/olympic/studio/applib/src/renamefile.cpp b/src/olympic/studio/applib/src/renamefile.cpp index 73a2ff19..72f07caa 100644 --- a/src/olympic/studio/applib/src/renamefile.cpp +++ b/src/olympic/studio/applib/src/renamefile.cpp @@ -35,6 +35,10 @@ bool RenameFile::isOpen() const noexcept { } void RenameFile::draw(StudioContext &ctx) noexcept { + if (ImGui::IsKeyPressed(ImGuiKey_Escape)) { + close(); + return; + } switch (m_stage) { case Stage::Closed: break; diff --git a/src/olympic/studio/applib/src/studioui.cpp b/src/olympic/studio/applib/src/studioui.cpp index fd1c23bd..48c2f86e 100644 --- a/src/olympic/studio/applib/src/studioui.cpp +++ b/src/olympic/studio/applib/src/studioui.cpp @@ -119,14 +119,6 @@ StudioUI::StudioUI(turbine::Context &ctx, ox::StringParam projectDataDir) noexce } void StudioUI::handleKeyEvent(turbine::Key const key, bool const down) noexcept { - for (auto const p : m_popups) { - if (p->isOpen()) { - if (key == turbine::Key::Escape) { - p->close(); - } - return; - } - } if (m_activeEditor && !ImGui::IsKeyDown(ImGuiKey_ModCtrl)) { m_activeEditor->keyStateChanged(key, down); } diff --git a/src/olympic/studio/applib/src/studioui.hpp b/src/olympic/studio/applib/src/studioui.hpp index 757d69f2..18a6c092 100644 --- a/src/olympic/studio/applib/src/studioui.hpp +++ b/src/olympic/studio/applib/src/studioui.hpp @@ -67,14 +67,6 @@ class StudioUI: public ox::SignalHandler { &m_newDirDialog, &m_renameFile, }; - ox::Array const m_popups = { - &m_newMenu, - &m_newProject, - &m_aboutPopup, - &m_deleteConfirmation, - &m_newDirDialog, - &m_renameFile, - }; bool m_showProjectExplorer = true; struct NavAction { ox::String path; diff --git a/src/olympic/studio/modlib/include/studio/popup.hpp b/src/olympic/studio/modlib/include/studio/popup.hpp index bb1b2926..0695a7a6 100644 --- a/src/olympic/studio/modlib/include/studio/popup.hpp +++ b/src/olympic/studio/modlib/include/studio/popup.hpp @@ -25,7 +25,7 @@ class Popup: public Widget { // emits path parameter ox::Signal finished; - virtual ~Popup() noexcept = default; + ~Popup() noexcept override = default; virtual void open() noexcept = 0; diff --git a/src/olympic/studio/modlib/src/imguiutil.cpp b/src/olympic/studio/modlib/src/imguiutil.cpp index 443c323e..a22e7c26 100644 --- a/src/olympic/studio/modlib/src/imguiutil.cpp +++ b/src/olympic/studio/modlib/src/imguiutil.cpp @@ -82,6 +82,25 @@ PopupResponse PopupControlsOkCancel( return PopupControlsOkCancel(ImGui::GetContentRegionAvail().x + 17, popupOpen, ok, cancel); } +PopupResponse PopupControlsOk( + bool &popupOpen, + ox::CStringViewCR ok) { + auto out = PopupResponse::None; + constexpr auto btnSz = ImVec2{50, BtnSz.y}; + ImGui::Separator(); + ImGui::SetCursorPosX(ImGui::GetContentRegionAvail().x - 101); + if (ImGui::Button(ok.c_str(), btnSz)) { + popupOpen = false; + out = PopupResponse::OK; + } + ImGui::SameLine(); + if (ImGui::IsKeyDown(ImGuiKey_Escape)) { + popupOpen = false; + out = PopupResponse::Cancel; + } + return out; +} + bool BeginPopup(turbine::Context &ctx, ox::CStringViewCR popupName, bool &show, ImVec2 const&sz) { constexpr auto modalFlags = ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize; centerNextWindow(ctx);