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; }