Files
XCEngine/editor/src/ComponentEditors/AssetReferenceEditorUtils.h

56 lines
1.8 KiB
C++

#pragma once
#include "UI/UI.h"
#include <initializer_list>
#include <string>
namespace XCEngine {
namespace Editor {
namespace ComponentEditorAssetUI {
struct AssetReferenceInteraction {
std::string assignedPath;
bool clearRequested = false;
};
inline AssetReferenceInteraction DrawAssetReferenceProperty(
const char* label,
const std::string& currentPath,
const char* emptyHint,
std::initializer_list<const char*> supportedExtensions) {
AssetReferenceInteraction interaction;
const std::string popupTitle = std::string("Select ") + (label ? label : "Object");
UI::ReferencePickerOptions pickerOptions;
pickerOptions.popupTitle = popupTitle.c_str();
pickerOptions.emptyHint = emptyHint;
pickerOptions.searchHint = "Search";
pickerOptions.noAssetsText = "No compatible assets.";
pickerOptions.noSceneText = "No compatible scene objects.";
pickerOptions.assetsTabLabel = "Assets";
pickerOptions.sceneTabLabel = "Scene";
pickerOptions.showAssetsTab = true;
pickerOptions.showSceneTab = false;
pickerOptions.supportedAssetExtensions = supportedExtensions;
UI::DrawPropertyRow(label, UI::InspectorPropertyLayout(), [&](const UI::PropertyLayoutMetrics& layout) {
UI::AlignPropertyControlVertically(layout, ImGui::GetFrameHeight());
const UI::ReferencePickerInteraction pickerInteraction =
UI::DrawReferencePickerControl(
currentPath,
::XCEngine::Components::GameObject::INVALID_ID,
pickerOptions,
layout.controlWidth);
interaction.assignedPath = pickerInteraction.assignedAssetPath;
interaction.clearRequested = pickerInteraction.clearRequested;
return false;
});
return interaction;
}
} // namespace ComponentEditorAssetUI
} // namespace Editor
} // namespace XCEngine