Files
XCEngine/editor/app/Features/Inspector/AddComponentPanel.h

53 lines
1.6 KiB
C++

#pragma once
#include "Scene/EditorSceneBackend.h"
#include "UtilityWindows/EditorUtilityWindowRuntime.h"
#include <cstddef>
#include <string>
#include <vector>
namespace XCEngine::UI::Editor::App {
class EditorSceneRuntime;
class AddComponentPanel final : public EditorUtilityWindowPanel {
public:
explicit AddComponentPanel(EditorSceneRuntime& sceneRuntime)
: m_sceneRuntime(sceneRuntime) {}
std::string_view GetDrawListId() const override {
return "XCEditorUtility.AddComponent";
}
void ResetInteractionState() override;
void Update(
const EditorUtilityWindowHostContext& hostContext,
const std::vector<::XCEngine::UI::UIInputEvent>& inputEvents) override;
void Append(::XCEngine::UI::UIDrawList& drawList) const override;
private:
struct EntryPresentation {
std::string componentTypeName = {};
std::string displayName = {};
std::string disabledReason = {};
::XCEngine::UI::UIRect rect = {};
bool enabled = false;
};
void ResetPanelState();
void RebuildEntries(const EditorSceneObjectSnapshot* gameObject);
bool TryActivateEntry(std::size_t entryIndex);
std::size_t HitTestEntry(const ::XCEngine::UI::UIPoint& point) const;
EditorSceneRuntime& m_sceneRuntime;
bool m_visible = false;
bool m_hasTarget = false;
::XCEngine::UI::UIRect m_bounds = {};
std::string m_targetDisplayName = {};
std::vector<EntryPresentation> m_entries = {};
std::size_t m_hoveredEntryIndex = static_cast<std::size_t>(-1);
std::size_t m_pressedEntryIndex = static_cast<std::size_t>(-1);
};
} // namespace XCEngine::UI::Editor::App