216 lines
8.3 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;
namespace VEPROMS
{
public partial class frmPSI : Form
{
private ProcedureInfo _MyProcedureInfo;
private StepTabRibbon _MyStepTabRibbon;
private Dictionary<string, StepRTB> _DicStepRtb;
private Dictionary<string, CheckBox> _DicCheckBox;
private Dictionary<string, ComboBox> _DicComboBox;
public frmPSI(ProcedureInfo pi)
{
InitializeComponent();
_DicStepRtb = new Dictionary<string, StepRTB>();
_DicCheckBox = new Dictionary<string, CheckBox>();
_DicComboBox = new Dictionary<string, ComboBox>();
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();
}
}
}