diff --git a/Editor/Editor.cpp b/Editor/Editor.cpp index c1d33b85..db9a8176 100644 --- a/Editor/Editor.cpp +++ b/Editor/Editor.cpp @@ -92,7 +92,7 @@ int main(int argc, char* argv[]) editor.BuildFonts(); Ref project = Nuake::Project::New(); - FileSystem::SetRootDirectory(projectPath + "/../"); + FileSystem::SetRootDirectory(FileSystem::GetParentPath(projectPath)); project->FullPath = projectPath; project->Deserialize(FileSystem::ReadFile(projectPath, true)); @@ -143,7 +143,7 @@ int main(int argc, char* argv[]) if (shouldLoadProject) { - FileSystem::SetRootDirectory(projectPath + "/../"); + FileSystem::SetRootDirectory(FileSystem::GetParentPath(projectPath)); auto project = Project::New(); auto projectFileData = FileSystem::ReadFile(projectPath, true); diff --git a/Editor/src/NewEditor.cpp b/Editor/src/NewEditor.cpp index d7c57c13..857aba47 100644 --- a/Editor/src/NewEditor.cpp +++ b/Editor/src/NewEditor.cpp @@ -41,8 +41,7 @@ namespace Nuake { // Parse the project and load it. std::string projectPath = FileDialog::OpenFile(".project"); - - FileSystem::SetRootDirectory(projectPath + "/../"); + FileSystem::SetRootDirectory(FileSystem::GetParentPath(projectPath)); Ref project = Project::New(); if (!project->Deserialize(FileSystem::ReadFile(projectPath, true))) { diff --git a/Editor/src/Windows/EditorInterface.cpp b/Editor/src/Windows/EditorInterface.cpp index dd0d65c5..a474ce7b 100644 --- a/Editor/src/Windows/EditorInterface.cpp +++ b/Editor/src/Windows/EditorInterface.cpp @@ -1291,7 +1291,7 @@ namespace Nuake { if (projectPath == "") // Hit cancel. return; - FileSystem::SetRootDirectory(projectPath + "/../"); + FileSystem::SetRootDirectory(FileSystem::GetParentPath(projectPath)); Ref project = Project::New(); if (!project->Deserialize(FileSystem::ReadFile(projectPath, true))) { diff --git a/Editor/src/Windows/FileSystemUI.cpp b/Editor/src/Windows/FileSystemUI.cpp index 1d7a25af..3eb90511 100644 --- a/Editor/src/Windows/FileSystemUI.cpp +++ b/Editor/src/Windows/FileSystemUI.cpp @@ -176,15 +176,23 @@ namespace Nuake if (ImGui::BeginPopup(hoverMenuId.c_str())) { + if (ImGui::MenuItem("Show in File Explorer")) + { + OS::ShowInFileExplorer(file->GetAbsolutePath()); + } + + ImGui::Separator(); + if (ImGui::MenuItem("Delete")) { if(FileSystem::RemoveFile(file->GetAbsolutePath()) != 0) { - Logger::Log("Failed to remove file: " + file->GetAbsolutePath(), CRITICAL); + Logger::Log("Failed to remove file: " + file->GetRelativePath(), CRITICAL); } + RefreshFileBrowser(); } + ImGui::EndPopup(); - RefreshFileBrowser(); } ImGui::Text(file->GetName().c_str()); diff --git a/Editor/src/Windows/WelcomeWindow.cpp b/Editor/src/Windows/WelcomeWindow.cpp index 0c2040f0..3cd1a42d 100644 --- a/Editor/src/Windows/WelcomeWindow.cpp +++ b/Editor/src/Windows/WelcomeWindow.cpp @@ -254,7 +254,7 @@ namespace Nuake SaveRecentFile(); std::string projectPath = _Projects[SelectedProject].Path; - FileSystem::SetRootDirectory(projectPath + "/../"); + FileSystem::SetRootDirectory(FileSystem::GetParentPath(projectPath)); auto project = Project::New(); auto projectFileData = FileSystem::ReadFile(projectPath, true); diff --git a/Nuake/Engine.cpp b/Nuake/Engine.cpp index 05d72b37..9fed2815 100644 --- a/Nuake/Engine.cpp +++ b/Nuake/Engine.cpp @@ -163,7 +163,7 @@ namespace Nuake return false; } - FileSystem::SetRootDirectory(project->FullPath + "/../"); + FileSystem::SetRootDirectory(FileSystem::GetParentPath(project->FullPath)); return true; } diff --git a/Nuake/src/Core/FileSystem.cpp b/Nuake/src/Core/FileSystem.cpp index 5c744d1d..cc2b525a 100644 --- a/Nuake/src/Core/FileSystem.cpp +++ b/Nuake/src/Core/FileSystem.cpp @@ -124,6 +124,12 @@ namespace Nuake return fs::relative(absolutePath, rootPath).generic_string(); } + std::string FileSystem::GetParentPath(const std::string& fullPath) + { + std::filesystem::path pathObj(fullPath); + return pathObj.parent_path().string(); + } + std::string FileSystem::ReadFile(const std::string& path, bool absolute) { std::string finalPath = path; diff --git a/Nuake/src/Core/FileSystem.h b/Nuake/src/Core/FileSystem.h index 18e96c80..460a9966 100644 --- a/Nuake/src/Core/FileSystem.h +++ b/Nuake/src/Core/FileSystem.h @@ -30,6 +30,7 @@ namespace Nuake static void Scan(); static std::string AbsoluteToRelative(const std::string& path); + static std::string GetParentPath(const std::string& fullPath); static Ref GetFileTree(); static Ref GetFile(const std::string& path); static std::string GetFileNameFromPath(const std::string& path); diff --git a/Nuake/src/Core/OS.cpp b/Nuake/src/Core/OS.cpp new file mode 100644 index 00000000..40721cda --- /dev/null +++ b/Nuake/src/Core/OS.cpp @@ -0,0 +1,16 @@ +#include "OS.h" + +#include +#include + +using namespace Nuake; + +int OS::GetTime() +{ + return static_cast(std::chrono::system_clock::now().time_since_epoch().count()); +} + +void OS::ShowInFileExplorer(const std::string& filePath) +{ + ShellExecuteA(nullptr, "open", "explorer.exe", ("/select," + std::string(filePath)).c_str(), nullptr, SW_SHOWDEFAULT); +} \ No newline at end of file diff --git a/Nuake/src/Core/OS.h b/Nuake/src/Core/OS.h index 15430935..c2fdbaf3 100644 --- a/Nuake/src/Core/OS.h +++ b/Nuake/src/Core/OS.h @@ -1,13 +1,13 @@ -#pragma once +#pragma once + +#include namespace Nuake { class OS { public: - static int GetTime() - { - return static_cast(std::chrono::system_clock::now().time_since_epoch().count()); - } + static int GetTime(); + static void ShowInFileExplorer(const std::string& filePath); }; }