// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "IDetailCustomization.h" #include "Interfaces/IHttpRequest.h" #include "Widgets/Input/SComboBox.h" class IPropertyHandle; class UQwenTTSPresetDataAsset; struct FQwenTTSPresetChoice { FString Id; FString Label; FString RefText; FString Source; FText GetDisplayText() const; }; class FQwenTTSPresetDetailsCustomization : public IDetailCustomization { public: static TSharedRef MakeInstance(); virtual void CustomizeDetails(IDetailLayoutBuilder& DetailBuilder) override; private: TWeakObjectPtr PresetAsset; TSharedPtr PresetIdHandle; TSharedPtr SettingsHandle; TArray> PresetChoices; TSharedPtr>> PresetComboBox; FText StatusText = FText::FromString(TEXT("Not loaded")); FReply RefreshPresets(); void HandlePresetResponse(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful); void SetPresetChoicesFromStatusJson(const FString& ResponseText); FString GetStatusUrl() const; TSharedPtr GetSelectedChoice() const; FText GetSelectedPresetText() const; FText GetStatusText() const; void HandleSelectionChanged(TSharedPtr Choice, ESelectInfo::Type SelectInfo); TSharedRef MakePresetComboWidget(TSharedPtr Choice) const; };