refactor(new_editor): snapshot hosted editor restructuring
This commit is contained in:
@@ -1,10 +1,7 @@
|
||||
#include "EditorContext.h"
|
||||
|
||||
#include "Composition/EditorShellAssetBuilder.h"
|
||||
#include "Scene/EditorSceneRuntime.h"
|
||||
|
||||
#include "Composition/EditorPanelIds.h"
|
||||
|
||||
#include <sstream>
|
||||
#include <utility>
|
||||
|
||||
@@ -61,6 +58,7 @@ bool EditorContext::Initialize(const std::filesystem::path& repoRoot) {
|
||||
m_sceneRuntime = {};
|
||||
m_sceneRuntime.Initialize(m_session.projectRoot);
|
||||
m_sceneRuntime.BindSelectionService(&m_selectionService);
|
||||
ResetEditorColorPickerToolState(m_colorPickerToolState);
|
||||
SyncSessionFromSelectionService();
|
||||
m_hostCommandBridge.BindSession(m_session);
|
||||
m_hostCommandBridge.BindCommandFocusService(m_commandFocusService);
|
||||
@@ -145,6 +143,14 @@ const EditorSceneRuntime& EditorContext::GetSceneRuntime() const {
|
||||
return m_sceneRuntime;
|
||||
}
|
||||
|
||||
EditorColorPickerToolState& EditorContext::GetColorPickerToolState() {
|
||||
return m_colorPickerToolState;
|
||||
}
|
||||
|
||||
const EditorColorPickerToolState& EditorContext::GetColorPickerToolState() const {
|
||||
return m_colorPickerToolState;
|
||||
}
|
||||
|
||||
void EditorContext::SetSelection(EditorSelectionState selection) {
|
||||
m_selectionService.SetSelection(std::move(selection));
|
||||
SyncSessionFromSelectionService();
|
||||
@@ -198,7 +204,8 @@ UIEditorShellInteractionDefinition EditorContext::BuildShellDefinition(
|
||||
if (UIEditorWorkspacePanelPresentationModel* scenePresentation =
|
||||
FindMutablePresentation(definition.workspacePresentations, kScenePanelId);
|
||||
scenePresentation != nullptr) {
|
||||
scenePresentation->viewportShellModel.spec.chrome.showTopBar = false;
|
||||
scenePresentation->viewportShellModel.spec.chrome.showTopBar = true;
|
||||
scenePresentation->viewportShellModel.spec.chrome.topBarHeight = 24.0f;
|
||||
scenePresentation->viewportShellModel.spec.chrome.title = {};
|
||||
scenePresentation->viewportShellModel.spec.chrome.subtitle = {};
|
||||
scenePresentation->viewportShellModel.spec.toolItems.clear();
|
||||
@@ -240,3 +247,115 @@ std::string EditorContext::DescribeWorkspaceState(
|
||||
}
|
||||
|
||||
} // namespace XCEngine::UI::Editor::App
|
||||
|
||||
namespace XCEngine::UI::Editor::App {
|
||||
|
||||
namespace {
|
||||
|
||||
constexpr std::size_t kMaxConsoleEntries = 256u;
|
||||
|
||||
std::string ResolveViewportStatusMessage(
|
||||
const UIEditorShellInteractionResult& result) {
|
||||
if (result.viewportInputFrame.captureStarted) {
|
||||
return "Viewport capture started.";
|
||||
}
|
||||
if (result.viewportInputFrame.captureEnded) {
|
||||
return "Viewport capture ended.";
|
||||
}
|
||||
if (result.viewportInputFrame.focusGained) {
|
||||
return "Viewport focused.";
|
||||
}
|
||||
if (result.viewportInputFrame.focusLost) {
|
||||
return "Viewport focus lost.";
|
||||
}
|
||||
if (result.viewportInputFrame.pointerPressedInside) {
|
||||
return "Viewport pointer down.";
|
||||
}
|
||||
if (result.viewportInputFrame.pointerReleasedInside) {
|
||||
return "Viewport pointer up.";
|
||||
}
|
||||
if (result.viewportInputFrame.pointerMoved) {
|
||||
return "Viewport pointer move.";
|
||||
}
|
||||
if (result.viewportInputFrame.wheelDelta != 0.0f) {
|
||||
return "Viewport wheel.";
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void EditorContext::SetReadyStatus() {
|
||||
SetStatus("Ready", "Application shell loaded.");
|
||||
}
|
||||
|
||||
void EditorContext::SetStatus(
|
||||
std::string status,
|
||||
std::string message) {
|
||||
if (m_lastStatus != status || m_lastMessage != message) {
|
||||
AppendConsoleEntry(status, message);
|
||||
}
|
||||
m_lastStatus = std::move(status);
|
||||
m_lastMessage = std::move(message);
|
||||
}
|
||||
|
||||
void EditorContext::UpdateStatusFromShellResult(
|
||||
const UIEditorWorkspaceController& workspaceController,
|
||||
const UIEditorShellInteractionResult& result) {
|
||||
(void)workspaceController;
|
||||
|
||||
if (result.commandDispatched) {
|
||||
SetStatus(
|
||||
std::string(GetUIEditorCommandDispatchStatusName(result.commandDispatchResult.status)),
|
||||
result.commandDispatchResult.message.empty()
|
||||
? result.commandDispatchResult.displayName
|
||||
: result.commandDispatchResult.message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.workspaceResult.dockHostResult.layoutChanged) {
|
||||
SetStatus("Layout", result.workspaceResult.dockHostResult.layoutResult.message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.workspaceResult.dockHostResult.commandExecuted) {
|
||||
SetStatus("Workspace", result.workspaceResult.dockHostResult.commandResult.message);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!result.viewportPanelId.empty()) {
|
||||
std::string message = ResolveViewportStatusMessage(result);
|
||||
if (!message.empty()) {
|
||||
SetStatus(result.viewportPanelId, std::move(message));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!result.menuMutation.changed) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!result.itemId.empty() && !result.menuMutation.openedPopupId.empty()) {
|
||||
SetStatus("Menu", result.itemId + " opened child popup.");
|
||||
} else if (!result.menuId.empty() && !result.menuMutation.openedPopupId.empty()) {
|
||||
SetStatus("Menu", result.menuId + " opened.");
|
||||
} else {
|
||||
SetStatus("Menu", "Popup chain dismissed.");
|
||||
}
|
||||
}
|
||||
|
||||
void EditorContext::AppendConsoleEntry(
|
||||
std::string channel,
|
||||
std::string message) {
|
||||
EditorConsoleEntry entry = {};
|
||||
entry.channel = std::move(channel);
|
||||
entry.message = std::move(message);
|
||||
m_session.consoleEntries.push_back(std::move(entry));
|
||||
if (m_session.consoleEntries.size() > kMaxConsoleEntries) {
|
||||
m_session.consoleEntries.erase(m_session.consoleEntries.begin());
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XCEngine::UI::Editor::App
|
||||
|
||||
|
||||
Reference in New Issue
Block a user