Nice try on WingPropHandle

This commit is contained in:
2026-04-03 19:07:39 -04:00
parent daa9216ddf
commit 297586f351
61 changed files with 108 additions and 112 deletions

View File

@@ -25,16 +25,16 @@ class UWing_ActorComponent_Add : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Blueprint package path")) UPROPERTY(EditAnywhere, meta=(Description="Blueprint package path"))
FString Blueprint; FString Blueprint;
UPROPERTY(meta=(Description="Component class name (e.g. StaticMeshComponent, SceneComponent)")) UPROPERTY(EditAnywhere, meta=(Description="Component class name (e.g. StaticMeshComponent, SceneComponent)"))
FString Class; FString Class;
UPROPERTY(meta=(Description="Component name for the new component")) UPROPERTY(EditAnywhere, meta=(Description="Component name for the new component"))
FString Component; FString Component;
UPROPERTY(meta=(Description="Name of the parent component to attach to")) UPROPERTY(EditAnywhere, meta=(Description="Name of the parent component to attach to"))
FString Parent; FString Parent;
virtual void Register() override virtual void Register() override

View File

@@ -18,7 +18,7 @@ class UWing_ActorComponent_Remove : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Path to the component (e.g. '/Game/MyBP,component:MyComp')")) UPROPERTY(EditAnywhere, meta=(Description="Path to the component (e.g. '/Game/MyBP,component:MyComp')"))
FString Component; FString Component;
virtual void Register() override virtual void Register() override

View File

@@ -22,10 +22,10 @@ class UWing_ActorComponent_Reparent : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Path to the component (e.g. '/Game/MyBP,component:MyComp')")) UPROPERTY(EditAnywhere, meta=(Description="Path to the component (e.g. '/Game/MyBP,component:MyComp')"))
FString Component; FString Component;
UPROPERTY(meta=(Description="New parent component name.")) UPROPERTY(EditAnywhere, meta=(Description="New parent component name."))
FString Parent; FString Parent;
virtual void Register() override virtual void Register() override

View File

@@ -20,7 +20,7 @@ class UWing_Asset_Backup : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Asset to back up")) UPROPERTY(EditAnywhere, meta=(Description="Asset to back up"))
FString Asset; FString Asset;
virtual void Register() override virtual void Register() override

View File

@@ -20,7 +20,7 @@ class UWing_Asset_ContentBrowse : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Content browser path to list, e.g. /Game or /Game/Maps")) UPROPERTY(EditAnywhere, meta=(Description="Content browser path to list, e.g. /Game or /Game/Maps"))
FString Path; FString Path;
virtual void Register() override virtual void Register() override

View File

@@ -23,7 +23,7 @@ class UWing_Asset_Delete : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Asset to delete")) UPROPERTY(EditAnywhere, meta=(Description="Asset to delete"))
FString Asset; FString Asset;
UPROPERTY(meta=(Optional, Description="If true, skip reference check and force delete")) UPROPERTY(meta=(Optional, Description="If true, skip reference check and force delete"))

View File

@@ -19,7 +19,7 @@ class UWing_Asset_FindReferences : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Asset to find references for")) UPROPERTY(EditAnywhere, meta=(Description="Asset to find references for"))
FString Asset; FString Asset;
virtual void Register() override virtual void Register() override

View File

@@ -20,10 +20,10 @@ class UWing_Asset_Rename : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Asset to rename")) UPROPERTY(EditAnywhere, meta=(Description="Asset to rename"))
FString Asset; FString Asset;
UPROPERTY(meta=(Description="New package path or just a new name")) UPROPERTY(EditAnywhere, meta=(Description="New package path or just a new name"))
FString NewPath; FString NewPath;
virtual void Register() override virtual void Register() override

View File

@@ -21,7 +21,7 @@ class UWing_Asset_Restore : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Asset to restore")) UPROPERTY(EditAnywhere, meta=(Description="Asset to restore"))
FString Asset; FString Asset;
virtual void Register() override virtual void Register() override

View File

@@ -23,13 +23,13 @@ class UWing_BlueprintGraph_Create : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Blueprint name or package path")) UPROPERTY(EditAnywhere, meta=(Description="Blueprint name or package path"))
FString Blueprint; FString Blueprint;
UPROPERTY(meta=(Description="Name for the new graph")) UPROPERTY(EditAnywhere, meta=(Description="Name for the new graph"))
FString Graph; FString Graph;
UPROPERTY(meta=(Description="Type of graph: function or macro")) UPROPERTY(EditAnywhere, meta=(Description="Type of graph: function or macro"))
FString GraphType; FString GraphType;
UPROPERTY(meta=(Optional, Description="Input variables, one per line")) UPROPERTY(meta=(Optional, Description="Input variables, one per line"))

