2025-06-22 21:53:37 +08:00
|
|
|
|
using Serein.Library;
|
|
|
|
|
|
using Serein.Library.Api;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
2025-07-30 21:15:07 +08:00
|
|
|
|
namespace Serein.NodeFlow.Model.Operations
|
2025-06-22 21:53:37 +08:00
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 设置起始节点
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
internal class SetStartNodeOperation : OperationBase
|
|
|
|
|
|
{
|
|
|
|
|
|
public override string Theme => nameof(SetStartNodeOperation);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public string CanvasGuid { get; set; }
|
|
|
|
|
|
public string NewNodeGuid { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private FlowCanvasDetails CanvasModel;
|
|
|
|
|
|
private IFlowNode NewStartNodeModel;
|
|
|
|
|
|
private IFlowNode? OldStartNodeModel;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public override bool ValidationParameter()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!flowModelService.TryGetCanvasModel(CanvasGuid, out CanvasModel)
|
|
|
|
|
|
|| !flowModelService.TryGetNodeModel(NewNodeGuid, out NewStartNodeModel))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
2025-07-06 14:34:49 +08:00
|
|
|
|
public override async Task<bool> ExecuteAsync()
|
2025-06-22 21:53:37 +08:00
|
|
|
|
{
|
|
|
|
|
|
if (!ValidationParameter()) return false;
|
|
|
|
|
|
|
|
|
|
|
|
if (CanvasModel.StartNode is not null
|
|
|
|
|
|
&& flowModelService.TryGetNodeModel(CanvasModel.StartNode.Guid, out var flowNode))
|
|
|
|
|
|
{
|
|
|
|
|
|
OldStartNodeModel = flowNode;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CanvasModel.StartNode = NewStartNodeModel;
|
2025-07-06 14:34:49 +08:00
|
|
|
|
|
|
|
|
|
|
await TriggerEvent(() =>
|
|
|
|
|
|
{
|
|
|
|
|
|
flowEnvironmentEvent.OnStartNodeChanged(new StartNodeChangeEventArgs(CanvasModel.Guid, OldStartNodeModel?.Guid, NewStartNodeModel.Guid));
|
|
|
|
|
|
});
|
2025-06-22 21:53:37 +08:00
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override bool Undo()
|
|
|
|
|
|
{
|
|
|
|
|
|
if(OldStartNodeModel is null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
var newStartNode = OldStartNodeModel;
|
|
|
|
|
|
var oldStartNode = NewStartNodeModel;
|
|
|
|
|
|
|
|
|
|
|
|
NewStartNodeModel = newStartNode;
|
|
|
|
|
|
OldStartNodeModel = oldStartNode;
|
|
|
|
|
|
CanvasModel.StartNode = oldStartNode;
|
|
|
|
|
|
|
|
|
|
|
|
flowEnvironmentEvent.OnStartNodeChanged(new StartNodeChangeEventArgs(CanvasModel.Guid, oldStartNode?.Guid, newStartNode.Guid));
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public override void ToInfo()
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new NotImplementedException();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|