修复了删除参数连接关系时导致调用关系也被删除的bug

This commit is contained in:
fengjiayi
2025-05-30 14:05:20 +08:00
parent 00c0a4d387
commit 9c4e5b2735
5 changed files with 24 additions and 26 deletions

View File

@@ -15,6 +15,7 @@ using System.Threading;
using Serein.Workbench.Services;
using Serein.Workbench.Tool;
using System.ComponentModel;
using System.Diagnostics;
namespace Serein.Workbench.Node.View
{
@@ -48,7 +49,7 @@ namespace Serein.Workbench.Node.View
this.MouseDown += ParamsArg_OnMouseDown; // 增加或删除
this.MouseMove += ParamsArgControl_MouseMove;
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)
{
isMouseOver = true;
if (cancellationTokenSource.IsCancellationRequested) {
cancellationTokenSource = new CancellationTokenSource();
if (cts.IsCancellationRequested) {
cts = new CancellationTokenSource();
Task.Run(async () =>
{
await Task.Delay(380);
}, cancellationTokenSource.Token).ContinueWith((t) =>
}, cts.Token).ContinueWith((t) =>
{
// 如果焦点仍在控件上时,则改变点击事件
if (isMouseOver)
{
AddOrRemoveParamsTask = RemoveAsync;
AddOrRemoveParamsTask = RemoveParamAsync;
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)
{
isMouseOver = false;
AddOrRemoveParamsTask = AddAsync; // 鼠标焦点离开时恢复点击事件
cancellationTokenSource?.Cancel();
AddOrRemoveParamsTask = AddParamAsync; // 鼠标焦点离开时恢复点击事件
cts?.Cancel();
this.Dispatcher.Invoke(InvalidateVisual);// 触发一次重绘
}
private async Task AddAsync()
private async Task AddParamAsync()
{
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);
}
@@ -347,7 +351,7 @@ namespace Serein.Workbench.Node.View
{
if (e.LeftButton == MouseButtonState.Pressed)
{
var canvas = WpfFuncTool.GetParentOfType<Canvas>(this);
var canvas = WpfFuncTool.GetParentOfType<Canvas>(this);
if (canvas != null)
{
var cd = flowNodeService.ConnectingData;
@@ -358,6 +362,7 @@ namespace Serein.Workbench.Node.View
cd.StartPoint = this.TranslatePoint(new Point(this.Width / 2, this.Height / 2), canvas);
var junctionOfConnectionType = this.JunctionType.ToConnectyionType();
//Debug.WriteLine(this.JunctionType);
ConnectionLineShape bezierLine; // 类别
Brush brushColor; // 临时线的颜色
if (junctionOfConnectionType == JunctionOfConnectionType.Invoke)

View File

@@ -8,8 +8,6 @@ namespace Serein.Workbench.Node.View
public class ResultJunctionControl : JunctionControlBase
{
//public override JunctionType JunctionType { get; } = JunctionType.ReturnData;
public ResultJunctionControl()
{
base.JunctionType = JunctionType.ReturnData;

View File

@@ -239,11 +239,13 @@ namespace Serein.Workbench.Node.View
Canvas.Children.Remove(BezierLine);
var env = Start.MyNode.Env;
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);
}
else if (Start.JunctionType.ToConnectyionType() == JunctionOfConnectionType.Arg)
else if (jct == JunctionOfConnectionType.Arg)
{
env.RemoveConnectArgSourceAsync(canvasGuid,Start.MyNode.Guid, End.MyNode.Guid, ArgIndex) ;
}

View File

@@ -41,13 +41,6 @@ namespace Serein.Workbench.Node.View
{
DataContext = viewModel;
InitializeComponent();
#if false
// 初始化定时器
_debounceTimer = new DispatcherTimer();
_debounceTimer.Interval = TimeSpan.FromMilliseconds(500); // 停止输入 500ms 后更新
_debounceTimer.Tick += DebounceTimer_Tick;
#endif
}

View File

@@ -411,10 +411,10 @@ namespace Serein.Workbench.Views
JunctionControlBase endJunction = IToJunction.ExecuteJunction;
var removeConnections = Connections.Where(c =>
c.Start.Equals(startJunction)
&& c.End.Equals(endJunction)
&& (c.Start.JunctionType.ToConnectyionType() == JunctionOfConnectionType.Invoke
|| c.End.JunctionType.ToConnectyionType() == JunctionOfConnectionType.Invoke))
c.Start.MyNode.Guid == startJunction.MyNode.Guid
&& c.End.MyNode.Guid == endJunction.MyNode.Guid
&& (c.Start.JunctionType.ToConnectyionType() == JunctionOfConnectionType.Arg
|| c.End.JunctionType.ToConnectyionType() == JunctionOfConnectionType.Arg))
.ToList();