320 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			320 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.ComponentModel;
 | |
| using System.Data;
 | |
| using System.Drawing;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| using VEPROMS.CSLA.Library;
 | |
| using Volian.Controls.Library;
 | |
| using System.Linq;
 | |
| 
 | |
| namespace Volian.Controls.Library
 | |
| {
 | |
| 	//C2025-023 - Electronic Procedures - Modifications to PROMS
 | |
| 	//Form for Dynamic Showing of EP detail controls and entry
 | |
| 	public partial class frmEPAnnotationDetails : Form
 | |
| 	{
 | |
| 		private AnnotationInfo _CurrentAnnotation;
 | |
| 		private EPFields myEPFields;
 | |
| 		private AnnotationConfig MyConfig;
 | |
| 
 | |
| 		private StepTabRibbon _MyStepTabRibbon;
 | |
| 		private Dictionary<string, TextBox> _DicTB;
 | |
| 		private Dictionary<string, CheckBox> _DicCheckBox;
 | |
| 		private Dictionary<string, ComboBox> _DicComboBox;
 | |
| 		private Dictionary<string, ComboBox> _DicSingleRO;
 | |
| 		private Dictionary<string, ListBoxMulti> _DicMultiRO;
 | |
| 		private TablePropertiesControl _TablePropControl;
 | |
| 
 | |
| 		private string multiseparator = ",";
 | |
| 
 | |
| 		public frmEPAnnotationDetails(AnnotationInfo currAnn)
 | |
| 		{
 | |
| 			InitializeComponent();
 | |
| 			_DicTB = new Dictionary<string, TextBox>();
 | |
| 			_DicCheckBox = new Dictionary<string, CheckBox>();
 | |
| 			_DicComboBox = new Dictionary<string, ComboBox>();
 | |
| 			_DicSingleRO = new Dictionary<string, ComboBox>();
 | |
| 			_DicMultiRO = new Dictionary<string, ListBoxMulti>();
 | |
| 			InitializeSpecificControls(currAnn);
 | |
| 			_MyStepTabRibbon = new StepTabRibbon();
 | |
| 		}
 | |
| 
 | |
| 		private void InitializeSpecificControls(AnnotationInfo currAnn)
 | |
| 		{
 | |
| 			_CurrentAnnotation = currAnn;
 | |
| 			myEPFields = _CurrentAnnotation.MyItem.GetValidEPFields(_CurrentAnnotation.TypeID);
 | |
| 			MyConfig =  new AnnotationConfig(currAnn.Config);
 | |
| 
 | |
| 			int MaxCharsInLabel = myEPFields.Where(y => y.type.ToLower() != "tableinput").Max(x => x.label.Length);
 | |
| 			//font size 8 - make labels slightly bigger than largest label
 | |
| 			panelEP.ColumnStyles[0].SizeType = SizeType.Absolute;
 | |
| 			panelEP.ColumnStyles[0].Width = (8 * MaxCharsInLabel) + 5;
 | |
| 
 | |
| 			int RowCount = 0;
 | |
| 			foreach (EPField EP in myEPFields)
 | |
| 			{
 | |
| 				RowCount += 1;
 | |
| 				panelEP.RowCount = RowCount;
 | |
| 				panelEP.Top = 20;
 | |
| 
 | |
| 				if (EP.type.ToLower() != "tableinput")
 | |
| 				{
 | |
| 					Label wlbl = new Label();
 | |
| 					wlbl.Text = EP.label;
 | |
| 					wlbl.Visible = true;
 | |
| 					wlbl.TextAlign = ContentAlignment.MiddleLeft;
 | |
| 					wlbl.Anchor = AnchorStyles.Left | AnchorStyles.Top;
 | |
| 					wlbl.Width = (8 * MaxCharsInLabel) + 5;
 | |
| 					panelEP.Controls.Add(wlbl, 0, panelEP.RowCount - 1);
 | |
| 				}
 | |
| 
 | |
| 				if (EP.type.ToLower() == "text")
 | |
| 				{
 | |
| 					TextBox tb = new TextBox();
 | |
| 					tb.Font = tb.Font = new Font("Arial", 8);
 | |
| 					tb.BorderStyle = BorderStyle.FixedSingle;
 | |
| 					//aligning to both left and right stretches the textbox to the width of the form
 | |
| 					tb.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
 | |
| 					string val = MyConfig.GetValue("EP", EP.name).Replace("\\u8209?", "-").Replace(@"\u9586?", @"\");
 | |
| 					tb.Text = val;
 | |
| 					tb.Visible = true;
 | |
| 					tb.Height = EP.numlines * tb.Font.Height + 1 + tb.Margin.Vertical;
 | |
| 					tb.MinimumSize = new Size(0, EP.numlines * tb.Font.Height + 1 + tb.Margin.Vertical);
 | |
| 					if (EP.numlines > 1)
 | |
| 					{
 | |
| 						tb.Multiline = true;
 | |
| 						tb.ScrollBars = ScrollBars.Both;
 | |
| 						panelEP.RowStyles.Insert(panelEP.RowCount - 1, new RowStyle(SizeType.Absolute, 50));
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						panelEP.RowStyles.Insert(panelEP.RowCount - 1, new RowStyle(SizeType.AutoSize));
 | |
| 					}
 | |
| 
 | |
| 					_DicTB.Add(EP.name, tb);
 | |
| 					panelEP.Controls.Add(tb, 1, panelEP.RowCount - 1);
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					panelEP.RowStyles.Insert(panelEP.RowCount - 1, new RowStyle(SizeType.AutoSize));
 | |
| 				}
 | |
|                 if (EP.type.ToLower() == "logical")
 | |
|                 {
 | |
|                     CheckBox cb = new CheckBox();
 | |
|                     cb.Text = EP.text;
 | |
|                     cb.Visible = true;
 | |
|                     string val = MyConfig.GetValue("EP", EP.name);
 | |
|                     cb.Checked = val != null && val != "" && val.ToUpper()[0] == 'Y';
 | |
| 					_DicCheckBox.Add(EP.name, cb);
 | |
| 					cb.AutoSize = true;
 | |
| 					panelEP.Controls.Add(cb, 1, panelEP.RowCount - 1);
 | |
| 				}
 | |
|                 if (EP.type.ToLower() == "combo")
 | |
|                 {
 | |
|                     ComboBox cmb = new ComboBox();
 | |
|                     cmb.Visible = true;
 | |
|                     string tmp = EP.text;
 | |
|                     string[] tmps = tmp.Split(",".ToCharArray());
 | |
|                     foreach (string t in tmps) cmb.Items.Add(t.Trim());
 | |
|                     string val = MyConfig.GetValue("EP", EP.name);
 | |
|                     if (val != null && val != "") cmb.SelectedItem = val;
 | |
| 					cmb.DropDownWidth = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Length).FirstOrDefault(), cmb.Font).Width + SystemInformation.VerticalScrollBarWidth;
 | |
| 					cmb.Width = cmb.DropDownWidth;
 | |
| 					_DicComboBox.Add(EP.name, cmb);
 | |
| 					panelEP.Controls.Add(cmb, 1, panelEP.RowCount - 1);
 | |
| 				}
 | |
| 				if (EP.type.ToLower() == "rosingle")
 | |
| 				{
 | |
| 					ComboBox cmb = new ComboBox();
 | |
| 					cmb.Visible = true;
 | |
| 
 | |
| 					List<ROListItem> tmps = EP.getROList(currAnn, true);
 | |
| 					cmb.DisplayMember = "Text";
 | |
| 					cmb.ValueMember = "Value";
 | |
| 					cmb.DataSource = tmps;
 | |
| 					cmb.DropDownStyle = ComboBoxStyle.DropDownList;
 | |
| 					cmb.DropDownWidth = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Text.Length).FirstOrDefault()?.Text, cmb.Font).Width + SystemInformation.VerticalScrollBarWidth;
 | |
| 					cmb.Width = cmb.DropDownWidth;
 | |
| 
 | |
| 					_DicSingleRO.Add(EP.name, cmb);
 | |
| 					panelEP.Controls.Add(cmb, 1, panelEP.RowCount - 1);
 | |
| 				}
 | |
| 				if (EP.type.ToLower() == "romulti")
 | |
| 				{
 | |
| 					ListBoxMulti lb = new ListBoxMulti();
 | |
| 
 | |
| 					List<ROListItem> tmps = EP.getROList(currAnn, false);
 | |
| 					lb.DisplayMember = "Text";
 | |
| 					lb.ValueMember = "Value";
 | |
| 					lb.Width = TextRenderer.MeasureText(tmps.OrderByDescending(x => x.Text.Length).FirstOrDefault()?.Text, lb.Font).Width + SystemInformation.VerticalScrollBarWidth;
 | |
| 
 | |
| 					lb.DataSource = tmps;
 | |
| 					_DicMultiRO.Add(EP.name, lb);
 | |
| 					panelEP.Controls.Add(lb, 1, panelEP.RowCount - 1);
 | |
| 
 | |
| 				}
 | |
| 				//note will allow only 1 tableproperties control since it is a 1:1 match with the table that is in the step
 | |
| 				if (EP.type.ToLower() == "tableinput" && _TablePropControl == null)
 | |
| 				{
 | |
| 					string val = MyConfig.GetValue("EP", EP.name);
 | |
| 					_TablePropControl = new TablePropertiesControl(EP.name, EP.label, val);
 | |
| 					_TablePropControl.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
 | |
| 					panelEP.Controls.Add(_TablePropControl, 1, panelEP.RowCount - 1);
 | |
| 
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 			Load += new EventHandler(Form1Load_setDefaults);
 | |
| 		}
 | |
| 
 | |
|         void Form1Load_setDefaults(object sender, EventArgs e)
 | |
| 		{
 | |
| 			foreach (KeyValuePair<string, ComboBox> pair in _DicSingleRO)
 | |
| 			{
 | |
| 				string val = MyConfig.GetValue("EP", pair.Key);
 | |
| 				if (!string.IsNullOrEmpty(val) && pair.Value.Items.OfType<ROListItem>().Any(x=> x.Value == val))
 | |
| 					pair.Value.SelectedValue = val;
 | |
| 				else
 | |
| 					pair.Value.SelectedValue = "";
 | |
| 			}
 | |
| 
 | |
| 			foreach (KeyValuePair<string, ListBoxMulti> pair in _DicMultiRO)
 | |
| 			{
 | |
| 				//clear all items at start in case items were autoselected - bug in Winforms ListBox
 | |
| 				pair.Value.ClearSelected();
 | |
| 				string val = MyConfig.GetValue("EP", pair.Key);
 | |
| 				if (val != null && val != "")
 | |
| 				{
 | |
| 					var selectedvalues = val.Split(multiseparator.ToCharArray());
 | |
| 					foreach (string item in selectedvalues)
 | |
|                         {
 | |
| 							string text = ((List<ROListItem>)pair.Value.DataSource).Find(x => x.Value == item)?.Text;
 | |
| 						    if (!string.IsNullOrEmpty(text)) pair.Value.SetSelected(pair.Value.FindString(text), true);
 | |
| 						}
 | |
| 				}
 | |
| 
 | |
| 				//set this to -1 after initial setting of values
 | |
| 				//this will help to fix bug in Winforms ListBox
 | |
| 				//that autoselects first item when no items are selected
 | |
| 				pair.Value.singleselectedindex = -1;
 | |
| 			}
 | |
| 
 | |
| 			
 | |
| 		}
 | |
| 
 | |
| 		private void FieldStepRTB_Enter(object sender, EventArgs e)
 | |
| 		{
 | |
| 			_MyStepTabRibbon.MyStepRTB = (StepRTB)sender;
 | |
| 		}
 | |
| 		private void btnOk_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 
 | |
| 			// loop through all of the fields
 | |
| 			bool isDirty = false;
 | |
| 			foreach (EPField EP in myEPFields)
 | |
| 			{
 | |
| 				if (EP.type.ToLower() == "text")
 | |
| 				{
 | |
| 					TextBox cur = _DicTB[EP.name];
 | |
| 					string newval = cur.Text;
 | |
| 					string oldval = MyConfig.GetValue("EP", EP.name);
 | |
| 					if (oldval != newval) 
 | |
| 					{
 | |
| 						isDirty = true;
 | |
| 						MyConfig.SetValue("EP", EP.name, newval.Replace("\\u8209?","-"));
 | |
| 					}
 | |
| 				}
 | |
|                 else if (EP.type.ToLower() == "logical")
 | |
|                 {
 | |
|                     CheckBox cur = _DicCheckBox[EP.name];
 | |
|                     string newval = cur.Checked ? "Y" : "N";
 | |
|                     string oldval = MyConfig.GetValue("EP", EP.name);
 | |
|                     if (newval != oldval)
 | |
|                     {
 | |
|                         isDirty = true;
 | |
| 						MyConfig.SetValue("EP", EP.name, newval);
 | |
|                     }
 | |
|                 }
 | |
|                 else if (EP.type.ToLower() == "combo")
 | |
|                 {
 | |
|                     ComboBox cmbcur = _DicComboBox[EP.name];
 | |
|                     string newval = cmbcur.Text;
 | |
|                     string oldval = MyConfig.GetValue("EP", EP.name);
 | |
|                     if (newval != oldval)
 | |
|                     {
 | |
|                         isDirty = true;
 | |
| 						MyConfig.SetValue("EP", EP.name, newval);
 | |
|                     }
 | |
|                 }
 | |
| 				else if (EP.type.ToLower() == "rosingle")
 | |
| 				{
 | |
| 					ComboBox cmbcur = _DicSingleRO[EP.name];
 | |
| 					string newval = cmbcur.SelectedValue.ToString();
 | |
| 					string oldval = MyConfig.GetValue("EP", EP.name);
 | |
| 					if (newval == "-1") newval = "";
 | |
| 					if (newval != oldval)
 | |
| 					{
 | |
| 						isDirty = true;
 | |
| 						MyConfig.SetValue("EP", EP.name, newval);
 | |
| 					}
 | |
| 				}
 | |
| 				else if (EP.type.ToLower() == "romulti")
 | |
| 				{
 | |
| 					ListBoxMulti lbcur = _DicMultiRO[EP.name];
 | |
| 					string newvalues = String.Join(multiseparator, lbcur.SelectedItems.OfType<ROListItem>().Select(item => item.Value));
 | |
| 					string oldvalues = MyConfig.GetValue("EP", EP.name);
 | |
| 					if (newvalues != oldvalues)
 | |
| 					{
 | |
| 						isDirty = true;
 | |
| 						MyConfig.SetValue("EP", EP.name, newvalues);
 | |
| 					}
 | |
| 				}
 | |
| 				else if (EP.type.ToLower() == "tableinput" && EP.name == _TablePropControl.epname)
 | |
| 				{
 | |
| 					string newvalues = _TablePropControl.GetStorageValue();
 | |
| 					string oldvalues = MyConfig.GetValue("EP", EP.name);
 | |
| 					if (newvalues != oldvalues)
 | |
| 					{
 | |
| 						isDirty = true;
 | |
| 						MyConfig.SetValue("EP", EP.name, newvalues);
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			if (isDirty)
 | |
| 			{
 | |
| 				using (Annotation annotation = _CurrentAnnotation.Get())
 | |
| 				{
 | |
| 					if (annotation != null)
 | |
| 					{
 | |
| 						annotation.Config = MyConfig.ToString();
 | |
| 						annotation.DTS = DateTime.Now;
 | |
| 						annotation.UserID = Volian.Base.Library.VlnSettings.UserID;
 | |
| 						annotation.Save();
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			DialogResult = DialogResult.OK;
 | |
| 			Close();
 | |
| 		}
 | |
| 		
 | |
| 		private void btnCancel_Click(object sender, EventArgs e)
 | |
| 		{
 | |
| 			DialogResult = DialogResult.Cancel;
 | |
| 			Close();
 | |
| 		}
 | |
| 
 | |
| 		//remove events so no memory loss
 | |
| 		private void frmEPAnnotationDetails_FormClosing(object sender, FormClosingEventArgs e)
 | |
|         {
 | |
| 			foreach (ListBoxMulti lb in _DicMultiRO.Values)
 | |
| 			{
 | |
| 				lb.Dispose();
 | |
| 			}
 | |
| 
 | |
| 			Load -= Form1Load_setDefaults;
 | |
| 		}
 | |
|     }
 | |
| } |