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; namespace VEPROMS { public partial class frmPSI : Form { private ProcedureInfo _MyProcedureInfo; private StepTabRibbon _MyStepTabRibbon; private Dictionary _DicStepRtb; private Dictionary _DicCheckBox; private Dictionary _DicComboBox; public frmPSI(ProcedureInfo pi) { InitializeComponent(); _DicStepRtb = new Dictionary(); _DicCheckBox = new Dictionary(); _DicComboBox = new Dictionary(); InitializeSpecificControls(pi); _MyStepTabRibbon = new StepTabRibbon(); } private void InitializeSpecificControls(ProcedureInfo pi) { _MyProcedureInfo = pi; PSI psiDialogDef = pi.ActiveFormat.PlantFormat.FormatData.ProcData.PSI; this.Text = psiDialogDef.Caption; this.Location = new Point((int)psiDialogDef.x * 2, (int)psiDialogDef.y * 2); int maxx = 0; int maxy = 0; int xB4Scroll = 900; int yB4Scroll = 630; this.panelPSI.AutoScroll = false; foreach (SILabel lbl in psiDialogDef.LabelList) { Label wlbl = new Label(); wlbl.Text = lbl.text; wlbl.Location = new Point((int)lbl.x * 2, (int)lbl.y * 2); wlbl.AutoSize = true; //wlbl.Size = new Size((int)lbl.width * 2, (int)lbl.height * 2); wlbl.Visible = true; this.panelPSI.Controls.Add(wlbl); maxx = ((int)lbl.x * 2 + (int)lbl.width * 2) > maxx ? ((int)lbl.x * 2 + (int)lbl.width * 2) : maxx; maxy = ((int)lbl.y * 2 + (int)lbl.height * 2) > maxy ? ((int)lbl.y * 2 + (int)lbl.height * 2) : maxy; } ProcedureConfig procConfig = pi.MyConfig as ProcedureConfig; foreach (SIField fld in psiDialogDef.FieldList) { if (fld.type.ToLower() == "text") { StepRTB tb = new StepRTB(); tb.Font = tb.FormatFont = new Font("Arial", 8); string mystr = tb.FontTable; _DicStepRtb.Add(fld.name, tb); tb.MyItemInfo = pi as ItemInfo; tb.FieldToEdit = E_FieldToEdit.PSI; tb.BorderStyle = BorderStyle.FixedSingle; tb.Enter += new System.EventHandler(this.FieldStepRTB_Enter); // see if config has data for this field, i.e. search for the 'name' // B2018-057 Replace non-breaking hyphen with hyphen. string val = procConfig.GetValue("PSI", fld.name).Replace("\\u8209?", "-"); DisplayText dt = new DisplayText(val, new VE_Font("Arial", 10, E_Style.None, 12), false); StringBuilder sb = new StringBuilder(); sb.Append(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset2 Arial;}"); sb.Append(@"{\f1\fnil\fcharset0 Arial;}}{\colortbl ;\red255\green0\blue0;}"); //C2017-036 changed to just Arial because Microsoft removed Arial Unicode MS with Word16 sb.Append(@"\viewkind4\uc1\pard\sl-240\slmult0\fs" + (int)(this.Font.SizeInPoints*2) + " " + dt.StartText + @"}"); tb.Rtf = sb.ToString(); tb.Location = new Point((int)fld.x * 2, (int)fld.y * 2); tb.Size = new Size((int)fld.width * 2, (int)fld.height * 2); tb.MinimumSize = new Size((int)fld.width * 2, (int)fld.height * 2); tb.Visible = true; this.panelPSI.Controls.Add(tb); maxx = ((int)fld.x * 2 + (int)fld.width * 2) > maxx ? ((int)fld.x * 2 + (int)fld.width * 2) : maxx; maxy = ((int)fld.y * 2 + (int)fld.height * 2) > maxy ? ((int)fld.y * 2 + (int)fld.height * 2) : maxy; } if (fld.type.ToLower()== "logical") { CheckBox cb = new CheckBox(); _DicCheckBox.Add(fld.name, cb); cb.Text = fld.text; cb.Location = new Point((int)fld.x * 2, (int)fld.y * 2); cb.Visible = true; cb.Width = (int)fld.width * 2; string val = procConfig.GetValue("PSI", fld.name); cb.Checked = val!=null && val!="" && val.ToUpper()[0] == 'Y' ? true : false; this.panelPSI.Controls.Add(cb); maxx = ((int)fld.x * 2 + (int)fld.width * 2) > maxx ? ((int)fld.x * 2 + (int)fld.width * 2) : maxx; maxy = ((int)fld.y * 2 + (int)fld.height * 2) > maxy ? ((int)fld.y * 2 + (int)fld.height * 2) : maxy; } // C2021-019: override of watermark text/color - provide support for combo box in PSI dialog if (fld.type.ToLower() == "combo") { ComboBox cmb = new ComboBox(); _DicComboBox.Add(fld.name, cmb); cmb.Location = new Point((int)fld.x * 2, (int)fld.y * 2); cmb.Visible = true; cmb.Width = (int)fld.width * 2; string tmp = fld.text; string[] tmps = tmp.Split(",".ToCharArray()); foreach (string t in tmps) cmb.Items.Add(t); string val = procConfig.GetValue("PSI", fld.name); if (val != null && val != "") cmb.SelectedItem = val; this.panelPSI.Controls.Add(cmb); maxx = ((int)fld.x * 2 + (int)fld.width * 2) > maxx ? ((int)fld.x * 2 + (int)fld.width * 2) : maxx; maxy = ((int)fld.y * 2 + (int)fld.height * 2) > maxy ? ((int)fld.y * 2 + (int)fld.height * 2) : maxy; } } if (maxx > xB4Scroll) { maxx = xB4Scroll; this.panelPSI.Width = xB4Scroll; this.panelPSI.AutoScroll = true; } else this.panelPSI.Width = maxx + 50; if (maxy > yB4Scroll) { maxy = yB4Scroll; this.panelPSI.Height = yB4Scroll; this.panelPSI.AutoScroll = true; } else this.panelPSI.Height = maxy; // B2018-062: Ok/Cancel buttons not displayed if more than a few labels/fields are defined. if (psiDialogDef.ButtonsOnBottom == null || psiDialogDef.ButtonsOnBottom.ToUpper() == "NO") { btnOk.Location = new Point(maxx+70, 30); btnCancel.Location = new Point(maxx + 70, 60); } else if (btnOk.Location.Y < panelPSI.Location.Y + panelPSI.Height) { // B2018-062: Ok/Cancel buttons not displayed if more than a few labels/fields are defined: // Adjust location of buttons so that they have a larger Y than the panel that holds the labels/fields // and adjust the dialog size if it's height is not enough. btnOk.Location = new Point(btnOk.Location.X, panelPSI.Location.Y + this.panelPSI.Height + 10); btnCancel.Location = new Point(btnCancel.Location.X, panelPSI.Location.Y + this.panelPSI.Height + 10); if (this.Height < btnOk.Location.Y + btnOk.Size.Height + 10) this.Height = btnOk.Location.Y + btnOk.Size.Height + 30; } } private void FieldStepRTB_Enter(object sender, EventArgs e) { _MyStepTabRibbon.MyStepRTB = (StepRTB)sender; } private void btnOk_Click(object sender, EventArgs e) { ProcedureConfig procConfig = _MyProcedureInfo.MyConfig as ProcedureConfig; PSI psiDialogDef = _MyProcedureInfo.ActiveFormat.PlantFormat.FormatData.ProcData.PSI; // loop through all of the fields (Text & logical) bool isDirty = false; foreach (SIField fld in psiDialogDef.FieldList) { if (fld.type.ToLower() == "text") { StepRTB cur = _DicStepRtb[fld.name]; string rtf = cur.Rtf; string newval = DisplayText.StaticStripRtfCommands(rtf, false); // C2020-001: added 'false' // compare to original and if different, save in proc config. string oldval = procConfig.GetValue("PSI", fld.name); if (oldval != newval) { isDirty = true; // B2018-057 Replace non-breaking hyphen with hyphen. procConfig.SetValue("PSI", fld.name, newval.Replace("\\u8209?","-")); } } else if (fld.type.ToLower() == "logical") { CheckBox cur = _DicCheckBox[fld.name]; string newval = cur.Checked ? "Y" : "N"; string oldval = procConfig.GetValue("PSI", fld.name); if (newval != oldval) { isDirty = true; procConfig.SetValue("PSI", fld.name, newval); } } // C2021-019: override of watermark text/color - save combo box selection else if (fld.type.ToLower() == "combo") { ComboBox cmbcur = _DicComboBox[fld.name]; string newval = cmbcur.Text; string oldval = procConfig.GetValue("PSI", fld.name); if (newval != oldval) { isDirty = true; procConfig.SetValue("PSI", fld.name, newval); } } } if (isDirty) { using (Procedure proc = _MyProcedureInfo.Get()) { proc.MyContent.Config = procConfig.ToString(); proc.Save(); } } DialogResult = DialogResult.OK; this.Close(); } private void btnCancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; this.Close(); } } }