#pragma once #include "Composition/EditorShellVariant.h" #include "Project/EditorProjectRuntime.h" #include "Scene/EditorSceneRuntime.h" #include "Commands/EditorHostCommandBridge.h" #include "State/EditorCommandFocusService.h" #include "State/EditorSelectionService.h" #include "State/EditorSession.h" #include #include #include #include #include #include #include #include namespace XCEngine::UI::Editor::App { class EditorEditCommandRoute; class EditorContext { public: bool Initialize(const std::filesystem::path& repoRoot); void AttachTextMeasurer(const UIEditorTextMeasurer& textMeasurer); void BindEditCommandRoutes( EditorEditCommandRoute* hierarchyRoute, EditorEditCommandRoute* projectRoute, EditorEditCommandRoute* sceneRoute, EditorEditCommandRoute* inspectorRoute = nullptr); void SetExitRequestHandler(std::function handler); void SyncSessionFromWorkspace(const UIEditorWorkspaceController& workspaceController); bool IsValid() const; const std::string& GetValidationMessage() const; const EditorShellAsset& GetShellAsset() const; const EditorSession& GetSession() const; EditorCommandFocusService& GetCommandFocusService(); const EditorCommandFocusService& GetCommandFocusService() const; EditorProjectRuntime& GetProjectRuntime(); const EditorProjectRuntime& GetProjectRuntime() const; EditorSceneRuntime& GetSceneRuntime(); const EditorSceneRuntime& GetSceneRuntime() const; void SetSelection(EditorSelectionState selection); void ClearSelection(); void SyncSessionFromSelectionService(); void SyncSessionFromCommandFocusService(); UIEditorWorkspaceController BuildWorkspaceController() const; const UIEditorShellInteractionServices& GetShellServices() const; UIEditorShellInteractionDefinition BuildShellDefinition( const UIEditorWorkspaceController& workspaceController, std::string_view captureText, EditorShellVariant variant = EditorShellVariant::Primary) const; void SetReadyStatus(); void SetStatus(std::string status, std::string message); void UpdateStatusFromShellResult( const UIEditorWorkspaceController& workspaceController, const UIEditorShellInteractionResult& result); std::string DescribeWorkspaceState( const UIEditorWorkspaceController& workspaceController, const UIEditorShellInteractionState& interactionState) const; private: void AppendConsoleEntry(std::string channel, std::string message); EditorShellAsset m_shellAsset = {}; EditorShellAssetValidationResult m_shellValidation = {}; UIEditorShortcutManager m_shortcutManager = {}; UIEditorShellInteractionServices m_shellServices = {}; EditorSession m_session = {}; EditorCommandFocusService m_commandFocusService = {}; EditorSelectionService m_selectionService = {}; EditorProjectRuntime m_projectRuntime = {}; EditorSceneRuntime m_sceneRuntime = {}; EditorHostCommandBridge m_hostCommandBridge = {}; std::string m_lastStatus = {}; std::string m_lastMessage = {}; }; } // namespace XCEngine::UI::Editor::App