示例#1
0
        /// <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);
        }
示例#2
0
        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);
                }
            }
        }
示例#3
0
        /*
         * 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;
                }
            }
        }
示例#4
0
            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, "");
                    }
                }
            }
示例#5
0
        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 = "双击增加枚举";
        }
示例#6
0
 public void AddEnumDefine(EnumDefine def)
 {
     _EnumDefines.Add(def.Name, def);
     Document.IsChanged = true;
 }
示例#7
0
 public ValueDefine(EnumDefine e, string name, int val)
 {
     this.Parent = e;
     this._Name  = name;
     this._Value = val;
 }