Skip to content

Commit

Permalink
Add workflow editable status to explorer view
Browse files Browse the repository at this point in the history
  • Loading branch information
glopesdev committed Aug 3, 2024
1 parent e705635 commit 4a417e4
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 20 deletions.
59 changes: 42 additions & 17 deletions Bonsai.Editor/ExplorerTreeView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,24 +12,25 @@ namespace Bonsai.Editor
class ExplorerTreeView : ToolboxTreeView
{
bool activeDoubleClick;
readonly ImageList iconList;
readonly ImageList imageList;
readonly ImageList stateImageList;

public ExplorerTreeView()
{
iconList = new()
{
ColorDepth = ColorDepth.Depth8Bit,
ImageSize = new Size(16, 16),
TransparentColor = Color.Transparent
};
StateImageList = iconList;
imageList = new();
stateImageList = new();
StateImageList = stateImageList;
ImageList = imageList;
}

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
{
iconList.Images.Clear();
iconList.Images.Add(Resources.StatusReadyImage);
iconList.Images.Add(Resources.StatusBlockedImage);
imageList.Images.Clear();
stateImageList.Images.Clear();
imageList.Images.Add(Resources.WorkflowEditableImage);
imageList.Images.Add(Resources.WorkflowReadOnlyImage);
stateImageList.Images.Add(Resources.StatusReadyImage);
stateImageList.Images.Add(Resources.StatusBlockedImage);
base.ScaleControl(factor, specified);
}

Expand Down Expand Up @@ -61,21 +62,29 @@ public void UpdateWorkflow(string name, WorkflowBuilder workflowBuilder)
Nodes.Clear();

var rootNode = Nodes.Add(name);
AddWorkflow(rootNode.Nodes, null, workflowBuilder.Workflow);
AddWorkflow(rootNode.Nodes, null, workflowBuilder.Workflow, ExplorerNodeType.Editable);

static void AddWorkflow(TreeNodeCollection nodes, WorkflowEditorPath basePath, ExpressionBuilderGraph workflow)
static void AddWorkflow(
TreeNodeCollection nodes,
WorkflowEditorPath basePath,
ExpressionBuilderGraph workflow,
ExplorerNodeType parentNodeType)
{
for (int i = 0; i < workflow.Count; i++)
{
var builder = workflow[i].Value;
if (ExpressionBuilder.Unwrap(builder) is IWorkflowExpressionBuilder workflowBuilder &&
workflowBuilder.Workflow != null)
{
var nodeType = parentNodeType == ExplorerNodeType.ReadOnly || workflowBuilder is IncludeWorkflowBuilder
? ExplorerNodeType.ReadOnly
: ExplorerNodeType.Editable;
var displayName = ExpressionBuilder.GetElementDisplayName(builder);
var builderPath = new WorkflowEditorPath(i, basePath);
var node = nodes.Add(displayName);
node.ImageIndex = node.SelectedImageIndex = GetImageIndex(nodeType);
node.Tag = builderPath;
AddWorkflow(node.Nodes, builderPath, workflowBuilder.Workflow);
AddWorkflow(node.Nodes, builderPath, workflowBuilder.Workflow, nodeType);
}
}
}
Expand Down Expand Up @@ -108,7 +117,17 @@ bool SelectNode(TreeNodeCollection nodes, WorkflowEditorPath path)
return false;
}

private static int GetImageIndex(ExplorerNodeStatus status)
private static int GetImageIndex(ExplorerNodeType status)
{
return status switch
{
ExplorerNodeType.Editable => 0,
ExplorerNodeType.ReadOnly => 1,
_ => throw new ArgumentException("Invalid node type.", nameof(status))
};
}

