mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-04-18 05:46:35 +08:00
1. 重新设计了Generate项目及相关特性的命名,避免与其他类型混淆。
2. 补充了部分注释。 3. 修改了删除容器节点时,容器内子节点未正确删除的问题。
This commit is contained in:
@@ -23,6 +23,9 @@ namespace Serein.Workbench.Views
|
||||
/// </summary>
|
||||
public partial class BaseNodesView : UserControl
|
||||
{
|
||||
/// <summary>
|
||||
/// 基础节点视图构造函数
|
||||
/// </summary>
|
||||
public BaseNodesView()
|
||||
{
|
||||
this.DataContext = App.GetService<Locator>().BaseNodesViewModel;
|
||||
|
||||
@@ -74,10 +74,6 @@ namespace Serein.Workbench.Views
|
||||
/// </summary>
|
||||
private bool IsSelectControl;
|
||||
/// <summary>
|
||||
/// 标记是否正在进行连接操作
|
||||
/// </summary>
|
||||
//private bool IsConnecting;
|
||||
/// <summary>
|
||||
/// 标记是否正在拖动控件
|
||||
/// </summary>
|
||||
private bool IsControlDragging;
|
||||
@@ -124,6 +120,10 @@ namespace Serein.Workbench.Views
|
||||
|
||||
#region 初始化画布与相关事件
|
||||
|
||||
/// <summary>
|
||||
/// FlowCanvasView 构造函数
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
public FlowCanvasView(FlowCanvasDetails model)
|
||||
{
|
||||
var vm = App.GetService<Locator>().FlowCanvasViewModel;
|
||||
@@ -615,7 +615,7 @@ namespace Serein.Workbench.Views
|
||||
if (key == Key.V && (keyEventService.GetKeyState(Key.LeftCtrl) || keyEventService.GetKeyState(Key.RightCtrl)))
|
||||
{
|
||||
string clipboardText = Clipboard.GetText(TextDataFormat.Text); // 获取复制的文本
|
||||
string nodesText = "";
|
||||
string? nodesText = "";
|
||||
try
|
||||
{
|
||||
var jobject = JObject.Parse(clipboardText);
|
||||
@@ -623,6 +623,7 @@ namespace Serein.Workbench.Views
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
SereinEnv.WriteLine(InfoType.ERROR, $"粘贴节点信息失败: {ex.Message}");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -878,7 +879,7 @@ namespace Serein.Workbench.Views
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private async void FlowChartCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||
private void FlowChartCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (IsSelectControl)
|
||||
{
|
||||
@@ -895,7 +896,7 @@ namespace Serein.Workbench.Views
|
||||
|
||||
// 创建连线
|
||||
var cd = flowNodeService.ConnectingData;
|
||||
if (cd.IsCreateing)
|
||||
if (cd.IsCreateing && cd.CurrentJunction is not null)
|
||||
{
|
||||
if (cd.IsCanConnected)
|
||||
{
|
||||
@@ -1593,6 +1594,12 @@ namespace Serein.Workbench.Views
|
||||
|
||||
#region Plan A 群组对齐
|
||||
|
||||
/// <summary>
|
||||
/// 对齐选中的控件,支持多种对齐方式。
|
||||
/// </summary>
|
||||
/// <param name="selectNodeControls"></param>
|
||||
/// <param name="proximityThreshold"></param>
|
||||
/// <param name="spacing"></param>
|
||||
public void AlignControlsWithGrouping(List<NodeControlBase> selectNodeControls, double proximityThreshold = 50, double spacing = 10)
|
||||
{
|
||||
if (selectNodeControls is null || selectNodeControls.Count < 2)
|
||||
@@ -1673,6 +1680,11 @@ namespace Serein.Workbench.Views
|
||||
#endregion
|
||||
|
||||
#region Plan B 规划对齐
|
||||
/// <summary>
|
||||
/// 使用动态规划对齐选中的控件,确保控件之间有间距,并且不重叠。
|
||||
/// </summary>
|
||||
/// <param name="selectNodeControls"></param>
|
||||
/// <param name="spacing"></param>
|
||||
public void AlignControlsWithDynamicProgramming(List<NodeControlBase> selectNodeControls, double spacing = 10)
|
||||
{
|
||||
if (selectNodeControls is null || selectNodeControls.Count < 2)
|
||||
@@ -1751,6 +1763,10 @@ namespace Serein.Workbench.Views
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 对齐模式枚举
|
||||
/// </summary>
|
||||
public enum AlignMode
|
||||
{
|
||||
/// <summary>
|
||||
@@ -1780,7 +1796,13 @@ namespace Serein.Workbench.Views
|
||||
Grouping,
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 对齐控件,支持多种对齐方式。
|
||||
/// </summary>
|
||||
/// <param name="selectNodeControls"></param>
|
||||
/// <param name="alignMode"></param>
|
||||
/// <param name="proximityThreshold"></param>
|
||||
/// <param name="spacing"></param>
|
||||
public void AlignControlsWithGrouping(List<NodeControlBase> selectNodeControls, AlignMode alignMode, double proximityThreshold = 50, double spacing = 10)
|
||||
{
|
||||
if (selectNodeControls is null || selectNodeControls.Count < 2)
|
||||
|
||||
@@ -31,7 +31,9 @@ namespace Serein.Workbench.Views
|
||||
/// </summary>
|
||||
public partial class FlowEditView : UserControl
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 流程编辑视图构造函数
|
||||
/// </summary>
|
||||
public FlowEditView()
|
||||
{
|
||||
this.DataContext = App.GetService<Locator>().FlowEditViewModel;
|
||||
|
||||
@@ -23,6 +23,10 @@ namespace Serein.Workbench.Views
|
||||
public partial class FlowLibrarysView : UserControl
|
||||
{
|
||||
private FlowLibrarysViewModel ViewModel => DataContext as FlowLibrarysViewModel ?? throw new ArgumentNullException();
|
||||
|
||||
/// <summary>
|
||||
/// FlowLibrarysView 构造函数
|
||||
/// </summary>
|
||||
public FlowLibrarysView()
|
||||
{
|
||||
this.DataContext = App.GetService<Locator>().FlowLibrarysViewModel;
|
||||
|
||||
@@ -21,6 +21,10 @@ namespace Serein.Workbench.Views
|
||||
public partial class FlowWorkbenchView : Window
|
||||
{
|
||||
private FlowWorkbenchViewModel ViewModel => ViewModel as FlowWorkbenchViewModel;
|
||||
|
||||
/// <summary>
|
||||
/// FlowWorkbenchView 的交互逻辑
|
||||
/// </summary>
|
||||
public FlowWorkbenchView()
|
||||
{
|
||||
this.DataContext = App.GetService<Locator>().FlowWorkbenchViewModel;
|
||||
@@ -49,6 +53,10 @@ namespace Serein.Workbench.Views
|
||||
System.Windows.Application.Current.Shutdown();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理鼠标按下事件,确保点击空白区域时清除焦点
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
protected override void OnPreviewMouseDown(MouseButtonEventArgs e)
|
||||
{
|
||||
// 获取当前的焦点控件
|
||||
|
||||
@@ -21,6 +21,9 @@ namespace Serein.Workbench.Views
|
||||
/// </summary>
|
||||
public partial class MainMenuBarView : UserControl
|
||||
{
|
||||
/// <summary>
|
||||
/// MainMenuBarView 的构造函数
|
||||
/// </summary>
|
||||
public MainMenuBarView()
|
||||
{
|
||||
this.DataContext = App.GetService<Locator>().MainMenuBarViewModel;
|
||||
|
||||
@@ -21,6 +21,9 @@ namespace Serein.Workbench.Views
|
||||
/// </summary>
|
||||
public partial class MainView : UserControl
|
||||
{
|
||||
/// <summary>
|
||||
/// MainView 的构造函数
|
||||
/// </summary>
|
||||
public MainView()
|
||||
{
|
||||
this.DataContext = App.GetService<Locator>().MainViewModel;
|
||||
|
||||
@@ -26,6 +26,10 @@ namespace Serein.Workbench.Views
|
||||
{
|
||||
private readonly ViewCanvasInfoViewModel ViewModel;
|
||||
private readonly ViewNodeInfoViewModel NodeInfoViewModel;
|
||||
|
||||
/// <summary>
|
||||
/// 画布信息查看视图
|
||||
/// </summary>
|
||||
public ViewCanvasInfoView()
|
||||
{
|
||||
this.ViewModel = App.GetService<ViewCanvasInfoViewModel>();
|
||||
|
||||
@@ -22,6 +22,10 @@ namespace Serein.Workbench.Views
|
||||
public partial class ViewNodeInfoView : UserControl
|
||||
{
|
||||
private readonly ViewNodeInfoViewModel ViewModel;
|
||||
|
||||
/// <summary>
|
||||
/// ViewNodeInfoView 的交互逻辑
|
||||
/// </summary>
|
||||
public ViewNodeInfoView()
|
||||
{
|
||||
|
||||
|
||||
@@ -23,6 +23,9 @@ namespace Serein.Workbench.Views
|
||||
{
|
||||
private readonly ViewNodeMethodInfoViewModel ViewModel;
|
||||
|
||||
/// <summary>
|
||||
/// ViewNodeMethodInfoView 的交互逻辑
|
||||
/// </summary>
|
||||
public ViewNodeMethodInfoView()
|
||||
{
|
||||
ViewModel = App.GetService<Locator>().ViewNodeMethodInfoViewModel;
|
||||
|
||||
Reference in New Issue
Block a user