TBF.UI : Item.EditXyz added.

This commit is contained in:
Milan Hanajik 2019-10-29 13:34:47 +01:00
parent 7fd4966757
commit 21cbc4220e
7 changed files with 361 additions and 0 deletions

View File

@ -2156,6 +2156,12 @@
<DependentUpon>PicturesTabPageCtrl.cs</DependentUpon>
</Compile>
<Compile Include="UI\Constants.cs" />
<Compile Include="UI\Item\EditDouble.cs" />
<Compile Include="UI\Item\EditEnum.cs" />
<Compile Include="UI\Item\EditFloat.cs" />
<Compile Include="UI\Item\EditInt.cs" />
<Compile Include="UI\Item\EditString.cs" />
<Compile Include="UI\Item\IEditItem.cs" />
<Compile Include="UI\Graphs\GraphsTabPageCtrl.cs">
<SubType>UserControl</SubType>
</Compile>

66
TBF/UI/Item/EditDouble.cs Normal file
View File

@ -0,0 +1,66 @@
using System;
using System.Windows.Forms;
namespace TBF.UI.Item
{
public class EditDouble : IEditItem
{
string name;
double variable;
double lowerLimit;
double upperLimit;
string format;
TextBox textBox;
public EditDouble(string name, ref double variable, double lowerLimit, double upperLimit)
{
this.name = name;
this.variable = variable;
this.lowerLimit = lowerLimit;
this.upperLimit = upperLimit;
this.format = null;
this.textBox = new TextBox();
}
public EditDouble(string name, ref double variable, double lowerLimit)
: this (name, ref variable, lowerLimit, Double.MaxValue)
{
}
public EditDouble(string name, ref double variable)
: this(name, ref variable, Double.MinValue, Double.MaxValue)
{
}
public string Name() { return name; }
public Control EmbeddedControl() { return textBox; }
public string Print() { return string.IsNullOrEmpty(format) ? variable.ToString() : variable.ToString(format); }
public void Update(string strValue) { variable = Utils.ParseSDouble(strValue); }
public bool Validate(string strValue, out string message)
{
double dummy;
if (!Utils.TryParseSDouble(strValue, out dummy))
{
message = string.Format("{0} is invalid", name);
return false;
}
else if (dummy < lowerLimit)
{
message = string.Format("{0} is smaller then {1}", name, lowerLimit);
return false;
}
else if (dummy > upperLimit)
{
message = string.Format("{0} is larger then {1}", name, upperLimit);
return false;
}
else
{
message = string.Empty;
return true;
}
}
}
}

71
TBF/UI/Item/EditEnum.cs Normal file
View File

@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace TBF.UI.Item
{
public class EditEnum<T> : IEditItem where T : IComparable
{
string name;
T variable;
IEnumerable<T> values;
string[] strValues;
ComboBox comboBox;
public EditEnum(string name, ref T variable, IList<T>values, string[] strValues)
{
if (values.Count != strValues.Length) throw new Exception("values and strValues lengths are different");
this.name = name;
this.variable = variable;
this.values = values;
this.strValues = strValues;
this.comboBox = new ComboBox();
foreach (var v in strValues) comboBox.Items.Add(v);
}
public string Name() { return name; }
public Control EmbeddedControl() { return comboBox; }
public string Print()
{
int ix = 0;
foreach (var v in values)
{
if (v.CompareTo(variable) == 0) return strValues[ix];
ix++;
}
return string.Empty;
}
public void Update(string strValue)
{
int ix = 0;
foreach (var v in values)
{
if (strValues[ix++].Equals(strValue))
{
variable = v;
return;
}
}
}
public bool Validate(string strValue, out string message)
{
foreach (var sv in strValues)
{
if (sv == strValue)
{
message = string.Empty;
return true;
}
}
message = string.Format("{0} is invalid", name);
return false;
}
}
}

66
TBF/UI/Item/EditFloat.cs Normal file
View File

