using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Newtonsoft.Json;
using TeamAAS.Feeder.Enums;
namespace TeamAAS.Feeder.Models
{
public enum SequenceStepType
{
[Description("方向振动")]
Direction,
[Description("延时等待")]
Delay,
}
public class SequenceStep : INotifyPropertyChanged
{
private int _index;
private SequenceStepType _stepType = SequenceStepType.Direction;
private FeederAction _direction = FeederAction.Right;
private int _timeMs = 500;
private string _note = "";
private bool _enabled = true;
[JsonIgnore]
public int Index
{
get { return _index; }
set { SetProperty(ref _index, value); }
}
public SequenceStepType StepType
{
get { return _stepType; }
set { SetProperty(ref _stepType, value); }
}
public FeederAction Direction
{
get { return _direction; }
set { SetProperty(ref _direction, value); }
}
///
/// 统一时间字段:方向振动时=振动时长(ms),延时等待时=延时时长(ms)
///
public int TimeMs
{
get { return _timeMs; }
set { SetProperty(ref _timeMs, value); }
}
public string Note
{
get { return _note; }
set { SetProperty(ref _note, value); }
}
public bool Enabled
{
get { return _enabled; }
set { SetProperty(ref _enabled, value); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer.Default.Equals(storage, value)) return false;
storage = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
return true;
}
}
public class SequenceSet : INotifyPropertyChanged
{
private string _name = "";
private string _description = "";
public string Name
{
get { return _name; }
set { SetProperty(ref _name, value); }
}
public string Description
{
get { return _description; }
set { SetProperty(ref _description, value); }
}
public ObservableCollection Steps { get; set; }
= new ObservableCollection();
public SequenceSet Clone()
{
var json = JsonConvert.SerializeObject(this);
return JsonConvert.DeserializeObject(json);
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (EqualityComparer.Default.Equals(storage, value)) return false;
storage = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
return true;
}
}
}