using System; using System.Collections.Generic; 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.FSE.Common; using Tango.Integration.Operation; using Tango.PPC.Shared.Jobs; namespace Tango.FSE.UI.Tiles.RemoteJob { public class RemoteJobTile : DashboardTile { private Job _job; public Job Job { get { return _job; } set { _job = value; RaisePropertyChangedAuto(); } } private JobHandler _handler; public JobHandler Handler { get { return _handler; } set { _handler = value; RaisePropertyChangedAuto(); } } private RunningJobStatus _runningJobStatus; public RunningJobStatus RunningJobStatus { get { return _runningJobStatus; } set { _runningJobStatus = value; RaisePropertyChangedAuto(); } } private RemoteJobUpdateResponse _remoteJobResponse; public RemoteJobUpdateResponse RemoteJobResponse { get { return _remoteJobResponse; } set { _remoteJobResponse = value; RaisePropertyChangedAuto(); } } private bool _isRunning; public bool IsRunning { get { return _isRunning; } set { _isRunning = value; RaisePropertyChangedAuto(); } } private bool _isEureka; public bool IsEureka { get { return _isEureka; } set { _isEureka = value; RaisePropertyChangedAuto(); } } public RemoteJobTile() { Name = "Remote Job"; AutoTitleStyle = true; AutoContainerStyle = false; AutoTitleAlignment = System.Windows.Controls.Dock.Top; Column = 0; Row = 10; ColumnSpan = 12; RowSpan = 2; InitDemoJob(); } private void InitDemoJob() { IsRunning = false; Job = new Job(); Job.NumberOfUnits = 1; Job.Name = "N/A"; Job.AddSolidSegment(Color.FromRgb(70, 70, 70), 5); Job.AddSolidSegment(Colors.Gray, 5); Job.AddSolidSegment(Color.FromRgb(70, 70, 70), 5); Job.AddSolidSegment(Colors.Gray, 5); Handler = new JobHandler(() => { }, Job, null, new ProcessParametersTable() { DyeingSpeed = 50 }, JobHandlerModes.SettingUp); Handler.RaiseStatusReceived(new PMR.Printing.JobStatus() { Message = "Ready", CurrentSegmentIndex = 0, Progress = 0, }); RunningJobStatus = Handler.Status; } public override FrameworkElement GetView() { return new RemoteJobTileView(); } public override void OnApplicationStarted() { base.OnApplicationStarted(); RemoteJobProvider.RemoteJobStarted += RemoteJobProvider_RemoteJobStarted; RemoteJobProvider.RemoteJobStopped += RemoteJobProvider_RemoteJobStopped; RemoteJobProvider.RemoteJobUpdated += RemoteJobProvider_RemoteJobUpdated; MachineProvider.MachineConnected += MachineProvider_MachineConnected; } private void RemoteJobProvider_RemoteJobUpdated(object sender, Common.RemoteJob.RemoteJobUpdatedEventArgs e) { RemoteJobResponse = e.RemoteJobUpdateResponse; } private void MachineProvider_MachineConnected(object sender, Common.Connection.MachineConnectedEventArgs e) { InitDemoJob(); } private void RemoteJobProvider_RemoteJobStopped(object sender, Common.RemoteJob.RemoteJobStoppedEventArgs e) { IsRunning = false; } private void RemoteJobProvider_RemoteJobStarted(object sender, Common.RemoteJob.RemoteJobStartedEventArgs e) { if (Handler != null) { Handler.StatusChanged -= Handler_StatusChanged; } RemoteJobResponse = e.RemoteJobUpdateResponse; Handler = e.JobHandler; Handler.StatusChanged += Handler_StatusChanged; Job = e.JobHandler.Job; IsRunning = true; IsEureka = MachineProvider.MachineOperator.MachineType == MachineTypes.Eureka; } private void Handler_StatusChanged(object sender, RunningJobStatus status) { RunningJobStatus = status; } } }