Ejemplo n.º 1
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;
        }