public void RefreshItem(ITreeItem item) { var path = model.GetPathFromItem(item); if (path != null && path.Depth > 0 && !object.ReferenceEquals(item, collection.Collection)) { Gtk.TreeIter iter; tree.Model.GetIter(out iter, path); tree.Model.EmitRowChanged(path, iter); tree.Model.EmitRowHasChildToggled(path, iter); cancelExpandCollapseEvents = true; if (item.Expanded) { tree.CollapseRow(path); tree.ExpandRow(path, false); collection.ExpandItems(item, path); } else { tree.CollapseRow(path); } cancelExpandCollapseEvents = false; } else { RefreshData(); } }
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; }