ContextMenuManager.cs 8.6 KB

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