2022-09-26 10:49:29 +08:00
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
|
|
|
|
|
namespace RecipeEditorLib.RecipeModel.Params
|
|
|
|
|
{
|
|
|
|
|
public class Sets3RatioParam : ParamBaseWithGenericValue<string>
|
|
|
|
|
{
|
|
|
|
|
#region Variables
|
|
|
|
|
|
|
|
|
|
private const string MATCH_PATTERN = @"^([0-9]+):([0-9]+):([0-9]+)$";
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Constructors
|
|
|
|
|
|
|
|
|
|
public Sets3RatioParam()
|
|
|
|
|
{
|
|
|
|
|
_value = "1:1:1";
|
|
|
|
|
Ratio = new [] { 1.0, 1.0, 1.0 };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Sets3RatioParam(string initValue) : base(initValue)
|
|
|
|
|
{
|
|
|
|
|
Ratio = new[] { 1.0, 1.0, 1.0 };
|
|
|
|
|
ParseRatio(initValue);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Properties
|
|
|
|
|
|
|
|
|
|
public override string Value
|
|
|
|
|
{
|
|
|
|
|
get => _value;
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
_value = value;
|
|
|
|
|
NotifyOfPropertyChange(nameof(value));
|
|
|
|
|
|
|
|
|
|
Feedback?.Invoke(this);
|
|
|
|
|
|
|
|
|
|
_isSaved = _value.Equals(_valueSnapshot);
|
|
|
|
|
NotifyOfPropertyChange(nameof(IsSaved));
|
|
|
|
|
|
|
|
|
|
Validate();
|
|
|
|
|
ParseRatio(value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public double[] Ratio { get; private set; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Methods
|
|
|
|
|
|
|
|
|
|
private void ParseRatio(string value)
|
|
|
|
|
{
|
|
|
|
|
var m = Regex.Match(value, MATCH_PATTERN);
|
|
|
|
|
if (m.Success)
|
|
|
|
|
{
|
|
|
|
|
Ratio[0] = double.Parse(m.Groups[1].Value);
|
|
|
|
|
Ratio[1] = double.Parse(m.Groups[2].Value);
|
|
|
|
|
Ratio[2] = double.Parse(m.Groups[3].Value);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Ratio[0] = double.NaN;
|
|
|
|
|
Ratio[1] = double.NaN;
|
|
|
|
|
Ratio[2] = double.NaN;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void Validate()
|
|
|
|
|
{
|
2022-10-15 12:54:19 +08:00
|
|
|
|
if (ValidateRatioString(_value))
|
2022-09-26 10:49:29 +08:00
|
|
|
|
{
|
|
|
|
|
IsValidated = true;
|
|
|
|
|
ValidationError = null;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
IsValidated = false;
|
|
|
|
|
ValidationError = "Format error";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
2022-10-15 12:54:19 +08:00
|
|
|
|
|
|
|
|
|
public static bool ValidateRatioString(string value)
|
|
|
|
|
{
|
|
|
|
|
return Regex.IsMatch(value, MATCH_PATTERN);
|
|
|
|
|
}
|
2022-09-26 10:49:29 +08:00
|
|
|
|
}
|
|
|
|
|
}
|