using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Xml.Serialization;
using Tango.Core;
using Tango.Core.Helpers;
using Tango.BL.Entities;
using System.Reflection;
using Tango.BL;
namespace Tango.MachineStudio.Technician.TechItems
{
/// <summary>
/// Represents a tech item base class.
/// </summary>
/// <seealso cref="Tango.Core.ExtendedObject" />
[XmlInclude(typeof(DispenserItem))]
[XmlInclude(typeof(DigitalOutItem))]
[XmlInclude(typeof(MeterItem))]
[XmlInclude(typeof(MonitorItem))]
[XmlInclude(typeof(MotorItem))]
[XmlInclude(typeof(MultiGraphItem))]
[XmlInclude(typeof(SingleGraphItem))]
[XmlInclude(typeof(ThreadMotionItem))]
[XmlInclude(typeof(MotorGroupItem))]
[XmlInclude(typeof(DigitalInItem))]
[XmlInclude(typeof(ControllerItem))]
[XmlInclude(typeof(PidItem))]
[XmlInclude(typeof(WinderItem))]
[XmlInclude(typeof(DancerItem))]
[XmlInclude(typeof(SpeedSensorItem))]
[XmlInclude(typeof(BlowerItem))]
[XmlInclude(typeof(BreakSensorItem))]
[XmlInclude(typeof(ProcessParametersItem))]
[XmlInclude(typeof(JobRunnerItem))]
[XmlInclude(typeof(TextItem))]
[XmlInclude(typeof(HeaterItem))]
[XmlInclude(typeof(MonitorRecorderItem))]
[XmlInclude(typeof(ValveItem))]
public abstract class TechItem : ExtendedObject
{
/// <summary>
/// Initializes a new instance of the <see cref="TechItem"/> class.
/// </summary>
public TechItem()
{
ID = Guid.NewGuid().ToString();
Name = "Untitled";
Adapter = ObservablesStaticCollections.Instance;
_color = Colors.DodgerBlue;
}
private String _description;
/// <summary>
/// Gets or sets the description.
/// </summary>
[XmlIgnore]
public String Description
{
get { return _description; }
set { _description = value; RaisePropertyChangedAuto(); }
}
private BitmapSource _image;
/// <summary>
/// Gets or sets the image.
/// </summary>
[XmlIgnore]
public BitmapSource Image
{
get { return _image; }
set { _image = value; RaisePropertyChangedAuto(); }
}
/// <summary>
/// Gets or sets the db adapter.
/// </summary>
[XmlIgnore]
public ObservablesStaticCollections Adapter { get; set; }
private String _id;
/// <summary>
/// Unique Item ID.
/// </summary>
public String ID
{
get { return _id; }
set { _id = value; RaisePropertyChanged(nameof(ID)); }
}
private String _name;
/// <summary>
/// item Name.
/// </summary>
[XmlIgnore]
public String Name
{
get { return _name; }
set { _name = value; RaisePropertyChanged(nameof(Name)); }
}
private double _left;
/// <summary>
/// Item Left.
/// </summary>
public double Left
{
get { return _left; }
set { _left = value; RaisePropertyChanged(nameof(Left)); }
}
private double _top;
/// <summary>
/// Item Top.
/// </summary>
public double Top
{
get { return _top; }
set { _top = value; RaisePropertyChanged(nameof(Top)); }
}
private double _width;
/// <summary>
/// Item Width.
/// </summary>
public double Width
{
get { return _width; }
set { _width = value; RaisePropertyChanged(nameof(Width)); }
}
private double _height;
/// <summary>
/// Item Height.
/// </summary>
public double Height
{
get { return _height; }
set { _height = value; RaisePropertyChanged(nameof(Height)); }
}
private double _angle;
/// <summary>
/// Item Angle.
/// </summary>
public double Angle
{
get { return _angle; }
set { _angle = value; RaisePropertyChanged(nameof(Angle)); }
}
private String _techName;
/// <summary>
/// Gets or sets the tech item name.
/// </summary>
[XmlIgnore]
public String TechName
{
get { return _techName; }
set { _techName = value; RaisePropertyChangedAuto(); }
}
/// <summary>
/// Gets or sets the db tech item guid.
/// </summary>
public String ItemGuid { get; set; }
private Color _color;
/// <summary>
/// Gets or sets the item color.
/// </summary>
[XmlIgnore]
public Color Color
{
get { return _color; }
set
{
_color = value;
RaisePropertyChanged(nameof(Color));
_colorNumber = ColorHelper.ColorToInteger(value);
}
}
private int _colorNumber;
/// <summary>
/// Gets or sets the color number (for XML serialization).
/// </summary>
public int ColorNumber
{
get { return _colorNumber; }
set
{
_colorNumber = value;
_color = ColorHelper.IntegerToColor(value);
_color.A = 255;
RaisePropertyChanged(nameof(Color));
}
}
/// <summary>
/// Clones this instance.
/// </summary>
/// <returns></returns>
public virtual TechItem Clone()
{
TechItem cloned = Activator.CreateInstance(this.GetType()) as TechItem;
cloned.Left = Left;
cloned.Top = Top;
cloned.Width = Width;
cloned.Height = Height;
cloned.Angle = Angle;
cloned.Color = Color;
return cloned;
}
/// <summary>
/// Gets the available tech items.
/// </summary>
/// <returns></returns>
public static List<TechItem> GetAvailableTechItems()
{
List<TechItem> items = new List<TechItem>();
foreach (var type in typeof(TechItem).Assembly.GetTypes().Where(x => typeof(TechItem).IsAssignableFrom(x) && !x.IsAbstract).OrderBy(x => x.GetCustomAttribute<TechItemAttribute>().Index))
{
items.Add(Activator.CreateInstance(type) as TechItem);
}
return items;
}
/// <summary>
/// Sets the bounds.
/// </summary>
/// <param name="bounds">The bounds.</param>
public void SetBounds(Rect bounds)
{
Left = bounds.Left;
Top = bounds.Top;
Width = bounds.Width;
Height = bounds.Height;
}
/// <summary>
/// Gets the bounds.
/// </summary>
/// <returns></returns>
public Rect GetBounds()
{
return new Rect(Left, Top, Width, Height);
}
}
}