79 lines
2.8 KiB
C++
79 lines
2.8 KiB
C++
|
|
#include "Windowing/System/EditorWindowSystem.h"
|
||
|
|
|
||
|
|
#include <utility>
|
||
|
|
|
||
|
|
namespace XCEngine::UI::Editor::App {
|
||
|
|
|
||
|
|
EditorWindowSystem::EditorWindowSystem(UIEditorPanelRegistry panelRegistry)
|
||
|
|
: m_workspaceStore(std::move(panelRegistry)) {}
|
||
|
|
|
||
|
|
const UIEditorPanelRegistry& EditorWindowSystem::GetPanelRegistry() const {
|
||
|
|
return m_workspaceStore.GetPanelRegistry();
|
||
|
|
}
|
||
|
|
|
||
|
|
bool EditorWindowSystem::BootstrapPrimaryWindow(
|
||
|
|
std::string_view primaryWindowId,
|
||
|
|
const UIEditorWorkspaceController& workspaceController,
|
||
|
|
std::string& outError) {
|
||
|
|
const std::string resolvedPrimaryWindowId =
|
||
|
|
primaryWindowId.empty() ? std::string("main-window") : std::string(primaryWindowId);
|
||
|
|
|
||
|
|
UIEditorWindowWorkspaceSet windowSet = {};
|
||
|
|
windowSet.primaryWindowId = resolvedPrimaryWindowId;
|
||
|
|
windowSet.activeWindowId = resolvedPrimaryWindowId;
|
||
|
|
|
||
|
|
UIEditorWindowWorkspaceState primaryWindowState = {};
|
||
|
|
primaryWindowState.windowId = resolvedPrimaryWindowId;
|
||
|
|
primaryWindowState.workspace = workspaceController.GetWorkspace();
|
||
|
|
primaryWindowState.session = workspaceController.GetSession();
|
||
|
|
windowSet.windows.push_back(std::move(primaryWindowState));
|
||
|
|
|
||
|
|
return m_workspaceStore.TrySetWindowSet(std::move(windowSet), outError);
|
||
|
|
}
|
||
|
|
|
||
|
|
bool EditorWindowSystem::ValidateWindowSet(
|
||
|
|
const UIEditorWindowWorkspaceSet& windowSet,
|
||
|
|
std::string& outError) const {
|
||
|
|
return m_workspaceStore.ValidateWindowSet(windowSet, outError);
|
||
|
|
}
|
||
|
|
|
||
|
|
bool EditorWindowSystem::TrySetWindowSet(
|
||
|
|
UIEditorWindowWorkspaceSet windowSet,
|
||
|
|
std::string& outError) {
|
||
|
|
return m_workspaceStore.TrySetWindowSet(std::move(windowSet), outError);
|
||
|
|
}
|
||
|
|
|
||
|
|
bool EditorWindowSystem::UpsertWindowState(
|
||
|
|
const UIEditorWindowWorkspaceState& windowState,
|
||
|
|
bool primary,
|
||
|
|
std::string& outError) {
|
||
|
|
return m_workspaceStore.UpsertWindowState(windowState, primary, outError);
|
||
|
|
}
|
||
|
|
|
||
|
|
void EditorWindowSystem::RemoveWindowState(std::string_view windowId, bool primary) {
|
||
|
|
m_workspaceStore.RemoveWindowState(windowId, primary);
|
||
|
|
}
|
||
|
|
|
||
|
|
bool EditorWindowSystem::IsPrimaryWindowId(std::string_view windowId) const {
|
||
|
|
return m_workspaceStore.IsPrimaryWindowId(windowId);
|
||
|
|
}
|
||
|
|
|
||
|
|
const UIEditorWindowWorkspaceSet& EditorWindowSystem::GetWindowSet() const {
|
||
|
|
return m_workspaceStore.GetWindowSet();
|
||
|
|
}
|
||
|
|
|
||
|
|
UIEditorWindowWorkspaceController EditorWindowSystem::BuildWorkspaceMutationController() const {
|
||
|
|
return UIEditorWindowWorkspaceController(GetPanelRegistry(), GetWindowSet());
|
||
|
|
}
|
||
|
|
|
||
|
|
UIEditorWindowWorkspaceOperationResult EditorWindowSystem::EvaluateDetachPanelToNewWindow(
|
||
|
|
std::string_view sourceWindowId,
|
||
|
|
std::string_view sourceNodeId,
|
||
|
|
std::string_view panelId,
|
||
|
|
UIEditorWindowWorkspaceController& outController) const {
|
||
|
|
outController = BuildWorkspaceMutationController();
|
||
|
|
return outController.DetachPanelToNewWindow(sourceWindowId, sourceNodeId, panelId);
|
||
|
|
}
|
||
|
|
|
||
|
|
} // namespace XCEngine::UI::Editor::App
|