BDU/ATS/Converters/ParameterToGotoSettingStringConverter.cs

120 lines
4.8 KiB
C#

using ATS.Windows;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
namespace ATS.Converters
{
internal class ParameterToGotoSettingStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Guid stepID && stepID == MainWindow.Instance.SelectedStep!.ID)
{
if (MainWindow.Instance.SelectedStep == null)
{
return "";
}
if (MainWindow.Instance.SelectedStep!.OKGotoStepID == null && MainWindow.Instance.SelectedStep!.NGGotoStepID == null)
{
return "0/0";
}
else
{
string gotoString = "";
if (MainWindow.Instance.SelectedStep!.OKGotoStepID != null)
{
var OKGotoStep = MainWindow.Instance.Program.StepCollection.FirstOrDefault(x => x.ID == MainWindow.Instance.SelectedStep!.OKGotoStepID);
if (OKGotoStep != null)
{
gotoString = OKGotoStep.Index.ToString() + "/";
}
else
{
gotoString = "0/";
}
}
else
{
gotoString = "0/";
}
if (MainWindow.Instance.SelectedStep!.NGGotoStepID != null)
{
var NGGotoStep = MainWindow.Instance.Program.StepCollection.FirstOrDefault(x => x.ID == MainWindow.Instance.SelectedStep!.NGGotoStepID);
if (NGGotoStep != null)
{
gotoString += NGGotoStep.Index.ToString();
}
else
{
gotoString += "0";
}
}
else
{
gotoString += "0";
}
return gotoString;
}
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string gotoSettingstring)
{
gotoSettingstring = gotoSettingstring.Replace(" ", "").Replace("/n", "").Replace("/r", "");
if (gotoSettingstring == "0/0")
{
MainWindow.Instance.SelectedStep!.OKGotoStepID = null;
MainWindow.Instance.SelectedStep!.NGGotoStepID = null;
}
else
{
try
{
var list = gotoSettingstring.Split("/");
var okindex = System.Convert.ToInt32(list[0]);
var ngindex = System.Convert.ToInt32(list[1]);
if (okindex == 0)
{
MainWindow.Instance.SelectedStep!.OKGotoStepID = null;
}
else
{
if (okindex > MainWindow.Instance.Program.StepCollection.Count)
{
throw new Exception("步骤序号超出最大值");
}
MainWindow.Instance.SelectedStep!.OKGotoStepID = MainWindow.Instance.Program.StepCollection.FirstOrDefault(x => x.Index == okindex)?.ID;
}
if (ngindex == 0)
{
MainWindow.Instance.SelectedStep!.NGGotoStepID = null;
}
else
{
if (ngindex > MainWindow.Instance.Program.StepCollection.Count)
{
throw new Exception("步骤序号超出最大值");
}
MainWindow.Instance.SelectedStep!.NGGotoStepID = MainWindow.Instance.Program.StepCollection.FirstOrDefault(x => x.Index == ngindex)?.ID;
}
}
catch (Exception ex)
{
MessageBox.Show($"跳转表达式错误:{ex.Message}");
}
}
}
return MainWindow.Instance.SelectedStep!.ID;
}
}
}