Add editor shell interaction contract
This commit is contained in:
139
new_editor/include/XCEditor/Core/UIEditorShellInteraction.h
Normal file
139
new_editor/include/XCEditor/Core/UIEditorShellInteraction.h
Normal file
@@ -0,0 +1,139 @@
|
||||
#pragma once
|
||||
|
||||
#include <XCEditor/Core/UIEditorMenuModel.h>
|
||||
#include <XCEditor/Core/UIEditorMenuSession.h>
|
||||
#include <XCEditor/Core/UIEditorShellCompose.h>
|
||||
#include <XCEditor/Core/UIEditorWorkspaceCompose.h>
|
||||
#include <XCEditor/Widgets/UIEditorMenuPopup.h>
|
||||
|
||||
#include <XCEngine/UI/DrawData.h>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace XCEngine::UI::Editor {
|
||||
|
||||
struct UIEditorShellInteractionModel {
|
||||
UIEditorResolvedMenuModel resolvedMenuModel = {};
|
||||
std::vector<Widgets::UIEditorStatusBarSegment> statusSegments = {};
|
||||
std::vector<UIEditorWorkspacePanelPresentationModel> workspacePresentations = {};
|
||||
};
|
||||
|
||||
struct UIEditorShellInteractionState {
|
||||
UIEditorShellComposeState composeState = {};
|
||||
UIEditorMenuSession menuSession = {};
|
||||
::XCEngine::UI::UIPoint pointerPosition = {};
|
||||
bool focused = false;
|
||||
bool hasPointerPosition = false;
|
||||
};
|
||||
|
||||
struct UIEditorShellInteractionMetrics {
|
||||
UIEditorShellComposeMetrics shellMetrics = {};
|
||||
Widgets::UIEditorMenuPopupMetrics popupMetrics = {};
|
||||
};
|
||||
|
||||
struct UIEditorShellInteractionPalette {
|
||||
UIEditorShellComposePalette shellPalette = {};
|
||||
Widgets::UIEditorMenuPopupPalette popupPalette = {};
|
||||
};
|
||||
|
||||
struct UIEditorShellInteractionMenuButtonRequest {
|
||||
std::string menuId = {};
|
||||
std::string label = {};
|
||||
std::string popupId = {};
|
||||
::XCEngine::UI::UIRect rect = {};
|
||||
::XCEngine::UI::UIInputPath path = {};
|
||||
bool enabled = true;
|
||||
};
|
||||
|
||||
struct UIEditorShellInteractionPopupItemRequest {
|
||||
std::string popupId = {};
|
||||
std::string menuId = {};
|
||||
std::string itemId = {};
|
||||
std::string label = {};
|
||||
std::string commandId = {};
|
||||
std::string childPopupId = {};
|
||||
::XCEngine::UI::UIRect rect = {};
|
||||
::XCEngine::UI::UIInputPath path = {};
|
||||
UIEditorMenuItemKind kind = UIEditorMenuItemKind::Command;
|
||||
bool enabled = false;
|
||||
bool checked = false;
|
||||
bool hasSubmenu = false;
|
||||
};
|
||||
|
||||
struct UIEditorShellInteractionPopupRequest {
|
||||
std::string popupId = {};
|
||||
std::string menuId = {};
|
||||
std::string sourceItemId = {};
|
||||
::XCEngine::UI::Widgets::UIPopupOverlayEntry overlayEntry = {};
|
||||
::XCEngine::UI::Widgets::UIPopupPlacementResult placement = {};
|
||||
Widgets::UIEditorMenuPopupLayout layout = {};
|
||||
std::vector<UIEditorResolvedMenuItem> resolvedItems = {};
|
||||
std::vector<Widgets::UIEditorMenuPopupItem> widgetItems = {};
|
||||
std::vector<UIEditorShellInteractionPopupItemRequest> itemRequests = {};
|
||||
};
|
||||
|
||||
struct UIEditorShellInteractionRequest {
|
||||
UIEditorShellComposeRequest shellRequest = {};
|
||||
std::vector<Widgets::UIEditorMenuBarItem> menuBarItems = {};
|
||||
std::vector<UIEditorShellInteractionMenuButtonRequest> menuButtons = {};
|
||||
std::vector<UIEditorShellInteractionPopupRequest> popupRequests = {};
|
||||
};
|
||||
|
||||
struct UIEditorShellInteractionResult {
|
||||
bool consumed = false;
|
||||
bool commandTriggered = false;
|
||||
std::string menuId = {};
|
||||
std::string popupId = {};
|
||||
std::string itemId = {};
|
||||
std::string commandId = {};
|
||||
UIEditorMenuSessionMutationResult menuMutation = {};
|
||||
};
|
||||
|
||||
struct UIEditorShellInteractionPopupFrame {
|
||||
std::string popupId = {};
|
||||
Widgets::UIEditorMenuPopupState popupState = {};
|
||||
};
|
||||
|
||||
struct UIEditorShellInteractionFrame {
|
||||
UIEditorShellInteractionRequest request = {};
|
||||
UIEditorShellComposeFrame shellFrame = {};
|
||||
std::vector<UIEditorShellInteractionPopupFrame> popupFrames = {};
|
||||
UIEditorShellInteractionResult result = {};
|
||||
std::string openRootMenuId = {};
|
||||
std::string hoveredMenuId = {};
|
||||
std::string hoveredPopupId = {};
|
||||
std::string hoveredItemId = {};
|
||||
bool focused = false;
|
||||
};
|
||||
|
||||
UIEditorShellInteractionRequest ResolveUIEditorShellInteractionRequest(
|
||||
const ::XCEngine::UI::UIRect& bounds,
|
||||
const UIEditorPanelRegistry& panelRegistry,
|
||||
const UIEditorWorkspaceModel& workspace,
|
||||
const UIEditorWorkspaceSession& session,
|
||||
const UIEditorShellInteractionModel& model,
|
||||
const Widgets::UIEditorDockHostState& dockHostState = {},
|
||||
const UIEditorShellInteractionState& state = {},
|
||||
const UIEditorShellInteractionMetrics& metrics = {});
|
||||
|
||||
UIEditorShellInteractionFrame UpdateUIEditorShellInteraction(
|
||||
UIEditorShellInteractionState& state,
|
||||
const ::XCEngine::UI::UIRect& bounds,
|
||||
const UIEditorPanelRegistry& panelRegistry,
|
||||
const UIEditorWorkspaceModel& workspace,
|
||||
const UIEditorWorkspaceSession& session,
|
||||
const UIEditorShellInteractionModel& model,
|
||||
const std::vector<::XCEngine::UI::UIInputEvent>& inputEvents,
|
||||
const Widgets::UIEditorDockHostState& dockHostState = {},
|
||||
const UIEditorShellInteractionMetrics& metrics = {});
|
||||
|
||||
void AppendUIEditorShellInteraction(
|
||||
::XCEngine::UI::UIDrawList& drawList,
|
||||
const UIEditorShellInteractionFrame& frame,
|
||||
const UIEditorShellInteractionModel& model,
|
||||
const UIEditorShellInteractionState& state,
|
||||
const UIEditorShellInteractionPalette& palette = {},
|
||||
const UIEditorShellInteractionMetrics& metrics = {});
|
||||
|
||||
} // namespace XCEngine::UI::Editor
|
||||
Reference in New Issue
Block a user