View File

@@ -21,7 +21,7 @@ class UWing_BlueprintGraph_Delete : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Path to the graph, e.g. /Game/MyBP,graph:MyFunction")) UPROPERTY(EditAnywhere, meta=(Description="Path to the graph, e.g. /Game/MyBP,graph:MyFunction"))
FString Graph; FString Graph;
virtual void Register() override virtual void Register() override

View File

@@ -21,10 +21,10 @@ class UWing_Blueprint_AddInterface : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Blueprint package path")) UPROPERTY(EditAnywhere, meta=(Description="Blueprint package path"))
FString Blueprint; FString Blueprint;
UPROPERTY(meta=(Description="Native UInterface class name or Blueprint Interface package path")) UPROPERTY(EditAnywhere, meta=(Description="Native UInterface class name or Blueprint Interface package path"))
FString Interface; FString Interface;
virtual void Register() override virtual void Register() override

View File

@@ -21,10 +21,10 @@ class UWing_Blueprint_RemoveInterface : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Blueprint name or package path")) UPROPERTY(EditAnywhere, meta=(Description="Blueprint name or package path"))
FString Blueprint; FString Blueprint;
UPROPERTY(meta=(Description="Interface name to remove")) UPROPERTY(EditAnywhere, meta=(Description="Interface name to remove"))
FString Interface; FString Interface;
UPROPERTY(meta=(Optional, Description="If true, keep the function graphs as regular functions")) UPROPERTY(meta=(Optional, Description="If true, keep the function graphs as regular functions"))

View File

@@ -21,7 +21,7 @@ class UWing_Blueprint_Compile : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Blueprint to compile")) UPROPERTY(EditAnywhere, meta=(Description="Blueprint to compile"))
FString Blueprint; FString Blueprint;
virtual void Register() override virtual void Register() override

View File

@@ -31,7 +31,7 @@ class UWing_Blueprint_Dump : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Blueprint path")) UPROPERTY(EditAnywhere, meta=(Description="Blueprint path"))
FString Blueprint; FString Blueprint;
virtual void Register() override virtual void Register() override

View File

@@ -22,10 +22,10 @@ class UWing_Blueprint_Reparent : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Blueprint package path")) UPROPERTY(EditAnywhere, meta=(Description="Blueprint package path"))
FString Blueprint; FString Blueprint;
UPROPERTY(meta=(Description="New parent class")) UPROPERTY(EditAnywhere, meta=(Description="New parent class"))
FString Parent; FString Parent;
virtual void Register() override virtual void Register() override

View File

@@ -21,7 +21,7 @@ class UWing_Create_Blueprint : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Full asset path for the new asset (e.g. '/Game/MyFolder/MyAsset')")) UPROPERTY(EditAnywhere, meta=(Description="Full asset path for the new asset (e.g. '/Game/MyFolder/MyAsset')"))
FString Path; FString Path;
UPROPERTY(meta=(Optional, Description="The parent class for the new blueprint")) UPROPERTY(meta=(Optional, Description="The parent class for the new blueprint"))

View File

@@ -15,7 +15,7 @@ class UWing_Create_UsingFactory : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Full asset path for the new asset (e.g. '/Game/MyFolder/MyAsset')")) UPROPERTY(EditAnywhere, meta=(Description="Full asset path for the new asset (e.g. '/Game/MyFolder/MyAsset')"))
FString Path; FString Path;
virtual void Register() override virtual void Register() override
@@ -31,7 +31,7 @@ public:
if (!CDO->CanCreateNew() || !CDO->ShouldShowInNewMenu()) continue; if (!CDO->CanCreateNew() || !CDO->ShouldShowInNewMenu()) continue;
WingPropHandle Props; WingPropHandle Props;
TArray<TSharedPtr<IPropertyHandle>> ConfigProps = Props.AllProperties(CDO, true, CPF_Edit); TArray<TSharedPtr<IPropertyHandle>> ConfigProps = Props.AllProperties(CDO, true);
if (ConfigProps.Num() > 0) continue; if (ConfigProps.Num() > 0) continue;
FString FactoryName = WingFactories::DeriveFactoryName(Class); FString FactoryName = WingFactories::DeriveFactoryName(Class);

View File

