From 7132511562e54b756400315a878c9592d145394a Mon Sep 17 00:00:00 2001 From: SweetId <2630750+SweetId@users.noreply.github.com> Date: Wed, 18 Oct 2023 19:04:14 -0400 Subject: [PATCH] Remove all singletons except EditorBaseApplication --- .../Core/Application/ActionStack.hpp | 7 +------ .../Core/Application/BaseApplication.hpp | 11 +++++++++++ .../Core/Application/EditorLogger.hpp | 9 +++++---- include/NazaraEditor/Core/UI/PopupManager.hpp | 4 ---- .../Core/Application/ActionStack.cpp | 17 +---------------- .../Actions/EditorAction_Level_New.cpp | 2 +- .../Actions/EditorAction_Log_Clear.cpp | 4 ++-- .../EditorAction_Log_CopyToClipboard.cpp | 3 ++- .../Application/Actions/EditorAction_Quit.cpp | 2 +- .../Core/Application/EditorLogger.cpp | 15 --------------- src/NazaraEditor/Core/UI/PopupManager.cpp | 19 +++---------------- src/NazaraEditor/Core/UI/Window.cpp | 2 +- src/NazaraEditor/Editor/UI/OutputWindow.cpp | 3 ++- src/NazaraEditor/Editor/main.cpp | 1 + 14 files changed, 31 insertions(+), 68 deletions(-) diff --git a/include/NazaraEditor/Core/Application/ActionStack.hpp b/include/NazaraEditor/Core/Application/ActionStack.hpp index aaad0c4..79e8c0f 100644 --- a/include/NazaraEditor/Core/Application/ActionStack.hpp +++ b/include/NazaraEditor/Core/Application/ActionStack.hpp @@ -11,8 +11,6 @@ namespace Nz class NAZARAEDITOR_CORE_API ActionStack final { public: - static ActionStack* Instance(); - void ExecuteAction(const std::string& name) { ExecuteAction(CreateAction(name)); @@ -57,10 +55,9 @@ namespace Nz protected: ActionStack(); - ~ActionStack(); ActionStack(ActionStack&) = delete; - ActionStack& operator=(ActionStack&) = delete; + ActionStack& operator=(const ActionStack&) = delete; ActionStack(ActionStack&&) = delete; ActionStack& operator=(ActionStack&&) = delete; @@ -70,8 +67,6 @@ namespace Nz m_availableActions.push_back(std::make_unique(properties)); } - static ActionStack* s_instance; - int64_t m_currentIndex; std::vector> m_undoRedoStack; diff --git a/include/NazaraEditor/Core/Application/BaseApplication.hpp b/include/NazaraEditor/Core/Application/BaseApplication.hpp index 49cf672..c6f058f 100644 --- a/include/NazaraEditor/Core/Application/BaseApplication.hpp +++ b/include/NazaraEditor/Core/Application/BaseApplication.hpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -38,10 +39,19 @@ namespace Nz virtual ~EditorBaseApplication(); static EditorBaseApplication* Instance(); + + ActionStack& GetActionStack() { return m_actionStack; } + const ActionStack& GetActionStack() const { return m_actionStack; } + EditorPopupManager& GetPopupManager() { return m_popupManager; } + const EditorPopupManager& GetPopupManager() const { return m_popupManager; } + EditorLogger& GetLogger() { return *m_logger; } + const EditorLogger& GetLogger() const { return *m_logger; } void SetResourceFolder(const std::filesystem::path& path) { m_resourceFolder = path; } std::filesystem::path GetResourceFolder() const { return m_resourceFolder; } + void SetLogger(EditorLogger& logger) { m_logger = &logger; } + Nz::Level& GetLevel(); virtual bool NewLevel(); virtual bool CloseLevel() { return false; } @@ -73,6 +83,7 @@ namespace Nz std::filesystem::path m_resourceFolder; Nz::ActionStack m_actionStack; Nz::EditorPopupManager m_popupManager; + Nz::EditorLogger* m_logger; Nz::Level m_level; }; diff --git a/include/NazaraEditor/Core/Application/EditorLogger.hpp b/include/NazaraEditor/Core/Application/EditorLogger.hpp index b341575..310d0f7 100644 --- a/include/NazaraEditor/Core/Application/EditorLogger.hpp +++ b/include/NazaraEditor/Core/Application/EditorLogger.hpp @@ -9,16 +9,17 @@ namespace Nz { public: EditorLogger(); - virtual ~EditorLogger(); - - static EditorLogger* Instance(); void Clear() { m_text.clear(); } const std::vector& GetLog() const { return m_text; } private: - static EditorLogger* s_instance; + EditorLogger(EditorLogger&) = delete; + EditorLogger& operator=(const EditorLogger&) = delete; + EditorLogger(EditorLogger&&) = delete; + EditorLogger& operator=(EditorLogger&&) = delete; + std::vector m_text; }; } \ No newline at end of file diff --git a/include/NazaraEditor/Core/UI/PopupManager.hpp b/include/NazaraEditor/Core/UI/PopupManager.hpp index 3622ba9..75ffdd1 100644 --- a/include/NazaraEditor/Core/UI/PopupManager.hpp +++ b/include/NazaraEditor/Core/UI/PopupManager.hpp @@ -38,8 +38,6 @@ namespace Nz class NAZARAEDITOR_CORE_API EditorPopupManager { public: - static EditorPopupManager* Instance(); - void Update(); uint64_t CreatePopup(const EditorPopupParameters& parameters); @@ -47,7 +45,6 @@ namespace Nz private: EditorPopupManager(); - ~EditorPopupManager(); EditorPopupManager(const EditorPopupManager&) = delete; EditorPopupManager& operator=(const EditorPopupManager&) = delete; @@ -61,7 +58,6 @@ namespace Nz std::vector> m_popups; std::vector m_popupsToDelete; - static EditorPopupManager* s_instance; friend class EditorBaseApplication; }; } \ No newline at end of file diff --git a/src/NazaraEditor/Core/Application/ActionStack.cpp b/src/NazaraEditor/Core/Application/ActionStack.cpp index 4f1b0a1..a91f34f 100644 --- a/src/NazaraEditor/Core/Application/ActionStack.cpp +++ b/src/NazaraEditor/Core/Application/ActionStack.cpp @@ -2,24 +2,9 @@ namespace Nz { - ActionStack* ActionStack::s_instance = nullptr; ActionStack::ActionStack() : m_currentIndex(0) - { - NazaraAssert(s_instance == nullptr, "ActionStack already exists"); - s_instance = this; - } - - ActionStack::~ActionStack() - { - s_instance = nullptr; - } - - ActionStack* ActionStack::Instance() - { - return s_instance; - } - + {} bool ActionStack::CanUndo() const { return !m_undoRedoStack.empty() && m_currentIndex >= 0; } void ActionStack::Undo() diff --git a/src/NazaraEditor/Core/Application/Actions/EditorAction_Level_New.cpp b/src/NazaraEditor/Core/Application/Actions/EditorAction_Level_New.cpp index 67e7b7e..48abdf3 100644 --- a/src/NazaraEditor/Core/Application/Actions/EditorAction_Level_New.cpp +++ b/src/NazaraEditor/Core/Application/Actions/EditorAction_Level_New.cpp @@ -6,7 +6,7 @@ namespace Nz { void EditorAction_Level_New::Execute() { - Nz::EditorPopupManager::Instance()->CreatePopup({ + Nz::EditorBaseApplication::Instance()->GetPopupManager().CreatePopup({ .title = "Warning", .description = "Are you sure you want to create a new level?", .choices = { diff --git a/src/NazaraEditor/Core/Application/Actions/EditorAction_Log_Clear.cpp b/src/NazaraEditor/Core/Application/Actions/EditorAction_Log_Clear.cpp index 3bb829f..2eaf4c3 100644 --- a/src/NazaraEditor/Core/Application/Actions/EditorAction_Log_Clear.cpp +++ b/src/NazaraEditor/Core/Application/Actions/EditorAction_Log_Clear.cpp @@ -1,10 +1,10 @@ #include -#include +#include namespace Nz { void EditorAction_Log_Clear::Execute() { - Nz::EditorLogger::Instance()->Clear(); + Nz::EditorBaseApplication::Instance()->GetLogger().Clear(); } } \ No newline at end of file diff --git a/src/NazaraEditor/Core/Application/Actions/EditorAction_Log_CopyToClipboard.cpp b/src/NazaraEditor/Core/Application/Actions/EditorAction_Log_CopyToClipboard.cpp index 1d0b369..d231bed 100644 --- a/src/NazaraEditor/Core/Application/Actions/EditorAction_Log_CopyToClipboard.cpp +++ b/src/NazaraEditor/Core/Application/Actions/EditorAction_Log_CopyToClipboard.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -9,7 +10,7 @@ namespace Nz { void EditorAction_Log_CopyToClipboard::Execute() { - auto& lines = Nz::EditorLogger::Instance()->GetLog(); + auto& lines = Nz::EditorBaseApplication::Instance()->GetLogger().GetLog(); if (lines.empty()) return; diff --git a/src/NazaraEditor/Core/Application/Actions/EditorAction_Quit.cpp b/src/NazaraEditor/Core/Application/Actions/EditorAction_Quit.cpp index a457423..4076d8e 100644 --- a/src/NazaraEditor/Core/Application/Actions/EditorAction_Quit.cpp +++ b/src/NazaraEditor/Core/Application/Actions/EditorAction_Quit.cpp @@ -6,7 +6,7 @@ namespace Nz { void EditorAction_Quit::Execute() { - Nz::EditorPopupManager::Instance()->CreatePopup({ + Nz::EditorBaseApplication::Instance()->GetPopupManager().CreatePopup({ .title = "Warning", .description = "Are you sure you want to exit? All unsaved work will be discarded", .choices = { diff --git a/src/NazaraEditor/Core/Application/EditorLogger.cpp b/src/NazaraEditor/Core/Application/EditorLogger.cpp index 59cf782..ed60a20 100644 --- a/src/NazaraEditor/Core/Application/EditorLogger.cpp +++ b/src/NazaraEditor/Core/Application/EditorLogger.cpp @@ -2,24 +2,9 @@ namespace Nz { - EditorLogger* EditorLogger::s_instance = nullptr; - EditorLogger::EditorLogger() { - NazaraAssert(s_instance == nullptr, "EditorLogger already exists"); - s_instance = this; - Nz::Log::OnLogWrite.Connect([this](auto&& str) { m_text.emplace_back(str); }); Nz::Log::OnLogWriteError.Connect([this](ErrorType, auto&& str, int, const char*, const char*) { m_text.emplace_back(str); }); } - - EditorLogger::~EditorLogger() - { - s_instance = nullptr; - } - - EditorLogger* EditorLogger::Instance() - { - return s_instance; - } } \ No newline at end of file diff --git a/src/NazaraEditor/Core/UI/PopupManager.cpp b/src/NazaraEditor/Core/UI/PopupManager.cpp index 4a13e83..ff275e0 100644 --- a/src/NazaraEditor/Core/UI/PopupManager.cpp +++ b/src/NazaraEditor/Core/UI/PopupManager.cpp @@ -1,4 +1,5 @@ #include +#include namespace Nz { @@ -29,7 +30,7 @@ namespace Nz if (choice.callback) choice.callback(); - EditorPopupManager::Instance()->DestroyPopup(m_id); + EditorBaseApplication::Instance()->GetPopupManager().DestroyPopup(m_id); } ImGui::SameLine(); } @@ -38,23 +39,9 @@ namespace Nz } } - EditorPopupManager* EditorPopupManager::s_instance = nullptr; - EditorPopupManager* EditorPopupManager::Instance() - { - return s_instance; - } - EditorPopupManager::EditorPopupManager() : m_currentIndex(0) - { - NazaraAssert(s_instance == nullptr, "EditorPopupManager already exists"); - s_instance = this; - } - - EditorPopupManager::~EditorPopupManager() - { - s_instance = nullptr; - } + {} void EditorPopupManager::Update() { diff --git a/src/NazaraEditor/Core/UI/Window.cpp b/src/NazaraEditor/Core/UI/Window.cpp index b558b86..4e2f7e6 100644 --- a/src/NazaraEditor/Core/UI/Window.cpp +++ b/src/NazaraEditor/Core/UI/Window.cpp @@ -18,7 +18,7 @@ namespace Nz return; auto name = prop.className; - AddMenuAction(prop.path, prop.shortcut.ToString(), [name]() { Nz::ActionStack::Instance()->ExecuteAction(name); }, prop.icon); + AddMenuAction(prop.path, prop.shortcut.ToString(), [name]() { Nz::EditorBaseApplication::Instance()->GetActionStack().ExecuteAction(name); }, prop.icon); }); } diff --git a/src/NazaraEditor/Editor/UI/OutputWindow.cpp b/src/NazaraEditor/Editor/UI/OutputWindow.cpp index 7ec2518..5b46e02 100644 --- a/src/NazaraEditor/Editor/UI/OutputWindow.cpp +++ b/src/NazaraEditor/Editor/UI/OutputWindow.cpp @@ -1,5 +1,6 @@ #include +#include #include namespace NzEditor @@ -15,7 +16,7 @@ namespace NzEditor { if (ImGui::BeginChild("scrolling")) { - for (auto&& line : Nz::EditorLogger::Instance()->GetLog()) + for (auto&& line : Nz::EditorBaseApplication::Instance()->GetLogger().GetLog()) ImGui::TextUnformatted(line.c_str()); if (m_bScrollToBottom) diff --git a/src/NazaraEditor/Editor/main.cpp b/src/NazaraEditor/Editor/main.cpp index 6dffae4..466dc7b 100644 --- a/src/NazaraEditor/Editor/main.cpp +++ b/src/NazaraEditor/Editor/main.cpp @@ -34,6 +34,7 @@ int WinMain(int argc, char* argv[]) NzEditor::Application app; app.SetResourceFolder(resourceDir); + app.SetLogger(logger); ImGui::EnsureContextOnThisThread();