Exemplo n.º 1
0
        /// <summary>
        /// 载入的基础修复
        /// </summary>
        public void RepairByLoaded()
        {
            int projectid = Solution.ProjectList.Count == 0 ? 0 : Solution.Projects.Max(p => p.Index);

            foreach (var project in Solution.Projects)
            {
                if (project.Option.Index == 0)
                {
                    project.Option.Index = ++projectid;
                }
                if (project.Name.Contains("ES_"))
                {
                    project.ReadOnly = true;
                }
                int typeid = project.Entities.Count == 0 ? 0 : project.Entities.Max(p => p.Index);
                foreach (var entity in project.Entities)
                {
                    RepairIdentity(entity, project, ref typeid);
                }
                foreach (var entity in project.Entities.Where(p => !p.IsReference))
                {
                    RepairEntityByLoad(entity, project);
                }
                foreach (var cfg in project.ApiItems)
                {
                    cfg.Parent = project;
                }
                foreach (var cfg in project.Enums)
                {
                    cfg.Parent = project;
                }
                if (project.Classifies.Count == 0)
                {
                    var cls = project.Entities.Select(p => p.Classify).Distinct().ToArray();
                    if (!cls.All(string.IsNullOrEmpty))
                    {
                        foreach (var cl in project.Entities.GroupBy(p => p.Classify))
                        {
                            var name = cl.Key ?? "None";
                            var item = new ClassifyItem <EntityConfig>
                            {
                                Classify    = name,
                                Description = name,
                                Caption     = name
                            };
                            project.Classifies.Add(item);
                            foreach (var entity in cl)
                            {
                                entity.Classify = name;
                                item.Items.Add(entity);
                            }
                        }
                    }
                }

                //int apiid = project.ApiItems.Count == 0 ? 0 : project.ApiItems.Max(p => p.Index);
                //foreach (var item in project.ApiItems)
                //{
                //    if (item.Index <= 0)
                //        item.Index = ++apiid;
                //}
            }
            RepairTypedefByLoad();
        }
        /// <summary>
        /// 重新分组
        /// </summary>
        private void ReGroup()
        {
            var items = new Dictionary <string, ClassifyItem <TConfig> >();
            var array = Classifies.ToArray();

            foreach (var item in array)
            {
                if (string.IsNullOrWhiteSpace(item.Name))
                {
                    item.Name = item.Caption;
                }
                if (!items.ContainsKey(item.Name))
                {
                    items.Add(item.Name, item);
                }
                else
                {
                    Classifies.Remove(item);
                }
            }
            foreach (var g in _collection.GroupBy(_groupFunc).ToArray())
            {
                string nmae = g.Key ?? "未分类";
                if (!items.ContainsKey(nmae))
                {
                    var group = new ClassifyItem <TConfig>(_updateAction)
                    {
                        Name    = nmae,
                        Caption = nmae,
                        Items   = new ConfigCollection <TConfig>()
                    };
                    foreach (var item in g)
                    {
                        item.PropertyChanged -= Item_PropertyChanged;
                        item.PropertyChanged += Item_PropertyChanged;
                        group.Items.Add(item);
                    }
                    Classifies.Add(group);
                }
                else
                {
                    var group = items[nmae];
                    var old   = group.Items.ToList();
                    foreach (var item in g)
                    {
                        if (!old.Contains(item))
                        {
                            item.PropertyChanged -= Item_PropertyChanged;
                            item.PropertyChanged += Item_PropertyChanged;
                            group.Items.Add(item);
                        }
                        else
                        {
                            old.Remove(item);
                        }
                    }
                    foreach (var item in old)
                    {
                        group.Items.Remove(item);
                    }
                }
            }
        }