Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }