using MECF.Framework.Common.OperationCenter;
using MECF.Framework.Common.SubstrateTrackings;
using MECF.Framework.UI.Client.Annotations;
using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
namespace FurnaceUI.Controls.Parts
{
///
/// CassetteView.xaml 的交互逻辑
///
public partial class CassetteViewV2 : UserControl, INotifyPropertyChanged
{
public bool DiSensorValue
{
get { return (bool)GetValue(DiSensorValueProperty); }
set { SetValue(DiSensorValueProperty, value); }
}
public static readonly DependencyProperty DiSensorValueProperty =
DependencyProperty.Register("DiSensorValue", typeof(bool), typeof(CassetteViewV2), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsRender));
public string CarrierModule
{
get { return (string)GetValue(CarrierModuleProperty); }
set
{
SetValue(CarrierModuleProperty, value);
}
}
public static readonly DependencyProperty CarrierModuleProperty =
DependencyProperty.Register("CarrierModule", typeof(string), typeof(CassetteViewV2), new PropertyMetadata("System"));
public int CarrierSlot
{
get { return (int)GetValue(CarrierSlotProperty); }
set
{
SetValue(CarrierSlotProperty, value);
}
}
public static readonly DependencyProperty CarrierSlotProperty =
DependencyProperty.Register("CarrierSlot", typeof(int), typeof(CassetteViewV2), new PropertyMetadata(0));
public CarrierInfo CarrierData
{
get { return (CarrierInfo)GetValue(CarrierDataProperty); }
set
{
SetValue(CarrierDataProperty, value);
}
}
public static readonly DependencyProperty CarrierDataProperty =
DependencyProperty.Register("CarrierData", typeof(CarrierInfo), typeof(CassetteViewV2), new PropertyMetadata(new CarrierInfo(1), CarrierDataChangedCallback));
public string CassetteType
{
get { return (string)GetValue(CassetteTypeProperty); }
set
{
SetValue(CassetteTypeProperty, value);
}
}
// Using a DependencyProperty as the backing store for CassetteType. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CassetteTypeProperty =
DependencyProperty.Register("CassetteType", typeof(string), typeof(CassetteViewV2), new PropertyMetadata(""));
public int WaferCount
{
get { return (int)GetValue(WaferCountProperty); }
set
{
SetValue(WaferCountProperty, value);
}
}
// Using a DependencyProperty as the backing store for WaferCount. This enables animation, styling, binding, etc...
public static readonly DependencyProperty WaferCountProperty =
DependencyProperty.Register("WaferCount", typeof(int), typeof(CassetteViewV2), new PropertyMetadata(0));
private string _cassetteStatus;
///
/// Foup的状态,如果在Processing中会显示绿色
/// 其他状态根据waferType定义显示颜色
///
public string CassetteStatus
{
get { return _cassetteStatus; }
set
{
if (_cassetteStatus != value)
{
_cassetteStatus = value;
OnPropertyChanged();
}
}
}
//P(P1,P2),M1(M,M1),M2,SD,ED,V,R(R1,R2),Process
public double oldScale = 0;
public static void CarrierDataChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var selfView = (CassetteViewV2)d;
var carrierInfo = (CarrierInfo)e.NewValue;
var moduleName = selfView.CarrierModule;
}
public CassetteViewV2()
{
InitializeComponent();
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public void Filp(int filp, int angle, bool absolute = true, int ms = 0, double accelerationRatio = 0, double decelerationRatio = 0, Action onComplete = null)
{
var storyboard = new Storyboard();
storyboard.Completed += (s, e) => onComplete?.Invoke();
if (Filp(storyboard, filp, angle, absolute, ms, accelerationRatio, decelerationRatio, onComplete))
{
storyboard.Begin();
}
else
{
onComplete?.Invoke();
}
}
public bool Filp(Storyboard storyboard, int filp, int angle, bool absolute = true, int ms = 0, double accelerationRatio = 0, double decelerationRatio = 0, Action onComplete = null)
{
var newScale = 0.5;
if (newScale == oldScale)
{
return false;
}
ScaleTransform scaleTransform = new ScaleTransform();
if (filp == 180)
{
scaleTransform.ScaleX = -1;
}
else
{
scaleTransform.ScaleX = 1;
}
TransformGroup Group = new TransformGroup();
Group.Children.Add(scaleTransform);
tbWaferCount.RenderTransform = Group;
tbWaferCount.RenderTransformOrigin = new Point(0.5, 0.5);
var animation = new DoubleAnimation(oldScale, angle, TimeSpan.FromMilliseconds(ms));
animation.AccelerationRatio = accelerationRatio;
animation.DecelerationRatio = decelerationRatio;
storyboard.Children.Add(animation);
Storyboard.SetTarget(animation, tbWaferCount);
Storyboard.SetTargetProperty(animation, new PropertyPath("RenderTransform.(TransformGroup.Children)[0].(TranslateTransform.X)"));
oldScale = angle;
return true;
}
private void CreateCassette(object sender, RoutedEventArgs e)
{
InvokeClient.Instance.Service.DoOperation("System.CreateCarrier", CarrierModule, 0);
}
private void DeleteCassette(object sender, RoutedEventArgs e)
{
InvokeClient.Instance.Service.DoOperation("System.DeleteCarrier", CarrierModule, 0);
}
}
}