mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-03-02 15:50:47 +08:00
改写NodeModelBase类,使其继承Serein.Library.Api下的IFlowNode接口,而实现类迁移到NodeModel项目,方便后续节点运行逻辑修改时不用重新编译类库。
This commit is contained in:
@@ -16,6 +16,7 @@ using Serein.Workbench.Services;
|
||||
using Serein.Workbench.Tool;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using Serein.Library.Api;
|
||||
|
||||
namespace Serein.Workbench.Node.View
|
||||
{
|
||||
@@ -60,15 +61,15 @@ namespace Serein.Workbench.Node.View
|
||||
|
||||
#region 控件属性,所在的节点
|
||||
public static readonly DependencyProperty NodeProperty =
|
||||
DependencyProperty.Register(nameof(MyNode), typeof(NodeModelBase), typeof(ParamsArgControl), new PropertyMetadata(default(NodeModelBase)));
|
||||
DependencyProperty.Register(nameof(MyNode), typeof(IFlowNode), typeof(ParamsArgControl), new PropertyMetadata(default(IFlowNode)));
|
||||
//public NodeModelBase NodeModel;
|
||||
|
||||
/// <summary>
|
||||
/// 所在的节点
|
||||
/// </summary>
|
||||
public NodeModelBase MyNode
|
||||
public IFlowNode MyNode
|
||||
{
|
||||
get { return (NodeModelBase)GetValue(NodeProperty); }
|
||||
get { return (IFlowNode)GetValue(NodeProperty); }
|
||||
set { SetValue(NodeProperty, value); }
|
||||
}
|
||||
#endregion
|
||||
@@ -194,15 +195,15 @@ namespace Serein.Workbench.Node.View
|
||||
|
||||
#region 控件属性,所在的节点
|
||||
public static readonly DependencyProperty NodeProperty =
|
||||
DependencyProperty.Register(nameof(MyNode), typeof(NodeModelBase), typeof(JunctionControlBase), new PropertyMetadata(default(NodeModelBase)));
|
||||
DependencyProperty.Register(nameof(MyNode), typeof(IFlowNode), typeof(JunctionControlBase), new PropertyMetadata(default(IFlowNode)));
|
||||
//public NodeModelBase NodeModel;
|
||||
|
||||
/// <summary>
|
||||
/// 所在的节点
|
||||
/// </summary>
|
||||
public NodeModelBase MyNode
|
||||
public IFlowNode MyNode
|
||||
{
|
||||
get { return (NodeModelBase)GetValue(NodeProperty); }
|
||||
get { return (IFlowNode)GetValue(NodeProperty); }
|
||||
set { SetValue(NodeProperty, value); }
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using Serein.Library.Api;
|
||||
|
||||
namespace Serein.Workbench.Node.ViewModel
|
||||
{
|
||||
@@ -14,9 +15,9 @@ namespace Serein.Workbench.Node.ViewModel
|
||||
///// <summary>
|
||||
///// 对应的节点实体类
|
||||
///// </summary>
|
||||
public NodeModelBase NodeModel { get; }
|
||||
public IFlowNode NodeModel { get; }
|
||||
|
||||
public NodeControlViewModelBase(NodeModelBase nodeModel)
|
||||
public NodeControlViewModelBase(IFlowNode nodeModel)
|
||||
{
|
||||
NodeModel = nodeModel;
|
||||
|
||||
|
||||
@@ -23,11 +23,11 @@ namespace Serein.Workbench.Node.View
|
||||
/// <summary>
|
||||
/// 起始节点
|
||||
/// </summary>
|
||||
public NodeModelBase StartNode { get; set; }
|
||||
public IFlowNode StartNode { get; set; }
|
||||
/// <summary>
|
||||
/// 目标节点
|
||||
/// </summary>
|
||||
public NodeModelBase EndNode { get; set; }
|
||||
public IFlowNode EndNode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 来源于起始节点的(控制点)类型
|
||||
@@ -63,7 +63,7 @@ namespace Serein.Workbench.Node.View
|
||||
/// <summary>
|
||||
/// 对应的视图对象
|
||||
/// </summary>
|
||||
public NodeModelBase NodeModel { get; set; }
|
||||
public IFlowNode NodeModel { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using Serein.Library;
|
||||
using Serein.Library.Api;
|
||||
using Serein.NodeFlow.Model;
|
||||
using Serein.Workbench.Api;
|
||||
using Serein.Workbench.Services;
|
||||
@@ -37,7 +38,7 @@ namespace Serein.Workbench.Node.ViewModel
|
||||
/// 当前所选节点
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private NodeModelBase _selectNode;
|
||||
private IFlowNode _selectNode;
|
||||
|
||||
|
||||
[ObservableProperty]
|
||||
@@ -88,7 +89,7 @@ namespace Serein.Workbench.Node.ViewModel
|
||||
FlowCallNode.ResetTargetNode();
|
||||
}
|
||||
|
||||
partial void OnSelectNodeChanged(NodeModelBase value)
|
||||
partial void OnSelectNodeChanged(IFlowNode value)
|
||||
{
|
||||
if(value is null)
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace Serein.Workbench.Node.ViewModel
|
||||
private UserControl _nodeUIContent;
|
||||
|
||||
|
||||
public UINodeControlViewModel(NodeModelBase nodeModel) : base(nodeModel)
|
||||
public UINodeControlViewModel(IFlowNode nodeModel) : base(nodeModel)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -421,7 +421,7 @@ namespace Serein.Workbench.Services
|
||||
/// <param name="nodeCanvas">节点所在画布</param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="Exception">无法创建节点控件</exception>
|
||||
private static NodeControlBase CreateNodeControl(Type controlType, Type viewModelType, NodeModelBase model, IFlowCanvas nodeCanvas)
|
||||
private static NodeControlBase CreateNodeControl(Type controlType, Type viewModelType, IFlowNode model, IFlowCanvas nodeCanvas)
|
||||
{
|
||||
if ((controlType is null)
|
||||
|| viewModelType is null
|
||||
@@ -489,7 +489,7 @@ namespace Serein.Workbench.Services
|
||||
/// <summary>
|
||||
/// 从节点信息转换为Json文本数据
|
||||
/// </summary>
|
||||
public string CpoyNodeInfo(List<NodeModelBase> dictSelection)
|
||||
public string CpoyNodeInfo(List<IFlowNode> dictSelection)
|
||||
{
|
||||
|
||||
// 遍历当前已选节点
|
||||
|
||||
@@ -26,18 +26,18 @@ namespace Serein.Workbench.Themes
|
||||
/// <summary>
|
||||
/// 保存的节点数据
|
||||
/// </summary>
|
||||
private NodeModelBase nodeModel;
|
||||
private IFlowNode nodeModel;
|
||||
private IFlowEnvironment flowEnvironment { get; set; }
|
||||
|
||||
|
||||
private class NodeTreeModel
|
||||
{
|
||||
public NodeModelBase RootNode { get; set; }
|
||||
public Dictionary<ConnectionInvokeType, List<NodeModelBase>> ChildNodes { get; set; }
|
||||
public IFlowNode RootNode { get; set; }
|
||||
public Dictionary<ConnectionInvokeType, List<IFlowNode>> ChildNodes { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public void InitAndLoadTree(IFlowEnvironment flowEnvironment, NodeModelBase nodeModel)
|
||||
public void InitAndLoadTree(IFlowEnvironment flowEnvironment, IFlowNode nodeModel)
|
||||
{
|
||||
this.flowEnvironment = flowEnvironment;
|
||||
this.nodeModel = nodeModel;
|
||||
@@ -46,11 +46,11 @@ namespace Serein.Workbench.Themes
|
||||
|
||||
public TreeViewItem RefreshTree()
|
||||
{
|
||||
NodeModelBase rootNodeModel = this.nodeModel;
|
||||
IFlowNode rootNodeModel = this.nodeModel;
|
||||
NodeTreeModel nodeTreeModel = new NodeTreeModel
|
||||
{
|
||||
RootNode = rootNodeModel,
|
||||
ChildNodes = new Dictionary<ConnectionInvokeType, List<NodeModelBase>>()
|
||||
ChildNodes = new Dictionary<ConnectionInvokeType, List<IFlowNode>>()
|
||||
{
|
||||
{ConnectionInvokeType.Upstream, []},
|
||||
{ConnectionInvokeType.IsSucceed, [rootNodeModel]},
|
||||
|
||||
@@ -18,14 +18,14 @@ namespace Serein.Workbench.Themes
|
||||
private Dictionary<string, NodeTreeItemViewControl> globalFlipflopNodes = [];
|
||||
private Dictionary<string, NodeTreeItemViewControl> unemployedNodes = [];
|
||||
|
||||
public void LoadNodeTreeOfStartNode(IFlowEnvironment flowEnvironment, NodeModelBase nodeModel)
|
||||
public void LoadNodeTreeOfStartNode(IFlowEnvironment flowEnvironment, IFlowNode nodeModel)
|
||||
{
|
||||
startNodeGuid = nodeModel.Guid;
|
||||
StartNodeViewer.InitAndLoadTree(flowEnvironment, nodeModel);
|
||||
}
|
||||
|
||||
#region 触发器
|
||||
public void AddGlobalFlipFlop(IFlowEnvironment flowEnvironment, NodeModelBase nodeModel)
|
||||
public void AddGlobalFlipFlop(IFlowEnvironment flowEnvironment, IFlowNode nodeModel)
|
||||
{
|
||||
if (!globalFlipflopNodes.ContainsKey(nodeModel.Guid))
|
||||
{
|
||||
@@ -35,14 +35,14 @@ namespace Serein.Workbench.Themes
|
||||
GlobalFlipflopNodeListbox.Items.Add(flipflopTreeViewer);
|
||||
}
|
||||
}
|
||||
public void RefreshGlobalFlipFlop(NodeModelBase nodeModel)
|
||||
public void RefreshGlobalFlipFlop(IFlowNode nodeModel)
|
||||
{
|
||||
if (globalFlipflopNodes.TryGetValue(nodeModel.Guid, out var viewer))
|
||||
{
|
||||
viewer.RefreshTree();
|
||||
}
|
||||
}
|
||||
public void RemoveGlobalFlipFlop(NodeModelBase nodeModel)
|
||||
public void RemoveGlobalFlipFlop(IFlowNode nodeModel)
|
||||
{
|
||||
if (globalFlipflopNodes.TryGetValue(nodeModel.Guid, out var viewer))
|
||||
{
|
||||
@@ -54,7 +54,7 @@ namespace Serein.Workbench.Themes
|
||||
|
||||
|
||||
#region 无业游民(定义:不存在于起始节点与全局触发器的调用链上的节点,只能手动刷新?)
|
||||
public void AddUnemployed(IFlowEnvironment flowEnvironment, NodeModelBase nodeModel)
|
||||
public void AddUnemployed(IFlowEnvironment flowEnvironment, IFlowNode nodeModel)
|
||||
{
|
||||
if (!unemployedNodes.ContainsKey(nodeModel.Guid))
|
||||
{
|
||||
@@ -64,14 +64,14 @@ namespace Serein.Workbench.Themes
|
||||
GlobalFlipflopNodeListbox.Items.Add(flipflopTreeViewer);
|
||||
}
|
||||
}
|
||||
public void RefreshUnemployed(NodeModelBase nodeModel)
|
||||
public void RefreshUnemployed(IFlowNode nodeModel)
|
||||
{
|
||||
if (unemployedNodes.TryGetValue(nodeModel.Guid, out var viewer))
|
||||
{
|
||||
viewer.RefreshTree();
|
||||
}
|
||||
}
|
||||
public void RemoteUnemployed(NodeModelBase nodeModel)
|
||||
public void RemoteUnemployed( IFlowNode nodeModel)
|
||||
{
|
||||
if (unemployedNodes.TryGetValue(nodeModel.Guid, out var viewer))
|
||||
{
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using Serein.Library;
|
||||
using Serein.Library.Api;
|
||||
using Serein.Workbench.Node.View;
|
||||
using Serein.Workbench.Services;
|
||||
using System;
|
||||
@@ -18,7 +19,7 @@ namespace Serein.Workbench.ViewModels
|
||||
/// 当前预览的节点
|
||||
/// </summary>
|
||||
[ObservableProperty]
|
||||
private NodeModelBase viewNodeModel;
|
||||
private IFlowNode viewNodeModel;
|
||||
|
||||
public ViewNodeInfoViewModel(FlowNodeService flowNodeService)
|
||||
{
|
||||
|
||||
@@ -36,7 +36,7 @@ namespace Serein.Workbench.Views
|
||||
|
||||
private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (sender is Grid grid && grid.DataContext is NodeModelBase nodeModel)
|
||||
if (sender is Grid grid && grid.DataContext is IFlowNode nodeModel)
|
||||
{
|
||||
NodeInfoViewModel.ViewNodeModel = nodeModel;
|
||||
App.GetService<IFlowEnvironment>().NodeLocated(nodeModel.Guid);
|
||||
|
||||
Reference in New Issue
Block a user