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

161 lines
5.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
}