using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace JGClassGenerator
{
internal partial class FormDataTypes : FormBaseDialog
{
private bool m_DataIsDirty = false;
private bool m_ShowingRecord = false;
private JTypesData m_CurrentDataType = null;
private JTypesData m_CheckDataType = null;
private const string m_Caption = "Add / Edit / View Data Types";
internal FormDataTypes()
{
InitializeComponent();
ShowButtons = false;
}
private void FormDataTypes_Load(object sender, EventArgs e)
{
tsbtnNew.PerformClick();
this.m_DataIsDirty = false;
if (!String.IsNullOrEmpty(JCommon.ProgramDatabasePath))
FillTreeView();
}
private void btnEditADOConversions_Click(object sender, EventArgs e)
{
FormConversions frmConversions = new FormConversions("Edit ADO Prefix/Suffix for " + txtDbTypeName.Text, this.m_CurrentDataType, false);
frmConversions.ButtonOKText = "Save";
if (frmConversions.ShowDialog(this) == DialogResult.OK)
{
ShowADOExample(this.m_CurrentDataType);
SetDataStatus();
}
}
private void btnEditSQLiteConversions_Click(object sender, EventArgs e)
{
FormConversions frmConversions = new FormConversions("Edit SQLite Prefix/Suffix for " + txtDbTypeName.Text, this.m_CurrentDataType, true);
frmConversions.ButtonOKText = "Save";
if (frmConversions.ShowDialog(this) == DialogResult.OK)
{
ShowSQLiteExample(this.m_CurrentDataType);
SetDataStatus();
}
}
private bool CheckBrackets(Label lblTemp)
{
string tempText = lblTemp.Text;
int opening = JCommon.CountChars(tempText, '(');
int closing = JCommon.CountChars(tempText, ')');
if (opening != closing)
{
lblTemp.ForeColor = Color.Red;
return false;
}
else
{
lblTemp.ForeColor = SystemColors.WindowText;
return true;
}
}
internal bool CheckSave()
{
if (this.m_CheckDataType == null)
return true;
bool dataIsDirty = IsDataDirty(this.m_CurrentDataType, this.m_CheckDataType);
if (!dataIsDirty)
return true;
DialogResult dr = JCommon.GetDialogResult("Current Record Has Changed, Save Data?", "Record Changed", MessageBoxButtons.YesNoCancel);
if (dr == DialogResult.Yes)
{
return SaveRecord() > 0;
}
else if (dr == DialogResult.No)
{
return true;
}
else
{
return false;
}
}
private void ClearForm()
{
int nextTypeID = JTypesUpdater.GetNextTypeID();
lblTypeID.Text = nextTypeID.ToString();
tslblRecordNumber.Text = "0";
tslblLastUpdated.Text = "";
txtFormattedInitialValue.Text = "";
txtDbTypeName.Text = "";
txtNETType.Text = "";
txtCSharpType.Text = "";
txtAccessType.Text = "";
txtSQLiteType.Text = "";
txtSQLType.Text = "";
txtNotes.Clear();
chkIsNumeric.Checked = false;
}
private void Data_Changed(object sender, EventArgs e)
{
GetRecordFromForm(ref this.m_CheckDataType);
SetDataStatus();
}
private bool IsDataDirty(JTypesData originalJTypesData, JTypesData compareJTypesData)
{
if (originalJTypesData.DbType != compareJTypesData.DbType)
return true;
if (originalJTypesData.TypeID != compareJTypesData.TypeID)
return true;
if (originalJTypesData.LengthRequired != compareJTypesData.LengthRequired)
return true;
if (originalJTypesData.NETType != compareJTypesData.NETType)
return true;
if (originalJTypesData.CSharpType != compareJTypesData.CSharpType)
return true;
if (originalJTypesData.AccessType != compareJTypesData.AccessType)
return true;
if (originalJTypesData.SQLiteType != compareJTypesData.SQLiteType)
return true;
if (originalJTypesData.SQLType != compareJTypesData.SQLType)
return true;
if (originalJTypesData.IsNumeric != compareJTypesData.IsNumeric)
return true;
if (originalJTypesData.ADOConversionPrefix != compareJTypesData.ADOConversionPrefix)
return true;
if (originalJTypesData.ADOConversionSuffix != compareJTypesData.ADOConversionSuffix)
return true;
if (originalJTypesData.SQLiteConversionPrefix != compareJTypesData.SQLiteConversionPrefix)
return true;
if (originalJTypesData.SQLiteConversionSuffix != compareJTypesData.SQLiteConversionSuffix)
return true;
if (originalJTypesData.SQLiteUpdateSuffix != compareJTypesData.SQLiteUpdateSuffix)
return true;
if (originalJTypesData.Notes != compareJTypesData.Notes)
return true;
if (originalJTypesData.FormattedInitialValue != compareJTypesData.FormattedInitialValue)
return true;
return false;
}
private void CopyRecord(JTypesData source, JTypesData dest)
{
dest.DbType = source.DbType;
dest.TypeID = source.TypeID;
dest.LengthRequired = source.LengthRequired;
dest.NETType = source.NETType;
dest.CSharpType = source.CSharpType;
dest.AccessType = source.AccessType;
dest.SQLiteType = source.SQLiteType;
dest.SQLType = source.SQLType;
dest.IsNumeric = source.IsNumeric;
dest.ADOConversionPrefix = source.ADOConversionPrefix;
dest.ADOConversionSuffix = source.ADOConversionSuffix;
dest.SQLiteConversionPrefix = source.SQLiteConversionPrefix;
dest.SQLiteConversionSuffix = source.SQLiteConversionSuffix;
dest.SQLiteUpdateSuffix = source.SQLiteUpdateSuffix;
dest.Notes = source.Notes;
dest.FormattedInitialValue = source.FormattedInitialValue;
}
private bool DeleteRecord(int recordNumber)
{
JTypesData dataTypesData = new JTypesData(recordNumber);
if ((MessageBox.Show("Confirm Deletion of " + dataTypesData.DbType + "?", "Delete Record", MessageBoxButtons.YesNo)) != DialogResult.Yes)
return false;
if (JTypesUpdater.DeleteRecord(dataTypesData))
{
ShowMessage("Record Deleted", false);
return true;
}
else
{
ShowMessage("Unable To Delete Record", true);
return false;
}
}
private void FillTreeView()
{
tvDataTypes.Nodes.Clear();
TreeNode tnNew;
List<JTypesData> listTypes = JTypesUpdater.AllRecords("DbType");
foreach (JTypesData current in listTypes)
{
tnNew = new TreeNode(current.DbType);
tnNew.Tag = current.RecordNumber;
tvDataTypes.Nodes.Add(tnNew);
}
}
private void GetRecordFromForm(ref JTypesData dataType)
{
dataType.DbType = txtDbTypeName.Text;
dataType.TypeID = TypeID;
dataType.IsNumeric = chkIsNumeric.Checked;
dataType.LengthRequired = chkLengthRequired.Checked;
dataType.FormattedInitialValue = txtFormattedInitialValue.Text;
dataType.NETType = txtNETType.Text;
dataType.CSharpType = txtCSharpType.Text;
dataType.AccessType = txtAccessType.Text;
dataType.SQLiteType = txtSQLiteType.Text;
dataType.SQLType = txtSQLType.Text;
dataType.IsNumeric = chkIsNumeric.Checked;
dataType.Notes = txtNotes.Text;
}
private int RecordNumber
{
get
{
try
{
return Convert.ToInt32(tslblRecordNumber.Text);
}
catch
{
return 0;
}
}
}
private int SaveRecord()
{
int newRecNum = 0;
GetRecordFromForm(ref this.m_CurrentDataType);
if (this.m_CurrentDataType.RecordNumber < 1)
{
newRecNum = JTypesUpdater.AddRecord(this.m_CurrentDataType);
return newRecNum;
}
else
{
if (JTypesUpdater.UpdateRecord(this.m_CurrentDataType))
return this.m_CurrentDataType.RecordNumber;
else
return 0;
}
}
private void SetDataStatus()
{
if (m_ShowingRecord)
return;
bool dataIsDirty = IsDataDirty(this.m_CurrentDataType, this.m_CheckDataType);
if (this.m_DataIsDirty != dataIsDirty)
{
this.m_DataIsDirty = dataIsDirty;
}
if (this.m_DataIsDirty)
{
this.Text = m_Caption + "*";
}
else
{
this.Text = m_Caption;
}
}
private void ShowADOExample(JTypesData dataType)
{
lblADOGetSample.Text = "ClassName.FieldName = " + dataType.ADOConversionPrefix + "dataRow[\"FieldName\"]" + dataType.ADOConversionSuffix;
if (!CheckBrackets(lblADOGetSample))
{
lblADOParenthesis.Text = "Parentheses Mis-match";
lblADOParenthesis.ForeColor = Color.Red;
}
else
{
lblADOParenthesis.Text = "";
lblADOParenthesis.ForeColor = SystemColors.WindowText;
}
}
private void ShowRecord(int recordNumber)
{
JTypesData dataTypesData = new JTypesData(recordNumber);
ShowRecord(dataTypesData);
}
private void ShowRecord(JTypesData dataType)
{
m_ShowingRecord = true;
this.m_CurrentDataType = dataType;
this.m_CheckDataType = new JTypesData();
CopyRecord(this.m_CurrentDataType, this.m_CheckDataType);
tslblRecordNumber.Text = dataType.RecordNumber.ToString();
tslblLastUpdated.Text = dataType.LastUpdated.ToString();
lblTypeID.Text = dataType.TypeID.ToString();
txtDbTypeName.Text = dataType.DbType;
chkIsNumeric.Checked = dataType.IsNumeric;
chkLengthRequired.Checked = dataType.LengthRequired;
txtFormattedInitialValue.Text = dataType.FormattedInitialValue;
txtNETType.Text = dataType.NETType;
txtCSharpType.Text = dataType.CSharpType;
txtAccessType.Text = dataType.AccessType;
txtSQLiteType.Text = dataType.SQLiteType;
txtSQLType.Text = dataType.SQLType;
chkIsNumeric.Checked = dataType.IsNumeric;
txtNotes.Text = dataType.Notes;
ShowADOExample(dataType);
ShowSQLiteExample(dataType);
m_ShowingRecord = false;
}
private void ShowSQLiteExample(JTypesData dataType)
{
lblSQLiteGetExample.Text = "ClassName.FieldName = " + dataType.SQLiteConversionPrefix + "dataRow[\"FieldName\"]" + dataType.SQLiteConversionSuffix;
if (!CheckBrackets(lblSQLiteGetExample))
{
lblSQLiteReadParenthesis.Text = "Parentheses Mis-match";
lblSQLiteReadParenthesis.ForeColor = Color.Red;
}
else
{
lblSQLiteReadParenthesis.Text = "";
lblSQLiteReadParenthesis.ForeColor = SystemColors.WindowText;
}
lblSQLiteInsertExample.Text = "commandInsert.Parameters.Add(new SQLiteParameter(\"@FieldName\", ClassName.FieldName" + dataType.SQLiteUpdateSuffix;
if (!CheckBrackets(lblSQLiteInsertExample))
{
lblSQLiteInsertParenteses.Text = "Parentheses Mis-match";
lblSQLiteInsertParenteses.ForeColor = Color.Red;
lblSQLiteInsertExample.ForeColor = Color.Red;
lblSQLiteUpdateExample.ForeColor = Color.Red;
}
else
{
lblSQLiteInsertParenteses.Text = "";
lblSQLiteInsertParenteses.ForeColor = SystemColors.WindowText;
lblSQLiteInsertExample.ForeColor = SystemColors.WindowText;
lblSQLiteUpdateExample.ForeColor = SystemColors.WindowText;
}
lblSQLiteUpdateExample.Text = "commandUpdate.Parameters.Add(new SQLiteParameter(\"FieldName\", ClassName.FieldName" + dataType.SQLiteUpdateSuffix;
}
private void tsbtnClose_Click(object sender, EventArgs e)
{
if (CheckSave())
Close();
}
private void tsbtnDelete_Click(object sender, EventArgs e)
{
if (DeleteRecord(RecordNumber))
{
ClearForm();
FillTreeView();
}
}
private void tsbtnFillListView_Click(object sender, EventArgs e)
{
FillTreeView();
}
private void tsbtnNew_Click(object sender, EventArgs e)
{
ClearForm();
}
private void tsbtnSave_Click(object sender, EventArgs e)
{
int recNum = SaveRecord();
if (recNum > 0)
{
ShowMessage("Record Saved", false);
FillTreeView();
ClearForm();
}
else
{
ShowMessage("Unable To Save Record", true);
}
}
private void tvDataTypes_AfterSelect(object sender, TreeViewEventArgs e)
{
this.m_DataIsDirty = false;
this.Text = m_Caption;
int recNum = Convert.ToInt32(e.Node.Tag);
ShowRecord(recNum);
}
// This is why it's a TreeView, not a ListView
private void tvDataTypes_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
e.Cancel = !CheckSave();
}
private int TypeID
{
get
{
try
{
return Convert.ToInt32(lblTypeID.Text);
}
catch
{
return 0;
}
}
}
}
}