using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace FCC_Uber_MDX_Configurator { public partial class AddGraphForm : Form { public GlobalStaticClass.FusionImage_Graph CurrentGraph = new GlobalStaticClass.FusionImage_Graph(); public AddGraphForm() { SetUp(); } public AddGraphForm(GlobalStaticClass.FusionImage_Graph input_Graph) { CurrentGraph = input_Graph; SetUp(); TXT_FONT_SIZE.Text = CurrentGraph._lineThickness.ToString(); TXT_LOCATION_X.Text = CurrentGraph._x.ToString(); TXT_LOCATION_Y.Text = CurrentGraph._y.ToString(); TXT_NAME.Text = CurrentGraph._name; TXT_SHOWSIZE_HEIGHT.Text = CurrentGraph._height.ToString(); TXT_SHOWSIZE_WIDTH.Text = CurrentGraph._width.ToString(); TXT_TIME_MAX.Text = CurrentGraph._time_maximum.ToString(); //TXT_TIME_MIN.Text = CurrentGraph._time_minimum.ToString(); TXT_VALUE_MAX.Text = CurrentGraph._value_maximum.ToString(); TXT_VALUE_MIN.Text = CurrentGraph._value_minimum.ToString(); TXT_ZORDER.Text = CurrentGraph._z_order.ToString(); PANEL_COLOUR.BackColor = CurrentGraph._lineColour; if (!AddLoggingForm.SetupSelectComboBox(COMBO_TIMER, CurrentGraph._timer.ToLower())) { // Error } for (int i = 0; i < CHECKLIST_PAGES.Items.Count; i++) { int _pageParse = -1; if (int.TryParse(CHECKLIST_PAGES.Items[i].ToString(), out _pageParse)) { CHECKLIST_PAGES.SetItemChecked(i, CurrentGraph._pages.Contains(_pageParse - 1)); } } TXT_WEIGHTFACTORS.Text = CurrentGraph._smoothNumbers.ToString(); if (CurrentGraph._forwardBiasNotReverseBias) { AddLoggingForm.SetupSelectComboBox(COMBO_BIAS, "Forward Bias"); } else { AddLoggingForm.SetupSelectComboBox(COMBO_BIAS, "Reverse Bias"); } if (CurrentGraph._smooth) { TXT_WEIGHTFACTORS.Enabled = true; COMBO_BIAS.Enabled = true; AddLoggingForm.SetupSelectComboBox(COMBO_SMOOTH, "True"); } else { TXT_WEIGHTFACTORS.Enabled = false; COMBO_BIAS.Enabled = false; AddLoggingForm.SetupSelectComboBox(COMBO_SMOOTH, "False"); } COMBO_MONITORTYPE.Text = CurrentGraph._target; COMBO_MONITORTYPE.SelectedText = CurrentGraph._target; for (int i = 0; i < COMBO_MONITORTYPE.Items.Count; i++) { if (COMBO_MONITORTYPE.Items[i].ToString().ToLower() == CurrentGraph._target.ToLower()) { COMBO_MONITORTYPE.SelectedIndex = i; break; } } COMBO_MONITOR_TYPE_SelectedValueChanged(COMBO_MONITORTYPE, null); if (CurrentGraph._target.ToLower() != "none") { COMBO_MONITOR_ID.Enabled = true; } COMBO_MONITOR_ID.Text = CurrentGraph._targetID; COMBO_MONITOR_ID.SelectedText = CurrentGraph._targetID; for (int i = 0; i < COMBO_MONITOR_ID.Items.Count; i++) { if (COMBO_MONITOR_ID.Items[i].ToString().ToLower() == CurrentGraph._targetID.ToLower()) { COMBO_MONITOR_ID.SelectedIndex = i; break; } } string _axis = "Horizontal"; switch (CurrentGraph._graphingAxis) { case GlobalStaticClass.Axis.HORIZONTAL: _axis = "Horizontal"; break; case GlobalStaticClass.Axis.VERTICAL: _axis = "Vertical"; break; default: break; } COMBO_AXIS.SelectedText = _axis; COMBO_AXIS.Text = _axis; } private void SetUp() { InitializeComponent(); CHECKLIST_PAGES.Items.Clear(); for (int i = 0; i < GlobalStaticClass._Global_List_Graphics_PageList.Count; i++) { CHECKLIST_PAGES.Items.Add(((int)(i + 1)).ToString()); } TXT_NAME.Text = GlobalStaticClass.FusionImage_Graph.GetUniqueName(); } #region Verify Textboxes Only get Number Inputs private void KeyDown_IsANumber(object sender, KeyEventArgs e) { if (!char.IsDigit((char)e.KeyValue) && e.KeyData != Keys.Back && e.KeyData != Keys.Left && e.KeyData != Keys.Right && e.KeyData != Keys.Decimal && e.KeyValue != 190 && !e.KeyCode.Equals(Keys.NumPad0) && !e.KeyCode.Equals(Keys.NumPad1) && !e.KeyCode.Equals(Keys.NumPad2) && !e.KeyCode.Equals(Keys.NumPad3) && !e.KeyCode.Equals(Keys.NumPad4) && !e.KeyCode.Equals(Keys.NumPad5) && !e.KeyCode.Equals(Keys.NumPad6) && !e.KeyCode.Equals(Keys.NumPad7) && !e.KeyCode.Equals(Keys.NumPad8) && !e.KeyCode.Equals(Keys.NumPad9)) { e.SuppressKeyPress = true; } if (e.KeyData == Keys.Decimal || e.KeyValue == 190) { if (sender == TXT_FONT_SIZE || sender == TXT_VALUE_MAX || sender == TXT_VALUE_MIN || sender == TXT_ZORDER) { if (((TextBox)sender).Text.Contains(".")) { e.SuppressKeyPress = true; } } else { e.SuppressKeyPress = true; } } return; } #endregion #region Verify a Number is entered in TextBox private void Leave_VerifyTXTIsValid(object sender, EventArgs e) { try { TextBox _senderBox = (TextBox)sender; double _tempDbl; if (!double.TryParse(_senderBox.Text, out _tempDbl)) { ErrorForm _tempErrorForm = new ErrorForm(_senderBox.Name, "The value you entered is not valid"); _tempErrorForm.ShowDialog(); _senderBox.Focus(); } } catch (Exception) { ErrorForm _tempErrorForm = new ErrorForm("Unknown Error", "There was an unexpected untraceable error caught in the application. If you can reproduce this error, please let me know at FusionControlCentre@gmail.com"); _tempErrorForm.ShowDialog(); } } #endregion #region Verify a Proper Item has Been Selected in Combo Box private void Leave_VerifyCOMBOIsValid(object sender, EventArgs e) { try { ComboBox _senderBox = (ComboBox)sender; if (!_senderBox.Items.Contains(_senderBox.Text)) { (new ErrorForm(_senderBox.Name, "The value you selected or entered is not valid")).ShowDialog(); _senderBox.Focus(); _senderBox.SelectedIndex = 0; } } catch (Exception) { ErrorForm _tempErrorForm = new ErrorForm("Unknown Error", "There was an unexpected untraceable error caught in the application. If you can reproduce this error, please let me know at FusionControlCentre@gmail.com"); _tempErrorForm.ShowDialog(); } } #endregion #region Verify Name Field is Valid private void Leave_VerifyNameIsValid(object sender, EventArgs e) { try { TextBox _senderBox = (TextBox)sender; if (_senderBox.Text == "") // Check name is taken here and when saving... { ErrorForm _tempErrorForm = new ErrorForm("Invalid Name", "The value you entered is not valid"); _tempErrorForm.ShowDialog(); _senderBox.Focus(); } } catch (Exception) { ErrorForm _tempErrorForm = new ErrorForm("Unknown Error", "There was an unexpected untraceable error caught in the application. If you can reproduce this error, please let me know at FusionControlCentre@gmail.com"); _tempErrorForm.ShowDialog(); } } #endregion #region Colour Panel Click private void PANEL_COLOUR_Click(object sender, EventArgs e) { ColourChoosingForm _cF = new ColourChoosingForm(CurrentGraph._lineColour); if (_cF.ShowDialog() == DialogResult.OK) { CurrentGraph._lineColour = _cF.ChosenColour; PANEL_COLOUR.BackColor = CurrentGraph._lineColour; } } #endregion #region Monitor Type Changed private void COMBO_MONITOR_TYPE_SelectedValueChanged(object sender, EventArgs e) { COMBO_MONITOR_ID.Items.Clear(); COMBO_MONITOR_ID.SelectedText = ""; COMBO_MONITOR_ID.Enabled = false; ComboBox _combo = (ComboBox)sender; if (_combo.SelectedItem == null || _combo.SelectedItem.ToString() == "") { return; } List _possibilites = new List(); switch (_combo.SelectedItem.ToString().ToLower()) { case "variable": { foreach (GlobalStaticClass._GlobalVariableClass _var in GlobalStaticClass._Global_List_Variables) { _possibilites.Add(_var._id); } } break; case "analogue input": { foreach (GlobalStaticClass._GlobalAnalogueInputClass _ain in GlobalStaticClass._Global_List_AnalogueInputs) { _possibilites.Add(_ain.id); } } break; default: break; } COMBO_MONITOR_ID.Text = ""; if (_possibilites.Count > 0) { COMBO_MONITOR_ID.Enabled = true; COMBO_MONITOR_ID.Items.AddRange(_possibilites.ToArray()); COMBO_MONITOR_ID.Text = _possibilites[0]; } } #endregion private void BTN_SAVE_Click(object sender, EventArgs e) { if (TXT_NAME.Text == "") { this.DialogResult = DialogResult.None; (new ErrorForm("Label Name Error", "The name field is not valid")).ShowDialog(); return; } else { CurrentGraph._name = TXT_NAME.Text; } if (!int.TryParse(TXT_LOCATION_X.Text, out CurrentGraph._x) || !int.TryParse(TXT_LOCATION_Y.Text, out CurrentGraph._y)) { this.DialogResult = DialogResult.None; (new ErrorForm("Location Error", "The location field is not valid")).ShowDialog(); return; } if (!int.TryParse(TXT_SHOWSIZE_WIDTH.Text, out CurrentGraph._width) || !int.TryParse(TXT_SHOWSIZE_HEIGHT.Text, out CurrentGraph._height) || CurrentGraph._height <= 0 || CurrentGraph._width <= 0) { this.DialogResult = DialogResult.None; (new ErrorForm("Size Error", "The size field is not valid. Cannot have a width of 0 or a height of 0")).ShowDialog(); return; } if (!float.TryParse(TXT_VALUE_MIN.Text, out CurrentGraph._value_minimum) || !float.TryParse(TXT_VALUE_MAX.Text, out CurrentGraph._value_maximum) || CurrentGraph._value_minimum >= CurrentGraph._value_maximum) { this.DialogResult = DialogResult.None; (new ErrorForm("Value Error", "The value field is not valid. Minimum Value must be less than Maximum Value")).ShowDialog(); return; } if (!int.TryParse(TXT_TIME_MAX.Text, out CurrentGraph._time_maximum) || CurrentGraph._time_maximum <= 0) { this.DialogResult = DialogResult.None; (new ErrorForm("Time Error", "The time field is not valid. Maximum Value must be greater than zero")).ShowDialog(); return; } if (!int.TryParse(TXT_FONT_SIZE.Text, out CurrentGraph._lineThickness)) { this.DialogResult = DialogResult.None; (new ErrorForm("Line Thickness Error", "The line thickness field is not valid.")).ShowDialog(); return; } if (COMBO_SMOOTH.Text == null || COMBO_SMOOTH.Text == "" || !bool.TryParse(COMBO_SMOOTH.Text, out CurrentGraph._smooth)) { this.DialogResult = DialogResult.None; (new ErrorForm("Smooth Parse Error", "The smoothing field is not valid.")).ShowDialog(); return; } if (CurrentGraph._smooth) { if (COMBO_BIAS.Text == null || COMBO_BIAS.Text == "") { this.DialogResult = DialogResult.None; (new ErrorForm("Bias Parse Error", "The bias field is not valid.")).ShowDialog(); return; } else { switch (COMBO_BIAS.Text.ToLower()) { case "forward bias": CurrentGraph._forwardBiasNotReverseBias = true; break; case "reverse bias": CurrentGraph._forwardBiasNotReverseBias = false; break; default: this.DialogResult = DialogResult.None; (new ErrorForm("Bias Parse Error", "The bias field is not valid.")).ShowDialog(); return; } } if (TXT_WEIGHTFACTORS.Text == null || TXT_WEIGHTFACTORS.Text == "" || !int.TryParse(TXT_WEIGHTFACTORS.Text, out CurrentGraph._smoothNumbers)) { this.DialogResult = DialogResult.None; (new ErrorForm("Weight Factor Parse Error", "The weight factor field is not valid.")).ShowDialog(); return; } } CurrentGraph._lineColour = PANEL_COLOUR.BackColor; string _axis = COMBO_AXIS.Text; List _possibleAxis = new List(new string[] { "horizontal", "vertical" }); if (_possibleAxis.Contains(_axis.ToLower())) { switch (_axis.ToLower()) { case "horizontal": CurrentGraph._graphingAxis = GlobalStaticClass.Axis.HORIZONTAL; break; case "vertical": CurrentGraph._graphingAxis = GlobalStaticClass.Axis.VERTICAL; break; default: break; } } else { (new ErrorForm("Invalid Axis Type", "Graphing axis is invalid")).ShowDialog(); return; } List _possibleTimers = new List(new string[] { "input timer", "output timer", "logic timer", "gui timer" }); if (COMBO_TIMER.Text == null || COMBO_TIMER.Text == "" || !_possibleTimers.Contains(COMBO_TIMER.Text.ToLower())) { this.DialogResult = DialogResult.None; (new ErrorForm("Timer Error", "The Monitor Timer is not valid.")).ShowDialog(); return; } else { CurrentGraph._timer = COMBO_TIMER.Text; } List _possibleTypes = new List(new string[] { "variable", "analogue input" }); if (!_possibleTypes.Contains(COMBO_MONITORTYPE.Text.ToLower())) { this.DialogResult = DialogResult.None; (new ErrorForm("Monitor Type Error", "The Auto Monitor Type is not valid.")).ShowDialog(); return; } else { CurrentGraph._target = COMBO_MONITORTYPE.Text.ToLower(); } if (COMBO_MONITOR_ID.Text == null || COMBO_MONITOR_ID.Text == "") { this.DialogResult = DialogResult.None; (new ErrorForm("Monitor ID Error", "The Monitor ID is not valid.")).ShowDialog(); return; } bool isFound = false; switch (CurrentGraph._target) { case "variable": { foreach (GlobalStaticClass._GlobalVariableClass _var in GlobalStaticClass._Global_List_Variables) { if (_var._id.ToLower() == COMBO_MONITOR_ID.Text.ToLower()) { isFound = true; break; } } if (!isFound) { this.DialogResult = DialogResult.None; (new ErrorForm("Monitor ID Error", "The Monitor ID was not found in the current list of variables.")).ShowDialog(); return; } } break; case "analogue input": { foreach (GlobalStaticClass._GlobalAnalogueInputClass _ain in GlobalStaticClass._Global_List_AnalogueInputs) { if (_ain.id.ToLower() == COMBO_MONITOR_ID.Text.ToLower()) { isFound = true; break; } } if (!isFound) { this.DialogResult = DialogResult.None; (new ErrorForm("Monitor ID Error", "The Monitor ID was not found in the current list of analogue inputs.")).ShowDialog(); return; } } break; default: break; //Error } if (isFound) { CurrentGraph._targetID = COMBO_MONITOR_ID.Text.ToLower(); } if (!(CHECKLIST_PAGES.CheckedIndices.Count > 0)) { (new ErrorForm("Invalid Page", "There must be at least 1 visible page selected.")).ShowDialog(); return; } List tempPages = new List(); for (int i = 0; i < CHECKLIST_PAGES.CheckedItems.Count; i++) { int _tempI = -1; if (int.TryParse(CHECKLIST_PAGES.CheckedItems[i].ToString(), out _tempI)) { tempPages.Add((int)(_tempI - 1)); } } CurrentGraph._pages = new List(tempPages.ToArray()); CurrentGraph._image = new Bitmap(CurrentGraph._width, CurrentGraph._height); Graphics ggg = Graphics.FromImage(CurrentGraph._image); ggg.Clear(CurrentGraph._lineColour); ggg.Dispose(); this.DialogResult = DialogResult.OK; } private void BTN_CANCEL_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; } private void COMBO_SMOOTH_SelectedValueChanged(object sender, EventArgs e) { if (COMBO_SMOOTH.Text != null && COMBO_SMOOTH.Text != "") { switch (COMBO_SMOOTH.Text.ToLower()) { case "true": COMBO_BIAS.Enabled = true; COMBO_BIAS.Text = ""; COMBO_BIAS.SelectedText = ""; TXT_WEIGHTFACTORS.Enabled = true; TXT_WEIGHTFACTORS.Text = CurrentGraph._smoothNumbers.ToString(); break; case "false": COMBO_BIAS.Enabled = false; COMBO_BIAS.Text = ""; COMBO_BIAS.SelectedText = ""; TXT_WEIGHTFACTORS.Enabled = false; TXT_WEIGHTFACTORS.Text = ""; break; } } } } }