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