Add convAI plugin
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "ConvaiEUWBase.h"
|
||||
|
||||
103
ConvAI/Convai/Source/ConvaiEditor/Private/ConvaiEditor.cpp
Normal file
103
ConvAI/Convai/Source/ConvaiEditor/Private/ConvaiEditor.cpp
Normal file
@@ -0,0 +1,103 @@
|
||||
// Copyright 2022 Convai Inc. All Rights Reserved.
|
||||
|
||||
#include "ConvaiEditor.h"
|
||||
#include "EditorUtilitySubsystem.h"
|
||||
#include "Widgets/Input/SButton.h"
|
||||
#include "DetailLayoutBuilder.h"
|
||||
#include "DetailCategoryBuilder.h"
|
||||
#include "DetailWidgetRow.h"
|
||||
#include "../Convai.h"
|
||||
#include "EditorUtilityWidgetBlueprint.h"
|
||||
#include "Utility/Log/ConvaiLogger.h"
|
||||
|
||||
#define LOCTEXT_NAMESPACE "FConvaiEditorModule"
|
||||
|
||||
void FConvaiEditorModule::StartupModule()
|
||||
{
|
||||
// Register settings customization
|
||||
FPropertyEditorModule& PropertyEditor = FModuleManager::LoadModuleChecked<FPropertyEditorModule>("PropertyEditor");
|
||||
PropertyEditor.RegisterCustomClassLayout(
|
||||
UConvaiSettings::StaticClass()->GetFName(),
|
||||
FOnGetDetailCustomizationInstance::CreateStatic(&FConvaiEditorSettingsCustomization::MakeInstance)
|
||||
);
|
||||
|
||||
// Notify customization module
|
||||
PropertyEditor.NotifyCustomizationModuleChanged();
|
||||
}
|
||||
|
||||
void FConvaiEditorModule::ShutdownModule()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
|
||||
IMPLEMENT_MODULE(FConvaiEditorModule, ConvaiEditor)
|
||||
|
||||
|
||||
|
||||
|
||||
TSharedRef<IDetailCustomization> FConvaiEditorSettingsCustomization::MakeInstance()
|
||||
{
|
||||
return MakeShareable(new FConvaiEditorSettingsCustomization);
|
||||
}
|
||||
|
||||
void FConvaiEditorSettingsCustomization::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder)
|
||||
{
|
||||
IDetailCategoryBuilder& ParentCategory = DetailBuilder.EditCategory(TEXT("Convai API"), FText::FromString("Convai API"));
|
||||
|
||||
ParentCategory.AddCustomRow(FText::FromString(""))
|
||||
.WholeRowWidget
|
||||
[
|
||||
SNew(SHorizontalBox)
|
||||
];
|
||||
|
||||
IDetailCategoryBuilder& SubCategory = DetailBuilder.EditCategory(TEXT("Long Term Memory"), FText::FromString("Long Term Memory"));
|
||||
|
||||
// Add a compact button to the category
|
||||
SubCategory.AddCustomRow(FText::FromString("Spawn Tab"))
|
||||
.WholeRowWidget
|
||||
[
|
||||
SNew(SHorizontalBox)
|
||||
+ SHorizontalBox::Slot()
|
||||
.HAlign(HAlign_Left)
|
||||
.VAlign(VAlign_Center)
|
||||
.AutoWidth()
|
||||
[
|
||||
SNew(SButton)
|
||||
.Text(FText::FromString("Manage Speaker ID"))
|
||||
.HAlign(HAlign_Center)
|
||||
.VAlign(VAlign_Center)
|
||||
.ContentPadding(FMargin(8.0f, 2.0f))
|
||||
.OnClicked(this, &FConvaiEditorSettingsCustomization::OnSpawnTabClicked)
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
FReply FConvaiEditorSettingsCustomization::OnSpawnTabClicked()
|
||||
{
|
||||
const FString WidgetPath = TEXT("/ConvAI/Editor/EUW_LTM.EUW_LTM");
|
||||
|
||||
UEditorUtilityWidgetBlueprint* WidgetBlueprint = LoadObject<UEditorUtilityWidgetBlueprint>(nullptr, *WidgetPath);
|
||||
|
||||
if (WidgetBlueprint)
|
||||
{
|
||||
if (UEditorUtilitySubsystem* Subsystem = GEditor->GetEditorSubsystem<UEditorUtilitySubsystem>())
|
||||
{
|
||||
Subsystem->SpawnAndRegisterTab(WidgetBlueprint);
|
||||
CONVAI_LOG(LogTemp, Log, TEXT("Successfully spawned the Editor Utility Widget: %s"), *WidgetPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
CONVAI_LOG(LogTemp, Warning, TEXT("Failed to get Editor Utility Subsystem."));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CONVAI_LOG(LogTemp, Error, TEXT("Failed to load Editor Utility Widget Blueprint at path: %s"), *WidgetPath);
|
||||
}
|
||||
|
||||
return FReply::Handled();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "ConvaiEditorUtils.h"
|
||||
|
||||
#include "EditorUtilityLibrary.h"
|
||||
#include "../Convai.h"
|
||||
#include "ISettingsModule.h"
|
||||
#include "Kismet/KismetSystemLibrary.h"
|
||||
#include "EditorAssetLibrary.h"
|
||||
#include "Utility/Log/ConvaiLogger.h"
|
||||
|
||||
void UConvaiEditorUtils::ConvaiAddSpeakerID(const FConvaiSpeakerInfo& Speaker)
|
||||
{
|
||||
UConvaiSettings* Settings = GetMutableDefault<UConvaiSettings>();
|
||||
if (!Settings)
|
||||
{
|
||||
CONVAI_LOG(LogTemp, Warning, TEXT("ConvaiSettings not found."));
|
||||
return;
|
||||
}
|
||||
|
||||
int32 Index = Settings->SpeakerIDs.IndexOfByPredicate([&](const FConvaiSpeakerInfo& Info)
|
||||
{
|
||||
return Info.SpeakerID == Speaker.SpeakerID;
|
||||
});
|
||||
|
||||
if (Index == INDEX_NONE)
|
||||
{
|
||||
Settings->SpeakerIDs.Add(Speaker);
|
||||
//CONVAI_LOG(LogTemp, Log, TEXT("Added Speaker: ID=%s, Name=%s"), *Speaker.SpeakerID, *Speaker.Name);
|
||||
}
|
||||
|
||||
Settings->SaveConfig(CPF_Config, *Settings->GetDefaultConfigFilename());
|
||||
|
||||
RefreshConvaiSettings();
|
||||
}
|
||||
|
||||
void UConvaiEditorUtils::ConvaiRemoveSpeakerID(const FString& SpeakerID)
|
||||
{
|
||||
UConvaiSettings* Settings = GetMutableDefault<UConvaiSettings>();
|
||||
if (!Settings)
|
||||
{
|
||||
CONVAI_LOG(LogTemp, Warning, TEXT("ConvaiSettings not found."));
|
||||
return;
|
||||
}
|
||||
|
||||
int32 Index = Settings->SpeakerIDs.IndexOfByPredicate([&](const FConvaiSpeakerInfo& Info)
|
||||
{
|
||||
return Info.SpeakerID == SpeakerID;
|
||||
});
|
||||
|
||||
if (Index != INDEX_NONE)
|
||||
{
|
||||
Settings->SpeakerIDs.RemoveAt(Index);
|
||||
//CONVAI_LOG(LogTemp, Log, TEXT("Removed Speaker: ID=%s"), *SpeakerID);
|
||||
}
|
||||
else
|
||||
{
|
||||
CONVAI_LOG(LogTemp, Warning, TEXT("Speaker ID not found: %s"), *SpeakerID);
|
||||
}
|
||||
|
||||
Settings->SaveConfig(CPF_Config, *Settings->GetDefaultConfigFilename());
|
||||
|
||||
RefreshConvaiSettings();
|
||||
}
|
||||
|
||||
#define LOCTEXT_NAMESPACE "Convai"
|
||||
void UConvaiEditorUtils::RefreshConvaiSettings()
|
||||
{
|
||||
if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings"))
|
||||
{
|
||||
// Unregister the settings
|
||||
SettingsModule->UnregisterSettings("Project", "Plugins", "Convai");
|
||||
|
||||
// Re-register the settings
|
||||
UConvaiSettings* Settings = GetMutableDefault<UConvaiSettings>();
|
||||
SettingsModule->RegisterSettings("Project", "Plugins", "Convai",
|
||||
LOCTEXT("RuntimeSettingsName", "Convai"),
|
||||
LOCTEXT("RuntimeSettingsDescription", "Configure Convai settings"),
|
||||
Settings);
|
||||
}
|
||||
}
|
||||
|
||||
TArray<UObject*> UConvaiEditorUtils::BeginTransactionAndGetSelectedAssets(const FString& Context, const FText& Description)
|
||||
{
|
||||
UKismetSystemLibrary::BeginTransaction(Context, Description, nullptr);
|
||||
return UEditorUtilityLibrary::GetSelectedAssets();
|
||||
}
|
||||
|
||||
void UConvaiEditorUtils::SaveLoadedAssetAndEndTransaction(const TArray<UObject*>& LoadedAssets)
|
||||
{
|
||||
UEditorAssetLibrary::CheckoutLoadedAssets(LoadedAssets);
|
||||
UEditorAssetLibrary::SaveLoadedAssets(LoadedAssets);
|
||||
UKismetSystemLibrary::EndTransaction();
|
||||
}
|
||||
#undef LOCTEXT_NAMESPACE
|
||||
Reference in New Issue
Block a user