using OTS.WinFormsUI.Docking; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Runtime.InteropServices; using System.Windows.Forms; namespace OTSPartA_STDEditor { public partial class STDRuleslist : DockContent { public STDdata Predata = null;//之前选中的位置 public Form_Main m_MainForm = null; ValueChangedEvent m_ValueChangedEvent = null;//单元格内容改变事件 public Dictionary GroupViewDic=null; System.Collections.Hashtable table_STDRuleslist; bool RenFlag = false; public STDRuleslist(Form_Main mainForm) { InitializeComponent(); m_MainForm = mainForm; m_ValueChangedEvent = new ValueChangedEvent(this); } private void STDRuleslist_Load(object sender, EventArgs e) { m_MainForm.lan = new Language(this); table_STDRuleslist = m_MainForm.lan.GetNameTable("Attributes"); InitGroupEditorView(); } /// /// [颜色:16进制转成RGB] /// /// 设置16进制颜色 [返回RGB] /// public static System.Drawing.Color colorHx16toRGB(string strHxColor) { try { if (strHxColor.Length == 0) {//如果为空 return System.Drawing.Color.FromArgb(255, 255, 204);//设为白色 } else {//转换颜色 return System.Drawing.Color.FromArgb(System.Int32.Parse(strHxColor.Substring(1, 2), System.Globalization.NumberStyles.AllowHexSpecifier), System.Int32.Parse(strHxColor.Substring(3, 2), System.Globalization.NumberStyles.AllowHexSpecifier), System.Int32.Parse(strHxColor.Substring(5, 2), System.Globalization.NumberStyles.AllowHexSpecifier)); } } catch {//设为白色 return System.Drawing.Color.FromArgb(255, 255, 204); } } public class ValueChangedEvent : SourceGrid.Cells.Controllers.ControllerBase { protected STDRuleslist m_parentWnd = null; public ValueChangedEvent(STDRuleslist parentWnd) { m_parentWnd = parentWnd; } public override void OnValueChanged(SourceGrid.CellContext sender, EventArgs e) { base.OnValueChanged(sender, e); if (sender.Value != null&& sender.Value.ToString().Replace(" ", "").Trim() != "") { m_parentWnd.ChangeStrName(sender.Position.Row, sender.Value.ToString()); } else { m_parentWnd.ChangeStrName(sender.Position.Row, "NewRuleName"); } } } public void ChangeStrName(int RowNum, string NewStrName) { m_MainForm.ChangeStrName(RowNum, NewStrName); } private void Grid_Minerals_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.Delete) { ToolStripMenuItem_Del_Click(null, null); } } public int ChangeSTDRulesLISTBackColor() { if (treeView_G.SelectedNode.Level == 0) { return -1; } STDdata ddata = (STDdata)treeView_G.SelectedNode.Tag; int id = ddata.STDId; foreach(STDdata ddata1 in ((STDGroups)treeView_G.SelectedNode.Parent.Tag).ContainSTD) { if(ddata1.STDId== ddata.STDId) { ddata1.Color = Attributes.colorRGBtoHx16(m_MainForm.m_Attributes.Grid_Attributes[3, 1].View.BackColor.R, m_MainForm.m_Attributes.Grid_Attributes[3, 1].View.BackColor.G, m_MainForm.m_Attributes.Grid_Attributes[3, 1].View.BackColor.B); break; } } InitGroupView(); foreach (TreeNode treeNode in treeView_G.Nodes) { if (((STDGroups)treeNode.Tag).id == ddata.GroupId) { foreach (TreeNode node in treeNode.Nodes) { if (((STDdata)node.Tag).STDId == id) { treeView_G.SelectedNode = node; Predata = (STDdata)node.Tag; break; } } } } return id; } public void InitGroupEditorView() { GroupViewDic = ConvertToGroupViewDic(); InitGroupView(); } Dictionary ConvertToGroupViewDic() { Dictionary keyValuePairs = new Dictionary(); keyValuePairs = m_MainForm._sTDEditor.GroupDictionary; foreach (STDGroups group in keyValuePairs.Values) { group.ContainSTD.Clear(); } foreach (STDdata Ddata in m_MainForm._sTDEditor.STDDictionary.Values) { keyValuePairs[Ddata.GroupId].ContainSTD.Add(Ddata); } return keyValuePairs; } public void ConvertToRuleViewDic() { m_MainForm._sTDEditor.GroupIdDictionaryFromId.Clear(); m_MainForm._sTDEditor.GroupIdDictionaryFromName.Clear(); m_MainForm._sTDEditor.STDDictionary.Clear(); foreach (TreeNode treeNode in treeView_G.Nodes) { STDGroups tDGroups = (STDGroups)treeNode.Tag; GroupViewDic[tDGroups.id].iorder = treeNode.Index; foreach (TreeNode treeNode1 in treeNode.Nodes) { STDdata Ddata = (STDdata)treeNode1.Tag; Ddata.ListNum = treeNode1.Index.ToString(); m_MainForm._sTDEditor.STDDictionary.Add(Ddata.STDId, Ddata); } m_MainForm._sTDEditor.GroupIdDictionaryFromName.Add(tDGroups.name.ToString(), int.Parse(tDGroups.id.ToString())); m_MainForm._sTDEditor.GroupIdDictionaryFromId.Add(int.Parse(tDGroups.id.ToString()), tDGroups.name.ToString()); } if (treeView_G.SelectedNode == null){return;} if (treeView_G.SelectedNode.Level == 1) { m_MainForm.SaveDataOfSelRule(((STDdata)treeView_G.SelectedNode.Tag).STDId); } } private void ToolStripMenuItem_NewGroup_Click(object sender, EventArgs e) { STDGroups group = new STDGroups(); int id = 0; foreach(STDGroups grp in GroupViewDic.Values) { if(grp.id>id) { id= grp.id; } } id++; group.id = id; group.name = "Group" + id.ToString(); group.color = Attributes.colorRGBtoHx16(Color.WhiteSmoke.R, Color.WhiteSmoke.G, Color.WhiteSmoke.B); group.iorder = GroupViewDic.Count-1; GroupViewDic.Add(group.id, group); m_MainForm.m_Attributes.AddSTDGroupsToAttribute(); m_MainForm._sTDEditor.GroupIdDictionaryFromId.Add(id, group.name); m_MainForm._sTDEditor.GroupIdDictionaryFromName.Add(group.name, group.id); InitGroupView(); foreach (TreeNode treeNode in treeView_G.Nodes) { if (((STDGroups)treeNode.Tag).id == id) { treeView_G.SelectedNode = treeNode; break; } } m_MainForm.SetNull(); Predata = null; this.Refresh(); } private void ToolStripMenuItem_Del_Click(object sender, EventArgs e) { if (treeView_G.SelectedNode == null) { MessageBox.Show("Please select a node!", "Tip"); return; } if (treeView_G.SelectedNode.Level == 0) { int id = ((STDGroups)treeView_G.SelectedNode.Tag).id; if (((STDGroups)treeView_G.SelectedNode.Tag).id == 0) { MessageBox.Show("Can not delete the group which named default!", "Tip"); return; } m_MainForm._sTDEditor.GroupIdDictionaryFromId.Remove(id); m_MainForm._sTDEditor.GroupIdDictionaryFromName.Remove(GroupViewDic[id].name); foreach (TreeNode treeNode1 in treeView_G.Nodes) { if (((STDGroups)treeNode1.Tag).name == "Default") { if (Predata != null) { m_MainForm.SaveDataOfSelRule(Predata.STDId); } foreach (STDdata ddata in GroupViewDic[((STDGroups)treeView_G.SelectedNode.Tag).id].ContainSTD) { ddata.GroupId = ((STDGroups)treeNode1.Tag).id; ddata.ListNum = "1000"; } GroupViewDic[((STDGroups)treeNode1.Tag).id].ContainSTD.AddRange(GroupViewDic[((STDGroups)treeView_G.SelectedNode.Tag).id].ContainSTD); GroupViewDic.Remove(id); InitGroupView(); break; } } foreach (TreeNode treeNode1 in treeView_G.Nodes) { if (((STDGroups)treeNode1.Tag).name == "Default") { treeView_G.SelectedNode = treeNode1; m_MainForm.SetNull(); Predata = null; break; } } } else { foreach (int grpid in GroupViewDic.Keys) { foreach (STDdata ddata in GroupViewDic[grpid].ContainSTD) { if (ddata.STDId == ((STDdata)treeView_G.SelectedNode.Tag).STDId) { GroupViewDic[grpid].ContainSTD.Remove(ddata); break; } } } treeView_G.SelectedNode.Remove(); if (treeView_G.SelectedNode != null&& treeView_G.SelectedNode.Level !=0) { m_MainForm.ChangeSTDEditorAndGrid_Attributes((STDdata)treeView_G.SelectedNode.Tag); Predata = (STDdata)treeView_G.SelectedNode.Tag; } else { m_MainForm.SetNull(); Predata = null; } this.Refresh(); } } private void ToolStripMenuItem_EdGroupColor_Click(object sender, EventArgs e) { if(treeView_G.SelectedNode==null) { MessageBox.Show("Please select a group!", "Tip"); return; } if (treeView_G.SelectedNode.Level == 0) { if (treeView_G.SelectedNode.Text == "Default") { MessageBox.Show("The default group cannot be changed!", "Tip"); treeView_G.SelectedNode.EndEdit(true); return; } ColorDialog cd = new ColorDialog(); cd.FullOpen = true;//自定义颜色界面打开 DialogResult result = cd.ShowDialog(); if (result == DialogResult.OK) { GroupViewDic[((STDGroups)treeView_G.SelectedNode.Tag).id].color = Attributes.colorRGBtoHx16(cd.Color.R, cd.Color.G, cd.Color.B); InitGroupView(); } } else { MessageBox.Show("Please select a group!", "Tip"); } } public void InitGroupView() { treeView_G.ImageList=new ImageList(); treeView_G.Nodes.Clear(); treeView_G.ImageList.ColorDepth = ColorDepth.Depth32Bit; List groups = new List(); foreach (STDGroups group in GroupViewDic.Values) { if (group.name == "Default") { group.iorder = 10000; } groups.Add(group); } groups=groups.OrderBy(s => s.iorder).ToList(); for (int i=0;i< groups.Count;i++) { TreeNode treeNode = new TreeNode(); treeNode.Tag = groups[i]; treeNode.Text = groups[i].name; Color color = Attributes.colorHx16toRGB(groups[i].color); Bitmap bitmap = new Bitmap(100, 100, PixelFormat.Format32bppArgb); Graphics graphics = Graphics.FromImage(bitmap); SolidBrush b1 = new SolidBrush(color); graphics.FillEllipse(b1, new Rectangle(0, 0, 100, 100)); treeView_G.ImageList.Images.Add(groups[i].id.ToString(),bitmap); treeNode.ImageKey = groups[i].id.ToString(); treeNode.SelectedImageKey = groups[i].id.ToString(); treeView_G.Nodes.Add(treeNode); groups[i].ContainSTD= groups[i].ContainSTD.OrderBy(s => int.Parse(s.ListNum)).ToList(); for(int j=0;j treeView_G.Height) { SendMessage(treeView_G.Handle, (int)277, (int)1, 0); } else if (pt.Y < (treeView_G.Top + scrollRegion)) { SendMessage(treeView_G.Handle, (int)277, (int)0, 0); } TreeNode _node2 = treeView_G.GetNodeAt(treeView_G.PointToClient(new Point(e.X, e.Y))); m_targetNode = null; if (_node2 != null) { m_targetNode = _node2; e.Effect = DragDropEffects.Move; } else { e.Effect = DragDropEffects.None; } } private void treeView_G_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (Predata!=null) { m_MainForm.SaveDataOfSelRule(Predata.STDId); } if(e.Node.Level==0) { m_MainForm.SetNull(); Predata = null; treeView_G.SelectedNode = e.Node; } else { m_MainForm.ChangeSTDEditorAndGrid_Attributes((STDdata)e.Node.Tag); Predata = (STDdata)e.Node.Tag; treeView_G.SelectedNode = e.Node; } } public void AdjustTreenodeByGroup(int Groupid) { if (m_MainForm.m_STDRuleslist.tabControl1.SelectedIndex == 1) { return; } if (treeView_G.SelectedNode == null) { return; } if (treeView_G.SelectedNode.Level == 0) { return; } STDdata ddata = (STDdata)treeView_G.SelectedNode.Tag; TreeNode nodenew = null; foreach (TreeNode node in treeView_G.Nodes) { if (((STDGroups)node.Tag).id == Groupid) { nodenew = node;break; } } foreach (TreeNode node in treeView_G.Nodes) { foreach (TreeNode node1 in node.Nodes) { if (((STDdata)node1.Tag).STDId == ddata.STDId) { GroupViewDic[((STDGroups)node.Tag).id].ContainSTD.Remove(ddata); node1.Remove(); ((STDdata)node1.Tag).GroupId = ddata.GroupId; nodenew.Nodes.Add(node1); GroupViewDic[Groupid].ContainSTD.Add(ddata); treeView_G.SelectedNode = node1; nodenew.Expand(); m_MainForm.ChangeSTDEditorAndGrid_Attributes((STDdata)node1.Tag); Predata = ddata; break; } } } } string PreN = ""; private void ToolStripMenuItem_Rename_Click(object sender, EventArgs e) { if (treeView_G.SelectedNode != null) { RenFlag = true; PreN = treeView_G.SelectedNode.Text; if (treeView_G.SelectedNode.Level == 0) { if (treeView_G.SelectedNode.Text == "Default") { MessageBox.Show("The default group cannot be changed!", "Tip"); treeView_G.SelectedNode.EndEdit(true); return; } else { treeView_G.SelectedNode.BeginEdit(); } } else { treeView_G.SelectedNode.BeginEdit(); } } } private void treeView_G_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { if (treeView_G.SelectedNode.Level == 0) { if(e.Label == "") { e.CancelEdit=true; return; } if (e.Label == "Default") { e.CancelEdit = true; return; } if (e.Label != null && e.Label != "") { if (m_MainForm._sTDEditor.GroupIdDictionaryFromName.ContainsKey(e.Label)) { MessageBox.Show("Group names cannot be duplicated!", "Tip"); e.CancelEdit = true; return; } else { STDGroups Group = (STDGroups)treeView_G.SelectedNode.Tag; m_MainForm._sTDEditor.GroupIdDictionaryFromId.Remove(Group.id); m_MainForm._sTDEditor.GroupIdDictionaryFromName.Remove(GroupViewDic[Group.id].name); GroupViewDic[Group.id].name = e.Label; m_MainForm._sTDEditor.GroupIdDictionaryFromId.Add(Group.id, Group.name); m_MainForm._sTDEditor.GroupIdDictionaryFromName.Add(GroupViewDic[Group.id].name, Group.id); m_MainForm.m_Attributes.AddSTDGroupsToAttribute(); } } } else { if (e.Label == "") { e.CancelEdit = true; return; } if (e.Label != null && e.Label != "") { STDdata sT = (STDdata)treeView_G.SelectedNode.Tag; foreach (int grpid in GroupViewDic.Keys) { foreach (STDdata ddata in GroupViewDic[grpid].ContainSTD) { if (ddata.STDId == ((STDdata)treeView_G.SelectedNode.Tag).STDId) { ddata.StrName = e.Label; m_MainForm.ChangeSTDEditorAndGrid_Attributes(ddata); break; } } } } } } private void ToolStripMenuItem_NewRule_Click(object sender, EventArgs e) { TreeNode _node2 = treeView_G.SelectedNode; if (_node2 != null) { if (Predata != null) { m_MainForm.SaveDataOfSelRule(Predata.STDId); } STDdata ddata= m_MainForm._sTDEditor.AddSTDDictionaryItem(); int STDId = 40000; foreach (STDGroups grp in GroupViewDic.Values) { foreach (STDdata ddata1 in grp.ContainSTD) { if (STDId < ddata1.STDId) { STDId = ddata1.STDId; } } } ddata.STDId = STDId + 1; TreeNode treeNode = new TreeNode(); treeNode.Text = ddata.StrName; treeNode.Tag = ddata; if (_node2.Level == 0) { ddata.ListNum = ((((STDGroups)treeView_G.SelectedNode.Tag).ContainSTD).Count - 1).ToString(); ddata.GroupId = ((STDGroups)_node2.Tag).id; ((STDGroups)treeView_G.SelectedNode.Tag).ContainSTD.Add(ddata); _node2.Nodes.Add(treeNode); } else { ddata.ListNum = ((((STDGroups)treeView_G.SelectedNode.Parent.Tag).ContainSTD).Count - 1).ToString(); ddata.GroupId = ((STDGroups)_node2.Parent.Tag).id; ((STDGroups)treeView_G.SelectedNode.Parent.Tag).ContainSTD.Add(ddata); _node2.Parent.Nodes.Add(treeNode); } m_MainForm.ChangeSTDEditorAndGrid_Attributes(ddata); Predata = (STDdata)treeNode.Tag; InitGroupView(); foreach(TreeNode node in treeView_G.Nodes) { foreach (TreeNode node1 in node.Nodes) { if (((STDdata)node1.Tag).STDId == ddata.STDId) { treeView_G.SelectedNode = node1; this.Refresh(); break; } } } } else { foreach (TreeNode treeNode1 in treeView_G.Nodes) { if (((STDGroups)treeNode1.Tag).name == "Default") { if(Predata != null) { m_MainForm.SaveDataOfSelRule(Predata.STDId); } STDdata ddata = m_MainForm._sTDEditor.AddSTDDictionaryItem(); int STDId = 40000; foreach (STDGroups grp in GroupViewDic.Values) { foreach (STDdata ddata1 in grp.ContainSTD) { if (STDId < ddata1.STDId) { STDId = ddata1.STDId; } } } ddata.STDId = STDId + 1; TreeNode treeNode = new TreeNode(); treeNode.Text= ddata.StrName; treeNode.Tag = ddata; ddata.ListNum = ((((STDGroups)treeNode1.Tag).ContainSTD).Count - 1).ToString(); ddata.GroupId = ((STDGroups)treeNode1.Tag).id; ((STDGroups)treeNode1.Tag).ContainSTD.Add(ddata); InitGroupView(); foreach (TreeNode node in treeView_G.Nodes) { foreach (TreeNode node1 in node.Nodes) { if (((STDdata)node1.Tag).STDId == ddata.STDId) { treeView_G.SelectedNode = node1; m_MainForm.ChangeSTDEditorAndGrid_Attributes(ddata); Predata = (STDdata)treeNode.Tag; treeView_G.Focus(); break; } } } break; } } } } private void treeView_G_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Up|| e.KeyCode == Keys.Down) { if (Predata != null) { int id = Predata.STDId; m_MainForm.SaveDataOfSelRule(id); } if (treeView_G.SelectedNode.Level != 0 && treeView_G.SelectedNode != null) { m_MainForm.ChangeSTDEditorAndGrid_Attributes((STDdata)treeView_G.SelectedNode.Tag); Predata = (STDdata)treeView_G.SelectedNode.Tag; } else { m_MainForm.SetNull(); Predata = null; } m_MainForm.m_SubMidWindow.m_ComparativeLibrary.MakeCheckboxUnchecked(); } } private void treeView_G_BeforeLabelEdit(object sender, NodeLabelEditEventArgs e) { if (!RenFlag) e.CancelEdit = true; RenFlag = false; } } }