Skip to content

Commit

Permalink
Add navigation commands to undo stack
Browse files Browse the repository at this point in the history
  • Loading branch information
glopesdev committed Jul 2, 2024
1 parent 7747342 commit 7a3fd53
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 41 deletions.
7 changes: 3 additions & 4 deletions Bonsai.Editor/EditorForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,6 @@ public EditorForm(
definitionsPath = Path.Combine(Path.GetTempPath(), DefinitionsDirectory + "." + GuidHelper.GetProcessGuid().ToString());
editorControl = new WorkflowEditorControl(editorSite);
editorControl.Enter += new EventHandler(editorControl_Enter);
editorControl.WorkflowPath = null;
editorControl.Dock = DockStyle.Fill;
workflowSplitContainer.Panel1.Controls.Add(editorControl);
propertyGrid.BrowsableAttributes = browsableAttributes = DesignTimeAttributes;
Expand Down Expand Up @@ -835,7 +834,7 @@ void ClearWorkflow()
ClearWorkflowError();
saveWorkflowDialog.FileName = null;
workflowBuilder.Workflow.Clear();
editorControl.WorkflowPath = null;
editorControl.ResetNavigation();
visualizerSettings.Clear();
ResetProjectStatus();
UpdateTitle();
Expand Down Expand Up @@ -867,7 +866,7 @@ bool OpenWorkflow(string fileName, bool setWorkingDirectory)
UpdateWorkflowDirectory(fileName, setWorkingDirectory);
if (EditorResult == EditorResult.ReloadEditor) return false;

editorControl.WorkflowPath = null;
editorControl.ResetNavigation();
if (workflowBuilder.Workflow.Count > 0 && !editorControl.WorkflowGraphView.GraphView.Nodes.Any())
{
try { workflowBuilder.Workflow.Build(); }
Expand All @@ -881,7 +880,7 @@ bool OpenWorkflow(string fileName, bool setWorkingDirectory)
}

workflowBuilder = PrepareWorkflow(workflowBuilder, workflowVersion, out bool upgraded);
editorControl.WorkflowPath = null;
editorControl.ResetNavigation();
editorSite.ValidateWorkflow();

var layoutPath = LayoutHelper.GetLayoutPath(fileName);
Expand Down
26 changes: 12 additions & 14 deletions Bonsai.Editor/GraphModel/WorkflowEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ class WorkflowEditor
readonly Subject<Exception> error;
readonly Subject<bool> updateLayout;
readonly Subject<bool> invalidateLayout;
readonly Subject<WorkflowEditorPath> workflowPathChanged;
readonly Subject<IEnumerable<ExpressionBuilder>> updateSelection;
readonly Subject<IWorkflowExpressionBuilder> closeWorkflowEditor;
WorkflowEditorPath workflowPath;

public WorkflowEditor(IServiceProvider provider, IGraphView view)
Expand All @@ -33,9 +33,9 @@ public WorkflowEditor(IServiceProvider provider, IGraphView view)
error = new Subject<Exception>();
updateLayout = new Subject<bool>();
invalidateLayout = new Subject<bool>();
workflowPathChanged = new Subject<WorkflowEditorPath>();
updateSelection = new Subject<IEnumerable<ExpressionBuilder>>();
closeWorkflowEditor = new Subject<IWorkflowExpressionBuilder>();
WorkflowPath = null;
ResetNavigation();
}

public ExpressionBuilderGraph Workflow { get; private set; }
Expand All @@ -45,7 +45,7 @@ public WorkflowEditor(IServiceProvider provider, IGraphView view)
public WorkflowEditorPath WorkflowPath
{
get { return workflowPath; }
set
private set
{
workflowPath = value;
var workflowBuilder = (WorkflowBuilder)serviceProvider.GetService(typeof(WorkflowBuilder));
Expand All @@ -66,6 +66,7 @@ public WorkflowEditorPath WorkflowPath
IsReadOnly = false;
}
updateLayout.OnNext(false);
workflowPathChanged.OnNext(workflowPath);
}
}

Expand All @@ -75,9 +76,9 @@ public WorkflowEditorPath WorkflowPath

public IObservable<bool> InvalidateLayout => invalidateLayout;

public IObservable<IEnumerable<ExpressionBuilder>> UpdateSelection => updateSelection;
public IObservable<WorkflowEditorPath> WorkflowPathChanged => workflowPathChanged;

public IObservable<IWorkflowExpressionBuilder> CloseWorkflowEditor => closeWorkflowEditor;
public IObservable<IEnumerable<ExpressionBuilder>> UpdateSelection => updateSelection;

