ContextMenuManager.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. using Aitex.Core.RT.Log;
  2. using Caliburn.Micro;
  3. using MECF.Framework.Common.OperationCenter;
  4. using OpenSEMI.Ctrlib.Controls;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Windows;
  8. using System.Windows.Controls;
  9. namespace MECF.Framework.UI.Client.ClientBase
  10. {
  11. public class MenuElement
  12. {
  13. public string Name { get; set; }
  14. public string Invoke { get; set; }
  15. public bool IsSeparator { get; set; }
  16. }
  17. public class ContextMenuManager
  18. {
  19. public bool ShowAligner { get; set; }
  20. public bool ShowCooling { get; set; }
  21. public ContextMenuManager()
  22. {
  23. _slotMenus = InitMenus(_SlotMenuElements);
  24. _carrierMenus = InitMenus(_carrierMenuElements);
  25. ShowAligner = true;
  26. ShowCooling = true;
  27. }
  28. #region single Instance
  29. private static ContextMenuManager m_Instance = null;
  30. public static ContextMenuManager Instance
  31. {
  32. get
  33. {
  34. if (m_Instance == null)
  35. {
  36. m_Instance = new ContextMenuManager();
  37. }
  38. return m_Instance;
  39. }
  40. }
  41. #endregion
  42. #region Slot Menus
  43. private ContextMenu _slotMenus;
  44. public ContextMenu SlotMenus
  45. {
  46. get { return _slotMenus; }
  47. }
  48. private readonly List<MenuElement> _SlotMenuElements = new List<MenuElement>() {
  49. new MenuElement(){ Name="Create Wafer", Invoke="CreateWafer"},
  50. new MenuElement(){ Name="Delete Wafer", Invoke="DeleteWafer"},
  51. new MenuElement(){ Name="-", IsSeparator = true},
  52. new MenuElement(){ Name="Return Wafer", Invoke="ReturnWafer"}
  53. };
  54. public void OnContextMenuClick(object sender, RoutedEventArgs args)
  55. {
  56. try
  57. {
  58. MenuItem m_menu = sender as MenuItem;
  59. Slot CurrentSlot = ContextMenuService.GetPlacementTarget(LogicalTreeHelper.GetParent(m_menu)) as Slot;
  60. if (CurrentSlot == null)
  61. return;
  62. MenuElement ele = m_menu.Tag as MenuElement;
  63. //if (ele.Invoke == "ReturnWafer")
  64. //{
  65. // ReturnWafer(ele.Invoke, CurrentSlot);
  66. //}
  67. //else
  68. //{
  69. // InvokeClient.Instance.Service.DoOperation(ele.Invoke, CurrentSlot.ModuleID, CurrentSlot.SlotID);
  70. //}
  71. //var param = new object[] { ModuleName.LP1, 5, WaferStatus.Normal };
  72. InvokeClient.Instance.Service.DoOperation(ele.Invoke, CurrentSlot.ModuleID, CurrentSlot.SlotID);
  73. }
  74. catch (Exception ex)
  75. {
  76. LOG.Write(ex);
  77. }
  78. }
  79. private ContextMenu InitMenus(List<MenuElement> menus)
  80. {
  81. ContextMenu cm = new ContextMenu();
  82. foreach (MenuElement element in menus)
  83. {
  84. if (element.IsSeparator)
  85. {
  86. cm.Items.Add(new Separator());
  87. }
  88. else
  89. {
  90. MenuItem m_item = new MenuItem();
  91. m_item.Header = element.Name;
  92. m_item.Tag = element;
  93. m_item.Click += new RoutedEventHandler(OnContextMenuClick);
  94. m_item.IsEnabled = true;
  95. cm.Items.Add(m_item);
  96. }
  97. }
  98. return cm;
  99. }
  100. public ContextMenu GetSlotMenus(Slot slot)
  101. {
  102. if (slot != null)
  103. {
  104. MenuItem createWafer = _slotMenus.Items.GetItemAt(0) as MenuItem;
  105. MenuItem deleteWafer = _slotMenus.Items.GetItemAt(1) as MenuItem;
  106. MenuItem returnWafer = _slotMenus.Items.GetItemAt(3) as MenuItem;
  107. createWafer.IsEnabled = (WaferStatus)slot.WaferStatus == WaferStatus.Empty ? true : false;
  108. deleteWafer.IsEnabled = (WaferStatus)slot.WaferStatus == WaferStatus.Empty ? false : true;
  109. returnWafer.IsEnabled = (WaferStatus)slot.WaferStatus != WaferStatus.Empty && !slot.ModuleID.StartsWith("LP");
  110. }
  111. return _slotMenus;
  112. }
  113. public void ReturnWafer(string menu, Slot p_from)
  114. {
  115. try
  116. {
  117. if (p_from == null || !p_from.IsValidSlot())
  118. return;
  119. //DialogButton btns = DialogButton.Transfer | DialogButton.Cancel;
  120. string info = " from " + p_from.ModuleID + " slot " + (p_from.SlotID + 1).ToString();
  121. string message = "Are you sure to return the wafer: \n" + info;
  122. //DialogButton m_dResult = DialogBox.ShowDialog(btns, DialogType.CONFIRM, message);
  123. bool displayAlignerCondition = p_from.ModuleID == "LP1" || p_from.ModuleID == "LP2" || p_from.ModuleID == "LP3" || p_from.ModuleID == "EfemRobot"
  124. || p_from.ModuleID == "LLA" || p_from.ModuleID == "LLB" || p_from.ModuleID == "LLC" || p_from.ModuleID == "LLD" || p_from.ModuleID == "Buffer";
  125. displayAlignerCondition = displayAlignerCondition && (p_from.ModuleID != "Aligner");
  126. bool displayPassCoolingCondition = (p_from.ModuleID.Contains("PM") || p_from.ModuleID == "TMRobot");
  127. WindowManager wm = new WindowManager();
  128. WaferTransferDialogViewModel _transferVM = new WaferTransferDialogViewModel(message, displayAlignerCondition, displayPassCoolingCondition);
  129. _transferVM.AlignerVisibility = ShowAligner ? Visibility.Visible : Visibility.Hidden;
  130. _transferVM.CoolingVisibility = ShowCooling ? Visibility.Visible : Visibility.Hidden;
  131. bool? bret = wm.ShowDialogWithNoStyle(_transferVM);
  132. if ((bool)bret)
  133. {
  134. //get and use transfer conditions
  135. WaferTransferCondition conditions = _transferVM.DialogResult;
  136. InvokeClient.Instance.Service.DoOperation(menu, p_from.ModuleID, p_from.SlotID,
  137. conditions.IsPassCooling, conditions.CoolingTime);
  138. }
  139. p_from.ClearDragDropStatus();
  140. }
  141. catch (Exception ex)
  142. {
  143. LOG.Write(ex);
  144. }
  145. }
  146. #endregion
  147. #region Carrier menus
  148. private ContextMenu _carrierMenus;
  149. public ContextMenu CarrierMenus
  150. {
  151. get { return _carrierMenus; }
  152. }
  153. private readonly List<MenuElement> _carrierMenuElements = new List<MenuElement>() {
  154. new MenuElement(){ Name="Create Carrier", Invoke="System.CreateCarrier"},
  155. new MenuElement(){ Name="Delete Carrier", Invoke="System.DeleteCarrier"},
  156. };
  157. public void OnCarrierContextMenuClick(object sender, RoutedEventArgs args)
  158. {
  159. try
  160. {
  161. MenuItem menuItem = sender as MenuItem;
  162. CarrierContentControl locateCarrier = ContextMenuService.GetPlacementTarget(LogicalTreeHelper.GetParent(menuItem)) as CarrierContentControl;
  163. if (locateCarrier == null)
  164. return;
  165. MenuElement ele = menuItem.Tag as MenuElement;
  166. InvokeClient.Instance.Service.DoOperation(ele.Invoke, locateCarrier.ModuleID, locateCarrier.CarrierID);
  167. }
  168. catch (Exception ex)
  169. {
  170. LOG.Write(ex);
  171. }
  172. }
  173. public ContextMenu GetCarrierMenus(CarrierContentControl carrier)
  174. {
  175. if (carrier != null)
  176. {
  177. MenuItem createCarrier = _carrierMenus.Items.GetItemAt(0) as MenuItem;
  178. MenuItem deleteWafer = _carrierMenus.Items.GetItemAt(1) as MenuItem;
  179. createCarrier.IsEnabled = (WaferStatus)carrier.WaferStatus == WaferStatus.Empty ? true : false;
  180. deleteWafer.IsEnabled = (WaferStatus)carrier.WaferStatus == WaferStatus.Empty ? false : true;
  181. }
  182. return _carrierMenus;
  183. }
  184. #endregion
  185. }
  186. }