using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; using Tango.Core.Commands; namespace Tango.MachineStudio.MachineDesigner.Models { public class HardwareParameter : ExtendedObject { public event EventHandler Selected; public HardwareComponent Component { get; set; } public RelayCommand DeleteCommand { get; set; } public String PropertyName { get; set; } private Object _defaultValue; public Object DefaultValue { get { return _defaultValue; } set { _defaultValue = value; } } public Type Type { get { return DefaultValue.GetType(); } } // updated after editing private Object _actualValue = null; public Object ActualValue { get { return _actualValue; } set { _actualValue = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(IsDifferent)); RaisePropertyChanged(nameof(IsValuesMatched)); } } // displayed during editing private Object _editableValue = null; public Object EditableValue { get { return _editableValue; } set { _editableValue = value; RaisePropertyChangedAuto(); } } private bool _isSelected; public bool IsSelected { get { return _isSelected; } set { _isSelected = value; OnIsSelectedChanged(); RaisePropertyChangedAuto(); if (_isSelected) { Selected?.Invoke(this, new EventArgs()); } } } private void OnIsSelectedChanged() { if (IsSelected) { EditableValue = ActualValue != null ? ActualValue : DefaultValue; } else { if (EditableValue != null) { ActualValue = EditableValue; } } } public bool IsDifferent { get { return (ActualValue != null); } } public bool IsValuesMatched { get { return ActualValue != null && ActualValue.ToString() == DefaultValue.ToString(); } } public void DeleteValue() { ActualValue = null; EditableValue = null; } public HardwareParameter() { DeleteCommand = new RelayCommand(DeleteValue); } } }