From 24f9d092c1074583d099beffba18700b6dfad833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89meryc?= Date: Fri, 21 Jul 2023 19:19:29 -0400 Subject: [PATCH] NK-126 - Fixed File Browser Refresh --- Editor/src/ComponentsPanel/ScriptPanel.cpp | 111 ++++++++++++++++++++ Editor/src/ComponentsPanel/ScriptPanel.h | 110 +------------------ Editor/src/Windows/EditorInterface.cpp | 2 +- Editor/src/Windows/EditorSelectionPanel.cpp | 2 + Editor/src/Windows/FileSystemUI.cpp | 1 + Editor/src/Windows/FileSystemUI.h | 2 +- 6 files changed, 118 insertions(+), 110 deletions(-) create mode 100644 Editor/src/ComponentsPanel/ScriptPanel.cpp diff --git a/Editor/src/ComponentsPanel/ScriptPanel.cpp b/Editor/src/ComponentsPanel/ScriptPanel.cpp new file mode 100644 index 00000000..3c27ae3e --- /dev/null +++ b/Editor/src/ComponentsPanel/ScriptPanel.cpp @@ -0,0 +1,111 @@ +#include "ScriptPanel.h" +#include "../Windows/FileSystemUI.h" +#include +#include + +void ScriptPanel::Draw(Nuake::Entity entity) +{ + if (!entity.HasComponent()) + return; + + Nuake::WrenScriptComponent& component = entity.GetComponent(); + BeginComponentTable(SCRIPT, Nuake::WrenScriptComponent); + { + { + ImGui::Text("Script"); + ImGui::TableNextColumn(); + + std::string path = component.Script; + ImGui::Button( path.empty() ? "Create New" : component.Script.c_str(), ImVec2(ImGui::GetContentRegionAvail().x, 0)); + if (ImGui::BeginDragDropTarget()) + { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("_Script")) + { + char* file = (char*)payload->Data; + + std::string fullPath = std::string(file, 512); + path = Nuake::FileSystem::AbsoluteToRelative(std::move(fullPath)); + + component.LoadScript(path); + } + ImGui::EndDragDropTarget(); + } + + component.Script = path; + + // Double click on file + if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(0)) + { + if(!component.Script.empty()) + { + Nuake::OS::OpenIn(component.mWrenScript->GetFile()->GetAbsolutePath()); + } + else + { + // TODO: Turn into command (Undo/Redo) + + std::string pathCreation = Nuake::FileDialog::SaveFile("*.wren"); + + if (!pathCreation.empty()) + { + if (!Nuake::String::EndsWith(pathCreation, ".wren")) + { + pathCreation += ".wren"; + } + + std::string fileName = Nuake::String::ToUpper(Nuake::FileSystem::GetFileNameFromPath(pathCreation)); + fileName = Nuake::String::RemoveWhiteSpace(fileName); + + if(!Nuake::String::IsDigit(fileName[0])) + { + Nuake::FileSystem::BeginWriteFile(pathCreation); + Nuake::FileSystem::WriteLine(TEMPLATE_SCRIPT_FIRST + fileName + TEMPLATE_SCRIPT_SECOND); + Nuake::FileSystem::EndWriteFile(); + + path = Nuake::FileSystem::AbsoluteToRelative(pathCreation); + Nuake::FileSystem::Scan(); + Nuake::FileSystemUI::m_CurrentDirectory = Nuake::FileSystem::RootDirectory; + component.LoadScript(path); + component.Script = path; + } + else + { + Nuake::Logger::Log("[FileSystem] Cannot create script files that starts with a number.", Nuake::CRITICAL); + } + } + + } + } + + ImGui::TableNextColumn(); + + ComponentTableReset(component.Script, ""); + } + ImGui::TableNextColumn(); + { + ImGui::Text("Module"); + ImGui::TableNextColumn(); + + // Here we create a dropdown for every modules + auto& wrenScript = component.mWrenScript; + if (wrenScript) + { + auto modules = wrenScript->GetModules(); + + std::vector modulesC; + + for (auto& m : modules) + { + modulesC.push_back(m.c_str()); + } + static int currentModule = (int)component.mModule; + ImGui::Combo("##WrenModule", ¤tModule, &modulesC[0], modules.size()); + component.mModule = currentModule; + } + + ImGui::TableNextColumn(); + //ComponentTableReset(component.Class, ""); + } + } + EndComponentTable(); +} \ No newline at end of file diff --git a/Editor/src/ComponentsPanel/ScriptPanel.h b/Editor/src/ComponentsPanel/ScriptPanel.h index 53cda8e9..dac4c0c2 100644 --- a/Editor/src/ComponentsPanel/ScriptPanel.h +++ b/Editor/src/ComponentsPanel/ScriptPanel.h @@ -1,7 +1,6 @@ #pragma once #include "ComponentPanel.h" -#include -#include + const std::string TEMPLATE_SCRIPT_FIRST = R"(import "Nuake:Engine" for Engine import "Nuake:ScriptableEntity" for ScriptableEntity @@ -40,110 +39,5 @@ class ScriptPanel : ComponentPanel { public: ScriptPanel() {} - void Draw(Nuake::Entity entity) override - { - if (!entity.HasComponent()) - return; - - Nuake::WrenScriptComponent& component = entity.GetComponent(); - BeginComponentTable(SCRIPT, Nuake::WrenScriptComponent); - { - { - ImGui::Text("Script"); - ImGui::TableNextColumn(); - - std::string path = component.Script; - ImGui::Button( path.empty() ? "Create New" : component.Script.c_str(), ImVec2(ImGui::GetContentRegionAvail().x, 0)); - if (ImGui::BeginDragDropTarget()) - { - if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("_Script")) - { - char* file = (char*)payload->Data; - - std::string fullPath = std::string(file, 512); - path = Nuake::FileSystem::AbsoluteToRelative(std::move(fullPath)); - - component.LoadScript(path); - } - ImGui::EndDragDropTarget(); - } - - component.Script = path; - - // Double click on file - if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(0)) - { - if(!component.Script.empty()) - { - Nuake::OS::OpenIn(component.mWrenScript->GetFile()->GetAbsolutePath()); - } - else - { - // TODO: Turn into command (Undo/Redo) - - std::string pathCreation = Nuake::FileDialog::SaveFile("*.wren"); - - if (!pathCreation.empty()) - { - if (!Nuake::String::EndsWith(pathCreation, ".wren")) - { - pathCreation += ".wren"; - } - - std::string fileName = Nuake::String::ToUpper(Nuake::FileSystem::GetFileNameFromPath(pathCreation)); - fileName = Nuake::String::RemoveWhiteSpace(fileName); - - if(!Nuake::String::IsDigit(fileName[0])) - { - Nuake::FileSystem::BeginWriteFile(pathCreation); - Nuake::FileSystem::WriteLine(TEMPLATE_SCRIPT_FIRST + fileName + TEMPLATE_SCRIPT_SECOND); - Nuake::FileSystem::EndWriteFile(); - - path = Nuake::FileSystem::AbsoluteToRelative(pathCreation); - Nuake::FileSystem::Scan(); - - component.LoadScript(path); - component.Script = path; - } - else - { - Nuake::Logger::Log("[FileSystem] Cannot create script files that starts with a number.", Nuake::CRITICAL); - } - } - - } - } - - ImGui::TableNextColumn(); - - ComponentTableReset(component.Script, ""); - } - ImGui::TableNextColumn(); - { - ImGui::Text("Module"); - ImGui::TableNextColumn(); - - // Here we create a dropdown for every modules - auto& wrenScript = component.mWrenScript; - if (wrenScript) - { - auto modules = wrenScript->GetModules(); - - std::vector modulesC; - - for (auto& m : modules) - { - modulesC.push_back(m.c_str()); - } - static int currentModule = (int)component.mModule; - ImGui::Combo("##WrenModule", ¤tModule, &modulesC[0], modules.size()); - component.mModule = currentModule; - } - - ImGui::TableNextColumn(); - //ComponentTableReset(component.Class, ""); - } - } - EndComponentTable(); - } + void Draw(Nuake::Entity entity) override; }; \ No newline at end of file diff --git a/Editor/src/Windows/EditorInterface.cpp b/Editor/src/Windows/EditorInterface.cpp index 81af2da4..7c993e65 100644 --- a/Editor/src/Windows/EditorInterface.cpp +++ b/Editor/src/Windows/EditorInterface.cpp @@ -50,7 +50,7 @@ namespace Nuake { ImFont* normalFont; ImFont* boldFont; ImFont* EditorInterface::bigIconFont; - + EditorInterface::EditorInterface() { filesystem = new FileSystemUI(this); diff --git a/Editor/src/Windows/EditorSelectionPanel.cpp b/Editor/src/Windows/EditorSelectionPanel.cpp index 639a8948..82699732 100644 --- a/Editor/src/Windows/EditorSelectionPanel.cpp +++ b/Editor/src/Windows/EditorSelectionPanel.cpp @@ -8,6 +8,8 @@ #include #include +#include "src/Scene/Components/WrenScriptComponent.h" + EditorSelectionPanel::EditorSelectionPanel() { mTransformPanel = TransformPanel(); diff --git a/Editor/src/Windows/FileSystemUI.cpp b/Editor/src/Windows/FileSystemUI.cpp index 91901b93..b6847006 100644 --- a/Editor/src/Windows/FileSystemUI.cpp +++ b/Editor/src/Windows/FileSystemUI.cpp @@ -13,6 +13,7 @@ namespace Nuake { + Ref FileSystemUI::m_CurrentDirectory; // TODO: add filetree in same panel void FileSystemUI::Draw() diff --git a/Editor/src/Windows/FileSystemUI.h b/Editor/src/Windows/FileSystemUI.h index 2ab62141..edad2cee 100644 --- a/Editor/src/Windows/FileSystemUI.h +++ b/Editor/src/Windows/FileSystemUI.h @@ -10,7 +10,7 @@ namespace Nuake { EditorInterface* Editor; public: - Ref m_CurrentDirectory; + static Ref m_CurrentDirectory; bool m_hasClickedOnFile; FileSystemUI(EditorInterface* editor)