Ejemplo n.º 1
0
        private static bool GetTreeIterForItem(out Gtk.TreeIter itemIter, Gtk.TreeIter parentIter, Gtk.TreeStore treeStore, FileNodeViewModel item, int index)
        {
            // if item is null, just get iterator at index
            itemIter = Gtk.TreeIter.Zero;
            var validIter  = false;
            var putAtFront = (index < 0) && (item == null);

            if (parentIter.Equals(Gtk.TreeIter.Zero))
            {
                if (putAtFront)
                {
                    validIter = treeStore.IterChildren(out itemIter);
                }
                else
                {
                    validIter = (treeStore.IterNChildren() > index) && treeStore.IterNthChild(out itemIter, index);
                }
            }
            else
            {
                if (putAtFront)
                {
                    validIter = treeStore.IterChildren(out itemIter, parentIter);
                }
                else
                {
                    validIter = (treeStore.IterNChildren(parentIter) > index) && treeStore.IterNthChild(out itemIter, parentIter, index);
                }
            }
            var node    = validIter ? treeStore.GetValue(itemIter, 0) as FileNodeViewModel : null;
            var foundIt = (node == null) || (item == null) || object.ReferenceEquals(node, item);

            return(foundIt && !itemIter.Equals(Gtk.TreeIter.Zero));
        }
            public bool MoveToFirstChild()
            {
                EnsureFilled();
                Gtk.TreeIter it;
                if (!store.IterChildren(out it, currentIter))
                {
                    return(false);
                }

                MoveToIter(it);
                return(true);
            }
Ejemplo n.º 3
0
        void AddHandler(Gtk.TreeIter iter, string name)
        {
            internalChange = true;

            Gtk.TreeIter piter = iter;
            while (store.IterDepth(piter) != 0)
            {
                store.IterParent(out piter, piter);
            }

            Signal signal = GetSignal(iter);

            if (signal == null)
            {
                if (name != "")
                {
                    SignalDescriptor sd = (SignalDescriptor)store.GetValue(iter, ColDescriptorObject);
                    signal         = new Signal(sd);
                    signal.Handler = name;
                    selection.Signals.Add(signal);
                    SetSignalData(iter, signal);
                    store.SetValue(iter, ColSignalTextWeight, (int)Pango.Weight.Bold);
                    if (store.IterDepth(iter) == 1)
                    {
                        SetEmptySingalRow(store.AppendNode(iter), signal.SignalDescriptor, false);
                    }
                    else
                    {
                        store.IterParent(out iter, iter);
                        SetEmptySingalRow(store.AppendNode(iter), signal.SignalDescriptor, false);
                    }
                }
            }
            else
            {
                if (name != "")
                {
                    signal.Handler = name;
                    store.SetValue(iter, ColHandler, signal.Handler);
                }
                else
                {
                    selection.Signals.Remove(signal);
                    if (store.IterDepth(iter) == 1)
                    {
                        if (store.IterNChildren(iter) == 1)
                        {
                            SetEmptySingalRow(iter, signal.SignalDescriptor, true);
                            // Remove the empty row
                            store.IterChildren(out iter, iter);
                            store.Remove(ref iter);
                        }
                        else
                        {
                            Gtk.TreeIter citer;
                            store.IterChildren(out citer, iter);
                            Signal csignal = GetSignal(citer);
                            store.Remove(ref citer);
                            SetSignalData(iter, csignal);
                            if (store.IterNChildren(iter) == 1)
                            {
                                tree.CollapseRow(store.GetPath(iter));
                            }
                        }
                    }
                    else
                    {
                        store.Remove(ref iter);
                    }
                }
            }
            UpdateGroupStatus(piter);
            internalChange = false;
        }
Ejemplo n.º 4
0
        public TreePosition GetChild(TreePosition pos, int index)
        {
            IterPos tpos = GetIterPos(pos);

            if (tpos != null && tpos.LastChildIndex == index)
            {
                return(new IterPos(version, tpos.LastChildIter));
            }
            if (index == 0)
            {
                if (tpos != null)
                {
                    Gtk.TreeIter it;
                    if (Tree.IterChildren(out it, tpos.Iter))
                    {
                        tpos.LastChildIter  = it;
                        tpos.LastChildIndex = 0;
                        return(new IterPos(version, it));
                    }
                }
                else
                {
                    Gtk.TreeIter it;
                    if (Tree.GetIterFirst(out it))
                    {
                        return(new IterPos(version, it));
                    }
                }
                return(null);
            }

            if (tpos == null)
            {
                Gtk.TreeIter it;
                if (Tree.IterNthChild(out it, index))
                {
                    return(new IterPos(version, it));
                }
                else
                {
                    return(null);
                }
            }

            if (tpos.LastChildIndex == -1 || tpos.LastChildIndex > index)
            {
                Gtk.TreeIter it;
                if (Tree.IterNthChild(out it, tpos.Iter, index))
                {
                    tpos.LastChildIter  = it;
                    tpos.LastChildIndex = index;
                    return(new IterPos(version, it));
                }
                else
                {
                    return(null);
                }
            }

            // tpos.LastChildIndex < index

            Gtk.TreeIter iter = tpos.LastChildIter;
            for (int n = tpos.LastChildIndex; n < index; n++)
            {
                if (!Tree.IterNext(ref iter))
                {
                    return(null);
                }
            }
            tpos.LastChildIter  = iter;
            tpos.LastChildIndex = index;
            return(new IterPos(version, iter));
        }