Esempio n. 1
0
        /// <summary>
        /// Gets the path to a specified iter.
        /// </summary>
        /// <param name="iter">The iter to get the path of.</param>
        /// <returns>The TreePath corresponding to the given iter.</returns>
        public TreePath GetPath(TreeIter iter)
        {
            if (iter.Stamp != this.Stamp)
            {
                throw new InvalidDataException("The given iter was not valid for this model.");
            }

            var result = new TreePath();
            var node   = this.Tree.GetNode((ulong)iter.UserData);

            if (node == null)
            {
                return(result);
            }

            while (node.ParentOffset > -1)
            {
                var   parentNode = this.Tree.GetNode((ulong)node.ParentOffset);
                ulong nodeOffset = this.Tree.GetNodeOffset(node);
                result.PrependIndex(parentNode.ChildOffsets.IndexOf(nodeOffset));

                node = parentNode;
            }

            result.PrependIndex(this.Tree.Root.ChildOffsets.IndexOf((ulong)iter.UserData));
            return(result);
        }
Esempio n. 2
0
        TreePath PathFromNode(object node)
        {
            if (node == null)
            {
                return(new TreePath());
            }

            object   work = node;
            TreePath path = new TreePath();

            if (work is MemberInfo)
            {
                Type parent = (work as MemberInfo).ReflectedType;
                path.PrependIndex(Array.IndexOf(parent.GetMembers(), work));
                work = parent;
            }

            if (work is Type)
            {
                Assembly assm = (work as Type).Assembly;
                path.PrependIndex(Array.IndexOf(assm.GetTypes(), work));
                work = assm;
            }

            if (work is Assembly)
            {
                path.PrependIndex(Array.IndexOf(assemblies, node));
            }

            return(path);
        }
Esempio n. 3
0
        private void CreatePath(TreePath path)
        {
            var parent = this.Parent as Node;

            if (parent != null)
            {
                var index = parent.IndexOf(this);
                path.PrependIndex(index);
                parent.CreatePath(path);
            }
            else
            {
                var index = this.Tree.Nodes.Cast <Node>().TakeWhile(node => !node.Equals(this)).Count();
                path.PrependIndex(index);
            }
        }
Esempio n. 4
0
        public TreePath GetPath(TreeIter iter)
        {
            Node     node   = (Node)iter;
            TreePath result = new TreePath();

            if (node == null)
            {
                return(result);
            }

            while (node.Parent != null)
            {
                result.PrependIndex(node.Parent.Children.IndexOf(node));
                node = node.Parent;
            }
            result.PrependIndex(nodes.IndexOf(node));
            return(result);
        }
Esempio n. 5
0
        public TreePath GetPath(TreeIter iter)
        {
            var element = getNode(iter);
            var path    = new TreePath();

            if (element == null)
            {
                return(path);
            }
            while (element.Parent != null)
            {
                path.PrependIndex(element.ElementsBeforeSelf().Count());
                element = element.Parent;
            }
            path.PrependIndex(0);

            return(path);
        }
Esempio n. 6
0
        public TreePath GetPath(TreeIter iter)
        {
            var path = new TreePath();
            var node = GetNode(iter);

            while (node != null)
            {
                path.PrependIndex(node.Index);
                node = node.Parent;
            }
            return(path);
        }
Esempio n. 7
0
        TreePath PathFromNode(object node)
        {
            if (node == null)
            {
                return(new TreePath());
            }

            object   work = node;
            TreePath path = new TreePath();

            path.PrependIndex(caches.IndexOf(work as Geocache));
            return(path);
        }