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;
}
}
}