@@ -14,7 +14,7 @@ class UWing_Details_Dump : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target object")) UPROPERTY(EditAnywhere, meta=(Description="Target object"))
FString Object; FString Object;
UPROPERTY(meta=(Optional, Description="Substring filter for property names")) UPROPERTY(meta=(Optional, Description="Substring filter for property names"))

View File

@@ -14,10 +14,10 @@ class UWing_Details_Get : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target object")) UPROPERTY(EditAnywhere, meta=(Description="Target object"))
FString Object; FString Object;
UPROPERTY(meta=(Description="Property name")) UPROPERTY(EditAnywhere, meta=(Description="Property name"))
FString Property; FString Property;
virtual void Register() override virtual void Register() override

View File

@@ -14,13 +14,13 @@ class UWing_Details_Set : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target object")) UPROPERTY(EditAnywhere, meta=(Description="Target object"))
FString Object; FString Object;
UPROPERTY(meta=(Description="Property name")) UPROPERTY(EditAnywhere, meta=(Description="Property name"))
FString Property; FString Property;
UPROPERTY(meta=(Description="New value in Unreal text format")) UPROPERTY(EditAnywhere, meta=(Description="New value in Unreal text format"))
FString Value; FString Value;
virtual void Register() override virtual void Register() override

View File

@@ -14,10 +14,10 @@ class UWing_Details_SetMany : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target object")) UPROPERTY(EditAnywhere, meta=(Description="Target object"))
FString Object; FString Object;
UPROPERTY(meta=(Description="Object mapping property names to new values in Unreal text format")) UPROPERTY(EditAnywhere, meta=(Description="Object mapping property names to new values in Unreal text format"))
FWingJsonObject Properties; FWingJsonObject Properties;
virtual void Register() override virtual void Register() override

View File

@@ -19,7 +19,7 @@ class UWing_Editor_OpenAsset : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Asset to open")) UPROPERTY(EditAnywhere, meta=(Description="Asset to open"))
FString Asset; FString Asset;
virtual void Register() override virtual void Register() override

View File

@@ -21,13 +21,13 @@ class UWing_EventDispatcher_Create : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Blueprint name or package path")) UPROPERTY(EditAnywhere, meta=(Description="Blueprint name or package path"))
FString Blueprint; FString Blueprint;
UPROPERTY(meta=(Description="Name of the new event dispatcher")) UPROPERTY(EditAnywhere, meta=(Description="Name of the new event dispatcher"))
FString Dispatcher; FString Dispatcher;
UPROPERTY(meta=(Description="Input Variables, one per line, expressed as: type var = value")) UPROPERTY(EditAnywhere, meta=(Description="Input Variables, one per line, expressed as: type var = value"))
FString InputVariables; FString InputVariables;
virtual void Register() override virtual void Register() override

View File

@@ -20,10 +20,10 @@ class UWing_EventDispatcher_Delete : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Blueprint name or package path")) UPROPERTY(EditAnywhere, meta=(Description="Blueprint name or package path"))
FString Blueprint; FString Blueprint;
UPROPERTY(meta=(Description="Name of the event dispatcher to delete")) UPROPERTY(EditAnywhere, meta=(Description="Name of the event dispatcher to delete"))
FString Dispatcher; FString Dispatcher;
virtual void Register() override virtual void Register() override

View File

@@ -19,10 +19,10 @@ class UWing_GraphNode_ChooseMenu : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target node")) UPROPERTY(EditAnywhere, meta=(Description="Target node"))
FString Node; FString Node;
UPROPERTY(meta=(Description="Menu item as shown by GraphNode_ShowMenu")) UPROPERTY(EditAnywhere, meta=(Description="Menu item as shown by GraphNode_ShowMenu"))
FString Item; FString Item;
virtual void Register() override virtual void Register() override

View File

@@ -39,10 +39,10 @@ class UWing_GraphNode_Create : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target graph")) UPROPERTY(EditAnywhere, meta=(Description="Target graph"))
FString Graph; FString Graph;
UPROPERTY(meta=(Description="Array of {Type, posX, posY} objects. Use GraphNode_SearchTypes to find types.")) UPROPERTY(EditAnywhere, meta=(Description="Array of {Type, posX, posY} objects. Use GraphNode_SearchTypes to find types."))
FWingJsonArray Nodes; FWingJsonArray Nodes;
virtual void Register() override virtual void Register() override

View File

@@ -23,7 +23,7 @@ class UWing_GraphNode_Delete : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Node to delete")) UPROPERTY(EditAnywhere, meta=(Description="Node to delete"))
FString Node; FString Node;
virtual void Register() override virtual void Register() override

