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 { /// /// The HardwareParameter class. /// Contains default/editable/actual value and data type of each hardware parameter reflected in . /// /// /// This class provides data state changes. /// public class HardwareParameter : ExtendedObject, IHasDifference { #region properties public HardwareComponent Component { get; set; } public String PropertyName { get; set; } /// /// The default value contains data from database /// private Object _defaultValue; public Object DefaultValue { get { return _defaultValue; } set { _defaultValue = value; } } /// /// The type of hardware parameter is used for display correct ui element. /// Can be boolean, int32, or Double /// public Type Type { get { return DefaultValue.GetType(); } } /// /// The value contains modified data, saved in database or immediately after editing in this session /// private Object _actualValue = null; public Object ActualValue { get { return _actualValue; } set { _actualValue = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(HasDifferences)); RaisePropertyChanged(nameof(IsValuesMatched)); } } /// /// The editable value contains value displayed in edit box in UI. /// Initialization the value occurs by clicking in UI and the value will be equal actual value if it exists or default value. /// 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()); } } } /// /// Used in UI to display modified value /// public bool HasDifferences { get { return (ActualValue != null); } } /// /// Used to display warning explanation icon in case actual value equals default value /// public bool IsValuesMatched { get { return ActualValue != null && ActualValue.ToString() == DefaultValue.ToString(); } } #endregion properties #region events /// /// Occurs when start select mode. /// Used to set in all others Parameter IsSelected to false except this. /// public event EventHandler Selected; private void OnIsSelectedChanged() { if (IsSelected) { EditableValue = ActualValue != null ? ActualValue : DefaultValue; } else { if (EditableValue != null) { ActualValue = EditableValue; } } } #endregion #region constructors public HardwareParameter() { DeleteCommand = new RelayCommand(DeleteValue); } #endregion #region commands public RelayCommand DeleteCommand { get; set; } public void DeleteValue() { ActualValue = null; EditableValue = null; } #endregion } }