@ -0,0 +1,66 @@
using System;
using System.Windows.Forms;
namespace TBF.UI.Item
{
public class EditFloat
{
string name;
float variable;
float lowerLimit;
float upperLimit;
string format;
TextBox textBox;
public EditFloat(string name, ref float variable, float lowerLimit, float upperLimit)
{
this.name = name;
this.variable = variable;
this.lowerLimit = lowerLimit;
this.upperLimit = upperLimit;
this.format = null;
this.textBox = new TextBox();
}
public EditFloat(string name, ref float variable, float lowerLimit)
: this(name, ref variable, lowerLimit, Single.MaxValue)
{
}
public EditFloat(string name, ref float variable)
: this(name, ref variable, Single.MinValue, Single.MaxValue)
{
}
public string Name() { return name; }
public Control EmbeddedControl() { return textBox; }
public string Print() { return string.IsNullOrEmpty(format) ? variable.ToString() : variable.ToString(format); }
public void Update(string strValue) { variable = Utils.ParseSFloat(strValue); }
public bool Validate(string strValue, out string message)
{
float dummy;
if (!Utils.TryParseSFloat(strValue, out dummy))
{
message = string.Format("{0} is invalid", name);
return false;
}
else if (dummy < lowerLimit)
{
message = string.Format("{0} is smaller then {1}", name, lowerLimit);
return false;
}
else if (dummy > upperLimit)
{
message = string.Format("{0} is larger then {1}", name, upperLimit);
return false;
}
else
{
message = string.Empty;
return true;
}
}
}
}

64
TBF/UI/Item/EditInt.cs Normal file
View File

@ -0,0 +1,64 @@
using System;
using System.Windows.Forms;
namespace TBF.UI.Item
{
public class EditInt : IEditItem
{
string name;
int variable;
int lowerLimit;
int upperLimit;
TextBox textBox;
public EditInt(string name, ref int variable, int lowerLimit, int upperLimit)
{
this.name = name;
this.variable = variable;
this.lowerLimit = lowerLimit;
this.upperLimit = upperLimit;
this.textBox = new TextBox();
}
public EditInt(string name, ref int variable, int lowerLimit)
: this (name, ref variable, lowerLimit, Int32.MaxValue)
{
}
public EditInt(string name, ref int variable)
: this(name, ref variable, Int32.MinValue, Int32.MaxValue)
{
}
public string Name() { return name; }
public Control EmbeddedControl() { return textBox; }
public string Print() { return variable.ToString(); }
public void Update(string strValue) { variable = int.Parse(strValue); }
public bool Validate(string strValue, out string message)
{
int dummy;
if (!int.TryParse(strValue, out dummy))
{
message = string.Format("{0} is invalid", name);
return false;
}
else if (dummy < lowerLimit)
{
message = string.Format("{0} is smaller then {1}", name, lowerLimit);
return false;
}
else if (dummy > upperLimit)
{
message = string.Format("{0} is larger then {1}", name, upperLimit);
return false;
}
else
{
message = string.Empty;
return true;
}
}
}
}

47
TBF/UI/Item/EditString.cs Normal file
View File

@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace TBF.UI.Item
{
public class EditString
{
string name;
string variable;
IList<string> alreadyUsed;
TextBox textBox;
public EditString(string name, ref string variable, IList<string> alreadyUsed)
{
this.name = name;
this.variable = variable;
this.alreadyUsed = alreadyUsed;
this.textBox = new TextBox();
}
public EditString(string name, ref string variable)
: this (name, ref variable, new List<string>())
{
}
public string Name() { return name; }
public Control EmbeddedControl() { return textBox; }
public string Print() { return variable; }
public void Update(string strValue) { variable = strValue; }
public bool Validate(string strValue, out string message)
{
if (alreadyUsed.Contains(strValue))
{
message = string.Format("Value '{0}' was already used", strValue);
return false;
}
else
{
message = string.Empty;
return true;
}
}
}
}

41
TBF/UI/Item/IEditItem.cs Normal file
View File

@ -0,0 +1,41 @@
using System;
using System.Windows.Forms;
namespace TBF.UI.Item
{
public interface IEditItem
{
/// <summary>
/// Returns name of the parameter to be displayed as a column header, etc.
/// </summary>
/// <returns>Name of the parameter</returns>
string Name();
/// <summary>
/// Returns embedded control (Textbox, ComboBox, etc.).
/// </summary>
/// <returns>Embedded control</returns>
Control EmbeddedControl();
/// <summary>
/// Converts the embedded variable value to its string representation.
/// </summary>
/// <returns>String representation of the embedded variable</returns>
string Print();
/// <summary>
/// Updates the associated embedded variable from the given string representation.
/// </summary>
/// <param name="strValue">String representation of the new value</param>
void Update(string strValue);
/// <summary>
/// Determines whether the edited value (string representation) is valid.
/// If Validate(..) returns true, then Update(..) has to correctly update the embedded variable.
/// </summary>
/// <param name="strValue">Edited value</param>
/// <param name="message">Explanation message in case Validate() returns false</param>
/// <returns>true = string is OK, false = string is wrong (see 'message')</returns>
bool Validate(string strValue, out string message);
}
}