From 1bc7455e093662566c68f380da22e603db973269 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Fri, 12 Apr 2024 07:33:09 -0500 Subject: [PATCH 1/2] Add locking scene selection in properties window. --- .../CustomEditors/Dedicated/ActorEditor.cs | 18 ++++++++++++++++++ Source/Editor/Windows/PropertiesWindow.cs | 8 ++++++++ 2 files changed, 26 insertions(+) diff --git a/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs b/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs index 3699b8254..293f09b54 100644 --- a/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs +++ b/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; +using System.Linq; using FlaxEditor.Actions; using FlaxEditor.CustomEditors.Editors; using FlaxEditor.CustomEditors.Elements; @@ -9,6 +10,7 @@ using FlaxEditor.GUI; using FlaxEditor.GUI.ContextMenu; using FlaxEditor.GUI.Tree; using FlaxEditor.Scripting; +using FlaxEditor.Windows; using FlaxEngine; using FlaxEngine.GUI; using FlaxEngine.Json; @@ -111,6 +113,22 @@ namespace FlaxEditor.CustomEditors.Dedicated var actor = (Actor)Values[0]; var scriptType = TypeUtils.GetType(actor.TypeName); var item = scriptType.ContentItem; + if (Presenter.Owner is PropertiesWindow pw) + { + var lockButton = cm.AddButton(pw.LockObjects ? "Unlock" : "Lock"); + lockButton.ButtonClicked += button => + { + pw.LockObjects = !pw.LockObjects; + + // Reselect current selection + if (!pw.LockObjects && Editor.Instance.SceneEditing.SelectionCount > 0) + { + var cachedSelection = Editor.Instance.SceneEditing.Selection.ToArray(); + Editor.Instance.SceneEditing.Select(null); + Editor.Instance.SceneEditing.Select(cachedSelection); + } + }; + } cm.AddButton("Copy ID", OnClickCopyId); cm.AddButton("Edit actor type", OnClickEditActorType).Enabled = item != null; var showButton = cm.AddButton("Show in content window", OnClickShowActorType); diff --git a/Source/Editor/Windows/PropertiesWindow.cs b/Source/Editor/Windows/PropertiesWindow.cs index 17b269c1b..9c1cbec0d 100644 --- a/Source/Editor/Windows/PropertiesWindow.cs +++ b/Source/Editor/Windows/PropertiesWindow.cs @@ -37,6 +37,11 @@ namespace FlaxEditor.Windows /// public bool UIPivotRelative = true; + /// + /// Indication of if the properties window is locked on specific objects. + /// + public bool LockObjects = false; + /// /// Initializes a new instance of the class. /// @@ -62,6 +67,9 @@ namespace FlaxEditor.Windows private void OnSelectionChanged() { + if (LockObjects) + return; + // Update selected objects // TODO: use cached collection for less memory allocations undoRecordObjects = Editor.SceneEditing.Selection.ConvertAll(x => x.UndoRecordObject).Distinct(); From 81d450186878f9825f40786024969a72096dd547 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Fri, 12 Apr 2024 07:41:43 -0500 Subject: [PATCH 2/2] Add locking selection in prefab window --- .../CustomEditors/Dedicated/ActorEditor.cs | 25 ++++++++++++++++--- .../Windows/Assets/PrefabWindow.Selection.cs | 3 +++ Source/Editor/Windows/Assets/PrefabWindow.cs | 5 ++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs b/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs index 293f09b54..3c229cee0 100644 --- a/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs +++ b/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs @@ -11,6 +11,7 @@ using FlaxEditor.GUI.ContextMenu; using FlaxEditor.GUI.Tree; using FlaxEditor.Scripting; using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; using FlaxEngine; using FlaxEngine.GUI; using FlaxEngine.Json; @@ -113,15 +114,15 @@ namespace FlaxEditor.CustomEditors.Dedicated var actor = (Actor)Values[0]; var scriptType = TypeUtils.GetType(actor.TypeName); var item = scriptType.ContentItem; - if (Presenter.Owner is PropertiesWindow pw) + if (Presenter.Owner is PropertiesWindow propertiesWindow) { - var lockButton = cm.AddButton(pw.LockObjects ? "Unlock" : "Lock"); + var lockButton = cm.AddButton(propertiesWindow.LockObjects ? "Unlock" : "Lock"); lockButton.ButtonClicked += button => { - pw.LockObjects = !pw.LockObjects; + propertiesWindow.LockObjects = !propertiesWindow.LockObjects; // Reselect current selection - if (!pw.LockObjects && Editor.Instance.SceneEditing.SelectionCount > 0) + if (!propertiesWindow.LockObjects && Editor.Instance.SceneEditing.SelectionCount > 0) { var cachedSelection = Editor.Instance.SceneEditing.Selection.ToArray(); Editor.Instance.SceneEditing.Select(null); @@ -129,6 +130,22 @@ namespace FlaxEditor.CustomEditors.Dedicated } }; } + else if (Presenter.Owner is PrefabWindow prefabWindow) + { + var lockButton = cm.AddButton(prefabWindow.LockSelectedObjects ? "Unlock" : "Lock"); + lockButton.ButtonClicked += button => + { + prefabWindow.LockSelectedObjects = !prefabWindow.LockSelectedObjects; + + // Reselect current selection + if (!prefabWindow.LockSelectedObjects && prefabWindow.Selection.Count > 0) + { + var cachedSelection = prefabWindow.Selection.ToList(); + prefabWindow.Select(null); + prefabWindow.Select(cachedSelection); + } + }; + } cm.AddButton("Copy ID", OnClickCopyId); cm.AddButton("Edit actor type", OnClickEditActorType).Enabled = item != null; var showButton = cm.AddButton("Show in content window", OnClickShowActorType); diff --git a/Source/Editor/Windows/Assets/PrefabWindow.Selection.cs b/Source/Editor/Windows/Assets/PrefabWindow.Selection.cs index be20c176c..85dfc1595 100644 --- a/Source/Editor/Windows/Assets/PrefabWindow.Selection.cs +++ b/Source/Editor/Windows/Assets/PrefabWindow.Selection.cs @@ -54,6 +54,9 @@ namespace FlaxEditor.Windows.Assets /// The selection before the change. public void OnSelectionChanged(SceneGraphNode[] before) { + if (LockSelectedObjects) + return; + Undo.AddAction(new SelectionChangeAction(before, Selection.ToArray(), OnSelectionUndo)); OnSelectionChanges(); diff --git a/Source/Editor/Windows/Assets/PrefabWindow.cs b/Source/Editor/Windows/Assets/PrefabWindow.cs index b788821cf..36841d515 100644 --- a/Source/Editor/Windows/Assets/PrefabWindow.cs +++ b/Source/Editor/Windows/Assets/PrefabWindow.cs @@ -68,6 +68,11 @@ namespace FlaxEditor.Windows.Assets /// public readonly LocalSceneGraph Graph; + /// + /// Indication of if the prefab window selection is locked on specific objects. + /// + public bool LockSelectedObjects = false; + /// /// Gets or sets a value indicating whether use live reloading for the prefab changes (applies prefab changes on modification by auto). ///