using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using System.Xml.Serialization; using Tango.Core.Commands; using Tango.BL.Entities; using Tango.SharedUI.Helpers; namespace Tango.MachineStudio.Technician.TechItems { /// /// Represents a dispenser controller item. /// /// [TechItem(8, true)] public class DispenserItem : TechItem { /// /// Occurs when the user has pressed one of the action controllers. /// public event EventHandler ActionExecuted; private static List _dispenserTypes; /// /// Gets or sets the motor configurations. /// public static List DispenserTypes { get { return _dispenserTypes; } set { _dispenserTypes = value; } } static DispenserItem() { DispenserTypes = new List(); foreach (var techDispenser in BL.ObservablesStaticCollections.Instance.TechDispensers) { DispenserTypes.Add(new DispenserType() { Code = int.Parse(techDispenser.Name.Replace("Dispenser", "")) - 1 }); } } /// /// Occurs when dispenser homing has completed. /// public event EventHandler HomingCompleted; private TechDispenser _techDispenser; /// /// Gets or sets the db tech dispenser. /// [XmlIgnore] public TechDispenser TechDispenser { get { return _techDispenser; } set { _techDispenser = value; RaisePropertyChangedAuto(); TechName = _techDispenser != null ? _techDispenser.Description : null; ItemGuid = value != null ? value.Guid : null; if (_techDispenser != null) { DispenserType = DispenserTypes.SingleOrDefault(x => x.Code == int.Parse(_techDispenser.Name.Replace("Dispenser", "")) - 1); if (String.IsNullOrEmpty(DisplayName)) { DisplayName = _techDispenser.Description; } } } } private DispenserType _dispenserType; /// /// Gets or sets the type of the dispenser. /// [XmlIgnore] public DispenserType DispenserType { get { return _dispenserType; } set { _dispenserType = value; RaisePropertyChangedAuto(); } } private bool _isHoming; /// /// Gets or sets a value indicating whether the dispenser is currently homing. /// [XmlIgnore] public bool IsHoming { get { return _isHoming; } set { _isHoming = value; RaisePropertyChangedAuto(); } } private bool _isHomingCompleted; /// /// Gets or sets a value indicating whether the dispenser homing has completed. /// [XmlIgnore] public bool IsHomingCompleted { get { return _isHomingCompleted; } set { _isHomingCompleted = value; RaisePropertyChangedAuto(); if (value) { HomingCompleted?.Invoke(this, new EventArgs()); } } } private double _homingProgress; /// /// Gets or sets the dispenser current homing progress. /// [XmlIgnore] public double HomingProgress { get { return _homingProgress; } set { _homingProgress = value; RaisePropertyChangedAuto(); } } private double _homingMaximumProgress; /// /// Gets or sets the homing maximum progress. /// [XmlIgnore] public double HomingMaximumProgress { get { return _homingMaximumProgress; } set { _homingMaximumProgress = value; RaisePropertyChangedAuto(); } } private double _speed; /// /// Gets or sets the dispenser motor speed. /// public double Speed { get { return _speed; } set { _speed = value; RaisePropertyChangedAuto(); } } private String _displayName; /// /// Gets or sets the display name. /// public String DisplayName { get { return _displayName; } set { _displayName = value; RaisePropertyChangedAuto(); } } /// /// Initializes a new instance of the class. /// public DispenserItem() : base() { Name = "Dispenser"; Description = "Dispenser Controller"; Speed = 500; Image = ResourceHelper.GetImageFromResources("Images/dispenser-big.png"); Color = Colors.White; DispenserType = new DispenserType(); } /// /// Initializes a new instance of the class. /// /// The tech dispenser. public DispenserItem(TechDispenser techDispenser) : this() { TechDispenser = techDispenser; } /// /// Clones this instance. /// /// public override TechItem Clone() { DispenserItem cloned = base.Clone() as DispenserItem; cloned.TechDispenser = TechDispenser; cloned.DisplayName = DisplayName; cloned.Speed = Speed; return cloned; } /// /// Raises the event with the specified action. /// /// The action. public void RaiseAction(MotorActionType action) { ActionExecuted?.Invoke(this, action); } } }