TempProfileEditViewModel.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738
  1. using Aitex.Core.RT.SCCore;
  2. using Caliburn.Micro;
  3. using Caliburn.Micro.Core;
  4. using MECF.Framework.Common.DataCenter;
  5. using MECF.Framework.Common.OperationCenter;
  6. using MECF.Framework.Common.RecipeCenter;
  7. using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;
  8. using MECF.Framework.UI.Client.CenterViews.Dialogs;
  9. using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
  10. using MECF.Framework.UI.Client.ClientBase;
  11. using OpenSEMI.ClientBase;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Collections.ObjectModel;
  15. using System.IO;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Windows;
  19. //using System.Windows.Forms;
  20. using System.Windows.Controls;
  21. using FurnaceUI.Client;
  22. using FurnaceUI.Models;
  23. using FurnaceUI.Views.Editors;
  24. using Aitex.Core.Util;
  25. using Aitex.Core.Common.DeviceData;
  26. using MECF.Framework.UI.Client.CenterViews.Parameter;
  27. using MECF.Framework.Common.ParameterCenter;
  28. using RecipeEditorLib.RecipeModel.Params;
  29. namespace FurnaceUI.Views.Parameter
  30. {
  31. public class TempProfileEditViewModel : FurnaceUIViewModelBase
  32. {
  33. private UIElement _parent;
  34. public void SetParent(UIElement parent)
  35. {
  36. _parent = parent;
  37. }
  38. public bool Table1CheckinRecipe { get; set; } = false;
  39. public bool Table2CheckinRecipe { get; set; } = false;
  40. public bool Table3CheckinRecipe { get; set; } = false;
  41. private readonly ParameterProvider _parameterProvider = new ParameterProvider();
  42. private Dictionary<string, ObservableCollection<ParameterTemplateColumnBase>> ParameterTemplate;
  43. public TempProfileParameterData CurrentParameter { get; set; } = new TempProfileParameterData();
  44. private ParameterFormatBuilder _columnBuilder = new ParameterFormatBuilder();
  45. private TempProfileTable _selectedParameterStep;
  46. public TempProfileTable SelectedParameterStep
  47. {
  48. get => _selectedParameterStep;
  49. set
  50. {
  51. if (value != null)
  52. {
  53. _selectedParameterStep = value;
  54. NotifyOfPropertyChange("SelectedParameterStep");
  55. }
  56. else
  57. {
  58. _selectedParameterStep = null;
  59. NotifyOfPropertyChange("SelectedParameterStep");
  60. }
  61. }
  62. }
  63. private int _IndexNoDefault = -1;
  64. public int IndexNoDefault
  65. {
  66. get { return _IndexNoDefault; }
  67. set
  68. {
  69. _IndexNoDefault = value;
  70. NotifyOfPropertyChange("IndexNoDefault");
  71. }
  72. }
  73. private bool _appendStepItemIsEnabled;
  74. public bool AppendStepItemIsEnabled
  75. {
  76. get => _appendStepItemIsEnabled;
  77. set
  78. {
  79. _appendStepItemIsEnabled = value;
  80. NotifyOfPropertyChange("AppendStepItemIsEnabled");
  81. }
  82. }
  83. private bool _overWriteCopyIsEnabled;
  84. public bool OverWriteCopyIsEnabled
  85. {
  86. get => _overWriteCopyIsEnabled;
  87. set
  88. {
  89. _overWriteCopyIsEnabled = value;
  90. NotifyOfPropertyChange("OverWriteCopyIsEnabled");
  91. }
  92. }
  93. private bool _insertCopyIsEnabled;
  94. public bool InsertCopyIsEnabled
  95. {
  96. get => _insertCopyIsEnabled;
  97. set
  98. {
  99. _insertCopyIsEnabled = value;
  100. NotifyOfPropertyChange("InsertCopyIsEnabled");
  101. }
  102. }
  103. private bool _prevStepOverwriteIsEnabled;
  104. public bool PrevStepOverwriteIsEnabled
  105. {
  106. get => _prevStepOverwriteIsEnabled;
  107. set
  108. {
  109. _prevStepOverwriteIsEnabled = value;
  110. NotifyOfPropertyChange("PrevStepOverwriteIsEnabled");
  111. }
  112. }
  113. private bool _prevStepInsertIsEnabled;
  114. public bool PrevStepInsertIsEnabled
  115. {
  116. get => _prevStepInsertIsEnabled;
  117. set
  118. {
  119. _prevStepInsertIsEnabled = value;
  120. NotifyOfPropertyChange("PrevStepInsertIsEnabled");
  121. }
  122. }
  123. private bool _prevStepItemIsEnabled;
  124. public bool PrevStepItemIsEnabled
  125. {
  126. get => _prevStepItemIsEnabled;
  127. set
  128. {
  129. _prevStepItemIsEnabled = value;
  130. NotifyOfPropertyChange("PrevStepItemIsEnabled");
  131. }
  132. }
  133. private bool _currStepDeleteIsEnabled;
  134. public bool CurrStepDeleteIsEnabled
  135. {
  136. get => _currStepDeleteIsEnabled;
  137. set
  138. {
  139. _currStepDeleteIsEnabled = value;
  140. NotifyOfPropertyChange("CurrStepDeleteIsEnabled");
  141. }
  142. }
  143. private bool _multStepsDeleteIsEnabled;
  144. public bool MultStepsDeleteIsEnabled
  145. {
  146. get => _multStepsDeleteIsEnabled;
  147. set
  148. {
  149. _multStepsDeleteIsEnabled = value;
  150. NotifyOfPropertyChange("MultStepsDeleteIsEnabled");
  151. }
  152. }
  153. private bool _settingButtonEnable;
  154. public bool SettingButtonEnable
  155. {
  156. get => _settingButtonEnable;
  157. set
  158. {
  159. _settingButtonEnable = value;
  160. NotifyOfPropertyChange("SettingButtonEnable");
  161. }
  162. }
  163. private string _eventSetting;
  164. public string EventSetting
  165. {
  166. get => _eventSetting;
  167. set
  168. {
  169. _eventSetting = value;
  170. NotifyOfPropertyChange("EventSetting");
  171. }
  172. }
  173. public bool IsEnable => CGlobal.ParameterEditViewEnable;//是否是View模式
  174. private bool _isEidtEnable = true;
  175. public bool IsEditEnabled
  176. {
  177. get => _isEidtEnable;
  178. set
  179. {
  180. _isEidtEnable = value;
  181. NotifyOfPropertyChange(nameof(IsEditEnabled));
  182. }
  183. }
  184. public string EditRecipeStepName { get; set; }
  185. private string _resultString;
  186. public string ResultString
  187. {
  188. get => _resultString;
  189. set
  190. {
  191. _resultString = value;
  192. NotifyOfPropertyChange(nameof(ResultString));
  193. }
  194. }
  195. private RecipeDataBase _CurrentRecipe;
  196. public RecipeDataBase CurrentRecipe
  197. {
  198. get { return _CurrentRecipe; }
  199. set { _CurrentRecipe = value; this.NotifyOfPropertyChange(nameof(CurrentRecipe)); }
  200. }
  201. public string FullFileName { get; set; }
  202. public void SetCmdIsEnabled()
  203. {
  204. if (CurrentParameter.Steps == null || CurrentParameter.Steps.Count == 0)
  205. {
  206. SelectedStepName = "";
  207. SelectedParameterStep = null;
  208. AppendStepItemIsEnabled = true;
  209. OverWriteCopyIsEnabled = false;
  210. InsertCopyIsEnabled = false;
  211. PrevStepOverwriteIsEnabled = false;
  212. PrevStepInsertIsEnabled = false;
  213. PrevStepItemIsEnabled = false;
  214. CurrStepDeleteIsEnabled = false;
  215. MultStepsDeleteIsEnabled = false;
  216. SettingButtonEnable = false;
  217. }
  218. }
  219. public int SelectedStepNo { get; set; }
  220. private string _selectedStepName;
  221. public string SelectedStepName
  222. {
  223. get
  224. {
  225. return _selectedStepName;
  226. }
  227. set
  228. {
  229. _selectedStepName = value;
  230. NotifyOfPropertyChange("SelectedStepName");
  231. }
  232. }
  233. private List<ConfigNode> _ConfigNodes = new List<ConfigNode>();
  234. public List<ConfigNode> ConfigNodes
  235. {
  236. get { return _ConfigNodes; }
  237. set { _ConfigNodes = value; NotifyOfPropertyChange("ConfigNodes"); }
  238. }
  239. private TempProfileTable profileTable1 = new TempProfileTable();
  240. public TempProfileTable ProfileTable1
  241. {
  242. get => profileTable1;
  243. set
  244. {
  245. profileTable1 = value;
  246. NotifyOfPropertyChange(nameof(ProfileTable1));
  247. }
  248. }
  249. private TempProfileTable profileTable2 = new TempProfileTable();
  250. public TempProfileTable ProfileTable2
  251. {
  252. get => profileTable2;
  253. set
  254. {
  255. profileTable2 = value;
  256. NotifyOfPropertyChange(nameof(ProfileTable2));
  257. }
  258. }
  259. private TempProfileTable profileTable3 = new TempProfileTable();
  260. public TempProfileTable ProfileTable3
  261. {
  262. get => profileTable3;
  263. set
  264. {
  265. profileTable3 = value;
  266. NotifyOfPropertyChange(nameof(ProfileTable3));
  267. }
  268. }
  269. public string ParameterType { get; set; }
  270. public void SetValue(object sender, string isFullKeyboard = "")
  271. {
  272. string value = ((TextBox)sender).Text;
  273. if (!string.IsNullOrEmpty(isFullKeyboard))
  274. {
  275. FullKeyboard fullKeyboard1 = new FullKeyboard("", value);
  276. if ((bool)fullKeyboard1.ShowDialog())
  277. {
  278. ((TextBox)sender).Text = fullKeyboard1.ValueString;
  279. }
  280. }
  281. else
  282. {
  283. NumberKeyboard fullKeyboard = new NumberKeyboard("", value);
  284. if ((bool)fullKeyboard.ShowDialog())
  285. {
  286. ((TextBox)sender).Text = fullKeyboard.ValueString;
  287. }
  288. }
  289. }
  290. public TempProfileEditViewModel()
  291. {
  292. _parameterProvider.GetParameterFormatXml($"Parameter\\TempProfile");
  293. ParameterTemplate = _parameterProvider.GetGroupParameterTemplate();
  294. _columnBuilder.Build($"Parameter\\TempProfile");
  295. CurrentParameter.PrefixPath = $"Parameter\\TempProfile";
  296. }
  297. public TempProfileEditViewModel(string strPrefixPath, string strRecipeName, string permission = "")
  298. {
  299. _parameterProvider.GetParameterFormatXml(strPrefixPath);
  300. ParameterTemplate = _parameterProvider.GetGroupParameterTemplate();
  301. _columnBuilder.Build(strPrefixPath);
  302. CurrentParameter.PrefixPath = strPrefixPath;
  303. CurrentParameter.Name = strRecipeName;
  304. CurrentParameter.Permission = permission;
  305. }
  306. protected override void OnViewLoaded(object view)
  307. {
  308. base.OnViewLoaded(view);
  309. }
  310. protected override void OnActivate()
  311. {
  312. base.OnActivate();
  313. }
  314. protected override void OnDeactivate(bool close)
  315. {
  316. base.OnDeactivate(close);
  317. InvokeClient.Instance.Service.DoOperation($"PM1.SetSensorPROCManualOK", "");
  318. }
  319. protected override void OnInitialize()
  320. {
  321. base.OnInitialize();
  322. // GetHeaderConfig();
  323. LoadData();
  324. LoadViewData();
  325. SetCmdIsEnabled();
  326. ProfileTable1.IsChecked = Table1CheckinRecipe;
  327. ProfileTable2.IsChecked = Table2CheckinRecipe;
  328. ProfileTable3.IsChecked = Table3CheckinRecipe;
  329. if (!ProfileTable1.IsChecked&& !ProfileTable2.IsChecked&& !ProfileTable3.IsChecked)
  330. {
  331. ProfileTable1.IsChecked = true;
  332. }
  333. }
  334. //private void LoadData()
  335. //{
  336. // if (!string.IsNullOrEmpty(CurrentParameter.Name))
  337. // {
  338. // var recipeContent = _parameterProvider.LoadParameter(CurrentParameter.PrefixPath, CurrentParameter.Name);
  339. // if (string.IsNullOrEmpty(recipeContent))
  340. // {
  341. // System.Windows.MessageBox.Show($"{CurrentParameter.PrefixPath}\\{CurrentParameter.Name} is empty, please confirm the file is valid.");
  342. // return;
  343. // }
  344. // CurrentParameter.TableNumber = _columnBuilder.TableNumber;
  345. // CurrentParameter.ChamberType = _columnBuilder.ChamberType;
  346. // CurrentParameter.InitData(CurrentParameter.PrefixPath, CurrentParameter.Name, recipeContent, "");
  347. // }
  348. //}
  349. private void LoadData()
  350. {
  351. if (CurrentRecipe != null)
  352. {
  353. CurrentParameter.PrefixPath = $"Parameter\\TempProfile";
  354. StringParam pressAPC = CurrentRecipe.ConfigItems.FirstOrDefault(x => x.Name == "Combination.ProfileCondition") as StringParam;
  355. if (pressAPC != null && !string.IsNullOrEmpty(pressAPC.Value))
  356. {
  357. CurrentParameter.Permission = "";
  358. CurrentParameter.Name = pressAPC.Value;
  359. }
  360. else
  361. {
  362. if (CurrentParameter.Steps != null && CurrentParameter.Steps.Count > 0)
  363. {
  364. foreach (var item in CurrentParameter.Steps)
  365. {
  366. var profileTable = (TempProfileTable)item;
  367. profileTable.PreheatTime = "0";
  368. profileTable.CheckTime = "0";
  369. DoubleParam param = new DoubleParam()
  370. {
  371. Name = "",
  372. Value = "0",
  373. DisplayName = "",
  374. Minimun = 0,
  375. Maximun = 0,
  376. Resolution = 0
  377. };
  378. profileTable.LimitU = param;
  379. profileTable.LimitCU = param;
  380. profileTable.LimitC = param;
  381. profileTable.LimitCL = param;
  382. profileTable.LimitL = param;
  383. profileTable.AlarmLimit = param;
  384. profileTable.TotalTime = "0";
  385. profileTable.PreheatTime = "0";
  386. profileTable.CheckTime = "0";
  387. }
  388. }
  389. CurrentParameter.Name = "";
  390. FullFileName = "";
  391. DialogBox.ShowDialog(DialogButton.Cancel, DialogType.INFO, "Please set the Combination default profile file!");
  392. return;
  393. }
  394. FullFileName = $"{CurrentParameter.PrefixPath}\\{CurrentParameter.Name}";
  395. }
  396. else
  397. {
  398. CurrentParameter.TableNumber = _columnBuilder.TableNumber;
  399. CurrentParameter.ChamberType = _columnBuilder.ChamberType;
  400. FullFileName = $"{CurrentParameter.PrefixPath}\\{CurrentParameter.Name}";
  401. }
  402. var recipeContent = _parameterProvider.LoadParameter(CurrentParameter.PrefixPath, CurrentParameter.Name);
  403. if (string.IsNullOrEmpty(recipeContent))
  404. {
  405. System.Windows.MessageBox.Show($"{CurrentParameter.PrefixPath}\\{CurrentParameter.Name} is empty, please confirm the file is valid.");
  406. return;
  407. }
  408. CurrentParameter.InitData(CurrentParameter.PrefixPath, CurrentParameter.Name, recipeContent, "");
  409. }
  410. private void LoadViewData()
  411. {
  412. if (CurrentParameter.Steps != null && CurrentParameter.Steps.Count > 2)
  413. {
  414. SelectedStepName = CurrentParameter.Steps[0].Name;
  415. SelectedStepNo = CurrentParameter.Steps[0].StepNo;
  416. ProfileTable1 = (TempProfileTable)CurrentParameter.Steps[0];
  417. ProfileTable2 = (TempProfileTable)CurrentParameter.Steps[1];
  418. ProfileTable3 = (TempProfileTable)CurrentParameter.Steps[2];
  419. }
  420. }
  421. public void SelectTable(object step)
  422. {
  423. if (step != null && step is TempProfileTable step1)
  424. {
  425. var SelectedStep = this.CurrentParameter.Steps.Where(x => x.StepNo == step1.StepNo).FirstOrDefault();
  426. SelectedStep.IsChecked = true;
  427. SelectedStepNo = step1.StepNo;
  428. string strName = step1.Name.Trim();
  429. SelectedStepName = strName;
  430. SelectedParameterStep = (TempProfileTable)SelectedStep;
  431. //SelectedParameterStep = new TempPIDTable(CurrentParameter, SelectedStepNo);
  432. }
  433. SetCmdIsEnabled();
  434. }
  435. public void StepEdit(string stepEditCmd)
  436. {
  437. var windowManager = IoC.Get<IWindowManager>();
  438. switch (stepEditCmd)
  439. {
  440. case "Append":
  441. CurrentParameter.Steps.Add(CurrentParameter.CreateStep());
  442. int TempSelectIndex = 0;
  443. IndexNoDefault = TempSelectIndex;
  444. SelectTable(CurrentParameter.Steps[TempSelectIndex]);
  445. break;
  446. case "InsertCopy":
  447. InsertCopyStep();
  448. break;
  449. case "OverWrite"://任何步骤的内容都可以覆盖到选定的步骤中
  450. OverWriteStep();
  451. break;
  452. case "PrevStepOverwrite"://用上一步的内容覆盖所选步骤
  453. PrevStepOverwriteStep();
  454. break;
  455. case "PrevStepInsert"://在选定步骤之前,插入带有前一步内容的新步骤。
  456. InsertPrevStep();
  457. break;
  458. case "PrevStepItem":
  459. break;
  460. case "MultStepsDelete":
  461. break;
  462. default:
  463. break;
  464. }
  465. }
  466. private void OverWriteStep()
  467. {
  468. var windowManager = IoC.Get<IWindowManager>();
  469. if (CurrentParameter == null) return;
  470. }
  471. private void PrevStepOverwriteStep()
  472. {
  473. int index = -1;
  474. index = SelectedParameterStep.StepNo;
  475. if (index > 1)
  476. {
  477. CurrentParameter.CloneStep(CurrentParameter.Steps.Where(x => x.StepNo == SelectedParameterStep.StepNo).FirstOrDefault(), CurrentParameter.Steps.Where(x => x.StepNo == SelectedParameterStep.StepNo - 1).FirstOrDefault());
  478. }
  479. }
  480. public void InsertPrevStep()
  481. {
  482. }
  483. public void InsertCopyStep()
  484. {
  485. var windowManager = IoC.Get<IWindowManager>();
  486. if (CurrentParameter == null) return;
  487. }
  488. //撤销修改
  489. public void RecipeIsChangeClick(object cmdName, object value)
  490. {
  491. var windowManager = IoC.Get<IWindowManager>();
  492. }
  493. public void TempSetClick(object sender)
  494. {
  495. string stSetValue = ShowNumberKeyboard(sender as Button, "");
  496. }
  497. public void RampSetClick(object sender)
  498. {
  499. string strSetRamp = ShowNumberKeyboard(sender as Button, "");
  500. }
  501. private string ShowNumberKeyboard(Control control, string defaultValue)
  502. {
  503. NumberKeyboard numberKeyboard = new NumberKeyboard("", defaultValue);
  504. var point = control.PointFromScreen(new Point(0, 0));
  505. double wx = SystemParameters.WorkArea.Width;
  506. double hy = SystemParameters.WorkArea.Height;
  507. if (-point.Y + control.ActualHeight + 5 + numberKeyboard.Height < hy)
  508. {
  509. numberKeyboard.Top = -point.Y + control.ActualHeight + 5;
  510. }
  511. else
  512. {
  513. numberKeyboard.Top = -point.Y - numberKeyboard.Height - 5;
  514. }
  515. if (-point.X + numberKeyboard.Width < wx)
  516. {
  517. numberKeyboard.Left = -point.X;
  518. }
  519. else
  520. {
  521. numberKeyboard.Left = -point.X - (numberKeyboard.Width - control.ActualWidth);
  522. }
  523. if ((bool)numberKeyboard.ShowDialog())
  524. return numberKeyboard.ValueString;
  525. else
  526. return "Cancel";
  527. }
  528. public void TempTextClick(string type, object sender)
  529. {
  530. var windowManager = IoC.Get<IWindowManager>();
  531. switch (type)
  532. {
  533. case "Mode":
  534. RecipeTempModeViewModel recipeTempModeViewModel = new RecipeTempModeViewModel();
  535. var rtn = (windowManager as WindowManager)?.ShowDialogWithTitle(recipeTempModeViewModel, null, "Temp Mode");
  536. break;
  537. case "Correct":
  538. TempOffsetTableViewModel tempOffsetTableViewModel = new TempOffsetTableViewModel();
  539. break;
  540. case "PID":
  541. TempOffsetTableViewModel tempOffsetTableViewModel1 = new TempOffsetTableViewModel();
  542. break;
  543. default:
  544. break;
  545. }
  546. }
  547. public void TempTextChanged(string type, object sender, object item)
  548. {
  549. if (!string.IsNullOrEmpty(type) && item != null && sender != null)
  550. {
  551. TempSetData tempData = (TempSetData)item;
  552. string value = ((TextBox)sender).Text;
  553. int stepNo = SelectedParameterStep.StepNo;
  554. var step = CurrentParameter.Steps.Where(x => x.StepNo == stepNo).FirstOrDefault();
  555. }
  556. }
  557. public void ParameterEdit(object cmdName, object value)
  558. {
  559. var windowManager = IoC.Get<IWindowManager>();
  560. }
  561. public void ParameterSave()
  562. {
  563. var SelectedStep = this.CurrentParameter.Steps.Where(x => x.IsChecked).FirstOrDefault();
  564. //RecipePermissionSelectViewModel dialog = new RecipePermissionSelectViewModel("Save recipe and permission", CurrentRecipe.RecipePermission);
  565. //WindowManager wm = new WindowManager();
  566. //bool? dialogReturn = wm.ShowDialog(dialog);
  567. //if (!dialogReturn.HasValue || !dialogReturn.Value)
  568. // return;
  569. if (IsEditEnabled)
  570. {
  571. List<string> names = new List<string>();
  572. string filmFormula = string.Empty;
  573. //ParameterTable step = CurrentParameter.Steps.Where(x => x.StepNo == SelectedParameterStep.StepNo).FirstOrDefault();
  574. this.CurrentParameter.Revisor = BaseApp.Instance.UserContext.LoginName;
  575. this.CurrentParameter.ReviseTime = DateTime.Now;
  576. this.CurrentParameter.Level = this.LevelDisplay;
  577. //this.CurrentRecipe.RecipePermission = dialog.RecipePermission;
  578. var result = _parameterProvider.SaveParameter(CurrentParameter.PrefixPath, CurrentParameter.Name, CurrentParameter.GetXmlString());
  579. if (result)
  580. ((Window)GetView()).Close();
  581. }
  582. else
  583. {
  584. ResultString = $"{FullFileName},{SelectedStep.StepNo},{SelectedStep.Name}";
  585. ((Window)GetView()).DialogResult = true;
  586. }
  587. }
  588. public void ParameterDownload()
  589. {
  590. var sss = "";
  591. }
  592. public void ParameterUnload()
  593. {
  594. }
  595. public void ParameterCancel()
  596. {
  597. if (DialogBox.ShowDialog(DialogButton.Yes | DialogButton.No, DialogType.CONFIRM, " You confirm that you want to unsave the recipe and exit the interface?") == DialogButton.No)
  598. return;
  599. ((Window)GetView()).Close();
  600. }
  601. protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
  602. {
  603. base.InvokeAfterUpdateProperty(data);
  604. if (CurrentParameter.Steps != null && CurrentParameter.Steps.Count > 0 && CheckValueChange(data))
  605. {
  606. //SelectStep(CurrentRecipe.Steps[EditRecipeStepNo]);
  607. }
  608. oldresult = data;
  609. }
  610. Dictionary<string, object> oldresult;
  611. private bool CheckValueChange(Dictionary<string, object> result)
  612. {
  613. Dictionary<string, object> temp = result;
  614. if (oldresult == null)
  615. {
  616. oldresult = result;
  617. return true;
  618. }
  619. else
  620. {
  621. List<string> strkeys = new List<string>();
  622. foreach (var key in result.Keys)
  623. {
  624. if (_subscribedKeys.Contains(key) && oldresult.ContainsKey(key) && result.ContainsKey(key))
  625. {
  626. if (result[key].GetType() == typeof(AITValveData) && ((AITValveData)oldresult[key]).VirtualFeedback != ((AITValveData)result[key]).VirtualFeedback)
  627. {
  628. return true;
  629. }
  630. else if (result[key].GetType() == typeof(AITMfcData) && ((AITMfcData)oldresult[key]).VirtualSetPoint != ((AITMfcData)result[key]).VirtualSetPoint)
  631. {
  632. return true;
  633. }
  634. else if (result[key].GetType() == typeof(bool) && (bool)oldresult[key] != (bool)result[key])
  635. {
  636. return true;
  637. }
  638. }
  639. }
  640. }
  641. return false;
  642. }
  643. }
  644. }