using OpenSEMI.ClientBase; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using FurnaceUI.Models; using MECF.Framework.Common.OperationCenter; using MECF.Framework.UI.Client.CenterViews.Editors.Recipe; using Caliburn.Micro; using System.Collections.ObjectModel; using Caliburn.Micro.Core; using Aitex.Core.Util; using FurnaceUI.Views.Editors; namespace FurnaceUI.Views.Operations { public class PMCommandViewModel : FurnaceUIViewModelBase { public bool IsEnabledAction { get; set; } [Subscription("PM1.IsExecuteAbortRecipe")] public bool PM1IsExecuteAbortRecipe { get; set; } [Subscription("PM1.AbortRecipeName")] public string PM1AbortRecipeName { get; set; } [Subscription("PM1.MainRecipeName")] public string PM1MainRecipeName { get; set; } [Subscription("PM1.RecipeHold")] public bool PM1IsRecipeHold { get; set; } public bool IsHoldButtonEnable => !PM1IsRecipeHold; public PMCommandViewModel() { } public void ClickCmd(string cmd) { switch (cmd) { case "OK": ((Window)GetView()).DialogResult = true; break; case "Cancel": ((Window)GetView()).DialogResult = false; break; default: break; } } public void Skip() { if (!DialogBox.Confirm("Are you sure to skip current step?")) return; InvokeClient.Instance.Service.DoOperation($"PM1.RecipeSkipStep", ""); } public void Jump() { if (!DialogBox.Confirm("Are you sure to jump current step?")) return; var recipes = new RecipeDataBase(); //if (PM1IsExecuteAbortRecipe) //{ // recipes.PrefixPath = "Furnace\\Abort"; // recipes.Name = PM1AbortRecipeName; //} //else { recipes.PrefixPath = "Furnace\\Process"; recipes.Name = PM1MainRecipeName; } RecipeProvider _recipeProvider = new RecipeProvider(); recipes.Clear(); var recipeContent = _recipeProvider.LoadRecipe(recipes.PrefixPath, recipes.Name); if (string.IsNullOrEmpty(recipeContent)) { MessageBox.Show($"{recipes.PrefixPath}\\{recipes.Name} is empty, please confirm the file is valid."); return; } // recipes.RecipeChamberType = "OriginChamber"; recipes.InitData(recipes.PrefixPath, recipes.Name, recipeContent, "PM1"); var windowManager = IoC.Get(); RecipeLoopSetViewModel recipeLoopSetViewModel = new RecipeLoopSetViewModel(); recipeLoopSetViewModel.StepNames = new ObservableCollection(recipes.Steps.OrderBy(x => x.StepNo).Select(x => new ShowStep() { StepNo = x.StepNo, StepName = x.Name }).ToList()); if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeLoopSetViewModel, null, "Jump")) { InvokeClient.Instance.Service.DoOperation($"PM1.RecipeJumpStep", recipeLoopSetViewModel.SelectedIndex, recipeLoopSetViewModel.SelectedText.Replace("]","").Replace("[","")); } } public void Hold() { if (!DialogBox.Confirm("Are you sure to hold current recipe?")) return; InvokeClient.Instance.Service.DoOperation($"PM1.RecipePause", ""); } public void Release() { if (!DialogBox.Confirm("Are you sure to release current recipe?")) return; InvokeClient.Instance.Service.DoOperation($"PM1.RecipeContinue", ""); } public void EmergencyAbort() { if (!DialogBox.Confirm("Are you sure to execute Abort?")) return; InvokeClient.Instance.Service.DoOperation("PM1.RecipeAbort"); } } }