/// <summary> /// Create a clone of this model system /// </summary> /// <param name="linkedParameters">The linked parameters</param> /// <returns>A cloned model system that can be used for editing.</returns> internal ModelSystemStructure CreateEditingClone(out List <ILinkedParameter> linkedParameters, out List <IRegionDisplay> regionDisplays) { var ourClone = ModelSystemStructure.Clone(); linkedParameters = LinkedParameters.Count > 0 ? LinkedParameter.MapLinkedParameters(LinkedParameters, ourClone, ModelSystemStructure) : new List <ILinkedParameter>(); regionDisplays = RegionDisplay.MapRegionDisplays(this._regionDisplays, ourClone); return(ourClone as ModelSystemStructure); }
/// <summary> /// /// </summary> /// <param name="node"></param> /// <param name="mss"></param> /// <returns></returns> private List <IRegionDisplay> LoadRegionDisplays(XmlNode regionsNode, IModelSystemStructure mss) { List <IRegionDisplay> regionDisplays = new List <IRegionDisplay>(); if (!regionsNode.HasChildNodes) { return(regionDisplays); } foreach (XmlNode node in regionsNode.ChildNodes) { RegionDisplay regionDisplay = new RegionDisplay() { Name = node.Attributes?["Name"].Value, Description = node.Attributes?["Description"]?.Value }; var xmlRegionGroupNodes = node.SelectNodes("RegionGroup"); if (xmlRegionGroupNodes != null) { foreach (XmlNode regionGroupNode in xmlRegionGroupNodes) { RegionGroup regionGroup = new RegionGroup(regionDisplay) { Name = regionGroupNode.Attributes?["Name"].Value }; var xmlGroupModuleNodes = regionGroupNode.SelectNodes("Module"); if (xmlGroupModuleNodes != null) { foreach (XmlNode moduleNode in xmlGroupModuleNodes) { //get reference to this module string reference = moduleNode.Attributes?["Reference"].Value; var modelSystemStructure = GetModuleFromReference(reference, mss); regionGroup.Modules.Add((IModelSystemStructure2)modelSystemStructure); } } regionDisplay.RegionGroups.Add(regionGroup); } } regionDisplays.Add(regionDisplay); } return(regionDisplays); }
/// <summary> /// /// </summary> /// <param name="displays"></param> /// <param name="clone"></param> /// <returns></returns> public static List <IRegionDisplay> MapRegionDisplays(List <IRegionDisplay> displays, IModelSystemStructure clone) { var list = new List <IRegionDisplay>(); foreach (var region in displays) { var r = new RegionDisplay() { Name = region.Name }; foreach (var group in region.RegionGroups) { var g = new RegionGroup(group, clone, r); r.RegionGroups.Add(g); } list.Add(r); } return((List <IRegionDisplay>)list); }
/// <summary> /// /// </summary> /// <param name="parent"></param> public RegionGroup(RegionDisplay parent) { _modules = new List <IModelSystemStructure>(); ParentDisplay = parent; }