using OTS.WinFormsUI.Docking;
using OTSPartA_STDEditor.BaseClass;
using SourceGrid;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace OTSPartA_STDEditor
{
public partial class Form_Main : Form
{
public STDRuleslist m_STDRuleslist = null;
public Attributes m_Attributes = null;
public SubMidWindow m_SubMidWindow = null;
public string STDDBAddress = "";
public STDInfo _sTDEditor=null;
///
/// 0:正在打开的标准库路径;1:所增加标准的颗粒所在结果库位置;2:所增加标准的颗粒FieldId;3:所增加标准的颗粒ParticleId;4:所增加标准的颗粒XRayId
///
List ImportArgs = new List();
//国际化
public Language lan;
Hashtable table;
//是否做出过更改
public bool IsModified { set; get; }
public static readonly string[] ColorGroup = { "#FFB6C1", "#FFC0CB", "#DC143C", "#FFF0F5", "#DB7093", "#FF69B4", "#FF1493", "#C71585", "#DA70D6", "#D8BFD8", "#DDA0DD", "#EE82EE", "#FF00FF", "#8B008B", "#800080", "#BA55D3", "#9400D3", "#9932CC", "#4B0082", "#8A2BE2", "#9370DB","#7B68EE", "#6A5ACD", "#483D8B", "#E6E6FA", "#F8F8FF", "#0000FF", "#0000CD", "#191970", "#00008B", "#000080", "#4169E1" , "#6495ED", "#B0C4DE", "#778899", "#708090", "#1E90FF", "#F0F8FF", "#00FFFF" };
public Form_Main()
{
InitializeComponent();
m_STDRuleslist = new STDRuleslist(this);
m_Attributes = new Attributes(this);
m_SubMidWindow = new SubMidWindow(this);
}
public Form_Main(string[] ImportStandardLibraryArgs)
{
InitializeComponent();
m_STDRuleslist = new STDRuleslist(this);
m_Attributes = new Attributes(this);
m_SubMidWindow = new SubMidWindow(this);
foreach (var it in ImportStandardLibraryArgs)
{
ImportArgs.Add(it);
}
}
private void Form_ConstantsEditor2_Load(object sender, EventArgs e)
{
lan = new Language(this);
table = lan.GetNameTable("Form_Main");
if (STDDBAddress != "")
{
InitForms(STDDBAddress);
this.Text = this.Text.Split(' ')[0] + " " + STDDBAddress;
IsModified = false;
//if (ImportArgs.Count > 1)
//{
// ImportStandardLibraryTypeSelection m_importStandardLibraryTypeSelection = new ImportStandardLibraryTypeSelection();
// var result = m_importStandardLibraryTypeSelection.ShowDialog();
// if (m_importStandardLibraryTypeSelection.SelectEvent == "expression")
// {
// int STDId = _sTDEditor.AddSTDDictionaryItem();
// m_STDRuleslist.AddNewRow(STDId, "NewClassify", Attributes.colorHx16toRGB(ddata.Color));
// }
//}
}
}
public void ChangeSTDEditorAndGrid_Attributes(STDdata ddata)
{
m_SubMidWindow.ChangeText_textbox_STDEditor(ddata);
m_Attributes.SetDatatoGrid_Attributes(ddata);
}
private void rbBackup_Click(object sender, EventArgs e)
{
if (m_STDRuleslist.treeView_G.SelectedNode != null && m_STDRuleslist.treeView_G.SelectedNode.Level == 1)
{
STDdata sTDdata = (STDdata)m_STDRuleslist.treeView_G.SelectedNode.Tag;
if (sTDdata != null)
{
SaveDataOfSelRule(sTDdata.STDId);
}
}
m_STDRuleslist.ConvertToRuleViewDic();
try
{
SaveFileDialog saveFile = new SaveFileDialog();
saveFile.Title = "Please select the path which to save the file";
saveFile.Filter = "Database File(*.db)|*.db";
saveFile.InitialDirectory = Application.StartupPath + "\\Config\\SysData\\";
saveFile.OverwritePrompt = false; //是否覆盖当前文件
if (saveFile.ShowDialog() == DialogResult.OK)
{
if (STDDBAddress == saveFile.FileName)
{
MessageBox.Show("Cannot save as same name!", "Tip");
return;
}
FormForWaiting forWaiting = new FormForWaiting();
forWaiting.Show();
this.Refresh();
System.IO.File.Copy(STDDBAddress, saveFile.FileName, true);
bool result = _sTDEditor.SaveAsDictionaryToClassify(saveFile.FileName);
if (result)
{
_sTDEditor.UpdateSTDDictionaryInitial();
STDDBAddress = saveFile.FileName;
this.Text = this.Text.Split(' ')[0] + " " + saveFile.FileName;
IsModified = false;
forWaiting.Close();
MessageBox.Show("Save successful!", "Tip");
}
else
{
forWaiting.Close();
MessageBox.Show("Save failed!", "Tip");
}
}
else
{
return;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void rbSave_Click(object sender, EventArgs e)
{
if (m_STDRuleslist.treeView_G.SelectedNode != null && m_STDRuleslist.treeView_G.SelectedNode.Level == 1)
{
STDdata sTDdata = (STDdata)m_STDRuleslist.treeView_G.SelectedNode.Tag;
if (sTDdata != null)
{
SaveDataOfSelRule(sTDdata.STDId);
}
}
m_STDRuleslist.ConvertToRuleViewDic();
if (Ruleformatcheck())
{
FormForWaiting forWaiting = new FormForWaiting();
forWaiting.Show();
this.Refresh();
bool result = _sTDEditor.SaveDictionaryToClassify();
if (result)
{
_sTDEditor.UpdateSTDDictionaryInitial();
forWaiting.Close();
IsModified = false;
MessageBox.Show("Save successful!", "Tip");
}
else
{
forWaiting.Close();
MessageBox.Show("Save failed!", "Tip");
}
}
else
{
return;
}
}
bool Ruleformatcheck()
{
foreach (var ite in _sTDEditor.STDDictionary)
{
if (CheckExpression(ite.Value.Expression))
{
}
else
{
foreach (TreeNode treeNode in m_STDRuleslist.treeView_G.Nodes)
{
foreach (TreeNode treeNode1 in treeNode.Nodes)
{
if (((STDdata)treeNode1.Tag).STDId == ite.Key)
{
m_STDRuleslist.treeView_G.SelectedNode = treeNode1;
ChangeSTDEditorAndGrid_Attributes(ite.Value);
m_STDRuleslist.Predata = ite.Value;
break;
}
}
}
return false;
}
}
return true;
}
///
/// [颜色:RGB转成16进制]
///
/// 红 int
/// 绿 int
/// 蓝 int
///
public static string colorRGBtoHx16(int R, int G, int B)
{
return System.Drawing.ColorTranslator.ToHtml(System.Drawing.Color.FromArgb(R, G, B));
}
//表达式规则检查
public bool CheckExpression(string Expression)
{
string str_RemoveBlank = Expression.Replace(" ", "");
if (!string.IsNullOrEmpty(str_RemoveBlank))
{
str_RemoveBlank = str_RemoveBlank.Replace("\r\n", "");
//分割符号检验
string[] Symbol = { "and", "or", "+", "-", "*", "/", "=", ">", "<" };
for (int i = 0; i < Symbol.Length; i++)
{
for (int j = 0; j < Symbol.Length; j++)
{
if ((Symbol[i] + Symbol[j]) != ">=" && (Symbol[i] + Symbol[j]) != "<=")
{
if (str_RemoveBlank.Contains(Symbol[i] + Symbol[j]))
{
MessageBox.Show("Invalid string exists:" + Symbol[i] + Symbol[j], "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
}
}
if (str_RemoveBlank.Contains(Symbol[i] + ")") || str_RemoveBlank.Contains("(" + Symbol[i]))
{
MessageBox.Show("Invalid string exists:" + Symbol[i] + ")", "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
if (str_RemoveBlank.Contains("(" + Symbol[i]))
{
MessageBox.Show("Invalid string exists:" + "(" + Symbol[i], "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
//尾字符检测
int n= Symbol[i].Length;
if (str_RemoveBlank.Length >= n)
{
if (str_RemoveBlank.Substring(str_RemoveBlank.Length-n, n) == Symbol[i])
{
MessageBox.Show("Last character is error!", "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
if (str_RemoveBlank.Substring(0, n) == Symbol[i])
{
MessageBox.Show("First character is error!", "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
}
}
//左右括号匹配检验
int BracketsNum = 0;
for (int i = 0; i < str_RemoveBlank.Length; i++)
{
if (str_RemoveBlank[i] == '(') BracketsNum++;
if (str_RemoveBlank[i] == ')') BracketsNum--;
}
if (BracketsNum != 0)
{
MessageBox.Show("Number of left and right parentheses does not match!", "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
////首字符检测
//if ((str_RemoveBlank[0] == '+') || (str_RemoveBlank[0] == '-') || (str_RemoveBlank[0] == '*') || (str_RemoveBlank[0] == '/') || (str_RemoveBlank[0] == '>') || (str_RemoveBlank[0] == '<') || (str_RemoveBlank[0] == '=') || (str_RemoveBlank[0] == ')') || (str_RemoveBlank[str_RemoveBlank.Length - 1] == '('))
//{
// MessageBox.Show("First character is error!", "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
// return false;
//}
//if (str_RemoveBlank.Length >= 3)
//{
// if ((str_RemoveBlank.Substring(0, 3) == "and") || (str_RemoveBlank.Substring(0, 3) == "end"))
// {
// MessageBox.Show("First character is error!", "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
// return false;
// }
//}
//forth_elem干扰or分隔符,故先行去掉
//str_RemoveBlank = str_RemoveBlank.Replace("fourth_elem", "");
string[] str_Removeand = System.Text.RegularExpressions.Regex.Split(str_RemoveBlank, "and", System.Text.RegularExpressions.RegexOptions.None);
List str_Removeandor = new List();
for (int i = 0; i < str_Removeand.Length; i++)
{
str_Removeandor.AddRange(System.Text.RegularExpressions.Regex.Split(str_Removeand[i], "or", System.Text.RegularExpressions.RegexOptions.None));
}
List list_all = new List();
for (int i = 0; i < str_Removeandor.Count; i++)
{
list_all.AddRange(str_Removeandor[i].Split(new char[] { '+', '-', '*', '/', '=', '>', '<', '(', ')' }));
}
//常量
List Constantslist = new List();
for (int j = 0; j < m_SubMidWindow.m_STDEditor.comboBox_Constants.Items.Count; j++)
{
Constantslist.Add(m_SubMidWindow.m_STDEditor.comboBox_Constants.Items[j].ToString().Split('=')[0]);
}
for (int i = 0; i < list_all.Count; i++)
{
//周期元素?
if (this.m_SubMidWindow.m_STDEditor.comboBox_PeriodicTable.Items.Contains(list_all[i]))
{
continue;
}
//first_elem?
if (this.m_SubMidWindow.m_STDEditor.comboBox_Elem1.Items.Contains(list_all[i]))
{
continue;
}
//Element1?
if (this.m_SubMidWindow.m_STDEditor.comboBox_Elem.Items.Contains(list_all[i]))
{
continue;
}
//其它元素?
if (this.m_SubMidWindow.m_STDEditor.comboBox_ImgProperty.Items.Contains(list_all[i]))
{
continue;
}
//常量?
if (Constantslist.Contains(list_all[i]))
{
continue;
}
//数字?
double DNum = 0;
if (double.TryParse(list_all[i], out DNum))
{
continue;
}
//>=? <=?等其它情况
if (list_all[i] == "")
{
continue;
}
//true false?
if ((list_all[i] == "true") || (list_all[i] == "false"))
{
continue;
}
MessageBox.Show("Please check whether the input rules are correct, error characters:" + list_all[i], "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
//检测是否有<>= true,false
if (!Expression.Contains("<") && !Expression.Contains(">") && !Expression.Contains("=") && Expression.ToLower() != "true" && Expression.ToLower() != "false")
{
MessageBox.Show("Expressions have no effect!", "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
}
else
{
MessageBox.Show("The expresstion is mull!", "Tip", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
return true;
}
///
/// 属性检测
///
///
///
public bool CheckAttributes(STDdata ddata)
{
if (string.IsNullOrEmpty(ddata.StrName))
{
MessageBox.Show("Rule name can not be null !", "Tip", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
return true;
}
public void SaveDataOfSelRule(int stdid)
{
foreach (int grpid in m_STDRuleslist.GroupViewDic.Keys)
{
foreach (STDdata ddata in m_STDRuleslist.GroupViewDic[grpid].ContainSTD)
{
if (ddata.STDId == stdid)
{
ddata.StrName = Convert.ToString(m_Attributes.Grid_Attributes[2, 1].Value);
ddata.Color = colorRGBtoHx16(m_Attributes.Grid_Attributes[3, 1].View.BackColor.R, m_Attributes.Grid_Attributes[3, 1].View.BackColor.G, m_Attributes.Grid_Attributes[3, 1].View.BackColor.B);
ddata.IfElementAnalysis = Convert.ToBoolean(m_Attributes.Grid_Attributes[4, 1].Value);
ddata.Hardness = Convert.ToString(m_Attributes.Grid_Attributes[5, 1].Value);
ddata.Density = Convert.ToString(m_Attributes.Grid_Attributes[6, 1].Value);
ddata.Electrical_conductivity = Convert.ToString(m_Attributes.Grid_Attributes[7, 1].Value);
ddata.BSE = Convert.ToString(m_Attributes.Grid_Attributes[8, 1].Value);
if (m_Attributes.Grid_Attributes[9, 1].Value != null)
{
ddata.Formula = Convert.ToString(m_Attributes.Grid_Attributes[9, 1].Value);
}
else
{
ddata.Formula = "";
}
if (m_Attributes.Grid_Attributes[10, 1].Value != null)
{
ddata.Element = Convert.ToString(m_Attributes.Grid_Attributes[10, 1].Value);
}
else
{
ddata.Element = "";
}
if (m_Attributes.Grid_Attributes[11, 1].Value != null)
{
ddata.GroupId = _sTDEditor.GroupIdDictionaryFromName[Convert.ToString(m_Attributes.Grid_Attributes[11, 1].Value)];
}
else
{
ddata.GroupId = -1;
}
ddata.Expression = m_SubMidWindow.m_STDEditor.textbox_STDEditor.Text.ToString();
string sKeyElements = "";
for (int i = 0; i < m_SubMidWindow.m_STDEditor.dataGridView_KeyElements.Columns.Count; i++)
{
sKeyElements += m_SubMidWindow.m_STDEditor.dataGridView_KeyElements.Rows[0].Cells[i].Value.ToString() + ",";
}
if (sKeyElements.Length > 0)
{
sKeyElements = sKeyElements.Substring(0, sKeyElements.Length - 1);
}
string sSubElements = "";
for (int i = 0; i < m_SubMidWindow.m_STDEditor.dataGridView_SubElements.Columns.Count; i++)
{
sSubElements += m_SubMidWindow.m_STDEditor.dataGridView_SubElements.Rows[0].Cells[i].Value.ToString() + ",";
}
if (sSubElements.Length > 0)
{
sSubElements = sSubElements.Substring(0, sSubElements.Length - 1);
}
ddata.KeyElementList = sKeyElements;
ddata.SubElementList = sSubElements;
//ddata.ListNum = "0";
}
}
}
}
public void RemoveSTDDictionaryItem(int STDId)
{
_sTDEditor.STDDictionary.Remove(STDId);
}
public void ChangeStrName(int RowNum, string NewStrName)
{
//_sTDEditor.STDDictionary[((STDdata)m_STDRuleslist.Grid_Minerals[RowNum, 0].Tag).STDId].StrName = NewStrName;
//m_Attributes.Grid_Attributes[2, 1].Value = NewStrName;
}
public void ChangeSTDRulesLISTBackColor()
{
int stdid = m_STDRuleslist.ChangeSTDRulesLISTBackColor();
m_STDRuleslist.treeView_G.Focus();
}
public void ChangeSTDRuleName(String RuleName)
{
if(m_STDRuleslist.treeView_G.SelectedNode==null)
{
return;
}
if (m_STDRuleslist.treeView_G.SelectedNode.Level == 0)
{
return;
}
else
{
if (RuleName == null || RuleName == "")
{
MessageBox.Show("RuleName Cannot Be Null!", "Tip");
m_Attributes.Grid_Attributes[2, 1].Value= ((STDdata)m_STDRuleslist.treeView_G.SelectedNode.Tag).StrName;
return;
}
STDdata sT = (STDdata)m_STDRuleslist.treeView_G.SelectedNode.Tag;
foreach (int grpid in m_STDRuleslist.GroupViewDic.Keys)
{
foreach (STDdata ddata in m_STDRuleslist.GroupViewDic[grpid].ContainSTD)
{
if (ddata.STDId == ((STDdata)m_STDRuleslist.treeView_G.SelectedNode.Tag).STDId)
{
ddata.StrName = RuleName;
m_STDRuleslist.treeView_G.SelectedNode.Text = RuleName;
break;
}
}
}
}
m_STDRuleslist.treeView_G.Focus();
}
public void SetNull()
{
m_SubMidWindow.m_STDEditor.textbox_STDEditor.Text = "";
SourceGrid.Cells.Views.Cell view = new SourceGrid.Cells.Views.Cell();
view.BackColor = Color.White;
m_Attributes.Grid_Attributes[3, 1].View = view;
for (int i = 1; i < m_Attributes.Grid_Attributes.RowsCount - 1; i++)
{
if (m_Attributes.Grid_Attributes[i, 1].Value != null)
{
if (m_Attributes.Grid_Attributes[i, 1].View is SourceGrid.Cells.Views.CheckBox)
{
m_Attributes.Grid_Attributes[i, 1].Value = true;
}
else
{
m_Attributes.Grid_Attributes[i, 1].Value = "";
}
}
}
m_Attributes.Grid_Attributes.Refresh();
m_SubMidWindow.m_STDEditor.dataGridView_KeyElements.Rows.Clear();
m_SubMidWindow.m_STDEditor.dataGridView_KeyElements.Columns.Clear();
m_SubMidWindow.m_STDEditor.dataGridView_SubElements.Rows.Clear();
m_SubMidWindow.m_STDEditor.dataGridView_SubElements.Columns.Clear();
}
private void ribbon_ESDMaxRules_Click(object sender, EventArgs e)
{
Form_MaxEDSRules form_MaxEDSRules = new Form_MaxEDSRules(STDDBAddress);
form_MaxEDSRules.Show();
}
private void ribbon_ZeroRules_Click(object sender, EventArgs e)
{
Form_ZeroElementRules form_ZeroElementRules = new Form_ZeroElementRules(STDDBAddress);
form_ZeroElementRules.Show();
}
private void ribbon_UserConstants_Click(object sender, EventArgs e)
{
Form_UserConstants form_UserConstants = new Form_UserConstants(STDDBAddress);
DialogResult dialogResult = form_UserConstants.ShowDialog();
if (dialogResult == DialogResult.Yes)
{
try
{
_sTDEditor.LoadConstants();
string[] ConstantsStr2 = _sTDEditor.ConstantsStr;
m_SubMidWindow.m_STDEditor.comboBox_Constants.Items.Clear();
m_SubMidWindow.m_STDEditor.comboBox_Constants.Items.AddRange(ConstantsStr2);
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
}
}
}
private void ribbon_GroupNameMaintenance_Click(object sender, EventArgs e)
{
int selGroupId = _sTDEditor.GroupIdDictionaryFromName[m_Attributes.Grid_Attributes[11, 1].Value.ToString()];
Form_GroupId form_GroupId = new Form_GroupId(STDDBAddress, this);
DialogResult dialogResult = form_GroupId.ShowDialog();
if (dialogResult == DialogResult.Yes)
{
m_Attributes.AddSTDGroupsToAttribute();
m_Attributes.Grid_Attributes[11, 1].Value = _sTDEditor.GroupIdDictionaryFromId[selGroupId];
}
}
private void ribbon_Exit_Click(object sender, EventArgs e)
{
this.Close();
}
private void rbClose_Click(object sender, EventArgs e)
{
if (!_sTDEditor.Isoldversion)
{
if (!EqualsBetweenDictionary() || IsModified)
{
DialogResult dr = MessageBox.Show("Whether to save the current modification?", "Tip", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dr == DialogResult.Yes)
{
if (m_STDRuleslist.Predata != null)
{
int id = m_STDRuleslist.Predata.STDId;
SaveDataOfSelRule(id);
}
}
else
{
return;
}
FormForWaiting forWaiting = new FormForWaiting();
forWaiting.Show();
bool result = _sTDEditor.SaveDictionaryToClassify();
if (result)
{
forWaiting.Close();
}
else
{
forWaiting.Close();
MessageBox.Show("Save failed!", "Tip");
}
}
}
m_Attributes.Close();
m_STDRuleslist.Close();
m_SubMidWindow.m_STDEditor.Close();
m_SubMidWindow.m_ComparativeLibrary.Close();
m_SubMidWindow.Close();
ButtonStatusClose();
if (this.Text.Split(' ').Count() != 0)
{
this.Text = this.Text.Split(' ')[0];
}
}
private void rbOpen_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "(*.db)|*.db";
openFileDialog.RestoreDirectory = true;
openFileDialog.InitialDirectory = Application.StartupPath + "\\Config\\SysData\\";
openFileDialog.FilterIndex = 1;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
STDDBAddress = openFileDialog.FileName;
InitForms(STDDBAddress);
this.Text = this.Text.Split(' ')[0] + " " + STDDBAddress;
IsModified = false;
CheckAccuracyofZeroRules();
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString(), "Tip");
}
}
}
void ButtonStatusOpen()
{
rbOpen.Enabled = false;
rbClose.Enabled = true;
//rbRecover.Enabled = true;
rbBackup.Enabled = true;
rbSave.Enabled = true;
rbNew.Enabled = false;
ribbon_ZeroRules.Enabled = true;
ribbon_ESDMaxRules.Enabled = true;
ribbon_UserConstants.Enabled = true;
ribbon_GroupNameMaintenance.Enabled = false;
}
void ButtonStatusClose()
{
rbOpen.Enabled = true;
rbClose.Enabled = false;
//rbRecover.Enabled = false;
rbBackup.Enabled = false;
rbSave.Enabled = false;
rbNew.Enabled = true;
ribbon_ZeroRules.Enabled = false;
ribbon_ESDMaxRules.Enabled = false;
ribbon_UserConstants.Enabled = false;
ribbon_GroupNameMaintenance.Enabled = false;
}
void InitForms(string DBAddress)
{
ButtonStatusOpen();
_sTDEditor = new STDInfo(DBAddress);
if (_sTDEditor.STDDictionary == null|| _sTDEditor.GroupDictionary==null)
{
return;
}
m_STDRuleslist = new STDRuleslist(this);
m_Attributes = new Attributes(this);
m_SubMidWindow = new SubMidWindow(this);
m_STDRuleslist.Show(dockPanel1, DockState.DockLeft);
m_Attributes.Show(dockPanel1, DockState.DockRight);
m_SubMidWindow.Show(dockPanel1, DockState.Document);
dockPanel1.DockLeftPortion = 360;
dockPanel1.DockRightPortion = 381;
m_SubMidWindow.m_STDEditor.comboBox_Constants.Items.Clear();
if(_sTDEditor.ConstantsStr != null)
{
m_SubMidWindow.m_STDEditor.comboBox_Constants.Items.AddRange(_sTDEditor.ConstantsStr);
}
m_SubMidWindow.m_STDEditor.textbox_STDEditor.Text = "";
m_STDRuleslist.InitGroupEditorView();
}
private void Form_ConstantsEditor2_FormClosing(object sender, FormClosingEventArgs e)
{
if(_sTDEditor==null)
{
return;
}
if (_sTDEditor.Isoldversion)
{
return;
}
if (m_STDRuleslist.Text != "")
{
if (!EqualsBetweenDictionary() || IsModified)
{
DialogResult dr = MessageBox.Show("Whether to save the current modification", "Tip", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dr == DialogResult.Yes)
{
if (m_STDRuleslist.Predata!=null)
{
int id = m_STDRuleslist.Predata.STDId;
SaveDataOfSelRule(id);
}
FormForWaiting forWaiting = new FormForWaiting();
forWaiting.Show();
bool result = _sTDEditor.SaveDictionaryToClassify();
if (result)
{
forWaiting.Close();
}
else
{
forWaiting.Close();
MessageBox.Show("Save failed!", "Tip");
}
}
}
}
}
bool EqualsBetweenDictionary()
{
return _sTDEditor.EqualsBetweenDictionary();
}
private void rbNew_Click(object sender, EventArgs e)
{
SaveFileDialog saveFile = new SaveFileDialog();
saveFile.Title = table["message23"].ToString();
saveFile.Filter = table["message36"].ToString();
saveFile.OverwritePrompt = true; //是否覆盖当前文件
saveFile.RestoreDirectory = true; //还原上次目录
if (saveFile.ShowDialog() == DialogResult.OK)
{
try
{
System.Data.SQLite.SQLiteConnection.CreateFile(saveFile.FileName);
System.Data.SQLite.SQLiteConnection m_OtsDatabaseConnection = new System.Data.SQLite.SQLiteConnection("data source='" + saveFile.FileName + "'");
m_OtsDatabaseConnection.Open();
System.Data.SQLite.SQLiteCommand OtsDatabaseCommand = m_OtsDatabaseConnection.CreateCommand();
OtsDatabaseCommand.CommandText = "CREATE TABLE ClassifySTD (STDId INTEGER,StrName TEXT, Color TEXT,KeyElementList TEXT,SubElementList TEXT,UsingImgPropertyList TEXT,UsingOtherPropertyList TEXT,Expression TEXT,Hardness TEXT,Density TEXT,Electrical_conductivity TEXT,BSE INTEGER,Formula TEXT,Element TEXT,IfElementAnalysis BOOLEAN,ListNum INT,GroupId INT)";
OtsDatabaseCommand.ExecuteNonQuery();
OtsDatabaseCommand.CommandText = "CREATE TABLE Constants (value TEXT)";
OtsDatabaseCommand.ExecuteNonQuery();
OtsDatabaseCommand.CommandText = "CREATE TABLE MaxEDSRules (MaxEDSTime INT,UsingElementList TEXT, UsingImgPropertyList TEXT,UsingOtherPropertyList TEXT,Expression TEXT)";
OtsDatabaseCommand.ExecuteNonQuery();
OtsDatabaseCommand.CommandText = "CREATE TABLE STDGroups (id INTEGER,name TEXT, color TEXT,iorder INTEGER)";
OtsDatabaseCommand.ExecuteNonQuery();
OtsDatabaseCommand.CommandText = "CREATE TABLE STDMinerals (id INTEGER,SPEC BLOB)";
OtsDatabaseCommand.ExecuteNonQuery();
OtsDatabaseCommand.CommandText = "CREATE TABLE ZeroElementRules (ZeroElement TEXT,UsingElementList TEXT, UsingImgPropertyList TEXT,UsingOtherPropertyList TEXT,Expression TEXT)";
OtsDatabaseCommand.ExecuteNonQuery();
System.Data.Common.DbTransaction trans = m_OtsDatabaseConnection.BeginTransaction();
trans.Commit();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return;
}
STDDBAddress = saveFile.FileName;
InitForms(STDDBAddress);
this.Text = this.Text.Split(' ')[0] + " " + STDDBAddress;
IsModified = false;
}
else
{
return;
}
}
void CheckAccuracyofZeroRules()
{
System.Data.SQLite.SQLiteConnection m_dbConnection = new System.Data.SQLite.SQLiteConnection("data source='" + STDDBAddress + "'");
m_dbConnection.Open();
System.Data.SQLite.SQLiteDataAdapter m_dataAdapter = new System.Data.SQLite.SQLiteDataAdapter("select * from ZeroElementRules", m_dbConnection);
DataSet ds = new DataSet();
m_dataAdapter.Fill(ds);
DataTable dt = ds.Tables[0];
DataTable dt2 = dt.Copy();
if (dt != null)
{
if (dt.Columns[dt.Columns.Count - 1].ColumnName != "Expression")
{
System.Data.SQLite.SQLiteCommand cmm = m_dbConnection.CreateCommand();
cmm.CommandText = "CREATE TABLE sqlitestudio_temp_table AS SELECT * FROM ZeroElementRules";
cmm.ExecuteNonQuery();
cmm.CommandText = "DROP TABLE ZeroElementRules";
cmm.ExecuteNonQuery();
cmm.CommandText = "CREATE TABLE ZeroElementRules (ZeroElement TEXT,UsingElementList TEXT,UsingImgPropertyList TEXT,UsingOtherPropertyList TEXT,Expression TEXT)";
cmm.ExecuteNonQuery();
cmm.CommandText = @"INSERT INTO ZeroElementRules (
ZeroElement,
UsingElementList,
UsingImgPropertyList,
UsingOtherPropertyList,
Expression
)
SELECT ZeroElement,
UsingElementList,
UsingImgPropertyList,
UsingOtherPropertyList,
Expression
FROM sqlitestudio_temp_table; ";
cmm.ExecuteNonQuery();
cmm.CommandText = "DROP TABLE sqlitestudio_temp_table";
cmm.ExecuteNonQuery();
m_dbConnection.Close();
MessageBox.Show("检测到该数据库零元素规则格式错误,已进行修正!");
}
}
}
}
}