155 lines
4.7 KiB
C#
155 lines
4.7 KiB
C#
|
|
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
|
|||
|
|
}
|
|||
|
|
}
|