C2020-001: Allow changing of font sizes within table, keep font size rtf for tables C2020-001: Allow changing of font sizes within table, user interface C2020-001: Allow changing of font sizes within table, added icons
		
			
				
	
	
		
			185 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			7.0 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;
 | |
| 		public frmPSI(ProcedureInfo pi)
 | |
| 		{
 | |
| 			InitializeComponent();
 | |
| 			_DicStepRtb = new Dictionary<string, StepRTB>();
 | |
| 			_DicCheckBox = new Dictionary<string, CheckBox>();
 | |
| 			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;
 | |
| 				}
 | |
| 			}
 | |
| 			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);
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			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();
 | |
| 		}
 | |
| 	}
 | |
| } |