private static Node<ExpressionBuilder, ExpressionBuilderArgument> FindWorkflowValue(ExpressionBuilderGraph workflow, ExpressionBuilder value)
{
Expand Down Expand Up @@ -1462,14 +1463,6 @@ from successor in workflowNode.Successors
addNode();
removeEdge();
});

var builder = ExpressionBuilder.Unwrap(workflowNode.Value);
var disableBuilder = builder as DisableBuilder;
var workflowExpressionBuilder = (disableBuilder != null ? disableBuilder.Builder : builder) as IWorkflowExpressionBuilder;
if (workflowExpressionBuilder != null)
{
closeWorkflowEditor.OnNext(workflowExpressionBuilder);
}
}

public void DeleteGraphNodes(IEnumerable<GraphNode> nodes)
Expand Down Expand Up @@ -2109,6 +2102,11 @@ public void NavigateTo(WorkflowEditorPath path)
restoreSelectedNodes();
});
}

public void ResetNavigation()
{
WorkflowPath = null;
}
}

enum CreateGraphNodeType
Expand Down
30 changes: 15 additions & 15 deletions Bonsai.Editor/GraphView/WorkflowEditorControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,17 +54,6 @@ public int AnnotationPanelSize
}
}

public WorkflowEditorPath WorkflowPath
{
get { return WorkflowGraphView.WorkflowPath; }
set { WorkflowGraphView.WorkflowPath = value; }
}

public ExpressionBuilderGraph Workflow
{
get { return WorkflowGraphView.Workflow; }
}

public void ExpandAnnotationPanel(ExpressionBuilder builder)
{
annotationPanel.Tag = builder;
Expand Down Expand Up @@ -153,6 +142,20 @@ public void SelectTab(WorkflowGraphView workflowGraphView)
}
}

public void ResetNavigation()
{
CloseAll();
WorkflowGraphView.Editor.ResetNavigation();
}

void CloseAll()
{
while (tabControl.TabCount > 1)
{
CloseTab(tabControl.TabPages[1]);
}
}

void CloseTab(TabPage tabPage)
{
var tabState = (TabPageController)tabPage.Tag;
Expand Down Expand Up @@ -354,10 +357,7 @@ private void closeToolStripMenuItem_Click(object sender, EventArgs e)

private void closeAllToolStripMenuItem_Click(object sender, EventArgs e)
{
while (tabControl.TabCount > 1)
{
CloseTab(tabControl.TabPages[1]);
}
CloseAll();
}

protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
Expand Down
19 changes: 11 additions & 8 deletions Bonsai.Editor/GraphView/WorkflowGraphView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,7 @@ public GraphViewControl GraphView
public WorkflowEditorPath WorkflowPath
{
get { return Editor.WorkflowPath; }
set
{
Editor.WorkflowPath = value;
UpdateSelection(forceUpdate: true);
OnWorkflowPathChanged(EventArgs.Empty);
}
set { Editor.NavigateTo(value); }
}

public event EventHandler WorkflowPathChanged
Expand Down Expand Up @@ -537,7 +532,8 @@ private void UpdateGraphLayout(bool validateWorkflow)
EditorControl.SelectTab(this);
if (EditorControl.AnnotationPanel.Tag is ExpressionBuilder builder)
{
if (!EditorControl.Workflow.Descendants().Contains(builder))
var workflowBuilder = (WorkflowBuilder)serviceProvider.GetService(typeof(WorkflowBuilder));
if (!workflowBuilder.Workflow.Descendants().Contains(builder))
{
EditorControl.AnnotationPanel.NavigateToString(string.Empty);
EditorControl.AnnotationPanel.Tag = null;
Expand Down Expand Up @@ -961,9 +957,15 @@ private void InitializeTheme()

private void InitializeViewBindings()
{
Editor.Error.Subscribe(ex => uiService.ShowError(ex));
Editor.Error.Subscribe(uiService.ShowError);
Editor.UpdateLayout.Subscribe(UpdateGraphLayout);
Editor.InvalidateLayout.Subscribe(InvalidateGraphLayout);
Editor.WorkflowPathChanged.Subscribe(path =>
{
UpdateSelection(forceUpdate: true);
OnWorkflowPathChanged(EventArgs.Empty);
});

Editor.UpdateSelection.Subscribe(selection =>
{
var activeView = graphView;
Expand All @@ -974,6 +976,7 @@ private void InitializeViewBindings()
return selection.Any(builder => ExpressionBuilder.Unwrap(builder) == nodeBuilder);
});
});
Editor.ResetNavigation();
}

#endregion
Expand Down

0 comments on commit 7a3fd53

Please sign in to comment.