Sic02-new/FrameworkLocal/UIClient/ClientBase/ContextMenuManager.cs

435 lines
18 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Aitex.Core.RT.Log;
using Caliburn.Micro;
using MECF.Framework.Common.OperationCenter;
using OpenSEMI.Ctrlib.Controls;
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using MECF.Framework.Common.Equipment;
using MECF.Framework.UI.Client.CenterViews.Tray;
using MECF.Framework.Common.SubstrateTrackings;
using MECF.Framework.Common.DataCenter;
using MECF.Framework.RT.Core.DBProviderEx;
namespace MECF.Framework.UI.Client.ClientBase
{
public class MenuElement
{
public string Name { get; set; }
public string Invoke { get; set; }
public bool IsSeparator { get; set; }
}
public class ContextMenuManager
{
public bool ShowAligner { get; set; }
public bool ShowCooling { get; set; }
public static string SF = "{0:F}";
public ContextMenuManager()
{
_slotMenus = InitMenus(_SlotMenuElements);
_carrierMenus = InitMenus(_carrierMenuElements);
ShowAligner = true;
ShowCooling = true;
}
#region single Instance
private static ContextMenuManager m_Instance = null;
public static ContextMenuManager Instance
{
get
{
if (m_Instance == null)
{
m_Instance = new ContextMenuManager();
}
return m_Instance;
}
}
#endregion
#region Slot Menus
private ContextMenu _slotMenus;
public ContextMenu SlotMenus
{
get { return _slotMenus; }
}
private readonly List<MenuElement> _SlotMenuElements = new List<MenuElement>() {
new MenuElement(){ Name="Create Wafer", Invoke="CreateWafer"},
new MenuElement(){ Name="Delete Wafer", Invoke="DeleteWafer"},
new MenuElement(){ Name="-", IsSeparator = true},
new MenuElement(){ Name="Return Wafer", Invoke="ReturnWafer"},
new MenuElement(){ Name="Tray Info", Invoke="TrayInfo"}
};
//public ContextMenu GetSlotMenus(Slot slot)
//{
// if (slot != null)
// {
// MenuItem createWafer = _slotMenus.Items.GetItemAt(0) as MenuItem;
// MenuItem deleteWafer = _slotMenus.Items.GetItemAt(1) as MenuItem;
// MenuItem returnWafer = _slotMenus.Items.GetItemAt(3) as MenuItem;
// createWafer.IsEnabled = (WaferStatus)slot.WaferStatus == WaferStatus.Empty ? true : false;
// deleteWafer.IsEnabled = (WaferStatus)slot.WaferStatus == WaferStatus.Empty ? false : true;
// returnWafer.IsEnabled = (WaferStatus)slot.WaferStatus != WaferStatus.Empty && !slot.ModuleID.StartsWith("LP");
// }
// return _slotMenus;
//}
public ContextMenu GetSlotMenus(Slot slot)
{
if (slot != null)
{
if (slot.ModuleID == "" || slot.ModuleID == ModuleName.PM2.ToString())
{
return null;
}
else if (slot.ModuleID == ModuleName.LoadLock.ToString() || slot.ModuleID == ModuleName.Buffer.ToString())
{
return GetAllMenus(slot);
}
else
{
return GetWaferMenus(slot);
}
}
return null;
}
public void OnContextMenuClick(object sender, RoutedEventArgs args)
{
try
{
MenuItem m_menu = sender as MenuItem;
Slot CurrentSlot = ContextMenuService.GetPlacementTarget(LogicalTreeHelper.GetParent(m_menu)) as Slot;
if (CurrentSlot == null)
return;
MenuElement ele = m_menu.Tag as MenuElement;
if (ele.Invoke == "TrayInfo")
{
ModuleName chamber = ModuleHelper.Converter(CurrentSlot.ModuleID);
int slot = (int)CurrentSlot.SlotID;
//查询当前wafer_guid是否存在如果存在提示已存在是否更新
InvokeClient.Instance.Service.DoOperation("GetTrayInfoByWaferguid2", CurrentSlot.ModuleID, CurrentSlot.SlotID);
//System.Threading.Thread.Sleep(100);
string[] _subscribedKeys = { "System.TrayInfo.TrayInfoByWaferguid" };
Dictionary<string, object> result = QueryDataClient.Instance.Service.PollData(_subscribedKeys);
string sTrayInfoByWaferguid = "";
if (result != null && result.Count>0)
{
sTrayInfoByWaferguid = result["System.TrayInfo.TrayInfoByWaferguid"].ToString();
}
tray_thickness_data data = new tray_thickness_data();
if (sTrayInfoByWaferguid.Trim().Length > 0)
{
try
{
if (MessageBox.Show("The information of the trays which load this wafer has already existed. Will you update it with the new one?", "Please make sure.", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No)
{
return;
}
data.StringTo(sTrayInfoByWaferguid);
//
winTrayNumber winTN = new winTrayNumber();
//可以直接使用字符串数组赋值
winTN.TrayNumber = String.Format(SF,data.tray_number);
winTN.TrayCoating = String.Format(SF, data.tray_coating);
winTN.TrayMax = String.Format(SF, data.tray_max);
//
winTN.TrayInnerNumber = data.tray_inner_number;
winTN.TrayInnerCoating = String.Format(SF, data.tray_inner_coating);
winTN.TrayInnerMax = String.Format(SF, data.tray_inner_max);
//
winTN.RingInnerNumber = data.ring_inner_number;
winTN.RingInnerCoating = String.Format(SF, data.ring_inner_coating);
winTN.RingInnerMax = String.Format(SF, data.ring_inner_max);
//
winTN.RingOuterNumber = data.ring_outer_number;
winTN.RingOuterCoating = String.Format(SF, data.ring_outer_coating);
winTN.RingOuterMax = String.Format(SF, data.ring_outer_max);
if (winTN.ShowDialog() == true)
{
data.tray_number = winTN.TrayNumber;
data.tray_coating = Convert.ToDouble(winTN.TrayCoating);
data.tray_max = Convert.ToDouble(winTN.TrayMax);
data.tray_inner_number = winTN.TrayInnerNumber;
data.tray_inner_coating = Convert.ToDouble(winTN.TrayInnerCoating);
data.tray_inner_max = Convert.ToDouble(winTN.TrayInnerMax);
data.ring_inner_number = winTN.RingInnerNumber;
data.ring_inner_coating = Convert.ToDouble(winTN.RingInnerCoating);
data.ring_inner_max = Convert.ToDouble(winTN.RingInnerMax);
data.ring_outer_number = winTN.RingOuterNumber;
data.ring_outer_coating = Convert.ToDouble(winTN.RingOuterCoating);
data.ring_outer_max = Convert.ToDouble(winTN.RingOuterMax);
//
InvokeClient.Instance.Service.DoOperation("UpdateTrayInfoByWaferguid", chamber, slot, data.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show("Get Tray Info failed:" + ex.Message, "Warning");
}
}
else
{
//如果不存在,直接添加
try
{
//
winTrayNumber winTN = new winTrayNumber();
if (winTN.ShowDialog() == true)
{
data.tray_number = winTN.TrayNumber;
data.tray_coating = Convert.ToDouble(winTN.TrayCoating);
data.tray_max = Convert.ToDouble(winTN.TrayMax);
data.tray_inner_number = winTN.TrayInnerNumber;
data.tray_inner_coating = Convert.ToDouble(winTN.TrayInnerCoating);
data.tray_inner_max = Convert.ToDouble(winTN.TrayInnerMax);
data.ring_inner_number = winTN.RingInnerNumber;
data.ring_inner_coating = Convert.ToDouble(winTN.RingInnerCoating);
data.ring_inner_max = Convert.ToDouble(winTN.RingInnerMax);
data.ring_outer_number = winTN.RingOuterNumber;
data.ring_outer_coating = Convert.ToDouble(winTN.RingOuterCoating);
data.ring_outer_max = Convert.ToDouble(winTN.RingOuterMax);
//
//InvokeClient.Instance.Service.DoOperation("InsertTrayInfo", chamber, slot, data);
InvokeClient.Instance.Service.DoOperation("InsertTrayInfo", chamber, slot,data.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show("Get Tray Info failed:" + ex.Message, "Warning");
}
}
}
else
{
InvokeClient.Instance.Service.DoOperation(ele.Invoke, CurrentSlot.ModuleID, CurrentSlot.SlotID);
}
}
catch (Exception ex)
{
LOG.Write(ex);
}
}
private ContextMenu InitMenus(List<MenuElement> menus)
{
ContextMenu cm = new ContextMenu();
foreach (MenuElement element in menus)
{
if (element.IsSeparator)
{
cm.Items.Add(new Separator());
}
else
{
MenuItem m_item = new MenuItem();
m_item.Header = element.Name;
m_item.Tag = element;
m_item.Click += new RoutedEventHandler(OnContextMenuClick);
m_item.IsEnabled = true;
cm.Items.Add(m_item);
}
}
return cm;
}
public ContextMenu GetWaferMenus(Slot slot)
{
MenuItem createWafer = _slotMenus.Items.GetItemAt(0) as MenuItem;
MenuItem deleteWafer = _slotMenus.Items.GetItemAt(1) as MenuItem;
Separator separator = _slotMenus.Items.GetItemAt(2) as Separator;
MenuItem returnWafer = _slotMenus.Items.GetItemAt(3) as MenuItem;
MenuItem addTrayNumber = _slotMenus.Items.GetItemAt(4) as MenuItem;
createWafer.IsEnabled = (WaferStatus)slot.WaferStatus == WaferStatus.Empty;
deleteWafer.IsEnabled = (WaferStatus)slot.WaferStatus != WaferStatus.Empty;
returnWafer.IsEnabled = (WaferStatus)slot.WaferStatus != WaferStatus.Empty && !slot.ModuleID.StartsWith("Cass");
addTrayNumber.IsEnabled = false;
createWafer.Visibility = Visibility.Visible;
deleteWafer.Visibility = Visibility.Visible;
separator.Visibility = Visibility.Visible;
returnWafer.Visibility = Visibility.Visible;
addTrayNumber.Visibility = Visibility.Hidden;
return _slotMenus;
}
public ContextMenu GetTrayMenus(Slot slot)
{
//暂未启用
MenuItem createWafer = _slotMenus.Items.GetItemAt(0) as MenuItem;
MenuItem createTray = _slotMenus.Items.GetItemAt(1) as MenuItem;
MenuItem deleteWafer = _slotMenus.Items.GetItemAt(2) as MenuItem;
MenuItem deleteTray = _slotMenus.Items.GetItemAt(3) as MenuItem;
MenuItem returnWafer = _slotMenus.Items.GetItemAt(5) as MenuItem;
Separator separator = _slotMenus.Items.GetItemAt(4) as Separator;
createTray.IsEnabled = true; //slot.TrayStatus == 0;
deleteTray.IsEnabled = true; //slot.TrayStatus != 0;
createTray.Visibility = Visibility.Visible;
deleteTray.Visibility = Visibility.Visible;
separator.Visibility = Visibility.Collapsed;
deleteWafer.Visibility = Visibility.Collapsed;
createWafer.Visibility = Visibility.Collapsed;
returnWafer.Visibility = Visibility.Collapsed;
return _slotMenus;
}
public ContextMenu GetAllMenus(Slot slot)
{
MenuItem createWafer = _slotMenus.Items.GetItemAt(0) as MenuItem;
MenuItem deleteWafer = _slotMenus.Items.GetItemAt(1) as MenuItem;
Separator separator = _slotMenus.Items.GetItemAt(2) as Separator;
MenuItem returnWafer = _slotMenus.Items.GetItemAt(3) as MenuItem;
MenuItem addTrayNumber = _slotMenus.Items.GetItemAt(4) as MenuItem;
createWafer.IsEnabled = (WaferStatus)slot.WaferStatus == WaferStatus.Empty;
deleteWafer.IsEnabled = (WaferStatus)slot.WaferStatus != WaferStatus.Empty;
returnWafer.IsEnabled = (WaferStatus)slot.WaferStatus != WaferStatus.Empty && !slot.ModuleID.StartsWith("Cass");
addTrayNumber.IsEnabled = (WaferStatus)slot.WaferStatus != WaferStatus.Empty;
createWafer.Visibility = Visibility.Visible;
deleteWafer.Visibility = Visibility.Visible;
separator.Visibility = Visibility.Visible;
returnWafer.Visibility = Visibility.Visible;
addTrayNumber.Visibility = Visibility.Visible;
return _slotMenus;
}
public void ReturnWafer(string menu, Slot p_from)
{
try
{
if (p_from == null || !p_from.IsValidSlot())
return;
//DialogButton btns = DialogButton.Transfer | DialogButton.Cancel;
string info = " from " + p_from.ModuleID + " slot " + (p_from.SlotID + 1).ToString();
string message = "Are you sure to return the wafer: \n" + info;
//DialogButton m_dResult = DialogBox.ShowDialog(btns, DialogType.CONFIRM, message);
bool displayAlignerCondition = p_from.ModuleID == "LP1" || p_from.ModuleID == "LP2" || p_from.ModuleID == "LP3" || p_from.ModuleID == "EfemRobot"
|| p_from.ModuleID == "LLA" || p_from.ModuleID == "LLB" || p_from.ModuleID == "LLC" || p_from.ModuleID == "LLD" || p_from.ModuleID == "Buffer";
displayAlignerCondition = displayAlignerCondition && (p_from.ModuleID != "Aligner");
bool displayPassCoolingCondition = (p_from.ModuleID.Contains("PM") || p_from.ModuleID == "TMRobot");
WindowManager wm = new WindowManager();
WaferTransferDialogViewModel _transferVM = new WaferTransferDialogViewModel(message, displayAlignerCondition, displayPassCoolingCondition);
_transferVM.AlignerVisibility = ShowAligner ? Visibility.Visible : Visibility.Hidden;
_transferVM.CoolingVisibility = ShowCooling ? Visibility.Visible : Visibility.Hidden;
bool? bret = wm.ShowDialogWithNoStyle(_transferVM);
if ((bool)bret)
{
//get and use transfer conditions
WaferTransferCondition conditions = _transferVM.DialogResult;
InvokeClient.Instance.Service.DoOperation(menu, p_from.ModuleID, p_from.SlotID,
conditions.IsPassCooling, conditions.CoolingTime);
}
p_from.ClearDragDropStatus();
}
catch (Exception ex)
{
LOG.Write(ex);
}
}
#endregion
#region Carrier menus
private ContextMenu _carrierMenus;
public ContextMenu CarrierMenus
{
get { return _carrierMenus; }
}
private readonly List<MenuElement> _carrierMenuElements = new List<MenuElement>() {
new MenuElement(){ Name="Create Carrier", Invoke="System.CreateCarrier"},
new MenuElement(){ Name="Delete Carrier", Invoke="System.DeleteCarrier"},
};
public void OnCarrierContextMenuClick(object sender, RoutedEventArgs args)
{
try
{
MenuItem menuItem = sender as MenuItem;
CarrierContentControl locateCarrier = ContextMenuService.GetPlacementTarget(LogicalTreeHelper.GetParent(menuItem)) as CarrierContentControl;
if (locateCarrier == null)
return;
MenuElement ele = menuItem.Tag as MenuElement;
InvokeClient.Instance.Service.DoOperation(ele.Invoke, locateCarrier.ModuleID, locateCarrier.CarrierID);
}
catch (Exception ex)
{
LOG.Write(ex);
}
}
public ContextMenu GetCarrierMenus(CarrierContentControl carrier)
{
if (carrier != null)
{
MenuItem createCarrier = _carrierMenus.Items.GetItemAt(0) as MenuItem;
MenuItem deleteWafer = _carrierMenus.Items.GetItemAt(1) as MenuItem;
createCarrier.IsEnabled = (WaferStatus)carrier.WaferStatus == WaferStatus.Empty ? true : false;
deleteWafer.IsEnabled = (WaferStatus)carrier.WaferStatus == WaferStatus.Empty ? false : true;
}
return _carrierMenus;
}
#endregion
}
}