using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.Core; using Tango.Core.DI; using Tango.Core.Helpers; using Tango.FSE.Common; using Tango.FSE.Common.Connection; using Tango.Integration.Operation; using Tango.PMR.MachineStatus; namespace Tango.FSE.UI.Tiles.MidTankLevels { public class MidTankLevelsTile : DashboardTile { public class MidTankLevelModel : ExtendedObject { public double Max { get; set; } private double _level; public double Level { get { return _level; } set { _level = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(IsLow)); RaisePropertyChanged(nameof(IsEmpty)); } } public bool IsLow { get { return Level <= MachineOperator.LOW_MIDTANK_LITERS; } } public bool IsEmpty { get { return Level <= MachineOperator.EMPTY_MIDTANK_LITERS; } } public IdsPack IDSPack { get; set; } } private List _midTankLevels; public List MidTankLevels { get { return _midTankLevels; } set { _midTankLevels = value; RaisePropertyChangedAuto(); } } public MidTankLevelsTile() { Name = "Mid Tank Levels"; Column = 4; Row = 0; ColumnSpan = 4; RowSpan = 3; AutoContainerStyle = false; MidTankLevels = new List() { new MidTankLevelModel() { Level = 0.5, Max = MachineOperator.MAX_MIDTANK_LITERS, IDSPack = new IdsPack() { LiquidType = new LiquidType() { Code = LiquidTypes.Cyan.ToInt32(), Color = ColorHelper.ColorToInteger(Colors.Cyan), Name = "Cyan", ShortName = "C", }, }, }, new MidTankLevelModel() { Level = 0.2, Max = MachineOperator.MAX_MIDTANK_LITERS, IDSPack = new IdsPack() { LiquidType = new LiquidType() { Code = LiquidTypes.Magenta.ToInt32(), Color = ColorHelper.ColorToInteger(Colors.Magenta), Name = "Magenta", ShortName = "M", }, }, }, new MidTankLevelModel() { Level = 0.9, Max = MachineOperator.MAX_MIDTANK_LITERS, IDSPack = new IdsPack() { LiquidType = new LiquidType() { Code = LiquidTypes.Yellow.ToInt32(), Color = ColorHelper.ColorToInteger(Colors.Yellow), Name = "Yellow", ShortName = "Y", }, }, }, new MidTankLevelModel() { Level = 0.1, Max = MachineOperator.MAX_MIDTANK_LITERS, IDSPack = new IdsPack() { LiquidType = new LiquidType() { Code = LiquidTypes.Black.ToInt32(), Color = ColorHelper.ColorToInteger(Colors.Black), Name = "Black", ShortName = "k", }, }, } }; } public override FrameworkElement GetView() { return new MidTankLevelsTileView(); } public override void OnApplicationStarted() { base.OnApplicationStarted(); MachineProvider.MachineOperator.MachineStatusChanged += MachineOperator_MachineStatusChanged; MachineProvider.MachineConnected += MachineProvider_MachineConnected; } private void MachineProvider_MachineConnected(object sender, MachineConnectedEventArgs e) { MidTankLevels = MachineProvider.Machine.Configuration.NoneEmptyIdsPacks.Where(x => x.MidTankType.HasLevelMeasure).OrderBy(x => x.PackIndex).Select(x => new MidTankLevelModel() { Max = x.MidTankType.LiterCapacity, IDSPack = x, }).ToList(); } private void MachineOperator_MachineStatusChanged(object sender, MachineStatus status) { UpdateMidTankLevels(status); } private void UpdateMidTankLevels(MachineStatus status) { if (IsVisible) { try { foreach (var item in status.IDSPacksLevels) { var model = MidTankLevels.SingleOrDefault(x => x.IDSPack.PackIndex == item.Index); if (model != null) { model.Level = item.MidTankLevel; } } } catch { Debug.WriteLine("Error on update mid tank levels. (probably because of machine status arrived before machine connected event..)"); } } } } }