/// <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); } } } }