From 621ab8d23d10c892a18c39234b24266fd90b90fa Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Wed, 29 Jul 2020 19:35:57 -0700 Subject: Separate classes into files, add Field class for text box state --- grapher/Field.cs | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 grapher/Field.cs (limited to 'grapher/Field.cs') diff --git a/grapher/Field.cs b/grapher/Field.cs new file mode 100644 index 0000000..641bb2a --- /dev/null +++ b/grapher/Field.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace grapher +{ + public class Field + { + #region Enums + + public enum FieldState + { + Undefined, + Default, + Typing, + Entered, + Unavailable, + } + + #endregion Enums + + + #region Constructors + + public Field(string defaultText, TextBox box, double defaultData) + { + DefaultText = defaultText; + Box = box; + Data = defaultData; + State = FieldState.Undefined; + box.KeyDown += KeyDown; + + SetToDefault(); + } + + #endregion Constructors + + #region Properties + + TextBox Box { get; } + + public double Data { get; private set; } + + public string DefaultText { get; } + + public FieldState State { get; private set; } + + #endregion Properties + + #region Methods + + public void SetToDefault() + { + if (State != FieldState.Default) + { + Box.BackColor = Color.AntiqueWhite; + Box.ForeColor = Color.Gray; + Box.Text = DefaultText; + State = FieldState.Default; + } + } + + public void SetToTyping() + { + if (State != FieldState.Typing) + { + Box.BackColor = Color.White; + Box.ForeColor = Color.Black; + State = FieldState.Typing; + } + } + + public void SetToEntered() + { + if (State != FieldState.Entered) + { + Box.BackColor = Color.White; + Box.ForeColor = Color.DarkGray; + State = FieldState.Entered; + } + } + + public void SetToUnavailable() + { + if (State != FieldState.Unavailable) + { + Box.BackColor = Color.LightGray; + Box.ForeColor = Color.LightGray; + Box.Text = string.Empty; + } + } + + public void KeyDown(object sender, KeyEventArgs e) + { + if (TryHandleWithEnter(e, sender, out double data)) + { + Data = data; + } + } + + private bool TryHandleWithEnter(KeyEventArgs e, object sender, out double data) + { + bool validEntry = false; + data = 0.0; + + if (e.KeyCode == Keys.Enter) + { + try + { + data = Convert.ToDouble(((TextBox)sender).Text); + validEntry = true; + } + catch + { + } + + e.Handled = true; + e.SuppressKeyPress = true; + } + + return validEntry; + } + + #endregion Methods + } +} -- cgit v1.2.3 From 769deb7d9f8fca973432e74d2a6fac8697091fc2 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Wed, 29 Jul 2020 20:10:18 -0700 Subject: All single-value boxes use fields --- grapher/Field.cs | 58 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 44 insertions(+), 14 deletions(-) (limited to 'grapher/Field.cs') diff --git a/grapher/Field.cs b/grapher/Field.cs index 641bb2a..4be87ba 100644 --- a/grapher/Field.cs +++ b/grapher/Field.cs @@ -26,12 +26,13 @@ namespace grapher #region Constructors - public Field(string defaultText, TextBox box, double defaultData) + public Field(string defaultText, TextBox box, Form containingForm, double defaultData) { DefaultText = defaultText; Box = box; Data = defaultData; State = FieldState.Undefined; + ContainingForm = containingForm; box.KeyDown += KeyDown; SetToDefault(); @@ -43,6 +44,8 @@ namespace grapher TextBox Box { get; } + Form ContainingForm { get; } + public double Data { get; private set; } public string DefaultText { get; } @@ -57,11 +60,13 @@ namespace grapher { if (State != FieldState.Default) { - Box.BackColor = Color.AntiqueWhite; + Box.BackColor = Color.White; Box.ForeColor = Color.Gray; - Box.Text = DefaultText; State = FieldState.Default; } + + Box.Text = DefaultText; + ContainingForm.ActiveControl = null; } public void SetToTyping() @@ -72,16 +77,20 @@ namespace grapher Box.ForeColor = Color.Black; State = FieldState.Typing; } + + Box.Text = string.Empty; } public void SetToEntered() { if (State != FieldState.Entered) { - Box.BackColor = Color.White; + Box.BackColor = Color.AntiqueWhite; Box.ForeColor = Color.DarkGray; State = FieldState.Entered; } + + ContainingForm.ActiveControl = null; } public void SetToUnavailable() @@ -96,33 +105,54 @@ namespace grapher public void KeyDown(object sender, KeyEventArgs e) { - if (TryHandleWithEnter(e, sender, out double data)) + switch(State) { - Data = data; + case FieldState.Default: + if (e.KeyCode == Keys.Enter) + { + SetToDefault(); + } + else + { + SetToTyping(); + } + break; + + case FieldState.Entered: + if (e.KeyCode != Keys.Enter) + { + SetToTyping(); + } + break; + case FieldState.Typing: + HandleTyping(sender, e); + break; + case FieldState.Unavailable: + Box.Text = string.Empty; + break; + default: + break; } } - private bool TryHandleWithEnter(KeyEventArgs e, object sender, out double data) + private void HandleTyping(object sender, KeyEventArgs e) { - bool validEntry = false; - data = 0.0; - if (e.KeyCode == Keys.Enter) { try { - data = Convert.ToDouble(((TextBox)sender).Text); - validEntry = true; + Data = Convert.ToDouble(((TextBox)sender).Text); } catch { + Box.Text = Data.ToString(); } e.Handled = true; e.SuppressKeyPress = true; - } - return validEntry; + SetToEntered(); + } } #endregion Methods -- cgit v1.2.3 From 36abeecf953e0efcd1ec9dcafa4bd1c554e362f5 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Wed, 29 Jul 2020 21:03:02 -0700 Subject: Add FieldXY --- grapher/Field.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'grapher/Field.cs') diff --git a/grapher/Field.cs b/grapher/Field.cs index 4be87ba..3f4b170 100644 --- a/grapher/Field.cs +++ b/grapher/Field.cs @@ -26,14 +26,15 @@ namespace grapher #region Constructors - public Field(string defaultText, TextBox box, Form containingForm, double defaultData) + public Field(TextBox box, Form containingForm, double defaultData) { - DefaultText = defaultText; + DefaultText = defaultData.ToString("N1"); Box = box; Data = defaultData; + DefaultData = defaultData; State = FieldState.Undefined; ContainingForm = containingForm; - box.KeyDown += KeyDown; + box.KeyDown += new System.Windows.Forms.KeyEventHandler(KeyDown); SetToDefault(); } @@ -52,6 +53,8 @@ namespace grapher public FieldState State { get; private set; } + private double DefaultData { get; } + #endregion Properties #region Methods @@ -65,6 +68,7 @@ namespace grapher State = FieldState.Default; } + Data = DefaultData; Box.Text = DefaultText; ContainingForm.ActiveControl = null; } @@ -93,6 +97,14 @@ namespace grapher ContainingForm.ActiveControl = null; } + public void SetToEntered(double value) + { + SetToEntered(); + + Data = value; + Box.Text = Data.ToString("N2"); + } + public void SetToUnavailable() { if (State != FieldState.Unavailable) @@ -129,6 +141,7 @@ namespace grapher break; case FieldState.Unavailable: Box.Text = string.Empty; + ContainingForm.ActiveControl = null; break; default: break; -- cgit v1.2.3 From c30c1382668e716a245255083a48d8c6a9f3db36 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Wed, 29 Jul 2020 21:09:48 -0700 Subject: Fix a few bugs around fieldXY --- grapher/Field.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'grapher/Field.cs') diff --git a/grapher/Field.cs b/grapher/Field.cs index 3f4b170..0f65e3e 100644 --- a/grapher/Field.cs +++ b/grapher/Field.cs @@ -79,6 +79,7 @@ namespace grapher { Box.BackColor = Color.White; Box.ForeColor = Color.Black; + State = FieldState.Typing; } @@ -91,6 +92,7 @@ namespace grapher { Box.BackColor = Color.AntiqueWhite; Box.ForeColor = Color.DarkGray; + State = FieldState.Entered; } @@ -112,6 +114,8 @@ namespace grapher Box.BackColor = Color.LightGray; Box.ForeColor = Color.LightGray; Box.Text = string.Empty; + + State = FieldState.Unavailable; } } @@ -158,9 +162,9 @@ namespace grapher } catch { - Box.Text = Data.ToString(); } + Box.Text = Data.ToString("N2"); e.Handled = true; e.SuppressKeyPress = true; -- cgit v1.2.3 From 20ea6f85cb0af56c13dabbfc3f65383af8793c7c Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Thu, 30 Jul 2020 00:32:48 -0700 Subject: Fix small bugs, add AccelOptions class --- grapher/Field.cs | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) (limited to 'grapher/Field.cs') diff --git a/grapher/Field.cs b/grapher/Field.cs index 0f65e3e..6e1c6d2 100644 --- a/grapher/Field.cs +++ b/grapher/Field.cs @@ -28,13 +28,14 @@ namespace grapher public Field(TextBox box, Form containingForm, double defaultData) { - DefaultText = defaultData.ToString("N1"); + DefaultText = DecimalString(defaultData); Box = box; Data = defaultData; DefaultData = defaultData; State = FieldState.Undefined; ContainingForm = containingForm; box.KeyDown += new System.Windows.Forms.KeyEventHandler(KeyDown); + box.Leave += new System.EventHandler(FocusLeave); SetToDefault(); } @@ -53,6 +54,8 @@ namespace grapher public FieldState State { get; private set; } + public FieldState PreviousState { get; private set; } + private double DefaultData { get; } #endregion Properties @@ -66,6 +69,7 @@ namespace grapher Box.BackColor = Color.White; Box.ForeColor = Color.Gray; State = FieldState.Default; + PreviousState = FieldState.Default; } Data = DefaultData; @@ -80,6 +84,7 @@ namespace grapher Box.BackColor = Color.White; Box.ForeColor = Color.Black; + PreviousState = State; State = FieldState.Typing; } @@ -93,6 +98,7 @@ namespace grapher Box.BackColor = Color.AntiqueWhite; Box.ForeColor = Color.DarkGray; + PreviousState = State; State = FieldState.Entered; } @@ -104,7 +110,7 @@ namespace grapher SetToEntered(); Data = value; - Box.Text = Data.ToString("N2"); + Box.Text = DecimalString(Data); } public void SetToUnavailable() @@ -115,6 +121,7 @@ namespace grapher Box.ForeColor = Color.LightGray; Box.Text = string.Empty; + PreviousState = State; State = FieldState.Unavailable; } } @@ -152,6 +159,22 @@ namespace grapher } } + private void FocusLeave(object sender, EventArgs e) + { + if (State == FieldState.Typing) + { + if (PreviousState == FieldState.Default) + { + SetToDefault(); + } + else if (PreviousState == FieldState.Entered) + { + SetToEntered(); + Box.Text = DecimalString(Data); + } + } + } + private void HandleTyping(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) @@ -164,12 +187,23 @@ namespace grapher { } - Box.Text = Data.ToString("N2"); + Box.Text = DecimalString(Data); e.Handled = true; e.SuppressKeyPress = true; SetToEntered(); } + else if (e.KeyCode == Keys.Escape) + { + ContainingForm.ActiveControl = null; + e.Handled = true; + e.SuppressKeyPress = true; + } + } + + private static string DecimalString(double value) + { + return value.ToString("N2"); } #endregion Methods -- cgit v1.2.3 From 49bd00c71b223d12f1d85d5c1bae635d450403fd Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Thu, 30 Jul 2020 20:15:12 -0700 Subject: Use options instead of fields --- grapher/Field.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'grapher/Field.cs') diff --git a/grapher/Field.cs b/grapher/Field.cs index 6e1c6d2..7ce4c6e 100644 --- a/grapher/Field.cs +++ b/grapher/Field.cs @@ -44,7 +44,7 @@ namespace grapher #region Properties - TextBox Box { get; } + public TextBox Box { get; } Form ContainingForm { get; } -- cgit v1.2.3 From 498e5c1a2fabed3ba5f1c00768d7050c5738e76e Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Fri, 31 Jul 2020 10:46:23 -0700 Subject: Small refactoring, use new struct to store magnitudes --- grapher/Field.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'grapher/Field.cs') diff --git a/grapher/Field.cs b/grapher/Field.cs index 7ce4c6e..5ef057d 100644 --- a/grapher/Field.cs +++ b/grapher/Field.cs @@ -46,7 +46,7 @@ namespace grapher public TextBox Box { get; } - Form ContainingForm { get; } + private Form ContainingForm { get; } public double Data { get; private set; } -- cgit v1.2.3