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.BL.Entities;
using Tango.BL.Enumerations;
using Tango.Core.Commands;
using Tango.Integration.Operation;
using Tango.SharedUI.Helpers;
namespace Tango.MachineStudio.Technician.TechItems
{
[TechItem(21,false)]
public class JobRunnerItem : TechItem
{
public event Action StartJob;
public event Action StopJob;
private Job _job;
///
/// Gets or sets the job.
///
[XmlIgnore]
public Job Job
{
get { return _job; }
set { _job = value; RaisePropertyChangedAuto(); }
}
private Segment _segment;
///
/// Gets or sets the segment.
///
[XmlIgnore]
public Segment Segment
{
get { return _segment; }
set { _segment = value; RaisePropertyChangedAuto(); }
}
private BrushStop _brushStop;
///
/// Gets or sets the brush stop.
///
[XmlIgnore]
public BrushStop BrushStop
{
get { return _brushStop; }
set { _brushStop = value; RaisePropertyChangedAuto(); }
}
private Machine _machine;
///
/// Gets or sets the machine.
///
[XmlIgnore]
public Machine Machine
{
get { return _machine; }
set { _machine = value; RaisePropertyChangedAuto(); Init(); StartStopJobCommand.RaiseCanExecuteChanged(); }
}
private ProcessParametersTable _processParameters;
///
/// Gets or sets the process parameters.
///
[XmlIgnore]
public ProcessParametersTable ProcessParameters
{
get { return _processParameters; }
set { _processParameters = value; RaisePropertyChangedAuto(); Init(); StartStopJobCommand.RaiseCanExecuteChanged(); }
}
private Rml _rml;
///
/// Gets or sets the RML.
///
[XmlIgnore]
public Rml Rml
{
get { return _rml; }
set { _rml = value; RaisePropertyChangedAuto(); Init(); StartStopJobCommand.RaiseCanExecuteChanged(); }
}
private RunningJobStatus _runningJobStatus;
///
/// Gets or sets the running job status.
///
[XmlIgnore]
public RunningJobStatus RunningJobStatus
{
get { return _runningJobStatus; }
set { _runningJobStatus = value; RaisePropertyChangedAuto(); }
}
private bool _isJobStarted;
[XmlIgnore]
public bool IsJobStarted
{
get { return _isJobStarted; }
set { _isJobStarted = value; RaisePropertyChangedAuto(); }
}
///
/// Gets or sets the start stop job command.
///
[XmlIgnore]
public RelayCommand StartStopJobCommand { get; set; }
[XmlIgnore]
public JobHandler JobHandler { get; set; }
///
/// Initializes a new instance of the class.
///
public JobRunnerItem() : base()
{
StartStopJobCommand = new RelayCommand(StartStopJob, (x) => Job != null && Segment != null && BrushStop != null && Machine != null && Rml != null && ProcessParameters != null);
Job = new Job();
Job.Name = "Job Runner";
Job.WindingMethod = Adapter.WindingMethods.FirstOrDefault();
Job.SpoolType = Adapter.SpoolTypes.FirstOrDefault();
Job.JobType = JobTypes.Sewing;
Segment = Job.AddSolidSegment();
BrushStop = Segment.AddBrushStop();
BrushStop.ColorSpace = Adapter.ColorSpaces.SingleOrDefault(x => x.Code == ColorSpaces.Volume.ToInt32());
Name = "Job Runner";
Description = "Job Runner";
Image = ResourceHelper.GetImageFromResources("Images/rgb-big.png");
}
private void StartStopJob()
{
if (!IsJobStarted)
{
IsJobStarted = true;
StartJob?.Invoke();
}
else
{
StopJob?.Invoke();
}
}
///
/// Initializes the specified configuration.
///
/// The configuration.
/// The RML.
/// The process parameters.
public void Init()
{
if (Machine != null && Rml != null && ProcessParameters != null && BrushStop != null)
{
Job.Machine = Machine;
Job.Rml = Rml;
BrushStop.SetLiquidVolumes(Machine.Configuration, Rml, ProcessParameters);
}
}
///
/// Initializes a new instance of the class.
///
/// The job.
public JobRunnerItem(Job job) : this()
{
}
///
/// Clones this instance.
///
///
public override TechItem Clone()
{
JobRunnerItem cloned = base.Clone() as JobRunnerItem;
cloned.Job = Job.Clone();
cloned.Segment = cloned.Job.Segments.First();
cloned.BrushStop = cloned.Job.Segments.First().BrushStops.First();
return cloned;
}
}
}