using Serein.Library;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Shapes;
namespace Serein.Workbench.Node.View
{
#region Model,不科学的全局变量
internal class MyLine
{
public MyLine(Canvas canvas, ConnectionLineShape line)
{
Canvas = canvas;
Line = line;
canvas?.Children.Add(line);
}
public Canvas Canvas { get; set; }
public ConnectionLineShape Line { get; set; }
public void Remove()
{
Canvas?.Children.Remove(Line);
}
}
internal class ConnectingData
{
///
/// 是否正在创建连线
///
public bool IsCreateing { get; set; }
///
/// 起始控制点
///
public JunctionControlBase? StartJunction { get; set; }
///
/// 当前的控制点
///
public JunctionControlBase? CurrentJunction { get; set; }
///
/// 开始坐标
///
public Point StartPoint { get; set; }
///
/// 线条样式
///
public MyLine? MyLine { get; set; }
///
/// 线条类别(方法调用)
///
public ConnectionInvokeType ConnectionInvokeType { get; set; } = ConnectionInvokeType.IsSucceed;
///
/// 线条类别(参数传递)
///
public ConnectionArgSourceType ConnectionArgSourceType { get; set; } = ConnectionArgSourceType.GetOtherNodeData;
///
/// 判断当前连接类型
///
public JunctionOfConnectionType Type => StartJunction?.JunctionType.ToConnectyionType() ?? JunctionOfConnectionType.None;
///
/// 是否允许连接
///
public bool IsCanConnected { get
{
if(StartJunction is null
|| CurrentJunction is null
)
{
return false;
}
if (!StartJunction.NodeGuid.Equals(CurrentJunction.NodeGuid)
&& StartJunction.JunctionType.IsCanConnection(CurrentJunction.JunctionType))
{
return true;
}
else
{
return false;
}
}
}
///
/// 更新临时的连接线
///
///
public void UpdatePoint(Point point)
{
if (StartJunction is null
|| CurrentJunction is null
)
{
return;
}
if (StartJunction.JunctionType == Library.JunctionType.Execute
|| StartJunction.JunctionType == Library.JunctionType.ArgData)
{
MyLine?.Line.UpdateStartPoints(point);
}
else
{
MyLine?.Line.UpdateEndPoints(point);
}
}
///
/// 重置连线状态
///
public void Reset()
{
IsCreateing = false;
StartJunction = null;
CurrentJunction = null;
MyLine?.Remove();
ConnectionInvokeType = ConnectionInvokeType.IsSucceed;
ConnectionArgSourceType = ConnectionArgSourceType.GetOtherNodeData;
}
}
#endregion
}