Editor/InchConverterWidget.cs
using System.Text.RegularExpressions;
using Editor;
namespace Sonic853.InchConverterLib.Editors
{
[Dock("Editor", "Inch Converter")]
public class InchConverterWidget : Widget
{
protected static InchConverterWidget instance;
public static InchConverterWidget Instance => instance ?? new(null);
LineEdit inputm;
LineEdit inputcm;
LineEdit inputin;
public InchConverterWidget(Widget parent) : base(parent, false)
{
// Create a Column Layout
Layout = Layout.Column();
// Give it some Margins/Spacing
Layout.Margin = 4;
Layout.Spacing = 4;
// Apply some CSS styling
SetStyles("background-color: #303445; color: white; font-weight: 600;");
// Add some child Widgets to the Layout
Layout.Add(new Label("m:", this));
inputm = Layout.Add(new LineEdit()
{
Text = "0.0254",
});
Layout.Add(new Label("cm:", this));
inputcm = Layout.Add(new LineEdit()
{
Text = "2.54",
});
Layout.Add(new Label("inch:", this));
inputin = Layout.Add(new LineEdit()
{
Text = "1",
});
inputm.TextChanged += InputMTextChanged;
inputcm.TextChanged += InputCMTextChanged;
inputin.TextChanged += InputINTextChanged;
}
void InputMTextChanged(string text)
{
var _text = NumberOnly(text);
if (!float.TryParse(_text, out var m)) { return; }
if (m == 0f)
{
ToZero();
return;
}
inputcm.TextChanged -= InputCMTextChanged;
inputcm.Text = $"{InchConverter.MToCm(m)}";
inputcm.TextChanged += InputCMTextChanged;
inputin.TextChanged -= InputINTextChanged;
inputin.Text = $"{InchConverter.MToIn(m)}";
inputin.TextChanged += InputINTextChanged;
inputm.TextChanged -= InputMTextChanged;
inputm.Text = _text;
inputm.TextChanged += InputMTextChanged;
}
void InputCMTextChanged(string text)
{
var _text = NumberOnly(text);
if (!float.TryParse(_text, out var cm)) { return; }
if (cm == 0f)
{
ToZero();
return;
}
inputm.TextChanged -= InputMTextChanged;
inputm.Text = $"{InchConverter.CmToM(cm)}";
inputm.TextChanged += InputMTextChanged;
inputin.TextChanged -= InputINTextChanged;
inputin.Text = $"{InchConverter.CmToIn(cm)}";
inputin.TextChanged += InputINTextChanged;
inputcm.TextChanged -= InputCMTextChanged;
inputcm.Text = _text;
inputcm.TextChanged += InputCMTextChanged;
}
void InputINTextChanged(string text)
{
var _text = NumberOnly(text);
if (!float.TryParse(_text, out var inch)) { return; }
if (inch == 0f)
{
ToZero();
return;
}
inputcm.TextChanged -= InputCMTextChanged;
inputcm.Text = $"{InchConverter.InToCm(inch)}";
inputcm.TextChanged += InputCMTextChanged;
inputm.TextChanged -= InputMTextChanged;
inputm.Text = $"{InchConverter.InToM(inch)}";
inputm.TextChanged += InputMTextChanged;
inputin.TextChanged -= InputINTextChanged;
inputin.Text = _text;
inputin.TextChanged += InputINTextChanged;
}
void ToZero()
{
inputcm.TextChanged -= InputCMTextChanged;
inputcm.Text = "0";
inputcm.TextChanged += InputCMTextChanged;
inputin.TextChanged -= InputINTextChanged;
inputin.Text = "0";
inputin.TextChanged += InputINTextChanged;
inputm.TextChanged -= InputMTextChanged;
inputm.Text = "0";
inputm.TextChanged += InputMTextChanged;
}
string NumberOnly(string text)
{
var _text = Regex.Replace(text, @"[^0-9.]", "");
if (string.IsNullOrEmpty(_text))
{
_text = "0";
}
return _text;
}
protected override bool OnClose()
{
base.OnClose();
instance = null;
return true;
}
}
}