View File

@@ -18,7 +18,7 @@ class UWing_GraphNode_Dump : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target node")) UPROPERTY(EditAnywhere, meta=(Description="Target node"))
FString Node; FString Node;
virtual void Register() override virtual void Register() override

View File

@@ -19,7 +19,7 @@ class UWing_GraphNode_GetComment : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target node")) UPROPERTY(EditAnywhere, meta=(Description="Target node"))
FString Node; FString Node;
virtual void Register() override virtual void Register() override

View File

@@ -19,10 +19,10 @@ class UWing_GraphNode_Rename : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target node")) UPROPERTY(EditAnywhere, meta=(Description="Target node"))
FString Node; FString Node;
UPROPERTY(meta=(Description="New name for the node")) UPROPERTY(EditAnywhere, meta=(Description="New name for the node"))
FString Name; FString Name;
virtual void Register() override virtual void Register() override

View File

@@ -21,13 +21,13 @@ class UWing_GraphNode_SearchTypes : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Query string, can contain *")) UPROPERTY(EditAnywhere, meta=(Description="Query string, can contain *"))
FString Query; FString Query;
UPROPERTY(meta=(Optional, Description="Maximum number of results (default 50)")) UPROPERTY(meta=(Optional, Description="Maximum number of results (default 50)"))
int32 MaxResults = 50; int32 MaxResults = 50;
UPROPERTY(meta=(Description="Target graph")) UPROPERTY(EditAnywhere, meta=(Description="Target graph"))
FString Graph; FString Graph;
virtual void Register() override virtual void Register() override

View File

@@ -19,10 +19,10 @@ class UWing_GraphNode_SetComment : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target node")) UPROPERTY(EditAnywhere, meta=(Description="Target node"))
FString Node; FString Node;
UPROPERTY(meta=(Description="Comment text to set")) UPROPERTY(EditAnywhere, meta=(Description="Comment text to set"))
FString Comment; FString Comment;
virtual void Register() override virtual void Register() override

View File

@@ -38,10 +38,10 @@ class UWing_GraphNode_SetDefaults : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target graph")) UPROPERTY(EditAnywhere, meta=(Description="Target graph"))
FString Graph; FString Graph;
UPROPERTY(meta=(Description="Array of {node, name, value} objects")) UPROPERTY(EditAnywhere, meta=(Description="Array of {node, name, value} objects"))
FWingJsonArray Pins; FWingJsonArray Pins;
virtual void Register() override virtual void Register() override

View File

@@ -36,10 +36,10 @@ class UWing_GraphNode_SetPositions : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target graph")) UPROPERTY(EditAnywhere, meta=(Description="Target graph"))
FString Graph; FString Graph;
UPROPERTY(meta=(Description="Array of {node, x, y} objects")) UPROPERTY(EditAnywhere, meta=(Description="Array of {node, x, y} objects"))
FWingJsonArray Nodes; FWingJsonArray Nodes;
virtual void Register() override virtual void Register() override

View File

@@ -20,7 +20,7 @@ class UWing_GraphNode_ShowMenu : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target node")) UPROPERTY(EditAnywhere, meta=(Description="Target node"))
FString Node; FString Node;
virtual void Register() override virtual void Register() override

View File

@@ -36,10 +36,10 @@ class UWing_GraphPin_Connect : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target graph")) UPROPERTY(EditAnywhere, meta=(Description="Target graph"))
FString Graph; FString Graph;
UPROPERTY(meta=(Description="Array of {sourcePin, targetPin} objects")) UPROPERTY(EditAnywhere, meta=(Description="Array of {sourcePin, targetPin} objects"))
FWingJsonArray Connections; FWingJsonArray Connections;
virtual void Register() override virtual void Register() override

View File

@@ -35,10 +35,10 @@ class UWing_GraphPin_Disconnect : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target graph")) UPROPERTY(EditAnywhere, meta=(Description="Target graph"))
FString Graph; FString Graph;
UPROPERTY(meta=(Description="Array of {pin, targetPin?} objects. If targetPin is omitted, all connections on the pin are broken.")) UPROPERTY(EditAnywhere, meta=(Description="Array of {pin, targetPin?} objects. If targetPin is omitted, all connections on the pin are broken."))
FWingJsonArray Disconnections; FWingJsonArray Disconnections;
virtual void Register() override virtual void Register() override

View File

