#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, InvalidWorkspace = 2, InvalidWorkspaceSession = 3, InvalidShellMenuModel = 4, InvalidShortcutConfiguration = 5, MissingPanelDescriptor = 6, PanelTitleMismatch = 7, PanelPlaceholderMismatch = 8, DuplicateShellPresentationPanelId = 9, MissingShellPresentationPanelDescriptor = 10, MissingRequiredShellPresentation = 11, ShellPresentationKindMismatch = 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