MoS2/Framework/MECF.Framework.UI.Client/RecipeEditorLib/RecipeModel/Params/FlowModeParam.cs

155 lines
4.7 KiB
C#
Raw Normal View History

2026-06-15 10:56:30 +08:00
using MECF.Framework.UI.Client.RecipeEditorLib.DGExtension.CustomColumn;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
namespace MECF.Framework.UI.Client.RecipeEditorLib.RecipeModel.Params
{
public class FlowModeParam : ComboxParam
{
#region Variables
public enum FlowModeEnum
{
Vent,
Purge,
Run
}
#endregion
#region Constructors
public FlowModeParam(IEnumerable<ComboxColumn.Option> options, string controlName, string initValue, string defaultValue) :
base(options, controlName, initValue, defaultValue)
{
}
#endregion
#region Properties
public override ComboxColumn.Option Value
{
get => _value;
set
{
var isSwitchToVent = false;
if (value.Equals(FlowModeEnum.Purge))
{
if (Previous is FlowModeParam pp)
{
if (pp.Value.Equals(FlowModeEnum.Run))
{
isSwitchToVent = true;
}
}
if (Next is FlowModeParam np)
{
if (np.Value.Equals(FlowModeEnum.Run))
{
isSwitchToVent = true;
}
}
}
else if (value.Equals(FlowModeEnum.Run))
{
if (Previous is FlowModeParam pp)
{
if (pp.Value.Equals(FlowModeEnum.Purge))
{
isSwitchToVent = true;
}
}
if (Next is FlowModeParam np)
{
if (np.Value.Equals(FlowModeEnum.Purge))
{
isSwitchToVent = true;
}
}
}
if (isSwitchToVent)
MessageBox.Show("Flow mode cannot be switched directly between 'Purge' and 'Run'.", "Error",
MessageBoxButton.OK, MessageBoxImage.Error);
_value = isSwitchToVent
? Options.FirstOrDefault(x => x.Equals(FlowModeEnum.Vent)) ?? Options.First()
: value;
ColumnPermChangedCallback?.Invoke(this);
_isSaved = _value.Equals(_valueSnapshot);
OnPropertyChanged();
OnPropertyChanged(nameof(IsSaved));
}
}
#endregion
#region Methods
private void InnerValidate()
{
// 判断Flow Mode是否直接在Purge和Run之间切换。
var currentStepOption = Value;
var flowModeValid = true;
if (Previous != null)
{
var previousStepOption = ((ComboxParam)Previous).Value;
if ((previousStepOption.Equals(FlowModeEnum.Purge) && currentStepOption.Equals(FlowModeEnum.Run))
|| (previousStepOption.Equals(FlowModeEnum.Run) && currentStepOption.Equals(FlowModeEnum.Purge)))
{
flowModeValid = false;
}
}
if (Next != null)
{
var nextStepOption = ((ComboxParam)Next).Value;
if ((nextStepOption.Equals(FlowModeEnum.Purge) && currentStepOption.Equals(FlowModeEnum.Run))
|| (nextStepOption.Equals(FlowModeEnum.Run) && currentStepOption.Equals(FlowModeEnum.Purge)))
{
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 (ControlName == RecipeControlNames.TMA_FLOW_MODE)
{
}
if (ControlName == RecipeControlNames.TCS_FLOW_MODE)
{
}
}
#endregion
}
}