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;
using Tango.Core.DI;
using Tango.MachineStudio.Common.Buid;
namespace Tango.MachineStudio.Technician.TechItems
{
///
/// Represents a tech item base class.
///
///
[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
{
///
/// Initializes a new instance of the class.
///
public TechItem()
{
ID = Guid.NewGuid().ToString();
Name = "Untitled";
Adapter = ObservablesStaticCollections.Instance;
_color = Colors.DodgerBlue;
}
private String _description;
///
/// Gets or sets the description.
///
[XmlIgnore]
public String Description
{
get { return _description; }
set { _description = value; RaisePropertyChangedAuto(); }
}
private BitmapSource _image;
///
/// Gets or sets the image.
///
[XmlIgnore]
public BitmapSource Image
{
get { return _image; }
set { _image = value; RaisePropertyChangedAuto(); }
}
///
/// Gets or sets the db adapter.
///
[XmlIgnore]
public ObservablesStaticCollections Adapter { get; set; }
private String _id;
///
/// Unique Item ID.
///
public String ID
{
get { return _id; }
set { _id = value; RaisePropertyChanged(nameof(ID)); }
}
private String _name;
///
/// item Name.
///
[XmlIgnore]
public String Name
{
get { return _name; }
set { _name = value; RaisePropertyChanged(nameof(Name)); }
}
private String _customName;
///
/// Gets or sets the name of the custom.
///
public String CustomName
{
get { return _customName; }
set { _customName = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(TechNameFinal)); }
}
private double _left;
///
/// Item Left.
///
public double Left
{
get { return _left; }
set { _left = value; RaisePropertyChanged(nameof(Left)); }
}
private double _top;
///
/// Item Top.
///
public double Top
{
get { return _top; }
set { _top = value; RaisePropertyChanged(nameof(Top)); }
}
private double _width;
///
/// Item Width.
///
public double Width
{
get { return _width; }
set { _width = value; RaisePropertyChanged(nameof(Width)); }
}
private double _height;
///
/// Item Height.
///
public double Height
{
get { return _height; }
set { _height = value; RaisePropertyChanged(nameof(Height)); }
}
private double _angle;
///
/// Item Angle.
///
public double Angle
{
get { return _angle; }
set { _angle = value; RaisePropertyChanged(nameof(Angle)); }
}
private String _techName;
///
/// Gets or sets the tech item name.
///
[XmlIgnore]
public String TechName
{
get { return _techName; }
set { _techName = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(TechNameFinal)); }
}
private String _techNameFinal;
public String TechNameFinal
{
get
{
if (CustomName.IsNotNullOrEmpty())
{
return CustomName;
}
else
{
return _techName;
}
}
set { _techNameFinal = value; }
}
///
/// Gets or sets the db tech item guid.
///
public String ItemGuid { get; set; }
private Color _color;
///
/// Gets or sets the item color.
///
[XmlIgnore]
public Color Color
{
get { return _color; }
set
{
_color = value;
RaisePropertyChanged(nameof(Color));
_colorNumber = ColorHelper.ColorToInteger(value);
}
}
private int _colorNumber;
///
/// Gets or sets the color number (for XML serialization).
///
public int ColorNumber
{
get { return _colorNumber; }
set
{
_colorNumber = value;
_color = ColorHelper.IntegerToColor(value);
_color.A = 255;
RaisePropertyChanged(nameof(Color));
}
}
///
/// Clones this instance.
///
///
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;
}
///
/// Gets the available tech items.
///
///
public static List GetAvailableTechItems()
{
List items = new List();
var buildProvder = TangoIOC.Default.GetInstance();
foreach (var type in typeof(TechItem).Assembly.GetTypes().Where(x => typeof(TechItem).IsAssignableFrom(x) && !x.IsAbstract).Where(x => x.GetCustomAttribute().SupportsLite || buildProvder.BuildType == MSBuildType.Default).OrderBy(x => x.GetCustomAttribute().Index))
{
items.Add(Activator.CreateInstance(type) as TechItem);
}
return items;
}
///
/// Sets the bounds.
///
/// The bounds.
public void SetBounds(Rect bounds)
{
Left = bounds.Left;
Top = bounds.Top;
Width = bounds.Width;
Height = bounds.Height;
}
///
/// Gets the bounds.
///
///
public Rect GetBounds()
{
return new Rect(Left, Top, Width, Height);
}
}
}