From 53e3cee1967ddbeb7b7fa8f94b7d60202da15a11 Mon Sep 17 00:00:00 2001 From: Zode Date: Sat, 7 Jun 2025 17:15:54 +0300 Subject: [PATCH 1/6] Scroll selected to view when emptying out search box --- Source/Editor/Windows/SceneTreeWindow.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/Editor/Windows/SceneTreeWindow.cs b/Source/Editor/Windows/SceneTreeWindow.cs index 705976e6e..78aa123ea 100644 --- a/Source/Editor/Windows/SceneTreeWindow.cs +++ b/Source/Editor/Windows/SceneTreeWindow.cs @@ -144,6 +144,7 @@ namespace FlaxEditor.Windows _tree.UnlockChildrenRecursive(); PerformLayout(); PerformLayout(); + ScrollToSelectedNode(); } private void Spawn(Type type) From 74000fa76622597b4183bd50116c6b848e2d7363 Mon Sep 17 00:00:00 2001 From: Zode Date: Sat, 7 Jun 2025 22:53:07 +0300 Subject: [PATCH 2/6] Expand tree if necessary, so the selected node will be shown --- Source/Editor/Windows/SceneTreeWindow.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Source/Editor/Windows/SceneTreeWindow.cs b/Source/Editor/Windows/SceneTreeWindow.cs index 78aa123ea..8f06008a5 100644 --- a/Source/Editor/Windows/SceneTreeWindow.cs +++ b/Source/Editor/Windows/SceneTreeWindow.cs @@ -142,9 +142,21 @@ namespace FlaxEditor.Windows root.TreeNode.UpdateFilter(query); _tree.UnlockChildrenRecursive(); + + var nodeSelection = _tree.Selection; + if(nodeSelection.Count != 0) + { + var node = nodeSelection[nodeSelection.Count - 1]; + node.Expand(true); + } + PerformLayout(); PerformLayout(); - ScrollToSelectedNode(); + + if(nodeSelection.Count != 0) + { + ScrollToSelectedNode(); + } } private void Spawn(Type type) From 568719b615db6e7a6998c73ac18805328b0be215 Mon Sep 17 00:00:00 2001 From: Zode Date: Sat, 7 Jun 2025 23:21:41 +0300 Subject: [PATCH 3/6] Fix scroll issue caused by tree's defered layout update --- Source/Editor/Windows/SceneTreeWindow.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Source/Editor/Windows/SceneTreeWindow.cs b/Source/Editor/Windows/SceneTreeWindow.cs index 8f06008a5..20cfa3584 100644 --- a/Source/Editor/Windows/SceneTreeWindow.cs +++ b/Source/Editor/Windows/SceneTreeWindow.cs @@ -34,6 +34,7 @@ namespace FlaxEditor.Windows private DragScriptItems _dragScriptItems; private DragHandlers _dragHandlers; private bool _isDropping = false; + private bool _forceScrollNodeToView = false; /// /// Scene tree panel. @@ -148,13 +149,21 @@ namespace FlaxEditor.Windows { var node = nodeSelection[nodeSelection.Count - 1]; node.Expand(true); + _forceScrollNodeToView = true; } PerformLayout(); PerformLayout(); + } - if(nodeSelection.Count != 0) + /// + public override void Update(float deltaTime) + { + base.Update(deltaTime); + + if(_tree.Selection.Count != 0 && _forceScrollNodeToView) { + _forceScrollNodeToView = false; ScrollToSelectedNode(); } } From 1fa83639c2f1e729c918b4ccd1a181e5f26b0201 Mon Sep 17 00:00:00 2001 From: Zode Date: Sun, 8 Jun 2025 00:38:59 +0300 Subject: [PATCH 4/6] Fix update order inconsistencies between machines by exposing an action for when defered layout happens. --- Source/Editor/GUI/Tree/Tree.cs | 6 ++++++ Source/Editor/Windows/SceneTreeWindow.cs | 19 +++++++------------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/Source/Editor/GUI/Tree/Tree.cs b/Source/Editor/GUI/Tree/Tree.cs index e36f0ccd5..3e1453f03 100644 --- a/Source/Editor/GUI/Tree/Tree.cs +++ b/Source/Editor/GUI/Tree/Tree.cs @@ -73,6 +73,11 @@ namespace FlaxEditor.GUI.Tree /// public bool DrawRootTreeLine = true; + /// + /// Occurs when the defered layouting happens + /// + public event Action OnDeferedLayout; + /// /// Gets or sets the margin for the child tree nodes. /// @@ -375,6 +380,7 @@ namespace FlaxEditor.GUI.Tree if (_deferLayoutUpdate) { base.PerformLayout(); + OnDeferedLayout?.Invoke(); _deferLayoutUpdate = false; } diff --git a/Source/Editor/Windows/SceneTreeWindow.cs b/Source/Editor/Windows/SceneTreeWindow.cs index 20cfa3584..9175a660b 100644 --- a/Source/Editor/Windows/SceneTreeWindow.cs +++ b/Source/Editor/Windows/SceneTreeWindow.cs @@ -92,6 +92,13 @@ namespace FlaxEditor.Windows _tree.SelectedChanged += Tree_OnSelectedChanged; _tree.RightClick += OnTreeRightClick; _tree.Parent = _sceneTreePanel; + _tree.OnDeferedLayout += () => { + if(_tree.Selection.Count != 0 && _forceScrollNodeToView) + { + _forceScrollNodeToView = false; + ScrollToSelectedNode(); + } + }; headerPanel.Parent = this; // Setup input actions @@ -156,18 +163,6 @@ namespace FlaxEditor.Windows PerformLayout(); } - /// - public override void Update(float deltaTime) - { - base.Update(deltaTime); - - if(_tree.Selection.Count != 0 && _forceScrollNodeToView) - { - _forceScrollNodeToView = false; - ScrollToSelectedNode(); - } - } - private void Spawn(Type type) { // Create actor From ecd5559aada8b76b5508254232ee2f5ee36f82aa Mon Sep 17 00:00:00 2001 From: Zode Date: Sun, 8 Jun 2025 00:41:02 +0300 Subject: [PATCH 5/6] Clean up a bit code after moving it around. --- Source/Editor/Windows/SceneTreeWindow.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Editor/Windows/SceneTreeWindow.cs b/Source/Editor/Windows/SceneTreeWindow.cs index 9175a660b..620300485 100644 --- a/Source/Editor/Windows/SceneTreeWindow.cs +++ b/Source/Editor/Windows/SceneTreeWindow.cs @@ -93,12 +93,13 @@ namespace FlaxEditor.Windows _tree.RightClick += OnTreeRightClick; _tree.Parent = _sceneTreePanel; _tree.OnDeferedLayout += () => { - if(_tree.Selection.Count != 0 && _forceScrollNodeToView) + if(_forceScrollNodeToView) { _forceScrollNodeToView = false; ScrollToSelectedNode(); } }; + headerPanel.Parent = this; // Setup input actions From a6a2fd2c66c919ac3ad609fbb59b88054083512f Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 16 Jun 2025 14:48:18 +0200 Subject: [PATCH 6/6] Format code #3526 --- Source/Editor/GUI/Tree/Tree.cs | 6 +++--- Source/Editor/Windows/SceneTreeWindow.cs | 12 +++++++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Source/Editor/GUI/Tree/Tree.cs b/Source/Editor/GUI/Tree/Tree.cs index 3e1453f03..8df26c211 100644 --- a/Source/Editor/GUI/Tree/Tree.cs +++ b/Source/Editor/GUI/Tree/Tree.cs @@ -74,9 +74,9 @@ namespace FlaxEditor.GUI.Tree public bool DrawRootTreeLine = true; /// - /// Occurs when the defered layouting happens + /// Occurs when the deferred layout operation was performed. /// - public event Action OnDeferedLayout; + public event Action AfterDeferredLayout; /// /// Gets or sets the margin for the child tree nodes. @@ -380,7 +380,7 @@ namespace FlaxEditor.GUI.Tree if (_deferLayoutUpdate) { base.PerformLayout(); - OnDeferedLayout?.Invoke(); + AfterDeferredLayout?.Invoke(); _deferLayoutUpdate = false; } diff --git a/Source/Editor/Windows/SceneTreeWindow.cs b/Source/Editor/Windows/SceneTreeWindow.cs index 620300485..3c7583b0e 100644 --- a/Source/Editor/Windows/SceneTreeWindow.cs +++ b/Source/Editor/Windows/SceneTreeWindow.cs @@ -92,14 +92,15 @@ namespace FlaxEditor.Windows _tree.SelectedChanged += Tree_OnSelectedChanged; _tree.RightClick += OnTreeRightClick; _tree.Parent = _sceneTreePanel; - _tree.OnDeferedLayout += () => { - if(_forceScrollNodeToView) + _tree.AfterDeferredLayout += () => + { + if (_forceScrollNodeToView) { _forceScrollNodeToView = false; ScrollToSelectedNode(); } }; - + headerPanel.Parent = this; // Setup input actions @@ -151,9 +152,10 @@ namespace FlaxEditor.Windows root.TreeNode.UpdateFilter(query); _tree.UnlockChildrenRecursive(); - + + // When keep the selected nodes in a view var nodeSelection = _tree.Selection; - if(nodeSelection.Count != 0) + if (nodeSelection.Count != 0) { var node = nodeSelection[nodeSelection.Count - 1]; node.Expand(true);