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 .
///
public class HardwareParameter : ExtendedObject, IHasDifference
{
#region Properties
public HardwareComponent Component { get; set; }
public String PropertyName { get; set; }
private Object _defaultValue;
///
/// The default value contains data from database
///
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(); }
}
private Object _actualValue = null;
///
/// The value contains modified data, saved in database or immediately after editing in this session.
///
public Object ActualValue
{
get { return _actualValue; }
set
{
_actualValue = value;
RaisePropertyChangedAuto();
RaisePropertyChanged(nameof(HasDifferences));
RaisePropertyChanged(nameof(IsValuesMatched));
}
}
private Object _editableValue = null;
///
/// 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.
///
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
#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
}
}