将流程事件接口与流程运行环境解耦。

This commit is contained in:
fengjiayi
2025-06-02 19:17:30 +08:00
parent c7fbdc1cbb
commit 999060b67a
22 changed files with 734 additions and 483 deletions

View File

@@ -41,6 +41,7 @@ using UserControl = System.Windows.Controls.UserControl;
using Clipboard = System.Windows.Clipboard;
using TextDataFormat = System.Windows.TextDataFormat;
using System.Windows.Media.Animation;
using Serein.NodeFlow.Model;
namespace Serein.Workbench.Views
{
@@ -174,7 +175,7 @@ namespace Serein.Workbench.Views
private void InitEvent()
{
keyEventService.OnKeyDown += KeyEventService_OnKeyDown;
flowEEForwardingService.OnNodeLocated += FlowEEForwardingService_OnNodeLocated;
flowEEForwardingService.NodeLocated += FlowEEForwardingService_OnNodeLocated;
}
/// <summary>
@@ -1348,9 +1349,9 @@ namespace Serein.Workbench.Views
var actualDeltaX = newLeft - oldLeft;
var actualDeltaY = newTop - oldTop;
List<(string Guid, double NewLeft, double NewTop, double MaxWidth, double MaxHeight)> moveSizes =
List<(IFlowNode Node, double NewLeft, double NewTop, double MaxWidth, double MaxHeight)> moveSizes =
selectNodeControls.Select(control =>
(control.ViewModel.NodeModel.Guid,
(control.ViewModel.NodeModel,
Canvas.GetLeft(control) + actualDeltaX,
Canvas.GetTop(control) + actualDeltaY,
control.FlowCanvas.Model.Width - control.ActualWidth - 10,
@@ -1363,7 +1364,10 @@ namespace Serein.Workbench.Views
}
foreach (var item in moveSizes)
{
this.flowEnvironment.MoveNode(this.Guid, item.Guid, item.NewLeft, item.NewTop); // 移动节点
item.Node.Position.X = item.NewLeft;
item.Node.Position.Y = item.NewTop;
//this.flowEnvironment.MoveNode(this.Guid, item.Guid, item.NewLeft, item.NewTop); // 移动节点
}
// 更新节点之间线的连接位置
@@ -1390,7 +1394,11 @@ namespace Serein.Workbench.Views
newLeft = newLeft < 5 ? 5 : newLeft > canvasWidth ? canvasWidth : newLeft;
newTop = newTop < 5 ? 5 : newTop > canvasHeight ? canvasHeight : newTop;
this.flowEnvironment.MoveNode(Guid, nodeControl.ViewModel.NodeModel.Guid, newLeft, newTop); // 移动节点
var node = nodeControl.ViewModel.NodeModel;
node.Position.X = newLeft;
node.Position.Y = newTop;
//this.flowEnvironment.MoveNode(Guid, nodeControl.ViewModel.NodeModel.Guid, newLeft, newTop); // 移动节点
nodeControl.UpdateLocationConnections();
}
startControlDragPoint = currentPosition; // 更新起始点位置

View File

@@ -109,6 +109,14 @@
<TextBlock Text="预览位置Y" Style="{StaticResource InfoTipsTextBlock}" />
<TextBox Text="{Binding Model.ViewY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource InfoValueTextBox}"/>
</StackPanel>
<StackPanel Margin="1" Orientation="Horizontal">
<TextBlock Text="缩放比例X" Style="{StaticResource InfoTipsTextBlock}" />
<TextBox Text="{Binding Model.ScaleX, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource InfoValueTextBox}"/>
</StackPanel>
<StackPanel Margin="1" Orientation="Horizontal">
<TextBlock Text="缩放比例Y" Style="{StaticResource InfoTipsTextBlock}" />
<TextBox Text="{Binding Model.ScaleY, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource InfoValueTextBox}"/>
</StackPanel>
</StackPanel>
</Grid>

View File

@@ -39,7 +39,7 @@ namespace Serein.Workbench.Views
if (sender is Grid grid && grid.DataContext is IFlowNode nodeModel)
{
NodeInfoViewModel.ViewNodeModel = nodeModel;
App.GetService<IFlowEnvironment>().NodeLocated(nodeModel.Guid);
App.GetService<IFlowEnvironment>().NodeLocate(nodeModel.Guid);
}
// 定位节点

View File

@@ -41,6 +41,14 @@
<TextBlock Text="节点名称" Style="{StaticResource InfoTipsTextBlock}" />
<TextBox Text="{Binding ViewNodeModel.DisplayName, Mode=TwoWay}" Style="{StaticResource InfoValueTextBox}" IsReadOnly="True"/>
</StackPanel>
<StackPanel Margin="1" Orientation="Horizontal">
<TextBlock Text="X轴位置" Style="{StaticResource InfoTipsTextBlock}" />
<TextBox Text="{Binding ViewNodeModel.Position.X, Mode=TwoWay}" Style="{StaticResource InfoValueTextBox}" IsReadOnly="True"/>
</StackPanel>
<StackPanel Margin="1" Orientation="Horizontal">
<TextBlock Text="Y轴位置" Style="{StaticResource InfoTipsTextBlock}" />
<TextBox Text="{Binding ViewNodeModel.Position.Y, Mode=TwoWay}" Style="{StaticResource InfoValueTextBox}" IsReadOnly="True"/>
</StackPanel>
</StackPanel>
</Border>
</UserControl>