#pragma once #include #include #include #include #include #include #include #include #include #include namespace XCEngine::UI::Editor { struct EditorShellShortcutAsset { UIEditorCommandRegistry commandRegistry = {}; std::vector bindings = {}; }; struct EditorShellAsset { std::string screenId = "editor.shell"; std::filesystem::path documentPath = {}; std::filesystem::path captureRootPath = {}; UIEditorPanelRegistry panelRegistry = {}; UIEditorWorkspaceModel workspace = {}; UIEditorWorkspaceSession workspaceSession = {}; UIEditorShellInteractionDefinition shellDefinition = {}; EditorShellShortcutAsset shortcutAsset = {}; }; enum class EditorShellAssetValidationCode : std::uint8_t { None = 0, InvalidPanelRegistry = 1, MissingPanelDescriptor = 2, PanelTitleMismatch = 3, PanelPlaceholderMismatch = 4, InvalidWorkspace = 5, InvalidWorkspaceSession = 6, MissingShellPresentationPanelDescriptor = 7, DuplicateShellPresentationPanelId = 8, MissingRequiredShellPresentation = 9, ShellPresentationKindMismatch = 10, InvalidShellMenuModel = 11, InvalidShortcutConfiguration = 12 }; struct EditorShellAssetValidationResult { EditorShellAssetValidationCode code = EditorShellAssetValidationCode::None; std::string message = {}; [[nodiscard]] bool IsValid() const { return code == EditorShellAssetValidationCode::None; } }; EditorShellAsset BuildDefaultEditorShellAsset(const std::filesystem::path& repoRoot); UIEditorShortcutManager BuildEditorShellShortcutManager(const EditorShellAsset& asset); EditorShellAssetValidationResult ValidateEditorShellAsset(const EditorShellAsset& asset); } // namespace XCEngine::UI::Editor