#include "EditorShellAssetBuilderInternal.h" #include namespace XCEngine::UI::Editor::App::CompositionInternal { namespace { UIEditorPanelDescriptor BuildHostedContentPanelDescriptor( std::string_view panelId, std::string_view title, bool placeholder, bool canHide, bool canClose) { UIEditorPanelDescriptor descriptor = {}; descriptor.panelId = std::string(panelId); descriptor.defaultTitle = std::string(title); descriptor.presentationKind = UIEditorPanelPresentationKind::HostedContent; descriptor.placeholder = placeholder; descriptor.canHide = canHide; descriptor.canClose = canClose; return descriptor; } UIEditorPanelDescriptor BuildViewportPanelDescriptor( std::string_view panelId, std::string_view title, bool canHide, bool canClose, bool showTopBar, bool showBottomBar) { UIEditorPanelDescriptor descriptor = {}; descriptor.panelId = std::string(panelId); descriptor.defaultTitle = std::string(title); descriptor.presentationKind = UIEditorPanelPresentationKind::ViewportShell; descriptor.placeholder = false; descriptor.canHide = canHide; descriptor.canClose = canClose; descriptor.viewportShellSpec.chrome.title = descriptor.defaultTitle; descriptor.viewportShellSpec.chrome.showTopBar = showTopBar; descriptor.viewportShellSpec.chrome.showBottomBar = showBottomBar; return descriptor; } const UIEditorPanelDescriptor& RequirePanelDescriptor( const UIEditorPanelRegistry& registry, std::string_view panelId) { if (const UIEditorPanelDescriptor* descriptor = FindUIEditorPanelDescriptor(registry, panelId); descriptor != nullptr) { return *descriptor; } static const UIEditorPanelDescriptor fallback = {}; return fallback; } } // namespace UIEditorPanelRegistry BuildEditorPanelRegistry() { UIEditorPanelRegistry registry = {}; registry.panels = { BuildHostedContentPanelDescriptor(kHierarchyPanelId, kHierarchyPanelTitle, true, false, false), BuildViewportPanelDescriptor(kScenePanelId, kScenePanelTitle, false, false, false, false), BuildViewportPanelDescriptor(kGamePanelId, kGamePanelTitle, false, false, false, false), BuildHostedContentPanelDescriptor(kInspectorPanelId, kInspectorPanelTitle, true, false, false), BuildHostedContentPanelDescriptor(kConsolePanelId, kConsolePanelTitle, true, false, false), BuildHostedContentPanelDescriptor(kProjectPanelId, kProjectPanelTitle, false, false, false) }; return registry; } UIEditorWorkspaceModel BuildEditorWorkspaceModel( const UIEditorPanelRegistry& panelRegistry) { const UIEditorPanelDescriptor& hierarchy = RequirePanelDescriptor(panelRegistry, kHierarchyPanelId); const UIEditorPanelDescriptor& scene = RequirePanelDescriptor(panelRegistry, kScenePanelId); const UIEditorPanelDescriptor& game = RequirePanelDescriptor(panelRegistry, kGamePanelId); const UIEditorPanelDescriptor& inspector = RequirePanelDescriptor(panelRegistry, kInspectorPanelId); const UIEditorPanelDescriptor& console = RequirePanelDescriptor(panelRegistry, kConsolePanelId); const UIEditorPanelDescriptor& project = RequirePanelDescriptor(panelRegistry, kProjectPanelId); UIEditorWorkspaceModel workspace = {}; workspace.root = BuildUIEditorWorkspaceSplit( "workspace-root", UIEditorWorkspaceSplitAxis::Vertical, 0.75f, BuildUIEditorWorkspaceSplit( "workspace-top", UIEditorWorkspaceSplitAxis::Horizontal, 0.7875f, BuildUIEditorWorkspaceSplit( "workspace-main", UIEditorWorkspaceSplitAxis::Horizontal, 0.19047619f, BuildUIEditorWorkspaceSingleTabStack( "hierarchy-panel", std::string(kHierarchyPanelId), hierarchy.defaultTitle, hierarchy.placeholder), BuildUIEditorWorkspaceTabStack( "center-tabs", { BuildUIEditorWorkspacePanel( "scene-panel", std::string(kScenePanelId), scene.defaultTitle, scene.placeholder), BuildUIEditorWorkspacePanel( "game-panel", std::string(kGamePanelId), game.defaultTitle, game.placeholder) }, 0u)), BuildUIEditorWorkspaceSingleTabStack( "inspector-panel", std::string(kInspectorPanelId), inspector.defaultTitle, inspector.placeholder)), BuildUIEditorWorkspaceTabStack( "bottom-tabs", { BuildUIEditorWorkspacePanel( "console-panel", std::string(kConsolePanelId), console.defaultTitle, console.placeholder), BuildUIEditorWorkspacePanel( "project-panel", std::string(kProjectPanelId), project.defaultTitle, project.placeholder) }, 1u)); workspace.activePanelId = std::string(kScenePanelId); return workspace; } } // namespace XCEngine::UI::Editor::App::CompositionInternal