Files
XCEngine/new_editor/src/Docking/UIEditorDockHostInteractionInternal.h

78 lines
3.3 KiB
C++

#pragma once
#include <XCEditor/Docking/UIEditorDockHostInteraction.h>
namespace XCEngine::UI::Editor::Detail {
struct DockHostTabStripEventResult {
bool consumed = false;
bool commandRequested = false;
bool reorderRequested = false;
bool dragStarted = false;
bool dragEnded = false;
bool dragCanceled = false;
bool requestPointerCapture = false;
bool releasePointerCapture = false;
UIEditorWorkspaceCommandKind commandKind = UIEditorWorkspaceCommandKind::ActivatePanel;
std::size_t dropInsertionIndex = Widgets::UIEditorTabStripInvalidIndex;
std::string panelId = {};
std::string nodeId = {};
std::string draggedTabId = {};
Widgets::UIEditorDockHostHitTarget hitTarget = {};
int priority = 0;
};
bool ShouldUsePointerPosition(const ::XCEngine::UI::UIInputEvent& event);
bool ShouldDispatchTabStripEvent(
const ::XCEngine::UI::UIInputEvent& event,
bool splitterActive);
UIEditorWorkspaceLayoutOperationResult ApplySplitRatio(
UIEditorWorkspaceController& controller,
std::string_view nodeId,
float splitRatio);
UIEditorWorkspaceCommandResult DispatchPanelCommand(
UIEditorWorkspaceController& controller,
UIEditorWorkspaceCommandKind kind,
std::string panelId);
UIEditorDockHostTabStripInteractionEntry& FindOrCreateTabStripInteractionEntry(
UIEditorDockHostInteractionState& state,
std::string_view nodeId);
void PruneTabStripInteractionEntries(
UIEditorDockHostInteractionState& state,
const Widgets::UIEditorDockHostLayout& layout);
void SyncDockHostTabStripVisualStates(UIEditorDockHostInteractionState& state);
bool HasFocusedTabStrip(const UIEditorDockHostInteractionState& state);
const Widgets::UIEditorDockHostTabStackLayout* FindTabStackLayoutByNodeId(
const Widgets::UIEditorDockHostLayout& layout,
std::string_view nodeId);
bool IsPointInsideRect(
const ::XCEngine::UI::UIRect& rect,
const ::XCEngine::UI::UIPoint& point);
void ClearAllTabStripTransientInteractions(UIEditorDockHostInteractionState& state);
void ClearTabDockDragState(UIEditorDockHostInteractionState& state);
std::vector<Widgets::UIEditorTabStripItem> BuildTabStripItems(
const Widgets::UIEditorDockHostTabStackLayout& tabStack);
Widgets::UIEditorDockHostHitTarget MapTabStripHitTarget(
const Widgets::UIEditorDockHostTabStackLayout& tabStack,
const UIEditorTabStripInteractionResult& result);
int ResolveTabStripPriority(const UIEditorTabStripInteractionResult& result);
DockHostTabStripEventResult ProcessTabStripEvent(
UIEditorDockHostInteractionState& state,
const Widgets::UIEditorDockHostLayout& layout,
const ::XCEngine::UI::UIInputEvent& event,
const Widgets::UIEditorDockHostMetrics& metrics);
std::size_t ResolveTabHeaderDropInsertionIndex(
const Widgets::UIEditorDockHostTabStackLayout& tabStack,
const ::XCEngine::UI::UIPoint& point);
UIEditorWorkspaceDockPlacement ResolveDockPlacement(
const Widgets::UIEditorDockHostTabStackLayout& tabStack,
const ::XCEngine::UI::UIPoint& point);
void SyncDockPreview(
UIEditorDockHostInteractionState& state,
const Widgets::UIEditorDockHostLayout& layout);
void SyncHoverTarget(
UIEditorDockHostInteractionState& state,
const Widgets::UIEditorDockHostLayout& layout);
} // namespace XCEngine::UI::Editor::Detail