#include "EditorShellAssetBuilderSupport.h" #include #include namespace XCEngine::UI::Editor::App::CompositionSupport { namespace { using XCEngine::Input::KeyCode; using XCEngine::UI::UIInputEventType; using XCEngine::UI::UIShortcutBinding; using XCEngine::UI::UIShortcutScope; UIEditorCommandDescriptor BuildHostCommand( std::string commandId, std::string displayName) { UIEditorCommandDescriptor command = {}; command.commandId = std::move(commandId); command.displayName = std::move(displayName); command.kind = UIEditorCommandKind::Host; command.workspaceCommand.panelSource = UIEditorCommandPanelSource::None; command.workspaceCommand.panelId.clear(); return command; } UIEditorCommandDescriptor BuildWorkspaceCommand( std::string commandId, std::string displayName, UIEditorWorkspaceCommandKind kind, std::string panelId = {}) { UIEditorCommandDescriptor command = {}; command.commandId = std::move(commandId); command.displayName = std::move(displayName); command.workspaceCommand.kind = kind; if (kind == UIEditorWorkspaceCommandKind::ResetWorkspace) { command.workspaceCommand.panelSource = UIEditorCommandPanelSource::None; } else { command.workspaceCommand.panelSource = UIEditorCommandPanelSource::FixedPanelId; command.workspaceCommand.panelId = std::move(panelId); } return command; } UIShortcutBinding BuildBinding( std::string commandId, std::int32_t keyCode, bool control = false, bool shift = false, bool alt = false) { UIShortcutBinding binding = {}; binding.scope = UIShortcutScope::Global; binding.triggerEventType = UIInputEventType::KeyDown; binding.commandId = std::move(commandId); binding.chord.keyCode = keyCode; binding.chord.modifiers.control = control; binding.chord.modifiers.shift = shift; binding.chord.modifiers.alt = alt; return binding; } } // namespace UIEditorCommandRegistry BuildEditorCommandRegistry() { UIEditorCommandRegistry registry = {}; registry.commands = { BuildHostCommand("file.new_project", "New Project..."), BuildHostCommand("file.open_project", "Open Project..."), BuildHostCommand("file.save_project", "Save Project"), BuildHostCommand("file.new_scene", "New Scene"), BuildHostCommand("file.open_scene", "Open Scene"), BuildHostCommand("file.save_scene", "Save Scene"), BuildHostCommand("file.save_scene_as", "Save Scene As..."), BuildHostCommand("file.exit", "Exit"), BuildHostCommand("edit.undo", "Undo"), BuildHostCommand("edit.redo", "Redo"), BuildHostCommand("edit.cut", "Cut"), BuildHostCommand("edit.copy", "Copy"), BuildHostCommand("edit.paste", "Paste"), BuildHostCommand("edit.duplicate", "Duplicate"), BuildHostCommand("edit.delete", "Delete"), BuildHostCommand("edit.rename", "Rename"), BuildHostCommand("assets.reimport_selected", "Reimport Selected Asset"), BuildHostCommand("assets.reimport_all", "Reimport All Assets"), BuildHostCommand("assets.clear_library", "Clear Library"), BuildHostCommand("run.play", "Play"), BuildHostCommand("run.pause", "Pause"), BuildHostCommand("run.step", "Step"), BuildHostCommand("scripts.rebuild", "Rebuild Script Assemblies"), BuildHostCommand("help.about", "About"), BuildWorkspaceCommand( "view.reset_layout", "Reset Layout", UIEditorWorkspaceCommandKind::ResetWorkspace), BuildWorkspaceCommand( "view.activate_hierarchy", "Hierarchy", UIEditorWorkspaceCommandKind::ActivatePanel, "hierarchy"), BuildWorkspaceCommand( "view.activate_scene", "Scene", UIEditorWorkspaceCommandKind::ActivatePanel, "scene"), BuildWorkspaceCommand( "view.activate_game", "Game", UIEditorWorkspaceCommandKind::ActivatePanel, "game"), BuildWorkspaceCommand( "view.activate_inspector", "Inspector", UIEditorWorkspaceCommandKind::ActivatePanel, "inspector"), BuildWorkspaceCommand( "view.activate_console", "Console", UIEditorWorkspaceCommandKind::ActivatePanel, "console"), BuildWorkspaceCommand( "view.activate_project", "Project", UIEditorWorkspaceCommandKind::ActivatePanel, "project") }; return registry; } std::vector BuildEditorShortcutBindings() { return { BuildBinding("file.new_scene", static_cast(KeyCode::N), true), BuildBinding("file.open_scene", static_cast(KeyCode::O), true), BuildBinding("file.save_scene", static_cast(KeyCode::S), true), BuildBinding("file.save_scene_as", static_cast(KeyCode::S), true, true), BuildBinding("edit.undo", static_cast(KeyCode::Z), true), BuildBinding("edit.redo", static_cast(KeyCode::Y), true), BuildBinding("edit.cut", static_cast(KeyCode::X), true), BuildBinding("edit.copy", static_cast(KeyCode::C), true), BuildBinding("edit.paste", static_cast(KeyCode::V), true), BuildBinding("edit.duplicate", static_cast(KeyCode::D), true), BuildBinding("edit.delete", static_cast(KeyCode::Delete)), BuildBinding("edit.rename", static_cast(KeyCode::F2)), BuildBinding("run.play", static_cast(KeyCode::F5)), BuildBinding("run.pause", static_cast(KeyCode::F6)), BuildBinding("run.step", static_cast(KeyCode::F7)), BuildBinding("file.exit", static_cast(KeyCode::F4), false, false, true) }; } } // namespace XCEngine::UI::Editor::App::CompositionSupport