/// <summary> /// Populates the tree view nodes with the contents of the data file. /// </summary> /// <param name="tv">TreeView to add items to</param> /// <param name="prevSelSystem">Name of previously-selected system.</param> /// <returns>The node that matches prevSelSystem, or null if not found.</returns> private TreeNode PopulateNodes(TreeView tv, string prevSelSystem) { TreeNode selNode = null; string sysDefsPath = RuntimeDataAccess.GetPathName("SystemDefs.json"); if (sysDefsPath == null) { TreeNode errNode = new MyTreeNode( SourceGen.Properties.Resources.ERR_LOAD_CONFIG_FILE, false, null); tv.Nodes.Add(errNode); return(null); } try { mSystemDefs = SystemDefSet.ReadFile(sysDefsPath); } catch (Exception ex) { Debug.WriteLine("Failed loading system def set: " + ex); TreeNode errNode = new MyTreeNode( SourceGen.Properties.Resources.ERR_LOAD_CONFIG_FILE, false, null); tv.Nodes.Add(errNode); return(null); } if (mSystemDefs.Defs == null || mSystemDefs.Defs.Length == 0) { Debug.WriteLine("Empty def set found"); TreeNode errNode = new MyTreeNode( SourceGen.Properties.Resources.ERR_LOAD_CONFIG_FILE, false, null); tv.Nodes.Add(errNode); return(null); } var groups = new Dictionary <string, MyTreeNode>(); foreach (SystemDef sd in mSystemDefs.Defs) { if (!groups.TryGetValue(sd.GroupName, out MyTreeNode groupNode)) { groupNode = new MyTreeNode(sd.GroupName, false, null); groups[sd.GroupName] = groupNode; tv.Nodes.Add(groupNode); } bool isValid = sd.Validate(); string treeName = isValid ? sd.Name : sd.Name + SourceGen.Properties.Resources.ERR_INVALID_SYSDEF; MyTreeNode newNode = new MyTreeNode(treeName, isValid, sd); groupNode.Nodes.Add(newNode); if (isValid && sd.Name == prevSelSystem) { selNode = newNode; } } return(selNode); }
/// <summary> /// Reads the named config file. Throws an exception on failure. /// </summary> /// <param name="pathName">Config file path name</param> /// <returns>Fully-populated system defs.</returns> public static SystemDefSet ReadFile(string pathName) { string fileStr = File.ReadAllText(pathName); //Debug.WriteLine("READ " + fileStr); JavaScriptSerializer ser = new JavaScriptSerializer(); SystemDefSet sdf = ser.Deserialize <SystemDefSet>(fileStr); if (sdf.Contents != MAGIC) { // This shouldn't happen unless somebody is tampering with the // config file. Debug.WriteLine("Expected contents '" + MAGIC + "', got " + sdf.Contents + "'"); throw new InvalidDataException("Sys def file '" + pathName + "': Unexpected contents '" + sdf.Contents + "'"); } foreach (SystemDef sd in sdf.Defs) { Debug.WriteLine("### " + sd); } return(sdf); }