示例#1
0
        public static CAGCategory Load()
        {
            var root = new CAGCategory("Add Menu");
            var path = Path.Combine(Core.BaseDirectory, "Data/categorization.json");

            var list = JsonConfig.Deserialize <List <CAGJson> >(path);

            if (list == null)
            {
                throw new JsonException($"Failed to deserialize {path}.");
            }

            // Not an optimized solution
            foreach (var cag in list)
            {
                var parent = root;
                // Navigate through the dot notation categories until we find the last one
                var categories = cag.Category.Split(".");
                for (var i = 0; i < categories.Length; i++)
                {
                    var category = categories[i];

                    // No children, so let's make one
                    if (parent.Nodes == null)
                    {
                        var cat = new CAGCategory(category, parent);
                        parent.Nodes = new CAGNode[] { cat };
                        parent       = cat;
                        continue;
                    }

                    var oldParent = parent;
                    for (var j = 0; j < parent.Nodes.Length; j++)
                    {
                        var node = parent.Nodes[j];
                        if (category == node.Title && node is CAGCategory cat)
                        {
                            parent = cat;
                            break;
                        }
                    }

                    // Didn't find the child, let's add it
                    if (oldParent == parent)
                    {
                        var nodes = parent.Nodes;
                        parent.Nodes = new CAGNode[nodes.Length + 1];
                        Array.Copy(nodes, parent.Nodes, nodes.Length);
                        var cat = new CAGCategory(category, parent);
                        parent.Nodes[^ 1] = cat;
示例#2
0
        public static CAGCategory Load()
        {
            var root = new CAGCategory("Add Menu");
            var path = Path.Combine(Core.BaseDirectory, "Data/objects.json");

            var list = JsonConfig.Deserialize <List <CAGJson> >(path);

            // Not an optimized solution
            foreach (var cag in list)
            {
                var parent = root;
                // Navigate through the dot notation categories until we find the last one
                var categories = cag.Category.Split(".");
                for (var i = 0; i < categories.Length; i++)
                {
                    var category  = categories[i];
                    var oldParent = parent;

                    for (var j = 0; j < parent.Nodes.Length; j++)
                    {
                        var node = parent.Nodes[i];
                        if (category == node.Title && node is CAGCategory cat)
                        {
                            parent = cat;
                            break;
                        }
                    }

                    if (parent == oldParent)
                    {
                        parent = new CAGCategory(category, parent);
                    }
                }

                // Set the objects associated with the child most node
                parent.Nodes = new CAGNode[cag.Objects.Length];
                for (var i = 0; i < cag.Objects.Length; i++)
                {
                    var obj = cag.Objects[i];
                    obj.Parent      = parent;
                    parent.Nodes[i] = obj;
                }
            }

            return(root);
        }
示例#3
0
 public CAGCategory(string title, CAGCategory parent = null)
 {
     Title  = title;
     Parent = parent;
 }