Пример #1
0
        public void MoveElements(TreeItem parentItem, int insertionIndex, List <TreeItem> elements)
        {
            if (insertionIndex < 0)
            {
                throw new ArgumentException(Maintainer.ConstructError("Invalid input: insertionIndex is -1, client needs to decide what index elements should be reparented at!"));
            }

            if (parentItem == null)
            {
                return;
            }

            if (insertionIndex > 0)
            {
                insertionIndex -= parentItem.Children.GetRange(0, insertionIndex).Count(elements.Contains);
            }

            foreach (var draggedItem in elements)
            {
                draggedItem.Parent.Children.Remove(draggedItem);
                draggedItem.Parent = parentItem;
            }

            if (parentItem.Children == null)
            {
                parentItem.Children = new List <TreeItem>();
            }

            parentItem.Children.InsertRange(insertionIndex, elements);

            TreeItemUtility.UpdateDepthValues(root);
            TreeItemUtility.TreeToList(root, data);

            Changed();
        }
Пример #2
0
        public void AddElements(IList <T> elements, TreeItem parent, int insertPosition)
        {
            if (elements == null)
            {
                throw new ArgumentNullException("elements", Maintainer.ConstructError("elements is null!"));
            }
            if (elements.Count == 0)
            {
                throw new ArgumentNullException("elements", Maintainer.ConstructError("elements Count is 0: nothing to add!"));
            }
            if (parent == null)
            {
                throw new ArgumentNullException("parent", Maintainer.ConstructError("parent is null!"));
            }

            if (parent.Children == null)
            {
                parent.Children = new List <TreeItem>();
            }

            parent.Children.InsertRange(insertPosition, elements.Cast <TreeItem> ());
            foreach (var element in elements)
            {
                element.Parent = parent;
                element.depth  = parent.depth + 1;
                TreeItemUtility.UpdateDepthValues(element);
            }

            TreeItemUtility.TreeToList(root, data);

            Changed();
        }
Пример #3
0
        private void Init(T[] newData)
        {
            if (newData == null)
            {
                throw new ArgumentNullException("newData", Maintainer.ConstructError("Input data is null. Ensure input is a non-null list!"));
            }

            data = newData;
            if (data.Length > 0)
            {
                root = TreeItemUtility.ArrayToTree(data);
            }

            maxID = data.Max(e => e.id);
        }
Пример #4
0
        public void RemoveElements(IList <T> elements)
        {
            foreach (var element in elements)
            {
                if (element == root)
                {
                    throw new ArgumentException(Maintainer.ConstructError("It is not allowed to remove the root element!"));
                }
            }

            var commonAncestors = TreeItemUtility.FindCommonAncestorsWithinList(elements);

            foreach (var element in commonAncestors)
            {
                element.Parent.Children.Remove(element);
                element.Parent = null;
            }

            TreeItemUtility.TreeToList(root, data);

            Changed();
        }
Пример #5
0
        public void AddElement(T element, TreeItem parent, int insertPosition)
        {
            if (element == null)
            {
                throw new ArgumentNullException("element", Maintainer.ConstructError("element is null!"));
            }
            if (parent == null)
            {
                throw new ArgumentNullException("parent", Maintainer.ConstructError("parent is null!"));
            }

            if (parent.Children == null)
            {
                parent.Children = new List <TreeItem> ();
            }

            parent.Children.Insert(insertPosition, element);
            element.Parent = parent;

            TreeItemUtility.UpdateDepthValues(parent);
            TreeItemUtility.TreeToList(root, data);

            Changed();
        }