using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Media; using System.Windows; using System.ComponentModel; using System.Windows.Input; using Aitex.UI.RecipeEditor.View; namespace Aitex.UI.RecipeEditor { /// /// cell type enum /// public enum CellType { ReadOnly, TextInput, EditableSelection, TimeInput, ReadOnlySelection, NumInput, CheckBox, EndPointSetting, } /// /// reicpe variable definition /// public class RecipeVariableDefine { public CellType CellType { get; set; } public string CatalogName { get; set; } public string GroupName { get; set; } public string FriendlyName { get; set; } public string TechnicalName { get; set; } public string DeviceType { get; set; } public string Description { get; set; } public double MinValue { get; set; } public double MaxValue { get; set; } public List> DropdownItemList { get; set; } } /// /// cell data definition /// public class SmartCellData : INotifyPropertyChanged { public RecipeVariableDefine RecipeVariableDefine { get; set; } public int RowIndex { get; set; } public int ColIndex { get; set; } public bool IsRunning { get; set; } public bool IsHidden { get; set; } public bool IsMasked { get; set; } public Brush Foreground { get; set; } public Brush Background { get; set; } public FontWeight FontWeight { get; set; } public string Value { get; set; } public string ErrInfo { get; set; } public object Tag { get; set; } public string AdditionalInfo { get; set; } //public bool IsJump { get; set; } //public bool ShowsJumpControl { get; set; } public ICommand EndPointCommand { get; set; } public EndPointConfigItem EndPointConfig { get; set; } public SmartCellData() { EndPointCommand = new DelegatedCommand((o) => true, (o) => EndPointAction(o)); EndPointConfig = new EndPointConfigItem(); } private void EndPointAction(object obj) { EndPointDlg dlg = new EndPointDlg(){ Owner = Application.Current.MainWindow }; EndPointConfig.SetValue(Value); dlg.ConfigItem = EndPointConfig; var result = dlg.ShowDialog(); if (result.HasValue && result.Value) { Value = dlg.ConfigItem.ToValue(); } } public override string ToString() { return Display; } public string ToolTip { get { string str = "n/a"; switch (RecipeVariableDefine.CellType) { case CellType.NumInput: str = string.Format("{0}\r\nMax:{1}\r\nValue:{2}", RecipeVariableDefine.FriendlyName, RecipeVariableDefine.MaxValue.ToString("N2").TrimEnd('0').TrimEnd('.').Replace(',', '\''), Display); break; default: str = string.Format("{0}\r\nValue:{1}", RecipeVariableDefine.FriendlyName, string.IsNullOrEmpty(Display) ? "Empty" : Display); break; } if (!string.IsNullOrEmpty(AdditionalInfo)) str += "\r\n" + AdditionalInfo; if (!string.IsNullOrEmpty(ErrInfo)) str = str + "\r\n\r\nError:" + ErrInfo; return str; } } public string Display { get { try { if (IsHidden) return ""; if (IsMasked) return "*"; if (RecipeVariableDefine.CellType == CellType.ReadOnlySelection && RecipeVariableDefine.DropdownItemList != null) { var v = RecipeVariableDefine.DropdownItemList.Find((o) => o.Item1 == Value); if (v != null) return v.Item2; } else if (RecipeVariableDefine.CellType == CellType.CheckBox) { if (Tag != null && Tag is int) { if (bool.Parse(Value)) return "【√】 " + Tag.ToString(); else return " " + Tag.ToString(); } if (bool.Parse(Value)) return "【√】"; return " "; } else if (RecipeVariableDefine.CellType == CellType.EndPointSetting) { if (!string.IsNullOrEmpty(Value) && Value != "n/a") { return "【√】"; } return "【...】"; } else if (RecipeVariableDefine.CellType == CellType.NumInput) { double d; if (double.TryParse(Value.ToString(), out d)) { return d.ToString("N2").TrimEnd('0').TrimEnd('.').Replace(',', '\''); } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } return Value; } } #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; public void InvokePropertyChanged() { if (PropertyChanged != null) { foreach (var pro in this.GetType().GetProperties()) { PropertyChanged.Invoke(this, new PropertyChangedEventArgs(pro.Name)); } } } public void InvokePropertyChanged(string proName) { if (PropertyChanged != null) { PropertyChanged.Invoke(this, new PropertyChangedEventArgs(proName)); } } #endregion } }