From 82e2ea747f8ff7fd83c6c3efc7bc78a1ca484b2f Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Thu, 23 Jan 2025 21:13:58 -0600 Subject: [PATCH] [studio] Fix NewMenu to track prev stage correctly when going back two stages --- src/olympic/studio/applib/src/newmenu.cpp | 20 +++++++++----------- src/olympic/studio/applib/src/newmenu.hpp | 4 ++-- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/olympic/studio/applib/src/newmenu.cpp b/src/olympic/studio/applib/src/newmenu.cpp index a348a2c7..ad50790e 100644 --- a/src/olympic/studio/applib/src/newmenu.cpp +++ b/src/olympic/studio/applib/src/newmenu.cpp @@ -21,7 +21,7 @@ void NewMenu::open() noexcept { m_selectedType = 0; m_itemName = ""; m_typeName = ""; - m_path = ""; + m_useDefaultPath = true; m_explorer.setModel(buildFileTreeModel( m_explorer, [](ox::StringViewCR, ox::FileStat const&s) { @@ -29,9 +29,10 @@ void NewMenu::open() noexcept { }).or_value(ox::UPtr{})); } -void NewMenu::openPath(ox::StringParam path) noexcept { +void NewMenu::openPath(ox::StringViewCR path) noexcept { open(); - m_path = std::move(path); + m_useDefaultPath = false; + std::ignore = m_explorer.setSelectedPath(path); } void NewMenu::close() noexcept { @@ -92,10 +93,9 @@ void NewMenu::drawNewItemType(StudioContext const&sctx) noexcept { drawFirstPageButtons(im.itemTemplates().size() == 1 ? Stage::NewItemPath : Stage::NewItemTemplate); if (m_stage == Stage::NewItemPath || m_stage == Stage::NewItemTemplate) { - if (m_path.len() == 0) { - m_path = im.defaultPath(); + if (m_useDefaultPath) { + std::ignore = m_explorer.setSelectedPath(im.defaultPath()); } - std::ignore = m_explorer.setSelectedPath(m_path); } }); } @@ -189,11 +189,9 @@ void NewMenu::finish(StudioContext &sctx) noexcept { oxLogError(ox::Error{1, "New file error: no file name"}); return; } - auto const&im = *m_types[m_selectedType]; - if (auto p = m_explorer.selectedPath()) { - m_path = std::move(*p); - } - auto const path = sfmt("{}/{}.{}", m_path, m_itemName, im.fileExt()); + auto const &im = *m_types[m_selectedType]; + auto const path = sfmt("{}/{}.{}", + m_explorer.selectedPath().or_value(ox::String{}), m_itemName, im.fileExt()); if (sctx.project->exists(path)) { oxLogError(ox::Error{1, "New file error: file already exists"}); return; diff --git a/src/olympic/studio/applib/src/newmenu.hpp b/src/olympic/studio/applib/src/newmenu.hpp index f2db5f00..d9e6e9dd 100644 --- a/src/olympic/studio/applib/src/newmenu.hpp +++ b/src/olympic/studio/applib/src/newmenu.hpp @@ -33,7 +33,7 @@ class NewMenu final: public Popup { keel::Context &m_kctx; ox::String m_typeName; ox::IString<255> m_itemName; - ox::String m_path; + bool m_useDefaultPath{}; ox::Vector> m_types; FileExplorer m_explorer{m_kctx}; size_t m_selectedType = 0; @@ -43,7 +43,7 @@ class NewMenu final: public Popup { public: NewMenu(keel::Context &kctx) noexcept; - void openPath(ox::StringParam path) noexcept; + void openPath(ox::StringViewCR path) noexcept; void open() noexcept override;