public void ReloadData() { // save selected items var items = SelectedItems.ToArray(); // save scroll state var hscrollbar = Control.HScrollbar as Gtk.HScrollbar; var vscrollbar = Control.VScrollbar as Gtk.VScrollbar; var hscroll = hscrollbar?.Value; var vscroll = vscrollbar?.Value; // reload data and expand items suppressExpandCollapseEvents++; UpdateModel(); collection.ExpandItems(); suppressExpandCollapseEvents--; // restore selection SkipSelectedChange = true; bool selectionChanged = false; Tree.Selection.UnselectAll(); foreach (var item in items.OfType <ITreeGridItem>()) { var iter = model.GetIterFromItem(item, true); if (iter != null) { Tree.Selection.SelectIter(iter.Value); } else { selectionChanged = true; } } if (selectionChanged) { Callback.OnSelectionChanged(Widget, EventArgs.Empty); } SkipSelectedChange = false; if (hscroll != null) { vscrollbar.Value = hscroll.Value; } if (vscroll != null) { vscrollbar.Value = vscroll.Value; } }
public void RefreshData() { UpdateModel(); collection.ExpandItems(); }
public override void AttachEvent(string handler) { switch (handler) { case TreeView.ExpandingEvent: tree.TestExpandRow += delegate(object o, Gtk.TestExpandRowArgs args) { if (cancelExpandCollapseEvents) { return; } var e = new TreeViewItemCancelEventArgs(GetItem(args.Path) as ITreeItem); Widget.OnExpanding(e); args.RetVal = e.Cancel; }; break; case TreeView.ExpandedEvent: tree.RowExpanded += delegate(object o, Gtk.RowExpandedArgs args) { if (cancelExpandCollapseEvents) { return; } var item = GetItem(args.Path) as ITreeItem; if (item != null && !item.Expanded) { item.Expanded = true; collection.ExpandItems(item, args.Path); Widget.OnExpanded(new TreeViewItemEventArgs(item)); } }; break; case TreeView.CollapsingEvent: tree.TestCollapseRow += delegate(object o, Gtk.TestCollapseRowArgs args) { if (cancelExpandCollapseEvents) { return; } var e = new TreeViewItemCancelEventArgs(GetItem(args.Path) as ITreeItem); Widget.OnCollapsing(e); args.RetVal = e.Cancel; }; break; case TreeView.CollapsedEvent: tree.RowCollapsed += delegate(object o, Gtk.RowCollapsedArgs args) { if (cancelExpandCollapseEvents) { return; } var item = GetItem(args.Path) as ITreeItem; if (item != null && item.Expanded) { item.Expanded = false; Widget.OnCollapsed(new TreeViewItemEventArgs(item)); } }; break; case TreeView.ActivatedEvent: tree.RowActivated += delegate(object o, Gtk.RowActivatedArgs args) { this.Widget.OnActivated(new TreeViewItemEventArgs(model.GetItemAtPath(args.Path))); }; break; case TreeView.SelectionChangedEvent: tree.Selection.Changed += delegate { this.Widget.OnSelectionChanged(EventArgs.Empty); }; break; case TreeView.BeforeLabelEditEvent: textCell.EditingStarted += (o, args) => { var item = model.GetItemAtPath(args.Path); if (item != null) { var itemArgs = new TreeViewItemCancelEventArgs(item); Widget.OnBeforeLabelEdit(itemArgs); args.RetVal = itemArgs.Cancel ? true : false; } }; break; case TreeView.AfterLabelEditEvent: textCell.Edited += (o, args) => { var item = model.GetItemAtPath(args.Path); if (item != null) { Widget.OnAfterLabelEdit(new TreeViewItemEditEventArgs(item, args.NewText)); item.Text = args.NewText; } }; break; default: base.AttachEvent(handler); break; } }