@@ -23,7 +23,7 @@ class UWing_Graph_Dump : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Path to graph")) UPROPERTY(EditAnywhere, meta=(Description="Path to graph"))
FString Graph; FString Graph;
UPROPERTY(meta=(Optional, Description="True to include less-significant details")) UPROPERTY(meta=(Optional, Description="True to include less-significant details"))

View File

@@ -21,16 +21,16 @@ class UWing_MaterialInstance_ClearParameter : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target material instance")) UPROPERTY(EditAnywhere, meta=(Description="Target material instance"))
FString MaterialInstance; FString MaterialInstance;
UPROPERTY(meta=(Description="Parameter name to clear")) UPROPERTY(EditAnywhere, meta=(Description="Parameter name to clear"))
FString Parameter; FString Parameter;
UPROPERTY(meta=(Description="Parameter association: 'Global', 'Layer', or 'Blend'. Default: 'Global'", Optional)) UPROPERTY(EditAnywhere, meta=(Description="Parameter association: 'Global', 'Layer', or 'Blend'. Default: 'Global'", Optional))
FString ParameterAssociation = TEXT("Global"); FString ParameterAssociation = TEXT("Global");
UPROPERTY(meta=(Description="Layer/blend index (0-based). Only used when ParameterAssociation is 'Layer' or 'Blend'", Optional)) UPROPERTY(EditAnywhere, meta=(Description="Layer/blend index (0-based). Only used when ParameterAssociation is 'Layer' or 'Blend'", Optional))
int32 ParameterLayer = INDEX_NONE; int32 ParameterLayer = INDEX_NONE;
virtual void Register() override virtual void Register() override

View File

@@ -21,7 +21,7 @@ class UWing_MaterialInstance_DumpParameters : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target material instance")) UPROPERTY(EditAnywhere, meta=(Description="Target material instance"))
FString MaterialInstance; FString MaterialInstance;
virtual void Register() override virtual void Register() override

View File

@@ -22,19 +22,19 @@ class UWing_MaterialInstance_SetParameter : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Target material instance")) UPROPERTY(EditAnywhere, meta=(Description="Target material instance"))
FString MaterialInstance; FString MaterialInstance;
UPROPERTY(meta=(Description="Parameter name to set")) UPROPERTY(EditAnywhere, meta=(Description="Parameter name to set"))
FString Parameter; FString Parameter;
UPROPERTY(meta=(Description="Parameter association: 'Global', 'Layer', or 'Blend'. Default: 'Global'", Optional)) UPROPERTY(EditAnywhere, meta=(Description="Parameter association: 'Global', 'Layer', or 'Blend'. Default: 'Global'", Optional))
FString ParameterAssociation = TEXT("Global"); FString ParameterAssociation = TEXT("Global");
UPROPERTY(meta=(Description="Layer/blend index (0-based). Only used when ParameterAssociation is 'Layer' or 'Blend'", Optional)) UPROPERTY(EditAnywhere, meta=(Description="Layer/blend index (0-based). Only used when ParameterAssociation is 'Layer' or 'Blend'", Optional))
int32 ParameterLayer = INDEX_NONE; int32 ParameterLayer = INDEX_NONE;
UPROPERTY(meta=(Description="Value to set (uses Unreal text format, e.g. '0.5' for scalar, '(R=1,G=0,B=0,A=1)' for vector)")) UPROPERTY(EditAnywhere, meta=(Description="Value to set (uses Unreal text format, e.g. '0.5' for scalar, '(R=1,G=0,B=0,A=1)' for vector)"))
FString Value; FString Value;
virtual void Register() override virtual void Register() override

View File

@@ -19,7 +19,7 @@ class UWing_Material_Compile : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Material name or package path")) UPROPERTY(EditAnywhere, meta=(Description="Material name or package path"))
FString Material; FString Material;
virtual void Register() override virtual void Register() override

View File

@@ -20,7 +20,7 @@ class UWing_Material_DumpParameters : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Material path")) UPROPERTY(EditAnywhere, meta=(Description="Material path"))
FString Material; FString Material;
virtual void Register() override virtual void Register() override

View File

@@ -17,7 +17,7 @@ class UWing_Test_Sanitizer : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="The string to sanitize")) UPROPERTY(EditAnywhere, meta=(Description="The string to sanitize"))
FString Input; FString Input;
virtual void Register() override virtual void Register() override

View File

@@ -17,7 +17,7 @@ class UWing_Test_Tokenizer : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="The string to tokenize")) UPROPERTY(EditAnywhere, meta=(Description="The string to tokenize"))
FString Input; FString Input;
virtual void Register() override virtual void Register() override

