Sic.Framework/MECF.Framework.UI.Client/ClientBase/ContextMenuManager.cs

374 lines
15 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.Common;
using Aitex.Core.RT.Log;
using Aitex.Core.UI.Control;
using Caliburn.Micro;
using MECF.Framework.Common.DataCenter;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.OperationCenter;
using MECF.Framework.UI.Client.CenterViews.Editors;
using MECF.Framework.UI.Client.TrayThickness;
using OpenSEMI.Ctrlib.Controls;
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Windows;
using System.Windows.Controls;
using RTDefine = Aitex.Core.Common;
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 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
public ContextMenu GetSlotMenus(Slot slot)
{
if (slot != null)
{
if(slot.ModuleID == ModuleName.CassAL.ToString() || slot.ModuleID == ModuleName.CassAR.ToString())
{
return GetWaferMenus(slot);
}
else if (slot.ModuleID == ModuleName.CassBL.ToString())
{
return GetTrayMenus(slot);
}
else
{
return GetDeleteMenus(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 == "ReturnWafer")
//{
// ReturnWafer(ele.Invoke, CurrentSlot);
//}
//else
//{
// InvokeClient.Instance.Service.DoOperation(ele.Invoke, CurrentSlot.ModuleID, CurrentSlot.SlotID);
//}
//var param = new object[] { ModuleName.LP1, 5, WaferStatus.Normal };
if (ele.Invoke == "AlterInfo")
{
SlotEditorDialogBox slotDialog = new SlotEditorDialogBox();
slotDialog.Title = "Wafer Editor";
slotDialog.RecipeName = CurrentSlot.RecipeName;
slotDialog.TrayProcessCount = CurrentSlot.TrayProcessCount;
slotDialog.ModuleID = CurrentSlot.ModuleID;
slotDialog.SlotID = CurrentSlot.SlotID;
slotDialog.ShowDialog();
}
else if (ele.Invoke == "TrayInfo")
{
//复杂获取TrayID不是最优用法
ModuleName chamber = ModuleHelper.Converter(CurrentSlot.ModuleID);
Dictionary<string, object> data = QueryDataClient.Instance.Service.PollData(new List<string> { chamber.ToString() + ".ModuleWaferList" });
WaferInfoRt[] _waferInfo = data[chamber.ToString() + ".ModuleWaferList"] as WaferInfoRt[];
int slot = _waferInfo[(int)CurrentSlot.SlotID].TrayOriginSlot; //(位置获取Tray的ID)
var wm = new WindowManager();
var model = new WinTrayThicknessDataViewModel((slot + 1).ToString());
dynamic settings = new ExpandoObject();
settings.WindowStartupLocation = WindowStartupLocation.CenterOwner;
wm.ShowWindow(model, null, settings);
//正确方法获取TrayID
//ModuleInfo moduleInfo = ModuleManager.ModuleInfos[CurrentSlot.ModuleID];
//var wi = ModuleManager.ModuleInfos[CurrentSlot.ModuleID].WaferManager.Wafers[CurrentSlot.SlotID];
//int _trayOriginSlot = wi.TrayOriginSlot;
}
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;
}
#region Wafer 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="Create Tray", Invoke="CreateWafer"},
new MenuElement(){ Name="Delete Wafer", Invoke="DeleteWafer"},
new MenuElement(){ Name="Delete Tray", Invoke="DeleteTray"},
new MenuElement(){ Name="-", IsSeparator = true},
new MenuElement(){ Name="Return Wafer", Invoke="ReturnWafer"},
new MenuElement(){ Name="Alter Info", Invoke="AlterInfo"},
new MenuElement(){ Name="Tray Info", Invoke="TrayInfo"}
};
public ContextMenu GetWaferMenus(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;
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");
createWafer.Visibility = Visibility.Visible;
deleteWafer.Visibility = Visibility.Visible;
createTray.Visibility = Visibility.Collapsed;
deleteTray.Visibility = Visibility.Collapsed;
separator.Visibility = Visibility.Visible;
returnWafer.Visibility = Visibility.Collapsed;
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 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;
createWafer.IsEnabled = (WaferStatus)slot.WaferStatus == WaferStatus.Empty ;
createTray.IsEnabled = true;
deleteWafer.IsEnabled = (WaferStatus)slot.WaferStatus != WaferStatus.Empty ;
deleteTray.IsEnabled = true; // slot.TrayStatus != 0;
returnWafer.IsEnabled = (WaferStatus)slot.WaferStatus != WaferStatus.Empty && !slot.ModuleID.StartsWith("Cass");
separator.Visibility = Visibility.Visible;
createWafer.Visibility = Visibility.Visible;
deleteWafer.Visibility = Visibility.Visible;
createTray.Visibility = Visibility.Visible;
deleteTray.Visibility = Visibility.Visible;
returnWafer.Visibility = Visibility.Collapsed;
return _slotMenus;
}
public ContextMenu GetDeleteMenus(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;
createWafer.IsEnabled = (WaferStatus)slot.WaferStatus == WaferStatus.Empty;
createTray.IsEnabled = true;
deleteWafer.IsEnabled = (WaferStatus)slot.WaferStatus != WaferStatus.Empty;
deleteTray.IsEnabled = true; // slot.TrayStatus != 0;
returnWafer.IsEnabled = (WaferStatus)slot.WaferStatus != WaferStatus.Empty && !slot.ModuleID.StartsWith("Cass");
separator.Visibility = Visibility.Visible;
createWafer.Visibility = Visibility.Collapsed;
deleteWafer.Visibility = Visibility.Visible;
createTray.Visibility = Visibility.Collapsed;
deleteTray.Visibility = Visibility.Visible;
returnWafer.Visibility = Visibility.Collapsed;
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
}
}