Files
FunnyGirl/Plugins/QwenTTSStreaming/Source/QwenTTSStreamingEditor/Private/QwenTTSStreamingEditorModule.cpp
T
2026-05-19 13:42:41 +07:00

115 lines
4.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "AssetTypeActions_Base.h"
#include "AssetToolsModule.h"
#include "IAssetTools.h"
#include "Modules/ModuleManager.h"
#include "PropertyEditorModule.h"
#include "QwenTTSPresetDataAsset.h"
#include "QwenTTSPresetDetailsCustomization.h"
#include "QwenTTSStreamingSettingsDataAsset.h"
#define LOCTEXT_NAMESPACE "FQwenTTSStreamingEditorModule"
namespace
{
class FQwenTTSSettingsAssetTypeActions : public FAssetTypeActions_Base
{
public:
explicit FQwenTTSSettingsAssetTypeActions(EAssetTypeCategories::Type InCategory)
: Category(InCategory)
{
}
virtual FText GetName() const override { return LOCTEXT("QwenTTSSettingsName", "Qwen TTS Streaming Settings"); }
virtual FColor GetTypeColor() const override { return FColor(86, 182, 194); }
virtual UClass* GetSupportedClass() const override { return UQwenTTSStreamingSettingsDataAsset::StaticClass(); }
virtual uint32 GetCategories() override { return Category; }
virtual FText GetAssetDescription(const FAssetData& AssetData) const override
{
return LOCTEXT("QwenTTSSettingsDescription", "Gateway and playback settings for Qwen TTS streaming.");
}
private:
EAssetTypeCategories::Type Category;
};
class FQwenTTSPresetAssetTypeActions : public FAssetTypeActions_Base
{
public:
explicit FQwenTTSPresetAssetTypeActions(EAssetTypeCategories::Type InCategory)
: Category(InCategory)
{
}
virtual FText GetName() const override { return LOCTEXT("QwenTTSPresetName", "Qwen TTS Preset"); }
virtual FColor GetTypeColor() const override { return FColor(120, 176, 96); }
virtual UClass* GetSupportedClass() const override { return UQwenTTSPresetDataAsset::StaticClass(); }
virtual uint32 GetCategories() override { return Category; }
virtual FText GetAssetDescription(const FAssetData& AssetData) const override
{
return LOCTEXT("QwenTTSPresetDescription", "Voice preset and generation parameters for Qwen TTS streaming.");
}
private:
EAssetTypeCategories::Type Category;
};
}
class FQwenTTSStreamingEditorModule : public IModuleInterface
{
public:
virtual void StartupModule() override
{
IAssetTools& AssetTools = FModuleManager::LoadModuleChecked<FAssetToolsModule>("AssetTools").Get();
AudioCategory = AssetTools.FindAdvancedAssetCategory(FName("Audio"));
if (AudioCategory == EAssetTypeCategories::None)
{
AudioCategory = AssetTools.RegisterAdvancedAssetCategory(FName("Audio"), LOCTEXT("AudioCategory", "Audio"));
}
RegisterAssetTypeAction(AssetTools, MakeShared<FQwenTTSSettingsAssetTypeActions>(AudioCategory));
RegisterAssetTypeAction(AssetTools, MakeShared<FQwenTTSPresetAssetTypeActions>(AudioCategory));
FPropertyEditorModule& PropertyEditor = FModuleManager::LoadModuleChecked<FPropertyEditorModule>("PropertyEditor");
PropertyEditor.RegisterCustomClassLayout(
UQwenTTSPresetDataAsset::StaticClass()->GetFName(),
FOnGetDetailCustomizationInstance::CreateStatic(&FQwenTTSPresetDetailsCustomization::MakeInstance));
PropertyEditor.NotifyCustomizationModuleChanged();
}
virtual void ShutdownModule() override
{
if (FModuleManager::Get().IsModuleLoaded("AssetTools"))
{
IAssetTools& AssetTools = FModuleManager::GetModuleChecked<FAssetToolsModule>("AssetTools").Get();
for (const TSharedRef<IAssetTypeActions>& Action : RegisteredAssetTypeActions)
{
AssetTools.UnregisterAssetTypeActions(Action);
}
}
RegisteredAssetTypeActions.Empty();
if (FModuleManager::Get().IsModuleLoaded("PropertyEditor"))
{
FPropertyEditorModule& PropertyEditor = FModuleManager::GetModuleChecked<FPropertyEditorModule>("PropertyEditor");
PropertyEditor.UnregisterCustomClassLayout(UQwenTTSPresetDataAsset::StaticClass()->GetFName());
PropertyEditor.NotifyCustomizationModuleChanged();
}
}
private:
void RegisterAssetTypeAction(IAssetTools& AssetTools, TSharedRef<IAssetTypeActions> Action)
{
AssetTools.RegisterAssetTypeActions(Action);
RegisteredAssetTypeActions.Add(Action);
}
EAssetTypeCategories::Type AudioCategory = EAssetTypeCategories::Sounds;
TArray<TSharedRef<IAssetTypeActions>> RegisteredAssetTypeActions;
};
IMPLEMENT_MODULE(FQwenTTSStreamingEditorModule, QwenTTSStreamingEditor)
#undef LOCTEXT_NAMESPACE