From 245b3bee75d6136357612c2c78ab04273dd5d816 Mon Sep 17 00:00:00 2001 From: glopesdev Date: Tue, 17 Sep 2024 12:21:39 +0100 Subject: [PATCH] Allow navigating to selected node by keyboard --- Bonsai.Editor/EditorForm.Designer.cs | 2 +- Bonsai.Editor/EditorForm.cs | 2 +- Bonsai.Editor/ExplorerTreeView.cs | 35 ++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/Bonsai.Editor/EditorForm.Designer.cs b/Bonsai.Editor/EditorForm.Designer.cs index 52cc5ec1..bf670e57 100644 --- a/Bonsai.Editor/EditorForm.Designer.cs +++ b/Bonsai.Editor/EditorForm.Designer.cs @@ -1390,7 +1390,7 @@ private void InitializeComponent() this.explorerTreeView.Name = "explorerTreeView"; this.explorerTreeView.Size = new System.Drawing.Size(200, 137); this.explorerTreeView.TabIndex = 3; - this.explorerTreeView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(explorerTreeView_NodeMouseDoubleClick); + this.explorerTreeView.Navigate += new System.Windows.Forms.TreeViewEventHandler(explorerTreeView_Navigate); // // EditorForm // diff --git a/Bonsai.Editor/EditorForm.cs b/Bonsai.Editor/EditorForm.cs index 9c1a0c3d..56019742 100644 --- a/Bonsai.Editor/EditorForm.cs +++ b/Bonsai.Editor/EditorForm.cs @@ -1872,7 +1872,7 @@ void FindNextMatch(Func predicate, ExpressionBuilder cu } } - private void explorerTreeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) + private void explorerTreeView_Navigate(object sender, TreeViewEventArgs e) { var workflowPath = (WorkflowEditorPath)e.Node?.Tag; editorControl.WorkflowGraphView.WorkflowPath = workflowPath; diff --git a/Bonsai.Editor/ExplorerTreeView.cs b/Bonsai.Editor/ExplorerTreeView.cs index 7af53066..cfcb872e 100644 --- a/Bonsai.Editor/ExplorerTreeView.cs +++ b/Bonsai.Editor/ExplorerTreeView.cs @@ -14,6 +14,7 @@ class ExplorerTreeView : ToolboxTreeView bool activeDoubleClick; readonly ImageList imageList; readonly ImageList stateImageList; + static readonly object EventNavigate = new(); public ExplorerTreeView() { @@ -52,6 +53,40 @@ static Bitmap ResizeMakeBorder(Bitmap original, Size newSize) ImageList = imageList; } + public event TreeViewEventHandler Navigate + { + add { Events.AddHandler(EventNavigate, value); } + remove { Events.RemoveHandler(EventNavigate, value); } + } + + protected virtual void OnNavigate(TreeViewEventArgs e) + { + if (Events[EventNavigate] is TreeViewEventHandler handler) + { + handler(this, e); + } + } + + protected override void OnNodeMouseDoubleClick(TreeNodeMouseClickEventArgs e) + { + if (e.Node is not null && HitTest(e.Location).Location != TreeViewHitTestLocations.PlusMinus) + { + OnNavigate(new TreeViewEventArgs(e.Node, TreeViewAction.ByMouse)); + } + + base.OnNodeMouseDoubleClick(e); + } + + protected override void OnKeyDown(KeyEventArgs e) + { + if (e.KeyCode == Keys.Return && SelectedNode != null) + { + OnNavigate(new TreeViewEventArgs(SelectedNode, TreeViewAction.ByKeyboard)); + } + + base.OnKeyDown(e); + } + protected override void OnBeforeCollapse(TreeViewCancelEventArgs e) { if (activeDoubleClick && e.Action == TreeViewAction.Collapse)