Files
XCEngine/new_editor/app/Composition/EditorShellAssetLayout.cpp

146 lines
5.5 KiB
C++

#include "EditorShellAssetBuilderInternal.h"
#include "Composition/EditorPanelIds.h"
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