Simplification of handlers
This commit is contained in:
@@ -87,7 +87,7 @@ public:
|
||||
FString FactoryName = WingFactories::DeriveFactoryName(*FoundFactory);
|
||||
FString CommandName = FString::Printf(TEXT("Create_%s"), *FactoryName);
|
||||
FString Doc = FString::Printf(TEXT("Create a new %s asset."), *FactoryName);
|
||||
UWingServer::AddHandler(this, CommandName, Arg, EWingHandlerKind::Create, Doc);
|
||||
UWingServer::AddHandler(this, CommandName, Arg, EWingHandlerKind::Create, *FoundFactory, Doc);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,7 +197,7 @@ public:
|
||||
virtual void Handle() override
|
||||
{
|
||||
// Get the configuration.
|
||||
UWingClassArg *ConfObj = Cast<UWingClassArg>(ConfigurationObject);
|
||||
UWingClassArg *ConfObj = Cast<UWingClassArg>(Configuration->Config.Get());
|
||||
if (ConfObj == nullptr)
|
||||
{
|
||||
WingOut::Stdout.Print(TEXT("ERROR: Create_ClassArg config object not set properly (bug)\n"));
|
||||
|
||||
@@ -29,23 +29,25 @@ public:
|
||||
FString FactoryName = WingFactories::DeriveFactoryName(Class);
|
||||
FString CommandName = FString::Printf(TEXT("Create_%s"), *FactoryName);
|
||||
FString Doc = FString::Printf(TEXT("Create a new %s asset."), *FactoryName);
|
||||
UWingServer::AddHandler(this, CommandName, Class, EWingHandlerKind::Create, Doc);
|
||||
UWingServer::AddHandler(this, CommandName, nullptr, EWingHandlerKind::Create, Class, Doc);
|
||||
}
|
||||
|
||||
UWingServer::AddHandler(this, TEXT("Create_BlueprintFunctionLibrary"),
|
||||
UBlueprintFunctionLibraryFactory::StaticClass(), EWingHandlerKind::Create,
|
||||
nullptr, EWingHandlerKind::Create,
|
||||
UBlueprintFunctionLibraryFactory::StaticClass(),
|
||||
TEXT("Create a blueprint function library"));
|
||||
|
||||
UClass *BlueprintInterfaceFactory = FindObject<UClass>(nullptr, TEXT("/Script/UnrealEd.BlueprintInterfaceFactory"));
|
||||
if (BlueprintInterfaceFactory)
|
||||
UWingServer::AddHandler(this, TEXT("Create_BlueprintInterface"),
|
||||
BlueprintInterfaceFactory, EWingHandlerKind::Create,
|
||||
nullptr, EWingHandlerKind::Create,
|
||||
BlueprintInterfaceFactory,
|
||||
TEXT("Create a blueprint interface"));
|
||||
}
|
||||
|
||||
virtual void Handle() override
|
||||
{
|
||||
UClass* FactoryClass = Cast<UClass>(ConfigurationObject);
|
||||
UClass* FactoryClass = Configuration->FactoryClass.Get();
|
||||
UFactory* Factory = NewObject<UFactory>(GetTransientPackage(), FactoryClass);
|
||||
WingFactories::CreateAsset(Path, Factory, WingOut::Stdout);
|
||||
WingOut::Stdout.Printf(TEXT("Created.\n"));
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#include "WingServer.h"
|
||||
#include "WingHandler.h"
|
||||
#include "WingFactories.h"
|
||||
#include "Create_ClassArg.h"
|
||||
#include "SysInfo_Factories.generated.h"
|
||||
|
||||
|
||||
@@ -33,9 +32,8 @@ public:
|
||||
for (const FWingHandlerConfig& H : UWingServer::AllHandlers())
|
||||
{
|
||||
if (H.Kind != EWingHandlerKind::Create) continue;
|
||||
UClass* FactoryClass = Cast<UClass>(H.Config.Get());
|
||||
if (FactoryClass && FactoryClass->IsChildOf(UFactory::StaticClass()))
|
||||
SupportedFactories.Add(FactoryClass);
|
||||
if (H.FactoryClass.IsValid())
|
||||
SupportedFactories.Add(H.FactoryClass.Get());
|
||||
}
|
||||
|
||||
TArray<UClass*> FactoryClasses;
|
||||
|
||||
@@ -8,7 +8,7 @@ void WingManual::PrintHandlerPrototype(const FWingHandlerConfig& Handler)
|
||||
WingOut::Stdout.Print(Handler.Name);
|
||||
WingOut::Stdout.Print(TEXT("("));
|
||||
bool bFirst = true;
|
||||
for (TFieldIterator<FProperty> PropIt(Handler.Class.Get(), EFieldIterationFlags::None); PropIt; ++PropIt)
|
||||
for (TFieldIterator<FProperty> PropIt(Handler.HandlerClass.Get(), EFieldIterationFlags::None); PropIt; ++PropIt)
|
||||
{
|
||||
if (!bFirst) WingOut::Stdout.Print(TEXT(","));
|
||||
bFirst = false;
|
||||
@@ -21,7 +21,7 @@ void WingManual::PrintHandlerPrototype(const FWingHandlerConfig& Handler)
|
||||
void WingManual::PrintHandlerArguments(const FWingHandlerConfig& Handler)
|
||||
{
|
||||
// parameter details
|
||||
for (TFieldIterator<FProperty> PropIt(Handler.Class.Get(), EFieldIterationFlags::None); PropIt; ++PropIt)
|
||||
for (TFieldIterator<FProperty> PropIt(Handler.HandlerClass.Get(), EFieldIterationFlags::None); PropIt; ++PropIt)
|
||||
{
|
||||
FProperty* Prop = *PropIt;
|
||||
FString Name = Prop->GetName();
|
||||
@@ -306,7 +306,7 @@ void WingManual::Commands(EWingHandlerKind Kind, const FString& Query, bool Verb
|
||||
// Blank line between groups
|
||||
if (!Verbose)
|
||||
{
|
||||
FString Group = WingUtils::GetHandlerGroup(H.Class.Get());
|
||||
FString Group = WingUtils::GetHandlerGroup(H.HandlerClass.Get());
|
||||
if (Group != PrevGroup)
|
||||
{
|
||||
if (!PrevGroup.IsEmpty())
|
||||
|
||||
@@ -326,9 +326,9 @@ void UWingServer::TryCallHandler(const FString &Line)
|
||||
LastHandler = Found;
|
||||
|
||||
// Make an object of the handler class.
|
||||
TStrongObjectPtr<UObject> HandlerObj(NewObject<UObject>(GetTransientPackage(), Found->Class.Get()));
|
||||
TStrongObjectPtr<UObject> HandlerObj(NewObject<UObject>(GetTransientPackage(), Found->HandlerClass.Get()));
|
||||
UWingHandler* Handler = Cast<UWingHandler>(HandlerObj.Get());
|
||||
Handler->ConfigurationObject = Found->Config.Get();
|
||||
Handler->Configuration = Found;
|
||||
|
||||
// Populate the handler object with the request parameters.
|
||||
TArray<FWingProperty> Props = FWingProperty::GetAll(Handler, CPF_Edit);
|
||||
@@ -458,16 +458,17 @@ void UWingServer::ClientThreadFunc(UWingServer* Server, TSharedPtr<FClientConnec
|
||||
|
||||
void UWingServer::AddHandler(UObject* Obj, const FString& Documentation)
|
||||
{
|
||||
AddHandler(Obj, WingUtils::GetHandlerName(Obj->GetClass()), nullptr, EWingHandlerKind::Normal, Documentation);
|
||||
AddHandler(Obj, WingUtils::GetHandlerName(Obj->GetClass()), nullptr, EWingHandlerKind::Normal, nullptr, Documentation);
|
||||
}
|
||||
|
||||
void UWingServer::AddHandler(UObject* Obj, const FString& Name, UObject* Config, EWingHandlerKind Kind, const FString& Documentation)
|
||||
void UWingServer::AddHandler(UObject* Obj, const FString& Name, UObject* Config, EWingHandlerKind Kind, UClass* FactoryClass, const FString& Documentation)
|
||||
{
|
||||
FWingHandlerConfig H;
|
||||
H.Name = Name;
|
||||
H.Documentation = Documentation;
|
||||
H.Class = TStrongObjectPtr<UClass>(Obj->GetClass());
|
||||
H.HandlerClass = TStrongObjectPtr<UClass>(Obj->GetClass());
|
||||
H.Config = TStrongObjectPtr<UObject>(Config);
|
||||
H.FactoryClass = TStrongObjectPtr<UClass>(FactoryClass);
|
||||
H.Kind = Kind;
|
||||
|
||||
GWingServer->WingHandlerRegistry.Add(MoveTemp(H));
|
||||
|
||||
@@ -39,8 +39,9 @@ struct FWingHandlerConfig
|
||||
GENERATED_BODY()
|
||||
FString Name;
|
||||
FString Documentation;
|
||||
TStrongObjectPtr<UClass> Class;
|
||||
TStrongObjectPtr<UClass> HandlerClass;
|
||||
TStrongObjectPtr<UObject> Config;
|
||||
TStrongObjectPtr<UClass> FactoryClass;
|
||||
EWingHandlerKind Kind = EWingHandlerKind::Normal;
|
||||
};
|
||||
|
||||
@@ -57,7 +58,7 @@ public:
|
||||
virtual void Handle() {}
|
||||
|
||||
// The configuration object.
|
||||
UObject *ConfigurationObject;
|
||||
FWingHandlerConfig *Configuration;
|
||||
|
||||
public:
|
||||
};
|
||||
|
||||
@@ -61,7 +61,7 @@ public:
|
||||
|
||||
// ----- Tool dispatch -----
|
||||
static void AddHandler(UObject* Obj, const FString& Documentation);
|
||||
static void AddHandler(UObject* Obj, const FString& Name, UObject* Config, EWingHandlerKind Kind, const FString& Documentation);
|
||||
static void AddHandler(UObject* Obj, const FString& Name, UObject* Config, EWingHandlerKind Kind, UClass* FactoryClass, const FString& Documentation);
|
||||
static const TArray<FWingHandlerConfig>& AllHandlers() { return GWingServer->WingHandlerRegistry; }
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user