426 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			426 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| /*********************************************************************************************
 | |
|  * Copyright 2002 - Volian Enterprises, Inc. All rights reserved.
 | |
|  * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
 | |
|  * ------------------------------------------------------------------------------
 | |
|  * $Workfile: FieldTextFrm.cs $     $Revision: 12 $
 | |
|  * $Author: Kathy $   $Date: 7/15/04 11:11a $
 | |
|  *
 | |
|  * $History: FieldTextFrm.cs $
 | |
|  * 
 | |
|  * *****************  Version 12  *****************
 | |
|  * User: Kathy        Date: 7/15/04    Time: 11:11a
 | |
|  * Updated in $/EXE/RefObj/ROEditor
 | |
|  * Fix B2004-015
 | |
|  * 
 | |
|  * *****************  Version 11  *****************
 | |
|  * User: Kathy        Date: 12/09/03   Time: 9:29a
 | |
|  * Updated in $/EXE/RefObj/ROEditor
 | |
|  * B2003-066 fix - add new fieldname crash
 | |
|  * 
 | |
|  * *****************  Version 10  *****************
 | |
|  * User: Kathy        Date: 5/21/03    Time: 12:46p
 | |
|  * Updated in $/EXE/RefObj/ROEditor
 | |
|  * B2003-041: edit of field name didn't always save
 | |
|  * 
 | |
|  * *****************  Version 9  *****************
 | |
|  * User: Kathy        Date: 12/10/02   Time: 2:25p
 | |
|  * Updated in $/EXE/RefObj/ROEditor
 | |
|  * fieldname special chars
 | |
|  * 
 | |
|  * *****************  Version 8  *****************
 | |
|  * User: Kathy        Date: 12/02/02   Time: 8:29a
 | |
|  * Updated in $/EXE/RefObj/ROEditor
 | |
|  * fieldname replace chars
 | |
|  * 
 | |
|  * *****************  Version 7  *****************
 | |
|  * User: Kathy        Date: 12/02/02   Time: 6:13a
 | |
|  * Updated in $/EXE/RefObj/ROEditor
 | |
|  * added arg on db call
 | |
|  * 
 | |
|  * *****************  Version 6  *****************
 | |
|  * User: Kathy        Date: 11/19/02   Time: 11:31a
 | |
|  * Updated in $/EXE/RefObj/ROEditor
 | |
|  * add wait cursor for long op
 | |
|  * 
 | |
|  * *****************  Version 5  *****************
 | |
|  * User: Kathy        Date: 9/27/02    Time: 1:13p
 | |
|  * Updated in $/EXE/RefObj/ROEditor
 | |
|  * fix digit as first char in fieldname
 | |
|  * 
 | |
|  * *****************  Version 4  *****************
 | |
|  * User: Kathy        Date: 9/25/02    Time: 9:56a
 | |
|  * Updated in $/EXE/RefObj/ROEditor
 | |
|  * dev
 | |
|  * 
 | |
|  * *****************  Version 3  *****************
 | |
|  * User: Kathy        Date: 9/11/02    Time: 1:15p
 | |
|  * Updated in $/EXE/RefObj/ROEditor
 | |
|  * vlnxml
 | |
|  * 
 | |
|  * *****************  Version 2  *****************
 | |
|  * User: Kathy        Date: 9/05/02    Time: 12:41p
 | |
|  * Updated in $/EXE/RefObj/ROEditor
 | |
|  * dev
 | |
|  * 
 | |
|  * *****************  Version 1  *****************
 | |
|  * User: Jsj          Date: 8/23/02    Time: 3:33p
 | |
|  * Created in $/EXE/RefObj/ROEditor
 | |
|  *********************************************************************************************/
 | |
| 
 | |
| using System;
 | |
| using System.Drawing;
 | |
| using System.Collections;
 | |
| using System.ComponentModel;
 | |
| using System.Windows.Forms;
 | |
| using System.Xml;
 | |
| using System.Xml.Schema;
 | |
| using System.Text;
 | |
| using ROFields;
 | |
| using RODBInterface;
 | |
| 
 | |
