usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Media;usingSystem.Windows.Media.Imaging;usingSystem.Xml.Serialization;usingTango.Core;usingTango.Core.Helpers;usingTango.BL.Entities;usingSystem.Reflection;usingTango.BL;namespaceTango.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))]publicabstractclassTechItem:ExtendedObject{/// <summary>/// Initializes a new instance of the <see cref="TechItem"/> class./// </summary>publicTechItem(){ID=Guid.NewGuid().ToString();Name="Untitled";Adapter=ObservablesStaticCollections.Instance;_color=Colors.DodgerBlue;}privateString_description;/// <summary>/// Gets or sets the description./// </summary>[XmlIgnore]publicStringDescription{get{return_description;}set{_description=value;RaisePropertyChangedAuto();}}privateBitmapSource_image;/// <summary>/// Gets or sets the image./// </summary>[XmlIgnore]publicBitmapSourceImage{get{return_image;}set{_image=value;RaisePropertyChangedAuto();}}/// <summary>/// Gets or sets the db adapter./// </summary>[XmlIgnore]publicObservablesStaticCollectionsAdapter{get;set;}privateString_id;/// <summary>/// Unique Item ID./// </summary>publicStringID{get{return_id;}set{_id=value;RaisePropertyChanged(nameof(ID));}}privateString_name;/// <summary>/// item Name./// </summary>[XmlIgnore]publicStringName{get{return_name;}set{_name=value;RaisePropertyChanged(nameof(Name));}}privatedouble_left;/// <summary>/// Item Left./// </summary>publicdoubleLeft{get{return_left;}set{_left=value;RaisePropertyChanged(nameof(Left));}}privatedouble_top;/// <summary>/// Item Top./// </summary>publicdoubleTop{get{return_top;}set{_top=value;RaisePropertyChanged(nameof(Top));}}privatedouble_width;/// <summary>/// Item Width./// </summary>publicdoubleWidth{get{return_width;}set{_width=value;RaisePropertyChanged(nameof(Width));}}privatedouble_height;/// <summary>/// Item Height./// </summary>publicdoubleHeight{get{return_height;}set{_height=value;RaisePropertyChanged(nameof(Height));}}privatedouble_angle;/// <summary>/// Item Angle./// </summary>publicdoubleAngle{get{return_angle;}set{_angle=value;RaisePropertyChanged(nameof(Angle));}}privateString_techName;/// <summary>/// Gets or sets the tech item name./// </summary>[XmlIgnore]publicStringTechName{get{return_techName;}set{_techName=value;RaisePropertyChangedAuto();}}/// <summary>/// Gets or sets the db tech item guid./// </summary>publicStringItemGuid{get;set;}privateColor_color;/// <summary>/// Gets or sets the item color./// </summary>[XmlIgnore]publicColorColor{get{return_color;}set{_color=value;RaisePropertyChanged(nameof(Color));_colorNumber=ColorHelper.ColorToInteger(value);}}privateint_colorNumber;/// <summary>/// Gets or sets the color number (for XML serialization)./// </summary>publicintColorNumber{get{return_colorNumber;}set{_colorNumber=value;_color=ColorHelper.IntegerToColor(value);_color.A=255;RaisePropertyChanged(nameof(Color));}}/// <summary>/// Clones this instance./// </summary>/// <returns></returns>publicvirtualTechItemClone(){TechItemcloned=Activator.CreateInstance(this.GetType())asTechItem;cloned.Left=Left;cloned.Top=Top;cloned.Width=Width;cloned.Height=Height;cloned.Angle=Angle;cloned.Color=Color;returncloned;}/// <summary>/// Gets the available tech items./// </summary>/// <returns></returns>publicstaticList<TechItem>GetAvailableTechItems(){List<TechItem>items=newList<TechItem>();foreach(vartypeintypeof(TechItem).Assembly.GetTypes().Where(x=>typeof(TechItem).IsAssignableFrom(x)&&!x.IsAbstract).OrderBy(x=>x.GetCustomAttribute<TechItemAttribute>().Index)){items.Add(Activator.CreateInstance(type)asTechItem);}returnitems;}/// <summary>/// Sets the bounds./// </summary>/// <param name="bounds">The bounds.</param>publicvoidSetBounds(Rectbounds){Left=bounds.Left;Top=bounds.Top;Width=bounds.Width;Height=bounds.Height;}/// <summary>/// Gets the bounds./// </summary>/// <returns></returns>publicRectGetBounds(){returnnewRect(Left,Top,Width,Height);}}}