Files
XCEngine/new_editor/app/Features/Inspector/InspectorPanel.h

86 lines
3.5 KiB
C++

#pragma once
#include "Features/Inspector/InspectorPresentationModel.h"
#include "Features/Inspector/InspectorSubject.h"
#include "Commands/EditorEditCommandRoute.h"
#include "Features/PanelInputContext.h"
#include <XCEditor/Fields/UIEditorPropertyGridInteraction.h>
#include <XCEditor/Panels/UIEditorPanelContentHost.h>
#include <XCEngine/UI/DrawData.h>
#include <XCEngine/UI/Widgets/UIExpansionModel.h>
#include <XCEngine/UI/Widgets/UIPropertyEditModel.h>
#include <XCEngine/UI/Widgets/UISelectionModel.h>
#include <cstdint>
#include <string>
#include <unordered_set>
#include <vector>
namespace XCEngine::UI::Editor::App {
class EditorCommandFocusService;
class EditorContext;
class EditorSceneRuntime;
class InspectorPanel final : public EditorEditCommandRoute {
public:
void SetCommandFocusService(EditorCommandFocusService* commandFocusService);
void Update(
EditorContext& context,
const UIEditorPanelContentHostFrame& contentHostFrame,
const std::vector<::XCEngine::UI::UIInputEvent>& inputEvents,
const PanelInputContext& inputContext);
void Append(::XCEngine::UI::UIDrawList& drawList) const;
UIEditorHostCommandEvaluationResult EvaluateEditCommand(
std::string_view commandId) const override;
UIEditorHostCommandDispatchResult DispatchEditCommand(
std::string_view commandId) override;
private:
const UIEditorPanelContentHostPanelState* FindMountedInspectorPanel(
const UIEditorPanelContentHostFrame& contentHostFrame) const;
void ResetPanelState();
void ResetInteractionState();
void SyncExpansionState(bool subjectChanged);
void SyncSelectionState();
std::string BuildSubjectKey() const;
float ResolveHeaderHeight() const;
::XCEngine::UI::UIRect BuildGridBounds() const;
void ClaimCommandFocus(
const std::vector<::XCEngine::UI::UIInputEvent>& inputEvents,
bool allowInteraction);
const InspectorPresentationComponentBinding* FindSelectedComponentBinding() const;
const Widgets::UIEditorPropertyGridField* FindField(std::string_view fieldId) const;
Widgets::UIEditorPropertyGridField* FindMutableField(std::string_view fieldId);
void CapturePresentationStamps(const EditorContext& context);
void RebuildPresentation(EditorContext& context, bool subjectChanged);
void RefreshPresentation(EditorContext& context, bool subjectChanged);
void ForceResyncPresentation(EditorContext& context);
bool ApplyColorPickerToolValue(EditorContext& context);
void RequestColorPicker(EditorContext& context, std::string_view fieldId);
bool ApplyChangedField(std::string_view fieldId);
EditorCommandFocusService* m_commandFocusService = nullptr;
EditorSceneRuntime* m_sceneRuntime = nullptr;
bool m_visible = false;
::XCEngine::UI::UIRect m_bounds = {};
InspectorSubject m_subject = {};
std::string m_subjectKey = {};
InspectorPresentationModel m_presentation = {};
::XCEngine::UI::Widgets::UISelectionModel m_fieldSelection = {};
::XCEngine::UI::Widgets::UIExpansionModel m_sectionExpansion = {};
::XCEngine::UI::Widgets::UIPropertyEditModel m_propertyEditModel = {};
UIEditorPropertyGridInteractionState m_interactionState = {};
UIEditorPropertyGridInteractionFrame m_gridFrame = {};
std::unordered_set<std::string> m_knownSectionIds = {};
std::uint64_t m_lastSceneSelectionStamp = 0u;
std::uint64_t m_lastProjectSelectionStamp = 0u;
std::uint64_t m_lastSceneInspectorRevision = 0u;
std::uint64_t m_lastAppliedColorPickerRevision = 0u;
};
} // namespace XCEngine::UI::Editor::App