Skip to content

Commit

Permalink
Add single click navigation and context menu
Browse files Browse the repository at this point in the history
  • Loading branch information
glopesdev committed Sep 17, 2024
1 parent 7700ac2 commit 6ac8553
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 18 deletions.
37 changes: 33 additions & 4 deletions Bonsai.Editor/ExplorerTreeView.Designer.cs

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

59 changes: 45 additions & 14 deletions Bonsai.Editor/ExplorerTreeView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ namespace Bonsai.Editor
{
partial class ExplorerTreeView : UserControl
{
bool activeDoubleClick;
readonly ImageList imageList;
readonly ImageList stateImageList;
static readonly object EventNavigate = new();
Expand Down Expand Up @@ -75,39 +74,71 @@ protected virtual void OnNavigate(TreeViewEventArgs e)
}
}

private void treeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node is not null && treeView.HitTest(e.Location).Location != TreeViewHitTestLocations.PlusMinus)
if (e.Node is not null &&
e.Button == MouseButtons.Left &&
treeView.HitTest(e.Location).Location == TreeViewHitTestLocations.Label)
{
OnNavigate(new TreeViewEventArgs(e.Node, TreeViewAction.ByMouse));
}
}

private void treeView_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return && treeView.SelectedNode != null)
if (treeView.SelectedNode is null)
return;

if (e.KeyCode == Keys.Return)
{
OnNavigate(new TreeViewEventArgs(treeView.SelectedNode, TreeViewAction.ByKeyboard));
}

if (e.Shift && e.KeyCode == Keys.F10)
{
var nodeBounds = treeView.SelectedNode.Bounds;
var middleX = nodeBounds.X + nodeBounds.Width / 2;
var middleY = nodeBounds.Y + nodeBounds.Height / 2;
ShowContextMenu(treeView.SelectedNode, middleX, middleY);
}
}

private void treeView_BeforeCollapse(object sender, TreeViewCancelEventArgs e)
private void treeView_MouseUp(object sender, MouseEventArgs e)
{
if (activeDoubleClick && e.Action == TreeViewAction.Collapse)
e.Cancel = true;
activeDoubleClick = false;
if (e.Button == MouseButtons.Right)
{
var selectedNode = treeView.GetNodeAt(e.X, e.Y);
if (selectedNode != null)
{
treeView.SelectedNode = selectedNode;
ShowContextMenu(selectedNode, e.X, e.Y);
}
}
}

private void treeView_BeforeExpand(object sender, TreeViewCancelEventArgs e)
private void expandToolStripMenuItem_Click(object sender, EventArgs e)
{
if (activeDoubleClick && e.Action == TreeViewAction.Expand)
e.Cancel = true;
activeDoubleClick = false;
treeView.SelectedNode?.Expand();
}

private void treeView_MouseDown(object sender, MouseEventArgs e)
private void collapseToolStripMenuItem_Click(object sender, EventArgs e)
{
activeDoubleClick = e.Clicks > 1;
treeView.SelectedNode?.Collapse();
}

private void ShowContextMenu(TreeNode node, int x, int y)
{
if (node.Nodes.Count > 0)
{
expandToolStripMenuItem.Visible = !node.IsExpanded;
collapseToolStripMenuItem.Visible = node.IsExpanded;
}
else
{
expandToolStripMenuItem.Visible = false;
collapseToolStripMenuItem.Visible = false;
}
contextMenuStrip.Show(treeView, x, y);
}

public void UpdateWorkflow(string name, WorkflowBuilder workflowBuilder)
Expand Down
3 changes: 3 additions & 0 deletions Bonsai.Editor/ExplorerTreeView.resx
Original file line number Diff line number Diff line change
Expand Up @@ -117,4 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

0 comments on commit 6ac8553

Please sign in to comment.