Sic.Framework-Nanjing-Baishi/MECF.Framework.UI.Client/RecipeEditorLib/RecipeModel/Params/FlowModeParam.cs

161 lines
5.1 KiB
C#
Raw Normal View History

2023-04-13 11:51:03 +08:00
using System;
using System.Linq;
using System.Windows;
namespace MECF.Framework.UI.Client.RecipeEditorLib.RecipeModel.Params
2023-04-13 11:51:03 +08:00
{
public class FlowModeParam : ComboxParam
{
#region Variables
public enum FlowModeEnum
{
Purge,
Vent,
Run
}
#endregion
#region Constructors
public FlowModeParam()
{
}
public FlowModeParam(string initValue) : base(initValue)
{
}
#endregion
#region Properties
public override string Value
{
get => _value;
set
{
var isSwitchToVent = false;
if (string.Equals(value, FlowModeEnum.Purge.ToString(), StringComparison.OrdinalIgnoreCase))
{
if (Previous is FlowModeParam pp)
{
if (string.Equals(pp.Value, FlowModeEnum.Run.ToString(), StringComparison.OrdinalIgnoreCase))
{
isSwitchToVent = true;
}
}
if (Next is FlowModeParam np)
{
if (string.Equals(np.Value, FlowModeEnum.Run.ToString(), StringComparison.OrdinalIgnoreCase))
{
isSwitchToVent = true;
}
}
}
else if (string.Equals(value, FlowModeEnum.Run.ToString(), StringComparison.OrdinalIgnoreCase))
{
if (Previous is FlowModeParam pp)
{
if (string.Equals(pp.Value, FlowModeEnum.Purge.ToString(), StringComparison.OrdinalIgnoreCase))
{
isSwitchToVent = true;
}
}
if (Next is FlowModeParam np)
{
if (string.Equals(np.Value, FlowModeEnum.Purge.ToString(), StringComparison.OrdinalIgnoreCase))
{
isSwitchToVent = true;
}
}
}
if (isSwitchToVent)
MessageBox.Show("Flow mode cannot be switched directly between 'Purge' and 'Run'.", "Error",
MessageBoxButton.OK, MessageBoxImage.Error);
_value = isSwitchToVent ? FlowModeEnum.Vent.ToString() : value;
NotifyOfPropertyChange(nameof(Value));
Feedback?.Invoke(this);
_isSaved = _value.Equals(_valueSnapshot);
NotifyOfPropertyChange(nameof(IsSaved));
}
}
#endregion
#region Methods
private void InnerValidate()
{
// 判断Flow Mode是否直接在Purge和Run之间切换。
var sourceKeywords = Enum.GetNames(typeof(FlowModeEnum)).Select(x => x.ToLower());
var currentStepOption = Value.ToLower();
var flowModeValid = true;
if (Previous != null)
{
var previousStepOption = ((ComboxParam)Previous).Value.ToLower();
if ((previousStepOption == FlowModeEnum.Purge.ToString().ToLower()
&& currentStepOption == FlowModeEnum.Run.ToString().ToLower())
||
(previousStepOption == FlowModeEnum.Run.ToString().ToLower()
&& currentStepOption == FlowModeEnum.Purge.ToString().ToLower()))
{
flowModeValid = false;
}
}
if (Next != null)
{
var nextStepOption = ((ComboxParam)Next).Value.ToLower();
if ((nextStepOption == FlowModeEnum.Purge.ToString().ToLower()
&& currentStepOption == FlowModeEnum.Run.ToString().ToLower())
||
(nextStepOption == FlowModeEnum.Run.ToString().ToLower()
&& currentStepOption == FlowModeEnum.Purge.ToString().ToLower()))
{
flowModeValid = false;
}
}
IsValidated = flowModeValid;
ValidationError = !flowModeValid
? "Flow mode cannot be switched directly between 'Purge' and 'Run'"
: null;
}
public override void Validate()
{
var linkedList = Flatten();
foreach (var param in linkedList)
{
if(param is FlowModeParam p)
p.InnerValidate();
}
//TODO 如果当前参数是TMA或TCS当设备未安装流量模式必须为Purge
//Issue TCS没有对应的系统参数TMA要区分PM腔但Recipe不分PM腔此处不好判断
if (Name == RecipeControlNames.TMA_FLOW_MODE)
{
}
if (Name == RecipeControlNames.TCS_FLOW_MODE)
{
}
2023-04-13 11:51:03 +08:00
}
#endregion
}
}