mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-04-15 04:16:34 +08:00
修复了删除参数连接关系时导致调用关系也被删除的bug
This commit is contained in:
@@ -15,6 +15,7 @@ using System.Threading;
|
|||||||
using Serein.Workbench.Services;
|
using Serein.Workbench.Services;
|
||||||
using Serein.Workbench.Tool;
|
using Serein.Workbench.Tool;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace Serein.Workbench.Node.View
|
namespace Serein.Workbench.Node.View
|
||||||
{
|
{
|
||||||
@@ -48,7 +49,7 @@ namespace Serein.Workbench.Node.View
|
|||||||
this.MouseDown += ParamsArg_OnMouseDown; // 增加或删除
|
this.MouseDown += ParamsArg_OnMouseDown; // 增加或删除
|
||||||
this.MouseMove += ParamsArgControl_MouseMove;
|
this.MouseMove += ParamsArgControl_MouseMove;
|
||||||
this.MouseLeave += ParamsArgControl_MouseLeave;
|
this.MouseLeave += ParamsArgControl_MouseLeave;
|
||||||
AddOrRemoveParamsTask = AddAsync;
|
AddOrRemoveParamsTask = AddParamAsync;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -120,18 +121,18 @@ namespace Serein.Workbench.Node.View
|
|||||||
private void ParamsArgControl_MouseMove(object sender, MouseEventArgs e)
|
private void ParamsArgControl_MouseMove(object sender, MouseEventArgs e)
|
||||||
{
|
{
|
||||||
isMouseOver = true;
|
isMouseOver = true;
|
||||||
if (cancellationTokenSource.IsCancellationRequested) {
|
if (cts.IsCancellationRequested) {
|
||||||
cancellationTokenSource = new CancellationTokenSource();
|
cts = new CancellationTokenSource();
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await Task.Delay(380);
|
await Task.Delay(380);
|
||||||
|
|
||||||
}, cancellationTokenSource.Token).ContinueWith((t) =>
|
}, cts.Token).ContinueWith((t) =>
|
||||||
{
|
{
|
||||||
// 如果焦点仍在控件上时,则改变点击事件
|
// 如果焦点仍在控件上时,则改变点击事件
|
||||||
if (isMouseOver)
|
if (isMouseOver)
|
||||||
{
|
{
|
||||||
AddOrRemoveParamsTask = RemoveAsync;
|
AddOrRemoveParamsTask = RemoveParamAsync;
|
||||||
this.Dispatcher.Invoke(InvalidateVisual);// 触发一次重绘
|
this.Dispatcher.Invoke(InvalidateVisual);// 触发一次重绘
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -139,24 +140,27 @@ namespace Serein.Workbench.Node.View
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
|
|
||||||
|
|
||||||
|
private CancellationTokenSource cts = new CancellationTokenSource();
|
||||||
|
|
||||||
|
|
||||||
private void ParamsArgControl_MouseLeave(object sender, MouseEventArgs e)
|
private void ParamsArgControl_MouseLeave(object sender, MouseEventArgs e)
|
||||||
{
|
{
|
||||||
isMouseOver = false;
|
isMouseOver = false;
|
||||||
AddOrRemoveParamsTask = AddAsync; // 鼠标焦点离开时恢复点击事件
|
AddOrRemoveParamsTask = AddParamAsync; // 鼠标焦点离开时恢复点击事件
|
||||||
cancellationTokenSource?.Cancel();
|
cts?.Cancel();
|
||||||
this.Dispatcher.Invoke(InvalidateVisual);// 触发一次重绘
|
this.Dispatcher.Invoke(InvalidateVisual);// 触发一次重绘
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async Task AddAsync()
|
|
||||||
|
private async Task AddParamAsync()
|
||||||
{
|
{
|
||||||
await this.MyNode.Env.ChangeParameter(MyNode.Guid, true, ArgIndex);
|
await this.MyNode.Env.ChangeParameter(MyNode.Guid, true, ArgIndex);
|
||||||
}
|
}
|
||||||
private async Task RemoveAsync()
|
private async Task RemoveParamAsync()
|
||||||
{
|
{
|
||||||
await this.MyNode.Env.ChangeParameter(MyNode.Guid, false, ArgIndex);
|
await this.MyNode.Env.ChangeParameter(MyNode.Guid, false, ArgIndex);
|
||||||
}
|
}
|
||||||
@@ -358,6 +362,7 @@ namespace Serein.Workbench.Node.View
|
|||||||
cd.StartPoint = this.TranslatePoint(new Point(this.Width / 2, this.Height / 2), canvas);
|
cd.StartPoint = this.TranslatePoint(new Point(this.Width / 2, this.Height / 2), canvas);
|
||||||
|
|
||||||
var junctionOfConnectionType = this.JunctionType.ToConnectyionType();
|
var junctionOfConnectionType = this.JunctionType.ToConnectyionType();
|
||||||
|
//Debug.WriteLine(this.JunctionType);
|
||||||
ConnectionLineShape bezierLine; // 类别
|
ConnectionLineShape bezierLine; // 类别
|
||||||
Brush brushColor; // 临时线的颜色
|
Brush brushColor; // 临时线的颜色
|
||||||
if (junctionOfConnectionType == JunctionOfConnectionType.Invoke)
|
if (junctionOfConnectionType == JunctionOfConnectionType.Invoke)
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ namespace Serein.Workbench.Node.View
|
|||||||
|
|
||||||
public class ResultJunctionControl : JunctionControlBase
|
public class ResultJunctionControl : JunctionControlBase
|
||||||
{
|
{
|
||||||
//public override JunctionType JunctionType { get; } = JunctionType.ReturnData;
|
|
||||||
|
|
||||||
public ResultJunctionControl()
|
public ResultJunctionControl()
|
||||||
{
|
{
|
||||||
base.JunctionType = JunctionType.ReturnData;
|
base.JunctionType = JunctionType.ReturnData;
|
||||||
|
|||||||
@@ -239,11 +239,13 @@ namespace Serein.Workbench.Node.View
|
|||||||
Canvas.Children.Remove(BezierLine);
|
Canvas.Children.Remove(BezierLine);
|
||||||
var env = Start.MyNode.Env;
|
var env = Start.MyNode.Env;
|
||||||
var canvasGuid = Start.MyNode.CanvasDetails.Guid;
|
var canvasGuid = Start.MyNode.CanvasDetails.Guid;
|
||||||
if (Start.JunctionType.ToConnectyionType() == JunctionOfConnectionType.Invoke)
|
var jct = Start.JunctionType.ToConnectyionType();
|
||||||
|
var jctEnd = End.JunctionType.ToConnectyionType();
|
||||||
|
if (jct == JunctionOfConnectionType.Invoke)
|
||||||
{
|
{
|
||||||
env.RemoveConnectInvokeAsync(canvasGuid, Start.MyNode.Guid, End.MyNode.Guid, InvokeType);
|
env.RemoveConnectInvokeAsync(canvasGuid, Start.MyNode.Guid, End.MyNode.Guid, InvokeType);
|
||||||
}
|
}
|
||||||
else if (Start.JunctionType.ToConnectyionType() == JunctionOfConnectionType.Arg)
|
else if (jct == JunctionOfConnectionType.Arg)
|
||||||
{
|
{
|
||||||
env.RemoveConnectArgSourceAsync(canvasGuid,Start.MyNode.Guid, End.MyNode.Guid, ArgIndex) ;
|
env.RemoveConnectArgSourceAsync(canvasGuid,Start.MyNode.Guid, End.MyNode.Guid, ArgIndex) ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,13 +41,6 @@ namespace Serein.Workbench.Node.View
|
|||||||
{
|
{
|
||||||
DataContext = viewModel;
|
DataContext = viewModel;
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
#if false
|
|
||||||
// 初始化定时器
|
|
||||||
_debounceTimer = new DispatcherTimer();
|
|
||||||
_debounceTimer.Interval = TimeSpan.FromMilliseconds(500); // 停止输入 500ms 后更新
|
|
||||||
_debounceTimer.Tick += DebounceTimer_Tick;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -411,10 +411,10 @@ namespace Serein.Workbench.Views
|
|||||||
JunctionControlBase endJunction = IToJunction.ExecuteJunction;
|
JunctionControlBase endJunction = IToJunction.ExecuteJunction;
|
||||||
|
|
||||||
var removeConnections = Connections.Where(c =>
|
var removeConnections = Connections.Where(c =>
|
||||||
c.Start.Equals(startJunction)
|
c.Start.MyNode.Guid == startJunction.MyNode.Guid
|
||||||
&& c.End.Equals(endJunction)
|
&& c.End.MyNode.Guid == endJunction.MyNode.Guid
|
||||||
&& (c.Start.JunctionType.ToConnectyionType() == JunctionOfConnectionType.Invoke
|
&& (c.Start.JunctionType.ToConnectyionType() == JunctionOfConnectionType.Arg
|
||||||
|| c.End.JunctionType.ToConnectyionType() == JunctionOfConnectionType.Invoke))
|
|| c.End.JunctionType.ToConnectyionType() == JunctionOfConnectionType.Arg))
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user