private static int GetStateImageIndex(ExplorerNodeStatus status)
{
return status switch
{
Expand All @@ -120,7 +139,7 @@ private static int GetImageIndex(ExplorerNodeStatus status)

public void SetNodeStatus(ExplorerNodeStatus status)
{
var imageIndex = GetImageIndex(status);
var imageIndex = GetStateImageIndex(status);
SetNodeImageIndex(Nodes, imageIndex);

static void SetNodeImageIndex(TreeNodeCollection nodes, int index)
Expand All @@ -139,7 +158,7 @@ static void SetNodeImageIndex(TreeNodeCollection nodes, int index)
public void SetNodeStatus(IEnumerable<WorkflowEditorPath> pathElements, ExplorerNodeStatus status)
{
var nodes = Nodes;
var imageIndex = GetImageIndex(status);
var imageIndex = GetStateImageIndex(status);
foreach (var path in pathElements.Prepend(null))
{
var found = false;
Expand All @@ -161,6 +180,12 @@ public void SetNodeStatus(IEnumerable<WorkflowEditorPath> pathElements, Explorer
}
}

enum ExplorerNodeType
{
Editable,
ReadOnly
}

enum ExplorerNodeStatus
{
Ready,
Expand Down
20 changes: 20 additions & 0 deletions Bonsai.Editor/Properties/Resources.Designer.cs

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

23 changes: 20 additions & 3 deletions Bonsai.Editor/Properties/Resources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@
<data name="StatusCriticalImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vQAADr0BR/uQrQAAANRJREFUOE+1U8ENwjAMzBAMwAiMwAJMAI98kfgzGx86QqbgU5CCeOSHgi/YlZNY
vAAADrwBlbxySQAAANRJREFUOE+1U8ENwjAMzBAMwAiMwAJMAI98kfgzGx86QqbgU5CCeOSHgi/YlZNY
SFBx0qmNfXdtWse1SCl54kDMDVHzLOtBzSUxPM6nPG43+bJwFVFDDxpo2fYGm+N1v+uMLW/HA0JiFUKL
gAYE43pV2Bp1nUOCmD1eTUTPeyzUIVadt+MRMMieRQiI2KoVLXngRcD0JCvEMgvh7QJAHQJYZvA/AdqM
q75vQyRg9kec9xt5FoJMIQTaLNT1apAAWpRRlmn8RHOUAQ757TBpUPOL4+zcCzIffKHxkkn8AAAAAElF
Expand All @@ -163,7 +163,7 @@
<data name="StatusRunningImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wQAADsEBuJFr7QAAAMFJREFUOE9jQAffvn1LAOL9QPwfDYPEEqDKMAFQUgGIzx+9f/R/wbaC/8YzjVEw
vgAADr4B6kKxwAAAAMFJREFUOE9jQAffvn1LAOL9QPwfDYPEEqDKMAFQUgGIzx+9f/R/wbaC/8YzjVEw
SAwkB1IDUgvVBgFQze9r9tRgaETHHYc6QIa8RzEEyDkPksCmARuGGnIepjkB5DR0RTff3PwfuSYSQxyG
od5JABmwH5ufYWDmmZkYciAM0gPSCzIAqwJkgMs1IL1EGQAD6K6hnwGEvEBxIFIWjdC0cJ6YVAjDKAkJ
BIAccFImJjViTcogADWEvMyEDICSJGRnBgYARwha+z9sKMcAAAAASUVORK5CYII=
Expand Down Expand Up @@ -219,7 +219,7 @@ Copyright (c) .NET Foundation and Contributors</value>
<data name="StatusUpdateAvailable" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAAAKdJREFUOE+lkMEN
vQAADr0BR/uQrQAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAAAKdJREFUOE+lkMEN
wyAQBCktooV8U4KLyTuklnxSkJ0P300WaZ3jwDaSLY18HLeDTQDQkHPG7f5CuD4LrNnzc6Rp+PCRpFps
hUVP8i9+Dzc1PD3eVVD1kEAn2ZAkjYANi8LECvyeKIKUEmKM5V1tOgHxs0ENiw1Y/Byz1S/0ZB6dLNbL
UINDy/wpKGTXmlsv0QguowJlSFewx5Dg9BecFuxxKBhBGQDhC/DB5AQ227rCAAAAAElFTkSuQmCC
Expand Down Expand Up @@ -344,4 +344,21 @@ NOTE: You will have to restart Bonsai for any changes to take effect.</value>
<data name="InvalidWorkflowPath_Error" xml:space="preserve">
<value>The specified workflow path does not resolve to a workflow expression builder node.</value>
</data>
<data name="WorkflowReadOnlyImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wAAADsABataJCQAAAH9JREFUOE/VjdEJwCAMRB2ls7ih/+7gHG7hBrY/+mk9iWKNVAqF0oMjJHmXiFcV
Y9xCCCY7dTaYEzIXBb1SKkkpm9FjfnsAH8bgcMAQypWXDdZaJ2ttqXWGPaFcfdg5V2DUfkYoF+CVCeXC
sn6Z+VF498el/0l49DK8MqGfSogTPS0oz8b0R/8AAAAASUVORK5CYII=
</value>
</data>
<data name="WorkflowEditableImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wQAADsEBuJFr7QAAAJVJREFUOE+9kLENAyEQBCnFJbgEi1qoggKok4yAwAmCEHssTkL4/3UE9kob8Ghm
xZu/pJRyp+O4F8Ba65NuSwQOIXS6JZmWP7C1Vi9Zl3PO3Tmnk8wwgEAioaeCI3iVpJSuYe/9F0wvlwmX
7/YjAfDpsgR4fusWTBAArD9MBRMRyGqMUQ8TBEv1sASgtfYYvY3Pv4wxL5igM/WVQzVaAAAAAElFTkSu
QmCC
</value>
</data>
</root>

0 comments on commit 4a417e4

Please sign in to comment.