示例#1
0
        public Gtk.TreePath GetPathFromItem(TItem item)
        {
            var path    = new Gtk.TreePath();
            var parents = GetParents(item);

            foreach (var parent in parents)
            {
                var items = (TStore)(object)parent;
                var found = false;
                for (int i = 0; i < items.Count; i++)
                {
                    if (object.ReferenceEquals(items[i], item))
                    {
                        path.PrependIndex(i);
                        item  = parent;
                        found = true;
                        break;
                    }
                }
                if (!found)
                {
                    return(null);
                }
            }
            return(path);
        }
示例#2
0
        /// <summary>
        /// Gets a Gtk.TreeIter for the node.
        /// </summary>
        /// <param name="iter">Receives the iterator to the node within the Gtk.TreeStore.</param>
        /// <param name="treeStore">The tree store containing reference to this node.</param>
        /// <returns><c>true</c>, if iter was successfully retrieved, or this node is the root, <c>false</c> otherwise.</returns>
        /// <remarks>If this is the root node, <paramref name="iter"/> contains Gtk.TreeIter.Zero. Caller must check for this.</remarks>
        internal bool GetIterForItem(out Gtk.TreeIter iter, Gtk.TreeStore treeStore)
        {
            iter = Gtk.TreeIter.Zero;
            var path   = new Gtk.TreePath();
            var node   = Model;
            var parent = Parent;

            while (parent != null)
            {
                var index = parent.IndexOfChild(node);
                path.PrependIndex(index);
                node   = parent;
                parent = node.Parent;
            }

            var succeeded = (path.Depth == 0) || treeStore.GetIter(out iter, path);

            return(succeeded);
        }