Skip to content

Commit

Permalink
Allow navigating to selected node by keyboard
Browse files Browse the repository at this point in the history
  • Loading branch information
glopesdev committed Sep 17, 2024
1 parent c8658a6 commit 245b3be
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 2 deletions.
2 changes: 1 addition & 1 deletion Bonsai.Editor/EditorForm.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Bonsai.Editor/EditorForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1872,7 +1872,7 @@ void FindNextMatch(Func<ExpressionBuilder, bool> 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;
Expand Down
35 changes: 35 additions & 0 deletions Bonsai.Editor/ExplorerTreeView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class ExplorerTreeView : ToolboxTreeView
bool activeDoubleClick;
readonly ImageList imageList;
readonly ImageList stateImageList;
static readonly object EventNavigate = new();

public ExplorerTreeView()
{
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 245b3be

Please sign in to comment.