using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using System.Xml.Serialization; using Tango.BL; using Tango.BL.Entities; using Tango.Core.Commands; using Tango.Core.ExtensionMethods; using Tango.SharedUI.Helpers; namespace Tango.MachineStudio.Technician.TechItems { /// /// Represents a process parameters table item. /// /// [TechItem(20, false)] public class ProcessParametersItem : TechItem { public static ObservableCollection ProcessParametersTables { get; set; } static ProcessParametersItem() { ProcessParametersTables = new ObservableCollection(); } public class ParameterIndex { public String Name { get; set; } public int Index { get; set; } } private static int _counter = 0; public event EventHandler PushParametersPressed; private ProcessParametersTable _processParameters; /// /// Gets or sets the process parameters. /// public ProcessParametersTable ProcessParameters { get { return _processParameters; } set { _processParameters = value; RaisePropertyChangedAuto(); } } /// /// Gets or sets the parameters indices. /// public List ParametersIndices { get; set; } /// /// Gets or sets the push parameters command. /// [XmlIgnore] public RelayCommand PushParametersCommand { get; set; } private Rml _selectedResetRml; /// /// Gets or sets the selected reset RML. /// [XmlIgnore] public Rml SelectedResetRML { get { return _selectedResetRml; } set { _selectedResetRml = value; RaisePropertyChangedAuto(); ResetToRMLCommand.RaiseCanExecuteChanged(); } } /// /// Gets or sets the push parameters command. /// [XmlIgnore] public RelayCommand ResetToRMLCommand { get; set; } /// /// Initializes a new instance of the class. /// public ProcessParametersItem() : base() { ParametersIndices = new List(); Name = "Process Parameters"; Description = "Process parameters table"; Image = ResourceHelper.GetImageFromResources("Images/process-params.png"); ProcessParameters = new ProcessParametersTable(); ProcessParameters.Name = "Process parameters " + _counter++; Color = Colors.DodgerBlue; PushParametersCommand = new RelayCommand(() => PushParametersPressed?.Invoke(this, ProcessParameters)); ResetToRMLCommand = new RelayCommand(ResetToRml, () => SelectedResetRML != null); if (_counter > 1) { String name = ProcessParameters.Name; ProcessParametersTables.Add(ProcessParameters); ProcessParameters.Name = name; } } private void ResetToRml() { if (SelectedResetRML != null) { using (ObservablesContext db = ObservablesContext.CreateDefault()) { var group = db.Adapter.GetRmlActiveProcessParametersTablesGroup(SelectedResetRML.Guid); if (group != null) { var table = group.ProcessParametersTables.OrderBy(x => x.TableIndex).FirstOrDefault(); if (table != null) { table.MapPrimitivesTo(ProcessParameters); } } } } } /// /// Initializes a new instance of the class. /// /// The process parameters. public ProcessParametersItem(ProcessParametersTable processParameters) : this() { } public override TechItem Clone() { ProcessParametersItem cloned = base.Clone() as ProcessParametersItem; cloned.ProcessParameters = ProcessParameters.Clone(); cloned.ParametersIndices = ParametersIndices.Select(x => new ParameterIndex() { Index = x.Index, Name = x.Name }).ToList(); return cloned; } } }