View File

@@ -17,7 +17,7 @@ class UWing_Test_TypeToText : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="The type name to parse, e.g. 'Array<Vector>'")) UPROPERTY(EditAnywhere, meta=(Description="The type name to parse, e.g. 'Array<Vector>'"))
FString Input; FString Input;
virtual void Register() override virtual void Register() override

View File

@@ -17,7 +17,7 @@ class UWing_Test_Unsanitize : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="The sanitized identifier to unsanitize")) UPROPERTY(EditAnywhere, meta=(Description="The sanitized identifier to unsanitize"))
FString Input; FString Input;
virtual void Register() override virtual void Register() override

View File

@@ -23,7 +23,7 @@ class UWing_TypeName_Search : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Substring filter for type names")) UPROPERTY(EditAnywhere, meta=(Description="Substring filter for type names"))
FString Query; FString Query;
UPROPERTY(meta=(Optional, Description="Maximum number of results")) UPROPERTY(meta=(Optional, Description="Maximum number of results"))

View File

@@ -18,7 +18,7 @@ class UWing_Variables_Create : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Path to a blueprint, graph, or custom event node")) UPROPERTY(EditAnywhere, meta=(Description="Path to a blueprint, graph, or custom event node"))
FString Object; FString Object;
UPROPERTY(meta=(Optional, Description="Blueprint variables, one per line")) UPROPERTY(meta=(Optional, Description="Blueprint variables, one per line"))

View File

@@ -18,7 +18,7 @@ class UWing_Variables_Dump : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Path to a blueprint, graph, or custom event node")) UPROPERTY(EditAnywhere, meta=(Description="Path to a blueprint, graph, or custom event node"))
FString Object; FString Object;
virtual void Register() override virtual void Register() override

View File

@@ -18,7 +18,7 @@ class UWing_Variables_Modify : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Path to a blueprint, graph, or custom event node")) UPROPERTY(EditAnywhere, meta=(Description="Path to a blueprint, graph, or custom event node"))
FString Object; FString Object;
UPROPERTY(meta=(Optional, Description="Blueprint variables, one per line")) UPROPERTY(meta=(Optional, Description="Blueprint variables, one per line"))

View File

@@ -18,7 +18,7 @@ class UWing_Variables_Remove : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Path to a blueprint, graph, or custom event node")) UPROPERTY(EditAnywhere, meta=(Description="Path to a blueprint, graph, or custom event node"))
FString Object; FString Object;
UPROPERTY(meta=(Optional, Description="Blueprint variable names to remove, comma-separated")) UPROPERTY(meta=(Optional, Description="Blueprint variable names to remove, comma-separated"))

View File

@@ -24,13 +24,13 @@ class UWing_Widget_Create : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Widget blueprint to add the widget to")) UPROPERTY(EditAnywhere, meta=(Description="Widget blueprint to add the widget to"))
FString Blueprint; FString Blueprint;
UPROPERTY(meta=(Description="Widget type, from Widget_SearchTypes")) UPROPERTY(EditAnywhere, meta=(Description="Widget type, from Widget_SearchTypes"))
FString Type; FString Type;
UPROPERTY(meta=(Description="Name for the new widget")) UPROPERTY(EditAnywhere, meta=(Description="Name for the new widget"))
FString Name; FString Name;
UPROPERTY(meta=(Optional, Description="Parent widget name. If omitted, sets as root.")) UPROPERTY(meta=(Optional, Description="Parent widget name. If omitted, sets as root."))

View File

@@ -22,7 +22,7 @@ class UWing_Widget_Delete : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Path to the widget, eg /Game/Widgets/WB_Test,widget:MyButton")) UPROPERTY(EditAnywhere, meta=(Description="Path to the widget, eg /Game/Widgets/WB_Test,widget:MyButton"))
FString Widget; FString Widget;
virtual void Register() override virtual void Register() override

View File

@@ -22,10 +22,10 @@ class UWing_Widget_Reparent : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Path to the widget, eg /Game/Widgets/WB_Test,widget:MyButton")) UPROPERTY(EditAnywhere, meta=(Description="Path to the widget, eg /Game/Widgets/WB_Test,widget:MyButton"))
FString Widget; FString Widget;
UPROPERTY(meta=(Description="Name of the new parent widget. Must be a panel.")) UPROPERTY(EditAnywhere, meta=(Description="Name of the new parent widget. Must be a panel."))
FString Parent; FString Parent;
virtual void Register() override virtual void Register() override

View File

