[studio] Make rename file give error message if the file already exists
All checks were successful
Build / build (push) Successful in 3m32s

This commit is contained in:
Gary Talent 2025-01-27 00:54:58 -06:00
parent 2286238abc
commit 95256a9a0d
3 changed files with 21 additions and 7 deletions

View File

@ -41,20 +41,35 @@ void RenameFile::draw(StudioContext &ctx) noexcept {
case Stage::Opening: case Stage::Opening:
ImGui::OpenPopup(title().c_str()); ImGui::OpenPopup(title().c_str());
m_open = true; m_open = true;
m_fileExists = false;
m_stage = Stage::Open; m_stage = Stage::Open;
[[fallthrough]]; [[fallthrough]];
case Stage::Open: case Stage::Open:
setSize({250, 0}); setSize({250, 0});
drawWindow(ctx.tctx, m_open, [this] { drawWindow(ctx.tctx, m_open, [this, &ctx] {
if (ImGui::IsWindowAppearing()) { if (ImGui::IsWindowAppearing()) {
ImGui::SetKeyboardFocusHere(); ImGui::SetKeyboardFocusHere();
} }
ig::InputText("Name", m_name); m_fileExists = !ig::InputText("Name", m_name) && m_fileExists;
auto const nameInputFocused = ImGui::IsItemFocused(); auto const nameInputFocused = ImGui::IsItemFocused();
ImGui::Text("%s%s", m_path.c_str(), m_name.c_str()); if (m_fileExists) {
if (ig::PopupControlsOkCancel(m_open) == ig::PopupResponse::OK || ImGui::Text("File %s already exists.", m_name.c_str());
} else {
ImGui::Text("%s%s", m_path.c_str(), m_name.c_str());
}
bool b{};
auto const response = ig::PopupControlsOkCancel(b);
if (response == ig::PopupResponse::OK ||
(nameInputFocused && ImGui::IsKeyPressed(ImGuiKey_Enter))) { (nameInputFocused && ImGui::IsKeyPressed(ImGuiKey_Enter))) {
moveFile.emit(m_oldPath, m_path + m_name); auto const newPath = m_path + m_name;
if (!ctx.project->exists(newPath)) {
moveFile.emit(m_oldPath, newPath);
close();
} else {
m_open = true;
m_fileExists = true;
}
} else if (response == ig::PopupResponse::Cancel) {
close(); close();
} }
}); });

View File

@ -21,6 +21,7 @@ class RenameFile: public Popup {
ox::String m_oldPath; ox::String m_oldPath;
ox::String m_path; ox::String m_path;
ox::IString<255> m_name; ox::IString<255> m_name;
bool m_fileExists{};
bool m_open{}; bool m_open{};
public: public:

View File

@ -64,13 +64,11 @@ PopupResponse PopupControlsOkCancel(
ImGui::Separator(); ImGui::Separator();
ImGui::SetCursorPosX(popupWidth - 118); ImGui::SetCursorPosX(popupWidth - 118);
if (ImGui::Button(ok.c_str(), btnSz)) { if (ImGui::Button(ok.c_str(), btnSz)) {
ImGui::CloseCurrentPopup();
popupOpen = false; popupOpen = false;
out = PopupResponse::OK; out = PopupResponse::OK;
} }
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::IsKeyDown(ImGuiKey_Escape) || ImGui::Button(cancel.c_str(), btnSz)) { if (ImGui::IsKeyDown(ImGuiKey_Escape) || ImGui::Button(cancel.c_str(), btnSz)) {
ImGui::CloseCurrentPopup();
popupOpen = false; popupOpen = false;
out = PopupResponse::Cancel; out = PopupResponse::Cancel;
} }