123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459 |
- using Caliburn.Micro;
- using Caliburn.Micro.Core;
- using FurnaceUI.Common;
- using FurnaceUI.Models;
- using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
- using OpenSEMI.ClientBase;
- using RecipeEditorLib.RecipeModel.Params;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Windows;
- using System.Windows.Controls;
- namespace FurnaceUI.Views.Editors
- {
- public class RecipeCommandViewModel : FurnaceUIViewModelBase
- {
- public bool NoneBtnVisibility { get; set; } = true;
- public bool ResetBtnVisibility { get; set; } = true;
- public bool JumpStepBtnVisibility { get; set; } = true;
- public bool LoopStepBtnVisibility { get; set; } = true;
- public bool EndBtnVisibility { get; set; } = true;
- public bool HoldBtnVisibility { get; set; } = true;
- public bool BuzzerBtnVisibility { get; set; } = true;
- public bool CallSubRecipeBtnVisibility { get; set; } = true;
- public bool LeakCheck1BtnVisibility { get; set; } = true;
- public bool LeakCheck2BtnVisibility { get; set; } = true;
- public bool LeakCheck3BtnVisibility { get; set; } = true;
- private string _JumpStepText;
- public string JumpStepText
- {
- get => _JumpStepText;
- set
- {
- _JumpStepText = value;
- NotifyOfPropertyChange(nameof(JumpStepText));
- }
- }
- private bool _JumpStepTextVisibility;
- public bool JumpStepTextVisibility
- {
- get => _JumpStepTextVisibility;
- set
- {
- _JumpStepTextVisibility = value;
- NotifyOfPropertyChange(nameof(JumpStepTextVisibility));
- }
- }
- public Step SelectedRecipeStep { get; set; }
- public RecipeDataBase RecipeData { get; set; }
- public ObservableCollection<ShowStep> LoopStepNames { get; set; }
- public ObservableCollection<ShowStep> JumpStepNames { get; set; }
- private RecipeCommandView _view;
- private string selectRecipeCommand;
- public string SelectRecipeCommand
- {
- get { return selectRecipeCommand; }
- set { selectRecipeCommand = value; this.NotifyOfPropertyChange(nameof(SelectRecipeCommand)); }
- }
- public bool IsEnable => CGlobal.RecipeProcessEditViewEnable;//是否是View模式
- private Visibility _rdoSubRecipeVisibility = Visibility.Visible;
- public Visibility RdoSubRecipeVisibility
- {
- get => _rdoSubRecipeVisibility;
- set
- {
- _rdoSubRecipeVisibility = value;
- NotifyOfPropertyChange(nameof(RdoSubRecipeVisibility));
- }
- }
- private Visibility _rdoLoopVisibility = Visibility.Hidden;
- public Visibility RdoLoopVisibility
- {
- get => _rdoLoopVisibility;
- set
- {
- _rdoLoopVisibility = value;
- NotifyOfPropertyChange(nameof(RdoLoopVisibility));
- }
- }
- private string _SubRecipeLoopCount;
- public string SubRecipeLoopCount
- {
- get => _SubRecipeLoopCount;
- set
- {
- _SubRecipeLoopCount = value;
- NotifyOfPropertyChange(nameof(SubRecipeLoopCount));
- }
- }
- private string _SubRecipeTableIndex;
- public string SubRecipeTableIndex
- {
- get => _SubRecipeTableIndex;
- set
- {
- _SubRecipeTableIndex = value;
- NotifyOfPropertyChange(nameof(SubRecipeTableIndex));
- }
- }
- private bool _IsSubRecipePage;
- public bool IsSubRecipePage
- {
- get { return _IsSubRecipePage; }
- set { _IsSubRecipePage = value; this.NotifyOfPropertyChange(nameof(IsSubRecipePage)); }
- }
- private string _loopStepStr = "";
- public string LoopStepStr
- {
- get => _loopStepStr;
- set
- {
- _loopStepStr = value;
- NotifyOfPropertyChange(nameof(LoopStepStr));
- }
- }
- private int _loopCount = 1;
- public int LoopCount
- {
- get => _loopCount;
- set
- {
- _loopCount = value;
- NotifyOfPropertyChange(nameof(LoopCount));
- }
- }
- protected override void OnInitialize()
- {
- base.OnInitialize();
- InitControl();
- SetBtnVisibility();
- SetJumpStepText();
- SetSubRecipeReview();
- }
- /// <summary>
- /// 初始化按钮 是否被选中
- /// </summary>
- private void InitControl()
- {
- if (string.IsNullOrEmpty(SelectRecipeCommand))
- return;
- _view = ((GetView() as Window).Content) as RecipeCommandView;
- string key = SelectRecipeCommand.Split(':')[0];
- Dictionary<string, string> dicNames = new Dictionary<string, string>() {
- { "CallSubRecipe","CallSubRecipe"},
- { "Jump","JumpStep"},
- };
- string nameKey = dicNames.ContainsKey(key) ? dicNames[key] : SelectRecipeCommand;
- if (SelectRecipeCommand.Contains("LOOP"))
- {
- nameKey = "LoopStep";
- LoopStepAnalyse(SelectRecipeCommand);
- RdoLoopVisibility = Visibility.Visible;
- }
- if (SelectRecipeCommand.StartsWith("CALL"))
- {
- nameKey = "CallSubRecipe";
- }
- var control = _view.FindName(nameKey);
- if (control is null)
- return;
- RadioButton radioButton = control as RadioButton;
- radioButton.IsChecked = true;
- //SetCommand(radioButton);
- }
- private void LoopStepAnalyse(string value, bool noChangedCount = true)
- {
- if (value.Contains("[") && value.Contains("]"))
- {
- if (value.IndexOf('[') < value.IndexOf(']') && noChangedCount)
- {
- string countStr = new string(value.Skip(value.IndexOf('[') + 1).Take(value.IndexOf(']') - value.IndexOf('[') - 1).ToArray());
- int tempCount = 0;
- int.TryParse(countStr, out tempCount);
- LoopCount = tempCount;
- }
- if (value.LastIndexOf('[') < value.LastIndexOf(']'))
- {
- LoopStepStr = new string(value.Skip(value.LastIndexOf('[') + 1).Take(value.LastIndexOf(']') - value.LastIndexOf('[') - 1).ToArray());
- }
- }
- }
- public void ShowRecipeLoopSetView()
- {
- var windowManager = IoC.Get<IWindowManager>();
- RecipeLoopSetViewModel recipeLoopSetViewModel = new RecipeLoopSetViewModel();
- recipeLoopSetViewModel.StepNames = JumpStepNames;
- if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeLoopSetViewModel, null, "Jump"))
- {
- SelectRecipeCommand = "Jump:" + recipeLoopSetViewModel.SelectedText;
- JumpStepText = recipeLoopSetViewModel.SelectedText.Replace("[", string.Empty).Replace("]", string.Empty);
- JumpStepTextVisibility = true;
- }
- else
- {
- ((Window)GetView()).DialogResult = false;
- return;
- }
- }
- private void SetJumpStepText()
- {
- if (string.IsNullOrEmpty(SelectRecipeCommand) || !SelectRecipeCommand.Contains("Jump:"))
- {
- JumpStepText = string.Empty;
- JumpStepTextVisibility = false;
- }
- else
- {
- JumpStepText = SelectRecipeCommand.Replace("Jump:", string.Empty).Replace("[", string.Empty).Replace("]", string.Empty);
- JumpStepTextVisibility = true;
- }
- }
- private void SetSubRecipeReview()
- {
- if (string.IsNullOrEmpty(SelectRecipeCommand) || !SelectRecipeCommand.Contains("CALL"))
- {
- SubRecipeTableIndex = string.Empty;
- }
- else
- {
- var callSubRecipeText = SelectRecipeCommand.Replace("CALL", string.Empty).Replace("[", string.Empty).Replace("]", string.Empty);
- if (string.IsNullOrEmpty(callSubRecipeText))
- {
- return;
- }
- var callSubRecipeStrs = callSubRecipeText.Split('*');
- SubRecipeTableIndex = callSubRecipeStrs.LastOrDefault();
- SubRecipeLoopCount = callSubRecipeStrs.FirstOrDefault();
- IsSubRecipePage = true;
- }
- }
- public void SetCommand(RadioButton radioButton)
- {
- IsSubRecipePage = false;
- var windowManager = IoC.Get<IWindowManager>();
- string commandContent = radioButton.Content as string;
- switch (commandContent)
- {
- case "Call Sub Recipe":
- JumpStepTextVisibility = false;
- var strs = SelectRecipeCommand.Split(':');
- if (strs.Length > 1 && SelectRecipeCommand.Contains("CALL"))
- {
- var callSubRecipeText = SelectRecipeCommand.Replace("CALL", string.Empty).Replace("[", string.Empty).Replace("]", string.Empty);
- if (string.IsNullOrEmpty(callSubRecipeText))
- {
- return;
- }
- var callSubRecipeStrs = callSubRecipeText.Split('*');
- SubRecipeTableIndex = callSubRecipeStrs.LastOrDefault();
- SubRecipeLoopCount = callSubRecipeStrs.FirstOrDefault();
- }
- IsSubRecipePage = true;
- break;
- case "Jump Step":
- RecipeLoopSetViewModel recipeLoopSetViewModel = new RecipeLoopSetViewModel();
- recipeLoopSetViewModel.StepNames = JumpStepNames;
- if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeLoopSetViewModel, null, "Jump"))
- {
- SelectRecipeCommand = "Jump:" + recipeLoopSetViewModel.SelectedText;
- JumpStepText = recipeLoopSetViewModel.SelectedText.TrimStart('[').TrimEnd(']');
- JumpStepTextVisibility = true;
- }
- else
- {
- ((Window)GetView()).DialogResult = false;
- return;
- }
- break;
- case "Loop Step":
- recipeLoopSetViewModel = new RecipeLoopSetViewModel();
- recipeLoopSetViewModel.StepNames = LoopStepNames;
- recipeLoopSetViewModel.LoopCountVisibility = Visibility.Hidden;
- if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeLoopSetViewModel, null, "Loop"))
- {
- SelectRecipeCommand = "LOOP" + recipeLoopSetViewModel.SelectedText;
- LoopStepAnalyse(SelectRecipeCommand, false);
- }
- else
- {
- ((Window)GetView()).DialogResult = false;
- return;
- }
- break;
- default:
- SelectRecipeCommand = commandContent;
- break;
- }
- if (SelectRecipeCommand.Contains("CallSubRecipe"))
- {
- RdoSubRecipeVisibility = Visibility.Visible;
- RdoLoopVisibility = Visibility.Hidden;
- }
- else if (SelectRecipeCommand.Contains("LOOP"))
- {
- RdoSubRecipeVisibility = Visibility.Hidden;
- RdoLoopVisibility = Visibility.Visible;
- }
- else
- {
- RdoSubRecipeVisibility = Visibility.Visible;
- RdoLoopVisibility = Visibility.Hidden;
- }
- }
- /// <summary>
- /// 根据Recipe类型设置Command 弹窗的按钮展示
- /// </summary>
- private void SetBtnVisibility()
- {
- if (null == RecipeData || string.IsNullOrEmpty(RecipeData.PrefixPath))
- {
- return;
- }
- var recipeType = RecipeData.PrefixPath.Split('\\').LastOrDefault();
- recipeType = recipeType.ToLower();
- if ("process".Equals(recipeType) && (SelectedRecipeStep.StepNo.Equals(0)|| SelectedRecipeStep.StepNo.Equals(RecipeData.Steps.Count-1)))
- {
- ResetBtnVisibility = false;
- JumpStepBtnVisibility = false;
- LoopStepBtnVisibility = false;
- EndBtnVisibility = false;
- HoldBtnVisibility = false;
- BuzzerBtnVisibility = false;
- LeakCheck1BtnVisibility = false;
- LeakCheck2BtnVisibility = false;
- LeakCheck3BtnVisibility = false;
- }
- if ("sub".Equals(recipeType))
- {
- CallSubRecipeBtnVisibility = false;
- if (SelectedRecipeStep.StepNo.Equals(1))
- {
- LoopStepBtnVisibility = false;
- }
- else
- {
- LoopStepBtnVisibility = true;
- }
- }
- if ("alarm".Equals(recipeType))
- {
- CallSubRecipeBtnVisibility = false;
- LeakCheck1BtnVisibility = false;
- LeakCheck2BtnVisibility = false;
- LeakCheck3BtnVisibility = false;
- if (SelectedRecipeStep.StepNo.Equals(1))
- {
- LoopStepBtnVisibility = false;
- }
- else
- {
- LoopStepBtnVisibility = true;
- }
- }
- if ("abort".Equals(recipeType))
- {
- ResetBtnVisibility = false;
- EndBtnVisibility = false;
- BuzzerBtnVisibility = false;
- CallSubRecipeBtnVisibility = false;
- if (SelectedRecipeStep.StepNo.Equals(1))
- {
- LoopStepBtnVisibility = false;
- }
- else
- {
- LoopStepBtnVisibility = true;
- }
- }
- if ("idle".Equals(recipeType))
- {
- ResetBtnVisibility = false;
- EndBtnVisibility = false;
- HoldBtnVisibility = false;
- BuzzerBtnVisibility = false;
- CallSubRecipeBtnVisibility = false;
- LeakCheck1BtnVisibility = false;
- LeakCheck2BtnVisibility = false;
- LeakCheck3BtnVisibility = false;
- if (SelectedRecipeStep.StepNo.Equals(1))
- {
- LoopStepBtnVisibility = false;
- }
- else
- {
- LoopStepBtnVisibility = true;
- }
- }
- }
- public void LoopStepSelectChick(Button btn)
- {
- var windowManager = IoC.Get<IWindowManager>();
- RecipeLoopSetViewModel recipeLoopSetViewModel = new RecipeLoopSetViewModel();
- recipeLoopSetViewModel.StepNames = LoopStepNames;
- recipeLoopSetViewModel.LoopCountVisibility = Visibility.Hidden;
- if ((bool)(windowManager as WindowManager)?.ShowDialogWithTitle(recipeLoopSetViewModel, null, "Loop"))
- {
- SelectRecipeCommand = "LOOP" + recipeLoopSetViewModel.SelectedText;
- LoopStepAnalyse(SelectRecipeCommand, false);
- }
- else
- {
- return;
- }
- }
- public void SelectTable()
- {
- Combination combination = new Combination(RecipeData.ConfigItems);
-
- if (string.IsNullOrEmpty(combination.SubRecipePath))
- {
- DialogBox.ShowError("Please select sub recipe first!");
- return;
- }
- var retRecipe = RecipeTableSelect.ShowDialog($"Furnace\\sub", combination.SubRecipePath, false);
- if (!string.IsNullOrEmpty(retRecipe))
- {
- SubRecipeTableIndex = retRecipe;
- }
- }
- public void RecipeCommandClose()
- {
- if (IsSubRecipePage && SubRecipeLoopCount != null && SubRecipeTableIndex != null)
- SelectRecipeCommand = $"CALL[{SubRecipeLoopCount}]*[{SubRecipeTableIndex}]";
- if (_view != null && (bool)_view.LoopStep.IsChecked)
- {
- SelectRecipeCommand = $"LOOP[{LoopCount}]*[{LoopStepStr}]";
- }
- ((Window)GetView()).DialogResult = true;
- }
- }
- }
|