/// <summary> /// 在当前搜索使用参数变量的的所有列的值,并且构建EnumDefine。 /// 不合法的Enum名字忽略。 /// 仅在 FromDefine 里面调用。 /// </summary> /// <param name="var"></param> public void BuildEnumFor(VarDefine var) { if (FormMain.Instance.Tabs.SelectedTab == null) { return; } var enumDefine = new EnumDefine(var.Parent, var.Name); DataGridView grid = (DataGridView)FormMain.Instance.Tabs.SelectedTab.Controls[0]; for (int i = 0; i < grid.ColumnCount; ++i) { if ((grid.Columns[i].Tag as ColumnTag).PathLast.Define == var) { for (int j = 0; j < grid.RowCount - 1; ++j) { var valueName = grid[i, j].Value as string; if (null == Tools.VerifyName(valueName, CheckNameType.CheckOnly)) { // 增加enum定义。 enumDefine.ChangeValueName(new EnumDefine.ValueDefine(enumDefine, "", -1), valueName); } } } } var.Parent.AddEnumDefine(enumDefine); InsertEnumDefine(define.RowCount, enumDefine.FullName(), enumDefine); }
public BeanDefine(Document doc, XmlElement self, BeanDefine parent = null) { this.Document = doc; this.Parent = parent; this.Self = self; EnumDefines = new ReadOnlyDictionary <string, EnumDefine>(_EnumDefines); BeanDefines = new ReadOnlyDictionary <string, BeanDefine>(_BeanDefines); Variables = new ReadOnlyCollection <VarDefine>(_Variables); ReferenceFroms = new ReadOnlyDictionary <string, ReferenceFrom>(_ReferenceFroms); _Name = self.GetAttribute("name"); if (Name.Length == 0) { _Name = doc.Name; } string tmp = self.GetAttribute("Locked"); _Locked = tmp.Length > 0 ? bool.Parse(tmp) : false; XmlNodeList childNodes = self.ChildNodes; foreach (XmlNode node in childNodes) { if (XmlNodeType.Element != node.NodeType) { continue; } XmlElement e = (XmlElement)node; switch (e.Name) { case "BeanDefine": var bdnew = new BeanDefine(Document, e, this); _BeanDefines.Add(bdnew.Name, bdnew); break; case "variable": _Variables.Add(new VarDefine(this, e)); break; case "enum": var enew = new EnumDefine(this, e); _EnumDefines.Add(enew.Name, enew); break; case "ReferenceFrom": var rf = new ReferenceFrom(e); _ReferenceFroms.Add($"{rf.FullName}:{rf.VarName}", rf); break; default: throw new Exception("node=" + e.Name); } } }
/* * private void UpdateData(Document doc, VarDefine var, string newVarName) * { * HashSet<BeanDefine> deps = new HashSet<BeanDefine>(); * doc.BeanDefine.Depends(deps); * if (deps.Contains(var.Parent)) * { * GridData gridDataTmp = new GridData(doc); * doc.BeanDefine.BuildGridColumns(gridDataTmp, 0, new ColumnTag(ColumnTag.ETag.Normal), -1); * HashSet<Bean.VarData> varDatas = new HashSet<Bean.VarData>(); * var param = new Bean.UpdateParam() * { * UpdateType = Bean.EUpdate.CallAction, * UpdateAction = (GridData grid, int col, ColumnTag.VarInfo varInfo, Bean.VarData varData) => * { * if (varInfo.Define == var) * varDatas.Add(varData); * }, * }; * foreach (var bean in doc.Beans) * { * int insertIndex = gridDataTmp.RowCount; * gridDataTmp.InsertRow(insertIndex); * int colIndex = 0; * if (bean.Update(gridDataTmp, gridDataTmp.GetRow(insertIndex), ref colIndex, 0, param)) * break; * } * foreach (var varData in varDatas) * { * varData.Parent.RenameVar(varData.Name, newVarName); * } * } * } */ private void UpdateEnumDefine(EnumDefine enumDefine) { if (null == enumDefine) { return; } for (int i = 0; i < define.RowCount; ++i) { DataGridViewCellCollection cells = define.Rows[i].Cells; if (cells["BeanLocked"].Tag == enumDefine) { cells["VarName"].Value = enumDefine.FullName(); break; } } }
public ValueDefine(EnumDefine e, XmlElement self) { this.Self = self; this.Parent = e; _Name = self.GetAttribute("name"); var tmp = self.GetAttribute("value"); _Value = tmp.Length > 0 ? int.Parse(tmp) : 0; _Comment = self.GetAttribute("comment").Trim(); if (_Comment.Length == 0) { XmlNode c = self.NextSibling; if (c != null && XmlNodeType.Text == c.NodeType) { _Comment = c.InnerText.Trim(); Regex regex = new Regex("[\r\n]"); _Comment = regex.Replace(Comment, ""); } } }
private void InsertEnumDefine(int insertIndex, string fullName, EnumDefine enumDefine) { // row for enum start define.Rows.Insert(insertIndex, 1); DataGridViewCellCollection cellsBeanStart = define.Rows[insertIndex].Cells; for (int i = 0; i < cellsBeanStart.Count; ++i) { cellsBeanStart[i].ReadOnly = true; } DataGridViewCell cellLocked = cellsBeanStart["BeanLocked"]; cellLocked.Tag = enumDefine; cellsBeanStart["VarName"].Value = fullName; cellsBeanStart["VarName"].Style.ForeColor = Color.Blue; // row for value foreach (var v in enumDefine.ValueMap.Values) { ++insertIndex; InsertValueDefine(insertIndex, v); } // row for enum end ++insertIndex; define.Rows.Insert(insertIndex, 1); DataGridViewCellCollection cellsBeanEnd = define.Rows[insertIndex].Cells; for (int i = 0; i < cellsBeanEnd.Count; ++i) { cellsBeanEnd[i].ReadOnly = true; } DataGridViewCell cellBeanEnd = cellsBeanEnd["VarName"]; cellBeanEnd.Value = ","; cellBeanEnd.Tag = new EnumDefine.ValueDefine(enumDefine, "", -1); cellBeanEnd.ToolTipText = "双击增加枚举"; }
public void AddEnumDefine(EnumDefine def) { _EnumDefines.Add(def.Name, def); Document.IsChanged = true; }
public ValueDefine(EnumDefine e, string name, int val) { this.Parent = e; this._Name = name; this._Value = val; }