| namespace ROEditor
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Summary description for FieldText.
 | |
| 	/// </summary>
 | |
| 	public class FieldTextFrm : System.Windows.Forms.Form
 | |
| 	{
 | |
| 		private System.Windows.Forms.Label lblFName;
 | |
| 		private System.Windows.Forms.Label lblWidth;
 | |
| 		private System.Windows.Forms.TextBox tbFieldName;
 | |
| 		private System.Windows.Forms.TextBox tbWidth;
 | |
| 		private System.Windows.Forms.Button btnOK;
 | |
| 		private System.Windows.Forms.Button btnCancel;
 | |
| 		private System.Windows.Forms.Label lblPattern;
 | |
| 		private System.Windows.Forms.TextBox tbPattern;
 | |
| 		/// <summary>
 | |
| 		/// Required designer variable.
 | |
| 		/// </summary>
 | |
| 		private System.ComponentModel.Container components = null;
 | |
| 	
 | |
| 		private ROField myrof;
 | |
| 		private RODB myrodb;
 | |
| 		private VlnXmlElement myelem;
 | |
| 		private string schemapiece;
 | |
| 		private string origname;
 | |
| 		private bool exists=false;
 | |
| 		private uint original_type;
 | |
| 		private uint editlevel;
 | |
| 		private ArrayList avail_list;
 | |
| 		private ArrayList inuse_list;
 | |
| 		public FieldTextFrm(ROField rof, RODB rodb, VlnXmlElement elem, uint otype, uint elevel, string oname, ArrayList alist, ArrayList ilist)
 | |
| 		{
 | |
| 			//
 | |
| 			// Required for Windows Form Designer support
 | |
| 			//
 | |
| 			myrodb = rodb;
 | |
| 			myelem = elem;
 | |
| 			myrof = rof;
 | |
| 			original_type = otype;
 | |
| 			editlevel = elevel;
 | |
| 			avail_list = alist;
 | |
| 			inuse_list = ilist;
 | |
| 			uint ftype = rof.GetFieldType;
 | |
| 			// origname is the original name if this is a modification of a fieldname
 | |
| 			// if it's new, it will be null
 | |
| 			if(oname!=null)origname=CvtUserFldToFld(oname);
 | |
| 			InitializeComponent();
 | |
| 			
 | |
| 			if (ftype == (uint)FieldTypes.FrmtSingleTxt) 
 | |
| 			{
 | |
| 				this.tbPattern.Visible = true;
 | |
| 				this.lblPattern.Visible = true;
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				this.tbPattern.Visible = false;
 | |
| 				this.lblPattern.Visible = false;
 | |
| 			}
 | |
| 
 | |
| 			// put name out. and if it's an existing field get current data to 
 | |
| 			// put out.
 | |
| 			this.tbFieldName.Text = rof.GetFieldname;
 | |
| 			if (rof.GetRecID != null)
 | |
| 			{
 | |
| 				exists = true;
 | |
| 				if (rof.GetMasterRecID != null)
 | |
| 					// get it from the master, else read in the definition from
 | |
| 					// the local table
 | |
| 					schemapiece = myrodb.RODB_GetSchemaPiece(rof.GetMasterRecID,"ROMaster");
 | |
| 				else
 | |
| 					schemapiece = myrodb.RODB_GetSchemaPiece(rof.GetRecID,myelem.GetAttribute("Table"));
 | |
| 				int indxs = schemapiece.IndexOf("maxLength value=");
 | |
| 				int indxe = schemapiece.IndexOf("\"",indxs+17);   // +17, get past maxLength value ="
 | |
| 				this.tbWidth.Text = schemapiece.Substring(indxs+17,indxe-(indxs+17));
 | |
| 				
 | |
| 				// get pattern too.
 | |
| 				if (ftype == (uint)FieldTypes.FrmtSingleTxt) 
 | |
| 				{
 | |
| 					indxs = schemapiece.IndexOf("pattern value=");
 | |
| 					indxe = schemapiece.IndexOf("\"",indxs+15);
 | |
| 					this.tbPattern.Text = schemapiece.Substring(indxs+15,indxe-(indxs+15)); 
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		private string CvtUserFldToFld(string fldname)
 | |
| 		{
 | |
| 			if (fldname.Length < 2)
 | |
| 				return fldname;
 | |
| 			// a digit cannot start an xml fieldname, prepend a "__" to it.
 | |
| 			string tmp0;
 | |
| 			if (char.IsDigit(fldname,0))
 | |
| 				tmp0 = "__" + fldname;
 | |
| 			else
 | |
| 				tmp0 = fldname;
 | |
| 			// an xml fieldname cannot have a space, change it to a "__"
 | |
| 			string tmpstr = tmp0.Replace(" ","__");
 | |
| 			int len = tmpstr.Length;
 | |
| 			int cnt = 0;
 | |
| 
 | |
| 			// this is also our sequence that tells us the follow 3 digits is the ascii number (base 10)
 | |
| 			// of the character we replaced.
 | |
| 			string OKpunch = "-._"; 
 | |
| 
 | |
| 			string outstr = "";
 | |
| 			int decval;
 | |
| 
 | |
| 			while (cnt < len)
 | |
| 			{
 | |
| 				char tmpchr = tmpstr[cnt];
 | |
| 				if(!char.IsLetterOrDigit(tmpchr)&& (OKpunch.IndexOf(tmpchr) == -1) )
 | |
| 				{
 | |
| 					decval = tmpchr;
 | |
| 					outstr += OKpunch + decval.ToString("D3");
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					outstr += tmpchr.ToString();
 | |
| 				}
 | |
| 				cnt++;
 | |
| 			}
 | |
| 			return outstr;
 | |
| 		}
 | |
| 
 | |
| 		private bool CheckValidWidth(string wid)
 | |
| 		{
 | |
| 			long val;
 | |
| 			try {
 | |
| 				// Attempt to convert to long, if it fails, there are problems in the text
 | |
| 				val = System.Convert.ToInt64(wid);
 | |
| 			}
 | |
| 			catch {
 | |
| 				MessageBox.Show("The field width is not a valid number. Please re-enter");
 | |
| 				return false;
 | |
| 			}
 | |
| 			return true;
 | |
| 		}
 | |
| 
 | |
| 		private void btnOK_Click(object sender, System.EventArgs e)
 | |
| 		{
 | |
| 			string savschemapiece;
 | |
| 			bool success=false;
 | |
| 
 | |
| 			// check for field validity
 | |
| 			if (this.tbFieldName.Text == null || this.tbWidth.Text == null)
 | |
| 			{
 | |
| 				MessageBox.Show("Cannot have empty field defintion name or width");
 | |
| 				return;
 | |
| 			}
 | |
| 			success=CheckValidWidth(this.tbWidth.Text);
 | |
| 			if (success == false) return;
 | |
| 			// check that it is not duplicate name.
 | |
| 			ROField rof;
 | |
| 			for (int i=0; i< avail_list.Count; i++)
 | |
| 			{
 | |
| 				rof = (ROField) avail_list[i];
 | |
| 				if (rof.GetFieldname == this.tbFieldName.Text && rof.GetRecID != myrof.GetRecID)
 | |
| 				{
 | |
| 					MessageBox.Show("The field name is not unique. Please re-enter");
 | |
| 					return;
 | |
| 				}
 | |
| 			}
 | |
| 			for (int i=0; i< inuse_list.Count; i++)
 | |
| 			{
 | |
| 				rof = (ROField) inuse_list[i];
 | |
| 				if (rof.GetFieldname == this.tbFieldName.Text && rof.GetRecID != myrof.GetRecID)
 | |
| 				{
 | |
| 					MessageBox.Show("The field name is not unique. Please re-enter");
 | |
| 					return;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			// generate the new schema string based on text box input.
 | |
| 			string fname=CvtUserFldToFld(this.tbFieldName.Text);
 | |
| 			savschemapiece = myrof.MakeSchemaString(fname, this.tbWidth.Text, this.tbPattern.Text);
 | |
| 			myrof.SetFieldname(fname);
 | |
| 			// if this is 'new'. create a new element and do an insert to Master database
 | |
| 			if (exists == false)
 | |
| 				success = myrodb.RODB_NewFieldRecord(myrof, myelem, savschemapiece, editlevel, null);
 | |
| 			else     // modification of existing....
 | |
| 			{
 | |
| 				Cursor.Current = Cursors.WaitCursor;
 | |
| 				success = myrodb.RODB_UpdateFieldRecord(myrof, myelem, savschemapiece, origname, fname, editlevel, false);
 | |
| 				Cursor.Current = Cursors.Default;
 | |
| 			}
 | |
| 
 | |
| 			if (success != true)
 | |
| 			{
 | |
| 				return; // DO YET process an error.
 | |
| 			}
 | |
| 			else		 
 | |
| 			{
 | |
| 				// if this is a RRO schema, reload. We're not reloading the group schema
 | |
| 				// because it is rarely used and is only loaded as needed.
 | |
| 				if (editlevel == (uint) RecordType.Schema)
 | |
| 				{
 | |
| 					XmlSchema myschema;
 | |
| 					VlnXmlElement parent;
 | |
| 					parent = myelem;
 | |
| 					while (parent != null)
 | |
| 					{
 | |
| 						if (parent.HasAttribute("Schema") == true) break;
 | |
| 						if (parent.HasAttribute("FieldsInUse") == true) break;
 | |
| 						// If loop to top, fields haven't been defined yet, don't
 | |
| 						// crash on caste - just set to return null (B2004-015)
 | |
| 						if (parent.ParentNode is VlnXmlElement)
 | |
| 							parent = (VlnXmlElement) parent.ParentNode;
 | |
| 						else
 | |
| 							parent = null;
 | |
| 					}
 | |
| 					// if a schema has been read in, delete it and reread it.
 | |
| 					if (parent !=null && parent.HasAttribute("Schema"))
 | |
| 					{
 | |
| 						// delete this attribute because we'll reread it in.
 | |
| 						parent.RemoveAttribute("Schema");
 | |
| 						myschema = myrodb.RODB_GetSchema(myelem);
 | |
| 					}
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 			this.Close();
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Clean up any resources being used.
 | |
| 		/// </summary>
 | |
| 		protected override void Dispose( bool disposing )
 | |
| 		{
 | |
| 			if( disposing )
 | |
| 			{
 | |
| 				if(components != null)
 | |
| 				{
 | |
| 					components.Dispose();
 | |
| 				}
 | |
| 			}
 | |
| 			base.Dispose( disposing );
 | |
| 		}
 | |
| 
 | |
| 		#region Windows Form Designer generated code
 | |
| 		/// <summary>
 | |
| 		/// Required method for Designer support - do not modify
 | |
| 		/// the contents of this method with the code editor.
 | |
| 		/// </summary>
 | |
| 		private void InitializeComponent()
 | |
| 		{
 | |
| 			this.lblFName = new System.Windows.Forms.Label();
 | |
| 			this.lblWidth = new System.Windows.Forms.Label();
 | |
| 			this.tbFieldName = new System.Windows.Forms.TextBox();
 | |
| 			this.tbWidth = new System.Windows.Forms.TextBox();
 | |
| 			this.btnOK = new System.Windows.Forms.Button();
 | |
| 			this.btnCancel = new System.Windows.Forms.Button();
 | |
| 			this.lblPattern = new System.Windows.Forms.Label();
 | |
| 			this.tbPattern = new System.Windows.Forms.TextBox();
 | |
| 			this.SuspendLayout();
 | |
| 			// 
 | |
| 			// lblFName
 | |
| 			// 
 | |
| 			this.lblFName.Location = new System.Drawing.Point(16, 16);
 | |
| 			this.lblFName.Name = "lblFName";
 | |
| 			this.lblFName.Size = new System.Drawing.Size(80, 16);
 | |
| 			this.lblFName.TabIndex = 0;
 | |
| 			this.lblFName.Text = "Field Name:";
 | |
| 			// 
 | |
| 			// lblWidth
 | |
| 			// 
 | |
| 			this.lblWidth.Location = new System.Drawing.Point(16, 40);
 | |
| 			this.lblWidth.Name = "lblWidth";
 | |
| 			this.lblWidth.Size = new System.Drawing.Size(72, 16);
 | |
| 			this.lblWidth.TabIndex = 1;
 | |
| 			this.lblWidth.Text = "Width:";
 | |
| 			// 
 | |
| 			// tbFieldName
 | |
| 			// 
 | |
| 			this.tbFieldName.Location = new System.Drawing.Point(104, 8);
 | |
| 			this.tbFieldName.Name = "tbFieldName";
 | |
| 			this.tbFieldName.Size = new System.Drawing.Size(320, 22);
 | |
| 			this.tbFieldName.TabIndex = 2;
 | |
| 			this.tbFieldName.Text = "";
 | |
| 			// 
 | |
| 			// tbWidth
 | |
| 			// 
 | |
| 			this.tbWidth.Location = new System.Drawing.Point(104, 40);
 | |
| 			this.tbWidth.Name = "tbWidth";
 | |
| 			this.tbWidth.Size = new System.Drawing.Size(32, 22);
 | |
| 			this.tbWidth.TabIndex = 3;
 | |
| 			this.tbWidth.Text = "";
 | |
| 			// 
 | |
| 			// btnOK
 | |
| 			// 
 | |
| 			this.btnOK.Location = new System.Drawing.Point(216, 72);
 | |
| 			this.btnOK.Name = "btnOK";
 | |
| 			this.btnOK.Size = new System.Drawing.Size(88, 24);
 | |
| 			this.btnOK.TabIndex = 4;
 | |
| 			this.btnOK.Text = "OK";
 | |
| 			this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
 | |
| 			// 
 | |
| 			// btnCancel
 | |
| 			// 
 | |
| 			this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
 | |
| 			this.btnCancel.Location = new System.Drawing.Point(336, 72);
 | |
| 			this.btnCancel.Name = "btnCancel";
 | |
| 			this.btnCancel.Size = new System.Drawing.Size(88, 24);
 | |
| 			this.btnCancel.TabIndex = 5;
 | |
| 			this.btnCancel.Text = "Cancel";
 | |
| 			// 
 | |
| 			// lblPattern
 | |
| 			// 
 | |
| 			this.lblPattern.Location = new System.Drawing.Point(160, 40);
 | |
| 			this.lblPattern.Name = "lblPattern";
 | |
| 			this.lblPattern.Size = new System.Drawing.Size(48, 16);
 | |
| 			this.lblPattern.TabIndex = 6;
 | |
| 			this.lblPattern.Text = "Pattern:";
 | |
| 			this.lblPattern.Visible = false;
 | |
| 			// 
 | |
| 			// tbPattern
 | |
| 			// 
 | |
| 			this.tbPattern.Location = new System.Drawing.Point(224, 40);
 | |
| 			this.tbPattern.Name = "tbPattern";
 | |
| 			this.tbPattern.Size = new System.Drawing.Size(176, 22);
 | |
| 			this.tbPattern.TabIndex = 7;
 | |
| 			this.tbPattern.Text = "";
 | |
| 			this.tbPattern.Visible = false;
 | |
| 			// 
 | |
| 			// FieldTextFrm
 | |
| 			// 
 | |
| 			this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
 | |
| 			this.ClientSize = new System.Drawing.Size(464, 101);
 | |
| 			this.Controls.AddRange(new System.Windows.Forms.Control[] {
 | |
| 																		  this.tbPattern,
 | |
| 																		  this.lblPattern,
 | |
| 																		  this.btnCancel,
 | |
| 																		  this.btnOK,
 | |
| 																		  this.tbWidth,
 | |
| 																		  this.tbFieldName,
 | |
| 																		  this.lblWidth,
 | |
| 																		  this.lblFName});
 | |
| 			this.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
 | |
| 			this.Name = "FieldTextFrm";
 | |
| 			this.Text = "Text Field Definition";
 | |
| 			this.ResumeLayout(false);
 | |
| 
 | |
| 		}
 | |
| 		#endregion
 | |
| 	}
 | |
| }
 |