Merge branch 'Zode-scenetree-scroll'

This commit is contained in:
Wojtek Figat
2025-06-16 14:50:14 +02:00
2 changed files with 26 additions and 0 deletions

View File

@@ -73,6 +73,11 @@ namespace FlaxEditor.GUI.Tree
/// </summary> /// </summary>
public bool DrawRootTreeLine = true; public bool DrawRootTreeLine = true;
/// <summary>
/// Occurs when the deferred layout operation was performed.
/// </summary>
public event Action AfterDeferredLayout;
/// <summary> /// <summary>
/// Gets or sets the margin for the child tree nodes. /// Gets or sets the margin for the child tree nodes.
/// </summary> /// </summary>
@@ -375,6 +380,7 @@ namespace FlaxEditor.GUI.Tree
if (_deferLayoutUpdate) if (_deferLayoutUpdate)
{ {
base.PerformLayout(); base.PerformLayout();
AfterDeferredLayout?.Invoke();
_deferLayoutUpdate = false; _deferLayoutUpdate = false;
} }

View File

@@ -34,6 +34,7 @@ namespace FlaxEditor.Windows
private DragScriptItems _dragScriptItems; private DragScriptItems _dragScriptItems;
private DragHandlers _dragHandlers; private DragHandlers _dragHandlers;
private bool _isDropping = false; private bool _isDropping = false;
private bool _forceScrollNodeToView = false;
/// <summary> /// <summary>
/// Scene tree panel. /// Scene tree panel.
@@ -91,6 +92,15 @@ namespace FlaxEditor.Windows
_tree.SelectedChanged += Tree_OnSelectedChanged; _tree.SelectedChanged += Tree_OnSelectedChanged;
_tree.RightClick += OnTreeRightClick; _tree.RightClick += OnTreeRightClick;
_tree.Parent = _sceneTreePanel; _tree.Parent = _sceneTreePanel;
_tree.AfterDeferredLayout += () =>
{
if (_forceScrollNodeToView)
{
_forceScrollNodeToView = false;
ScrollToSelectedNode();
}
};
headerPanel.Parent = this; headerPanel.Parent = this;
// Setup input actions // Setup input actions
@@ -142,6 +152,16 @@ namespace FlaxEditor.Windows
root.TreeNode.UpdateFilter(query); root.TreeNode.UpdateFilter(query);
_tree.UnlockChildrenRecursive(); _tree.UnlockChildrenRecursive();
// When keep the selected nodes in a view
var nodeSelection = _tree.Selection;
if (nodeSelection.Count != 0)
{
var node = nodeSelection[nodeSelection.Count - 1];
node.Expand(true);
_forceScrollNodeToView = true;
}
PerformLayout(); PerformLayout();
PerformLayout(); PerformLayout();
} }