From efd71e9bcecfc7e6ee11449b1f91e8d332b774c5 Mon Sep 17 00:00:00 2001 From: Tyler Gregorcyk Date: Thu, 25 Jun 2026 23:25:45 -0500 Subject: [PATCH] Add auto-rename newly added Visject parameters Closes #4127 Signed-off-by: Tyler Gregorcyk --- Source/Editor/Surface/VisjectSurfaceWindow.cs | 28 +++++++++++++++++++ .../Windows/Assets/BehaviorTreeWindow.cs | 3 ++ .../Windows/Assets/VisualScriptWindow.cs | 3 ++ 3 files changed, 34 insertions(+) diff --git a/Source/Editor/Surface/VisjectSurfaceWindow.cs b/Source/Editor/Surface/VisjectSurfaceWindow.cs index 3151f9b17..3f3a76302 100644 --- a/Source/Editor/Surface/VisjectSurfaceWindow.cs +++ b/Source/Editor/Surface/VisjectSurfaceWindow.cs @@ -42,6 +42,12 @@ namespace FlaxEditor.Surface /// IEnumerable NewParameterTypes { get; } + /// + /// Index of the parameter to start renaming once the properties panel is next rebuilt, or -1 if none. + /// Used to auto-start renaming of a freshly added parameter. + /// + int ParamToRename { get; set; } + /// /// Event called when surface gets loaded (eg. after opening the window). /// @@ -589,6 +595,7 @@ namespace FlaxEditor.Surface if (Utilities.Utils.OnAssetProperties(layout, asset)) return; var parameters = window.VisjectSurface.Parameters; + ParameterPropertyNameLabel labelToRename = null; CustomEditors.Editors.GenericEditor.OnGroupsBegin(); for (int i = 0; i < parameters.Count; i++) { @@ -643,6 +650,8 @@ namespace FlaxEditor.Surface tooltipText += '\n' + tooltip.Text; propertyLabel.MouseLeftDoubleClick += (label, location) => StartParameterRenaming(pIndex, label); propertyLabel.SetupContextMenu += OnPropertyLabelSetupContextMenu; + if (pIndex == window.ParamToRename) + labelToRename = propertyLabel; var property = itemLayout.AddPropertyItem(propertyLabel, tooltipText); property.Property("Value", propertyValue); } @@ -657,6 +666,21 @@ namespace FlaxEditor.Surface newParam.Button.ButtonClicked += OnAddParameterButtonClicked; layout.Space(10); } + // Defer renaming a newly added param once its label is built and laid out + // Adding a param can rebuild the panel more than once (disposing earlier labels) + // Because of this every rebuild recaptures the current label, only the surviving one actually calls StartParameterRenaming + if (labelToRename != null) + { + var index = window.ParamToRename; + var label = labelToRename; + FlaxEngine.Scripting.InvokeOnUpdate(() => + { + if (label.IsDisposing) + return; // A latter rebuild replaced this label, its own callback will handle it + window.ParamToRename = -1; + StartParameterRenaming(index, label); + }); + } } private void OnAddParameterButtonClicked(Button button) @@ -695,6 +719,7 @@ namespace FlaxEditor.Surface }; window.VisjectSurface.Undo.AddAction(action); action.Do(); + window.ParamToRename = action.Index; } private DragData OnDragParameter(DraggablePropertyNameLabel label) @@ -1276,6 +1301,9 @@ namespace FlaxEditor.Surface /// public abstract IEnumerable NewParameterTypes { get; } + /// + public int ParamToRename { get; set; } = -1; + /// public event Action SurfaceLoaded; diff --git a/Source/Editor/Windows/Assets/BehaviorTreeWindow.cs b/Source/Editor/Windows/Assets/BehaviorTreeWindow.cs index 1317300c3..7772d59b2 100644 --- a/Source/Editor/Windows/Assets/BehaviorTreeWindow.cs +++ b/Source/Editor/Windows/Assets/BehaviorTreeWindow.cs @@ -602,6 +602,9 @@ namespace FlaxEditor.Windows.Assets /// public IEnumerable NewParameterTypes => Editor.CodeEditing.VisualScriptPropertyTypes.Get(); + /// + public int ParamToRename { get; set; } = -1; + /// public event Action SurfaceLoaded; diff --git a/Source/Editor/Windows/Assets/VisualScriptWindow.cs b/Source/Editor/Windows/Assets/VisualScriptWindow.cs index 35b2d927d..708fd9319 100644 --- a/Source/Editor/Windows/Assets/VisualScriptWindow.cs +++ b/Source/Editor/Windows/Assets/VisualScriptWindow.cs @@ -1398,6 +1398,9 @@ namespace FlaxEditor.Windows.Assets /// public IEnumerable NewParameterTypes => Editor.CodeEditing.VisualScriptPropertyTypes.Get(); + /// + public int ParamToRename { get; set; } = -1; + /// public event Action SurfaceLoaded;