Migrate ProjectManager to dependency injection

- Created IProjectManager interface
- ProjectManager now implements IProjectManager
- Removed ProjectManager::Get() singleton
- Added IEditorContext::GetProjectManager()
- ProjectPanel now uses m_context->GetProjectManager() instead of singleton
- EditorContext owns ProjectManager instance
This commit is contained in:
2026-03-25 16:25:55 +08:00
parent 56116b62c3
commit d4c94907ba
7 changed files with 98 additions and 35 deletions

View File

@@ -1,6 +1,7 @@
#pragma once
#include "Core/AssetItem.h"
#include "Core/IProjectManager.h"
#include <vector>
#include <string>
#include <memory>
@@ -8,35 +9,31 @@
namespace XCEngine {
namespace Editor {
class ProjectManager {
class ProjectManager : public IProjectManager {
public:
static ProjectManager& Get();
std::vector<AssetItemPtr>& GetCurrentItems() override;
int GetSelectedIndex() const override { return m_selectedIndex; }
void SetSelectedIndex(int index) override { m_selectedIndex = index; }
std::vector<AssetItemPtr>& GetCurrentItems();
int GetSelectedIndex() const { return m_selectedIndex; }
void SetSelectedIndex(int index) { m_selectedIndex = index; }
void NavigateToFolder(const AssetItemPtr& folder) override;
void NavigateBack() override;
void NavigateToIndex(size_t index) override;
bool CanNavigateBack() const override { return m_path.size() > 1; }
void NavigateToFolder(const AssetItemPtr& folder);
void NavigateBack();
void NavigateToIndex(size_t index);
bool CanNavigateBack() const { return m_path.size() > 1; }
std::string GetCurrentPath() const override;
size_t GetPathDepth() const override { return m_path.size(); }
std::string GetPathName(size_t index) const override;
std::string GetCurrentPath() const;
size_t GetPathDepth() const { return m_path.size(); }
std::string GetPathName(size_t index) const;
void Initialize(const std::string& projectPath) override;
void RefreshCurrentFolder() override;
void Initialize(const std::string& projectPath);
void RefreshCurrentFolder();
void CreateFolder(const std::string& name) override;
void DeleteItem(int index) override;
bool MoveItem(const std::string& sourceFullPath, const std::string& destFolderFullPath) override;
void CreateFolder(const std::string& name);
void DeleteItem(int index);
bool MoveItem(const std::string& sourceFullPath, const std::string& destFolderFullPath);
const std::string& GetProjectPath() const { return m_projectPath; }
const std::string& GetProjectPath() const override { return m_projectPath; }
private:
ProjectManager() = default;
AssetItemPtr ScanDirectory(const std::wstring& path);
AssetItemPtr CreateAssetItem(const std::wstring& path, const std::wstring& nameW, bool isFolder);
std::wstring GetCurrentFullPathW() const;