Refactor new editor boundaries and test ownership

This commit is contained in:
2026-04-19 15:52:28 +08:00
parent dc13b56cf3
commit 93f06e84ed
279 changed files with 6349 additions and 3238 deletions

View File

@@ -2,6 +2,7 @@
#include "Project/EditorProjectRuntime.h"
#include "ProjectBrowserModel.h"
#include "Features/PanelInputContext.h"
#include "Commands/EditorEditCommandRoute.h"
#include <XCEditor/Collections/UIEditorGridDragDrop.h>
@@ -16,6 +17,7 @@
#include <XCEngine/UI/Widgets/UIExpansionModel.h>
#include <XCEngine/UI/Widgets/UISelectionModel.h>
#include <chrono>
#include <cstdint>
#include <filesystem>
#include <memory>
@@ -28,6 +30,17 @@ namespace XCEngine::UI::Editor::App {
class BuiltInIcons;
class EditorCommandFocusService;
} // namespace XCEngine::UI::Editor::App
namespace XCEngine::UI::Editor::Ports {
class SystemInteractionPort;
} // namespace XCEngine::UI::Editor::Ports
namespace XCEngine::UI::Editor::App {
class ProjectPanel final : public EditorEditCommandRoute {
public:
enum class CursorKind : std::uint8_t {
@@ -71,14 +84,14 @@ public:
void Initialize(const std::filesystem::path& repoRoot);
void SetProjectRuntime(EditorProjectRuntime* projectRuntime);
void SetCommandFocusService(EditorCommandFocusService* commandFocusService);
void SetSystemInteractionHost(Ports::SystemInteractionPort* systemInteractionHost);
void SetBuiltInIcons(const BuiltInIcons* icons);
void SetTextMeasurer(const ::XCEngine::UI::Editor::UIEditorTextMeasurer* textMeasurer);
void ResetInteractionState();
void Update(
const UIEditorPanelContentHostFrame& contentHostFrame,
const std::vector<::XCEngine::UI::UIInputEvent>& inputEvents,
bool allowInteraction,
bool panelActive);
const PanelInputContext& inputContext);
void Append(::XCEngine::UI::UIDrawList& drawList) const;
CursorKind GetCursorKind() const;
@@ -205,8 +218,7 @@ private:
std::vector<::XCEngine::UI::UIInputEvent> BuildTreeInteractionInputEvents(
const std::vector<::XCEngine::UI::UIInputEvent>& inputEvents,
const ::XCEngine::UI::UIRect& bounds,
bool allowInteraction,
bool panelActive) const;
const PanelInputContext& inputContext) const;
void ClaimCommandFocus(
const std::vector<::XCEngine::UI::UIInputEvent>& inputEvents,
const ::XCEngine::UI::UIRect& bounds,
@@ -231,6 +243,7 @@ private:
std::unique_ptr<EditorProjectRuntime> m_ownedProjectRuntime = {};
EditorProjectRuntime* m_projectRuntime = nullptr;
EditorCommandFocusService* m_commandFocusService = nullptr;
Ports::SystemInteractionPort* m_systemInteractionHost = nullptr;
const BuiltInIcons* m_icons = nullptr;
const ::XCEngine::UI::Editor::UIEditorTextMeasurer* m_textMeasurer = nullptr;
::XCEngine::UI::Widgets::UISelectionModel m_folderSelection = {};
@@ -252,7 +265,7 @@ private:
std::string m_hoveredAssetItemId = {};
std::string m_lastPrimaryClickedAssetId = {};
float m_navigationWidth = 248.0f;
std::uint64_t m_lastPrimaryClickTimeMs = 0u;
std::chrono::steady_clock::time_point m_lastPrimaryClickTime = {};
std::size_t m_hoveredBreadcrumbIndex = static_cast<std::size_t>(-1);
std::size_t m_pressedBreadcrumbIndex = static_cast<std::size_t>(-1);
bool m_visible = false;