Beispiel #1
0
        public void MoveElements(TreeElement parentElement, int insertionIndex, List <TreeElement> elements)
        {
            if (insertionIndex < 0)
            {
                throw new ArgumentException("Invalid input: insertionIndex is -1, client needs to decide what index elements should be reparented at");
            }

            // Invalid reparenting input
            if (parentElement == null)
            {
                return;
            }

            // We are moving items so we adjust the insertion index to accomodate that any items above the insertion index is removed before inserting
            if (insertionIndex > 0)
            {
                insertionIndex -= parentElement.children.GetRange(0, insertionIndex).Count(elements.Contains);
            }

            // Remove draggedItems from their parents
            foreach (var draggedItem in elements)
            {
                draggedItem.parent.children.Remove(draggedItem);                        // remove from old parent
                draggedItem.parent = parentElement;                                     // set new parent
            }

            if (parentElement.children == null)
            {
                parentElement.children = new List <TreeElement>();
            }

            // Insert dragged items under new parent
            parentElement.children.InsertRange(insertionIndex, elements);

            TreeElementUtility.UpdateDepthValues(root);
            TreeElementUtility.TreeToList(m_Root, m_Data);

            Changed();
        }
Beispiel #2
0
        public void RemoveElements(IList <T> elements)
        {
            foreach (var element in elements)
            {
                if (element == m_Root)
                {
                    throw new ArgumentException("It is not allowed to remove the root element");
                }
            }

            var commonAncestors = TreeElementUtility.FindCommonAncestorsWithinList(elements);

            foreach (var element in commonAncestors)
            {
                element.parent.children.Remove(element);
                element.parent = null;
            }

            TreeElementUtility.TreeToList(m_Root, m_Data);

            Changed();
        }
Beispiel #3
0
        // FYI: TextAsset source basically does nothing right now, will be removed
        public static IList <MerinoTreeElement> GetData()
        {
            // init variables, create global tree root
            var treeElements = new List <MerinoTreeElement>();
            var root         = new MerinoTreeElement("Root", -1, 0);

            root.children = new List <TreeElement>();
            treeElements.Add(root);

            // ok, now let's load the data

            // then go through each file and get nodes for it, adding folder nodes as appropriate
            int nodeID = 1;

            foreach (var yarnFile in MerinoData.CurrentFiles)
            {
                // all folders are now created, let's add the yarn data now
                var yarnData = GetDataFromFile(yarnFile, nodeID);

                // set the file node's parent to root
                yarnData[0].parent = root;
                root.children.Add(yarnData[0]);

                // add all data to tree elements
                treeElements.AddRange(yarnData);
                nodeID += yarnData.Count;
            }

            // IMPORTANT: sort the treeElements by id!!!
            treeElements = treeElements.OrderBy(x => x.id).ToList();

            // if there's already parent data then I don't really know what the depth value is used for (a cache to speed up GUI drawing?)
            // but I think we're supposed to do this thing so let's do it
            TreeElementUtility.UpdateDepthValues(root);

            MerinoData.TreeElements = treeElements;
            return(MerinoData.TreeElements);
        }
Beispiel #4
0
        public static void TestTreeModelCanRemoveElements()
        {
            var root = new TreeElement {
                name = "Root", depth = -1
            };
            var listOfElements = new List <TreeElement>();

            listOfElements.Add(root);

            var model = new TreeModel <TreeElement>(listOfElements);

            model.AddElement(new TreeElement {
                name = "Element"
            }, root, 0);
            model.AddElement(new TreeElement {
                name = "Element " + root.children.Count
            }, root, 0);
            model.AddElement(new TreeElement {
                name = "Element " + root.children.Count
            }, root, 0);
            model.AddElement(new TreeElement {
                name = "Sub Element"
            }, root.children[1], 0);

            model.RemoveElements(new[] { root.children[1].children[0], root.children[1] });

            // Assert order is correct
            string[] namesInCorrectOrder = { "Root", "Element 2", "Element" };
            Assert.AreEqual(namesInCorrectOrder.Length, listOfElements.Count, "Result count does not match");
            for (int i = 0; i < namesInCorrectOrder.Length; ++i)
            {
                Assert.AreEqual(namesInCorrectOrder[i], listOfElements[i].name);
            }

            // Assert depths are valid
            TreeElementUtility.ValidateDepthValues(listOfElements);
        }
Beispiel #5
0
        public void AddElement(T element, TreeElement parent, int insertPosition)
        {
            if (element == null)
            {
                throw new ArgumentNullException("element", "element is null");
            }
            if (parent == null)
            {
                throw new ArgumentNullException("parent", "parent is null");
            }

            if (parent.children == null)
            {
                parent.children = new List <TreeElement> ();
            }

            parent.children.Insert(insertPosition, element);
            element.parent = parent;

            TreeElementUtility.UpdateDepthValues(parent);
            TreeElementUtility.TreeToList(m_Root, m_Data);

            Changed();
        }