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
|
|
}
|
|
}
|