161 lines
5.1 KiB
C#
161 lines
5.1 KiB
C#
using System;
|
||
using System.Linq;
|
||
using System.Windows;
|
||
|
||
namespace MECF.Framework.UI.Client.RecipeEditorLib.RecipeModel.Params
|
||
{
|
||
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;
|
||
OnPropertyChanged();
|
||
|
||
ColumnPermChangedCallback?.Invoke(this);
|
||
|
||
_isSaved = _value.Equals(_valueSnapshot);
|
||
OnPropertyChanged(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;
|
||
}
|
||
}
|
||
|
||
IsValid = 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)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
}
|
||
}
|