@@ -17,7 +17,7 @@ class UWing_Widget_SearchTypes : public UWingHandler
GENERATED_BODY() GENERATED_BODY()
public: public:
UPROPERTY(meta=(Description="Query string, can contain *")) UPROPERTY(EditAnywhere, meta=(Description="Query string, can contain *"))
FString Query; FString Query;
UPROPERTY(meta=(Optional, Description="Maximum number of results (default 50)")) UPROPERTY(meta=(Optional, Description="Maximum number of results (default 50)"))

View File

@@ -128,7 +128,7 @@ WingPropHandle::FlatTree WingPropHandle::AllTreeNodes(Root& Root)
// //
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
WingPropHandle::Handles WingPropHandle::AllProperties(Root& Root, bool RootFilter, EPropertyFlags Filter) WingPropHandle::Handles WingPropHandle::AllProperties(Root& Root, bool RootFilter)
{ {
Handles Result; Handles Result;
for (IDetailTreeNode* Node : AllTreeNodes(Root)) for (IDetailTreeNode* Node : AllTreeNodes(Root))
@@ -136,8 +136,6 @@ WingPropHandle::Handles WingPropHandle::AllProperties(Root& Root, bool RootFilte
TSharedPtr<IPropertyHandle> Handle = Node->CreatePropertyHandle(); TSharedPtr<IPropertyHandle> Handle = Node->CreatePropertyHandle();
if (Handle.IsValid() && Handle->GetProperty()) if (Handle.IsValid() && Handle->GetProperty())
{ {
if (Filter != CPF_None && !Handle->GetProperty()->HasAllPropertyFlags(Filter))
continue;
if (RootFilter && !IsInsideRootObject(Root, *Handle)) if (RootFilter && !IsInsideRootObject(Root, *Handle))
continue; continue;
Result.Add(Handle); Result.Add(Handle);
@@ -146,16 +144,16 @@ WingPropHandle::Handles WingPropHandle::AllProperties(Root& Root, bool RootFilte
return Result; return Result;
} }
WingPropHandle::Handles WingPropHandle::AllProperties(UObject* Obj, bool RootFilter, EPropertyFlags Filter) WingPropHandle::Handles WingPropHandle::AllProperties(UObject* Obj, bool RootFilter)
{ {
if (!Obj) return {}; if (!Obj) return {};
return AllProperties(GetRootForObject(Obj), RootFilter, Filter); return AllProperties(GetRootForObject(Obj), RootFilter);
} }
WingPropHandle::Handles WingPropHandle::AllProperties(const UStruct* ScriptStruct, uint8* Data, bool RootFilter, EPropertyFlags Filter) WingPropHandle::Handles WingPropHandle::AllProperties(const UStruct* ScriptStruct, uint8* Data, bool RootFilter)
{ {
if (!ScriptStruct || !Data) return {}; if (!ScriptStruct || !Data) return {};
return AllProperties(GetRootForStruct(ScriptStruct, Data), RootFilter, Filter); return AllProperties(GetRootForStruct(ScriptStruct, Data), RootFilter);
} }
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@@ -213,7 +211,6 @@ TSharedPtr<IPropertyHandle> WingPropHandle::NamedProperty(const UStruct* ScriptS
WingPropHandle::Handles WingPropHandle::GetDetails(UObject* Obj, bool Mutable) WingPropHandle::Handles WingPropHandle::GetDetails(UObject* Obj, bool Mutable)
{ {
bool RootFilter = false; bool RootFilter = false;
EPropertyFlags PropFlags = CPF_Edit;
if (!Obj) return {}; if (!Obj) return {};
@@ -248,14 +245,14 @@ WingPropHandle::Handles WingPropHandle::GetDetails(UObject* Obj, bool Mutable)
if (Cast<AActor>(Obj)) RootFilter = true; if (Cast<AActor>(Obj)) RootFilter = true;
// Fetch the handles. // Fetch the handles.
Handles Result = AllProperties(Obj, RootFilter, PropFlags); Handles Result = AllProperties(Obj, RootFilter);
// Material graph nodes: also collect expression properties. // Material graph nodes: also collect expression properties.
if (UMaterialGraphNode* MatNode = Cast<UMaterialGraphNode>(Obj)) if (UMaterialGraphNode* MatNode = Cast<UMaterialGraphNode>(Obj))
{ {
if (UMaterialExpression* Expr = MatNode->MaterialExpression) if (UMaterialExpression* Expr = MatNode->MaterialExpression)
{ {
Result.Append(AllProperties(Expr, true, CPF_Edit)); Result.Append(AllProperties(Expr, true));
} }
} }
@@ -268,7 +265,7 @@ WingPropHandle::Handles WingPropHandle::GetDetails(UObject* Obj, bool Mutable)
// }); // });
// if (UPanelSlot* Slot = Widget->Slot) // if (UPanelSlot* Slot = Widget->Slot)
// { // {
// Result.Append(AllProperties(Slot, false, CPF_Edit)); // Result.Append(AllProperties(Slot, false));
// } // }
// } // }

View File

@@ -329,7 +329,7 @@ void UWingServer::TryCallHandler(const FString &Line)
// Populate the handler object with the request parameters. // Populate the handler object with the request parameters.
WingPropHandle Props; WingPropHandle Props;
WingPropHandle::Handles Handles = Props.AllProperties(HandlerObj.Get(), true, CPF_None); WingPropHandle::Handles Handles = Props.AllProperties(HandlerObj.Get(), true);
if (!WingPropHandle::PopulateFromJson(Handles, *Request, false)) if (!WingPropHandle::PopulateFromJson(Handles, *Request, false))
{ {
UWingServer::SuggestManual(WingManual::Section::HandlerHelp); UWingServer::SuggestManual(WingManual::Section::HandlerHelp);

View File

@@ -27,15 +27,13 @@ public:
WingPropHandle() {} WingPropHandle() {}
// Get all properties of a UObject. Returns the handles. // Get all properties of a UObject. Returns the handles.
// Only properties that have all the specified flags are included.
// If RootFilter is true, only properties inside the root object are returned. // If RootFilter is true, only properties inside the root object are returned.
Handles AllProperties(UObject* Obj, bool RootFilter, EPropertyFlags Filter); Handles AllProperties(UObject* Obj, bool RootFilter);
// Get all properties of a struct. Does not copy — the data // Get all properties of a struct. Does not copy — the data
// pointer must remain valid for the lifetime of this object. // pointer must remain valid for the lifetime of this object.
// Only properties that have all the specified flags are included.
// If RootFilter is true, only properties inside the root object are returned. // If RootFilter is true, only properties inside the root object are returned.
Handles AllProperties(const UStruct* ScriptStruct, uint8* Data, bool RootFilter, EPropertyFlags Filter); Handles AllProperties(const UStruct* ScriptStruct, uint8* Data, bool RootFilter);
// Get a single named property from a UObject. // Get a single named property from a UObject.
// If RootFilter is true, only properties inside the root object are returned. // If RootFilter is true, only properties inside the root object are returned.
@@ -75,7 +73,7 @@ public:
// If not, the Json must supply all of them, excepting properties that // If not, the Json must supply all of them, excepting properties that
// are explicitly marked Optional. // are explicitly marked Optional.
static bool PopulateFromJson(TArray<TSharedPtr<IPropertyHandle>>& Props, const FJsonObject& Json, bool AllOptional); static bool PopulateFromJson(TArray<TSharedPtr<IPropertyHandle>>& Props, const FJsonObject& Json, bool AllOptional);
// Print a single property in a standardized format: // Print a single property in a standardized format:
// editable|readonly Type Name = Value // editable|readonly Type Name = Value
static void Print(IPropertyHandle& Handle, FStringBuilderBase& Out); static void Print(IPropertyHandle& Handle, FStringBuilderBase& Out);
@@ -99,6 +97,6 @@ private:
static void AllTreeNodesRecursive(const TSharedRef<IDetailTreeNode>& Node, FlatTree& Out); static void AllTreeNodesRecursive(const TSharedRef<IDetailTreeNode>& Node, FlatTree& Out);
static FlatTree AllTreeNodes(Root& Root); static FlatTree AllTreeNodes(Root& Root);
Handles AllProperties(Root& Root, bool RootFilter, EPropertyFlags Filter); Handles AllProperties(Root& Root, bool RootFilter);
static TSharedPtr<IPropertyHandle> TryNamedProperty(Root& Root, FName Name, bool RootFilter); static TSharedPtr<IPropertyHandle> TryNamedProperty(Root& Root, FName Name, bool RootFilter);
}; };

View File

@@ -142,6 +142,7 @@ public:
{ {
if (Collection.Contains(InternalID)) if (Collection.Contains(InternalID))
{ CheckExactlyOneNamed(2, Kind, InternalID); return false; } { CheckExactlyOneNamed(2, Kind, InternalID); return false; }
Collection.Add(InternalID);
return true; return true;
} }