public void Configure (ITreeGridItem item) { Item = item; var index = Controller.IndexOf (item); IsChecked = Controller.IsExpanded (index); Visibility = item != null && item.Expandable ? Visibility.Visible : Visibility.Hidden; Margin = new Thickness (Controller.LevelAtRow (index) * LevelWidth, 0, 0, 0); }
public int GetRowOfItem(ITreeGridItem item) { if (collection == null) { return(-1); } return(collection.IndexOf(item)); }
public void Configure(ITreeGridItem item) { Item = item; var index = Controller.IndexOf(item); IsChecked = Controller.IsExpanded(index); Visibility = item != null && item.Expandable ? Visibility.Visible : Visibility.Hidden; Margin = new Thickness(Controller.LevelAtRow(index) * LevelWidth, 0, 0, 0); }
string GetDescription(ITreeGridItem item) { var treeItem = item as TreeGridItem; if (treeItem != null) { return(Convert.ToString(string.Join(", ", treeItem.Values.Select(r => Convert.ToString(r))))); } return(Convert.ToString(item)); }
EtoTreeItem GetCachedItem(ITreeGridItem item) { EtoTreeItem myitem; if (cachedItems.TryGetValue(item, out myitem)) { return(myitem); } return(null); }
public override void AttachEvent(string handler) { switch (handler) { case TreeGridView.ActivatedEvent: Control.KeyDown += (sender, e) => { if (!e.Handled && SelectedItem != null && e.KeyData == swf.Keys.Enter) { Callback.OnActivated(Widget, new TreeGridViewItemEventArgs(SelectedItem)); e.Handled = true; } }; Control.CellDoubleClick += (sender, e) => { if (SelectedItem != null) { Callback.OnActivated(Widget, new TreeGridViewItemEventArgs(SelectedItem)); } }; break; case TreeGridView.ExpandingEvent: controller.Expanding += (sender, e) => Callback.OnExpanding(Widget, e); break; case TreeGridView.ExpandedEvent: controller.Expanded += (sender, e) => Callback.OnExpanded(Widget, e); break; case TreeGridView.CollapsingEvent: controller.Collapsing += (sender, e) => Callback.OnCollapsing(Widget, e); break; case TreeGridView.CollapsedEvent: controller.Collapsed += (sender, e) => Callback.OnCollapsed(Widget, e); break; case TreeGridView.SelectedItemChangedEvent: Control.SelectionChanged += (sender, e) => { var item = this.SelectedItem; if (!object.ReferenceEquals(lastSelected, item)) { Callback.OnSelectedItemChanged(Widget, EventArgs.Empty); lastSelected = item; } }; break; default: base.AttachEvent(handler); break; } }
public void ReloadItem(ITreeGridItem item, bool reloadChildren) { if (!reloadChildren) { controller.ReloadItem(item); } else { controller.ReloadData(); } }
public GLib.Value GetColumnValue(ITreeGridItem item, int dataColumn, int row) { int column; if (ColumnMap.TryGetValue(dataColumn, out column)) { var colHandler = (IGridColumnHandler)Widget.Columns[column].Handler; return(colHandler.GetValue(item, dataColumn, row)); } return(new GLib.Value((string)null)); }
IEnumerable <ITreeGridItem> GetParents(ITreeGridItem item) { var parent = item.Parent; while (parent != null) { yield return(parent); parent = parent.Parent; } }
public override void SelectionDidChange(NSNotification notification) { if (!skipSelectionChanged) { Handler.Widget.OnSelectionChanged(EventArgs.Empty); var item = Handler.SelectedItem; if (!object.ReferenceEquals(item, lastSelected)) { Handler.Widget.OnSelectedItemChanged(EventArgs.Empty); lastSelected = item; } } }
public void ReloadItem(ITreeGridItem item) { EtoTreeItem myitem; if (cachedItems.TryGetValue(item, out myitem)) { skipSelectionChanged++; suppressExpandCollapseEvents++; var selectedItem = SelectedItem; var selection = SelectedItems.ToList(); var row = Control.RowForItem(myitem); if (row >= 0) { topitems.Remove((int)row); } myitem.Items.Clear(); Control.ReloadItem(myitem, true); SetItemExpansion(myitem); ExpandItems(myitem); AutoSizeColumns(true); var isSelectionChanged = false; foreach (var sel in selection) { row = Control.RowForItem(GetCachedItem(sel as ITreeGridItem)); if (row >= 0) { Control.SelectRow((nnint)row, true); } else { isSelectionChanged = true; } } skipSelectionChanged--; suppressExpandCollapseEvents--; if (isSelectionChanged) { Callback.OnSelectionChanged(Widget, EventArgs.Empty); if (!ReferenceEquals(selectedItem, SelectedItem)) { Callback.OnSelectedItemChanged(Widget, EventArgs.Empty); } } } else { ReloadData(); } }
bool ChildIsSelected(ITreeGridItem item) { var node = this.SelectedItem; while (node != null) { if (node == item) { return(true); } node = node.Parent; } return(false); }
int FindRow(IDataStore <ITreeGridItem> container, ITreeGridItem item) { int row = 0; for (int i = 0; i < container.Count; i++) { var current = container [i]; if (object.ReferenceEquals(current, item)) { return(row); } row++; row += CountRows(current); } return(-1); }
public GLib.Value GetColumnValue(ITreeGridItem item, int dataColumn, int row, Gtk.TreeIter iter) { if (dataColumn == RowDataColumn) { return(new GLib.Value(GetRowIndexOfPath(model.GetPath(iter)))); } int column; if (ColumnMap.TryGetValue(dataColumn, out column)) { var colHandler = (IGridColumnHandler)Widget.Columns[column].Handler; return(colHandler.GetValue(item, dataColumn, row)); } return(new GLib.Value((string)null)); }
public void ReloadItem(ITreeGridItem item, bool reloadChildren) { var tree = Tree; var path = model.GetPathFromItem(item); if (path != null && path.Depth > 0 && !ReferenceEquals(item, collection.Collection)) { suppressExpandCollapseEvents++; var wasExpanded = tree.GetRowExpanded(path); Gtk.TreeIter iter; tree.Model.GetIter(out iter, path); if (item.Expandable) { tree.Model.EmitRowChanged(path, iter); if (reloadChildren || item.Expanded != wasExpanded) { tree.Model.EmitRowHasChildToggled(path, iter); tree.CollapseRow(path); if (item.Expanded) { tree.ExpandRow(path, false); collection.ExpandItems((ITreeGridStore <ITreeGridItem>)item, path); } } } else if (wasExpanded) { // it was expanded (and had children), but now it won't be. // Gtk requires that we know at this time how many children we have to remove, but instead let's // just delete this node and re-add it. // EmitRowHasChildToggled should have done this IMO, but I guess it does not. tree.Model.EmitRowDeleted(path); tree.Model.EmitRowInserted(path, iter); } else { tree.Model.EmitRowChanged(path, iter); } suppressExpandCollapseEvents--; } else { ReloadData(); } }
public override void SelectionDidChange(NSNotification notification) { var h = Handler; if (h.skipSelectionChanged > 0) { return; } h.Callback.OnSelectionChanged(h.Widget, EventArgs.Empty); var item = h.SelectedItem; if (!ReferenceEquals(item, lastSelected)) { h.Callback.OnSelectedItemChanged(h.Widget, EventArgs.Empty); lastSelected = item; } }
public override void AttachEvent(string handler) { switch (handler) { case TreeGridView.ExpandingEvent: controller.Expanding += (sender, e) => { Widget.OnExpanding(e); }; break; case TreeGridView.ExpandedEvent: controller.Expanded += (sender, e) => { Widget.OnExpanded(e); }; break; case TreeGridView.CollapsingEvent: controller.Collapsing += (sender, e) => { Widget.OnCollapsing(e); }; break; case TreeGridView.CollapsedEvent: controller.Collapsed += (sender, e) => { Widget.OnCollapsed(e); }; break; case TreeGridView.SelectedItemChangedEvent: Control.SelectionChanged += (sender, e) => { var item = this.SelectedItem; if (!object.ReferenceEquals(lastSelected, item)) { Widget.OnSelectedItemChanged(EventArgs.Empty); lastSelected = item; } }; break; default: base.AttachEvent(handler); break; } }
int CountRows(ITreeGridItem item) { if (!item.Expanded) { return(0); } var rows = 0; var container = item as IDataStore <ITreeGridItem>; if (container != null) { rows += container.Count; for (int i = 0; i < container.Count; i++) { rows += CountRows(container[i]); } } return(rows); }
int?ExpandToItem(ITreeGridItem item) { var parents = GetParents(item).Reverse(); IDataStore <ITreeGridItem> lastParent = null; var row = 0; foreach (var parent in parents) { if (lastParent != null) { var foundRow = FindRow(lastParent, parent); if (foundRow == -1) { return(null); } row += foundRow; var foundItem = Control.ItemAtRow(row) as EtoTreeItem; if (foundItem == null) { return(null); } Control.ExpandItem(foundItem); foundItem.Item.Expanded = true; row++; } lastParent = parent as IDataStore <ITreeGridItem>; } if (lastParent != null) { var foundRow = FindRow(lastParent, item); if (foundRow == -1) { return(null); } return(foundRow + row); } return(null); }
public override void AttachEvent(string id) { switch (id) { case TreeGridView.ExpandingEvent: controller.Expanding += (sender, e) => Callback.OnExpanding(Widget, e); break; case TreeGridView.ExpandedEvent: controller.Expanded += (sender, e) => Callback.OnExpanded(Widget, e); break; case TreeGridView.CollapsingEvent: controller.Collapsing += (sender, e) => Callback.OnCollapsing(Widget, e); break; case TreeGridView.CollapsedEvent: controller.Collapsed += (sender, e) => Callback.OnCollapsed(Widget, e); break; case TreeGridView.SelectedItemChangedEvent: Control.SelectedCellsChanged += (sender, e) => { var item = SelectedItem; if (!SkipSelectionChanged && !object.ReferenceEquals(lastSelected, item)) { Callback.OnSelectedItemChanged(Widget, EventArgs.Empty); lastSelected = item; } }; break; default: base.AttachEvent(id); break; } }
EtoTreeItem GetCachedItem(ITreeGridItem item) { EtoTreeItem myitem; return(cachedItems.TryGetValue(item, out myitem) ? myitem : null); }
string GetDescription(ITreeGridItem item) { var treeItem = item as TreeGridItem; if (treeItem != null) return Convert.ToString(string.Join(", ", treeItem.Values.Select(r => Convert.ToString(r)))); return Convert.ToString(item); }
/// <summary> /// Refreshes the specified item and all its children, keeping the selection if not part of the refreshed nodes /// </summary> /// <param name="item">Item to refresh, including its children</param> public void ReloadItem(ITreeGridItem item) => ReloadItem(item, true);
/// <summary> /// Refreshes the specified item and optionally all of its children, keeping the selection if not part of the refreshed nodes /// </summary> /// <param name="item">Item to refresh</param> /// <param name="reloadChildren">Reload children of the specified item</param> public void ReloadItem(ITreeGridItem item, bool reloadChildren) => Handler.ReloadItem(item, reloadChildren);
/// <summary> /// Refreshes the specified item and all its children, keeping the selection if not part of the refreshed nodes /// </summary> /// <param name="item">Item to refresh</param> public void ReloadItem(ITreeGridItem item) { Handler.ReloadItem(item); }
public void ReloadItem(ITreeGridItem item) { ReloadData(); }
public TreeGridViewItemCancelEventArgs(ITreeGridItem item) { this.Item = item; }
public override void AttachEvent(string id) { switch (id) { case TreeGridView.ActivatedEvent: Control.PreviewKeyDown += (sender, e) => { if (e.Key == sw.Input.Key.Enter) { if (SelectedItem != null) { Callback.OnActivated(Widget, new TreeGridViewItemEventArgs(SelectedItem)); e.Handled = true; } } }; Control.MouseDoubleClick += (sender, e) => { if (SelectedItem != null) { Callback.OnActivated(Widget, new TreeGridViewItemEventArgs(SelectedItem)); e.Handled = true; } }; break; case TreeGridView.ExpandingEvent: controller.Expanding += (sender, e) => Callback.OnExpanding(Widget, e); break; case TreeGridView.ExpandedEvent: controller.Expanded += (sender, e) => Callback.OnExpanded(Widget, e); break; case TreeGridView.CollapsingEvent: controller.Collapsing += (sender, e) => Callback.OnCollapsing(Widget, e); break; case TreeGridView.CollapsedEvent: controller.Collapsed += (sender, e) => Callback.OnCollapsed(Widget, e); break; case TreeGridView.SelectedItemChangedEvent: Control.SelectedCellsChanged += (sender, e) => { var item = SelectedItem; if (!SkipSelectionChanged && !object.ReferenceEquals(lastSelected, item)) { Callback.OnSelectedItemChanged(Widget, EventArgs.Empty); lastSelected = item; } }; break; case Eto.Forms.Control.DragOverEvent: base.AttachEvent(id); HandleEvent(Eto.Forms.Control.DragLeaveEvent); break; case Eto.Forms.Control.DragLeaveEvent: base.AttachEvent(id); HandleEvent(Eto.Forms.Control.DragOverEvent); break; case Eto.Forms.Control.DragDropEvent: base.AttachEvent(id); HandleEvent(Eto.Forms.Control.DragOverEvent); HandleEvent(Eto.Forms.Control.DragLeaveEvent); break; default: base.AttachEvent(id); break; } }
public override void AttachEvent(string handler) { switch (handler) { case TreeGridView.ExpandingEvent: this.Tree.TestExpandRow += delegate(object o, Gtk.TestExpandRowArgs args) { var e = new TreeGridViewItemCancelEventArgs(GetItem(args.Path) as ITreeGridItem); Widget.OnExpanding(e); args.RetVal = e.Cancel; }; break; case TreeGridView.ExpandedEvent: this.Tree.RowExpanded += delegate(object o, Gtk.RowExpandedArgs args) { var e = new TreeGridViewItemEventArgs(GetItem(args.Path) as ITreeGridItem); e.Item.Expanded = true; Widget.OnExpanded(e); }; break; case TreeGridView.CollapsingEvent: this.Tree.TestCollapseRow += delegate(object o, Gtk.TestCollapseRowArgs args) { var e = new TreeGridViewItemCancelEventArgs(GetItem(args.Path) as ITreeGridItem); Widget.OnCollapsing(e); args.RetVal = e.Cancel; if (!e.Cancel) { selectCollapsingItem = AllowMultipleSelection ? false : ChildIsSelected(e.Item); SkipSelectedChange = true; } }; break; case TreeGridView.CollapsedEvent: this.Tree.RowCollapsed += delegate(object o, Gtk.RowCollapsedArgs args) { var e = new TreeGridViewItemEventArgs(GetItem(args.Path) as ITreeGridItem); e.Item.Expanded = false; Widget.OnCollapsed(e); SkipSelectedChange = false; if (selectCollapsingItem == true) { Tree.Selection.UnselectAll(); Tree.Selection.SelectPath(args.Path); selectCollapsingItem = null; } }; break; case TreeGridView.SelectedItemChangedEvent: this.Tree.Selection.Changed += (o, args) => { var item = this.SelectedItem; if (!SkipSelectedChange && !object.ReferenceEquals(item, lastSelected)) { Widget.OnSelectedItemChanged(EventArgs.Empty); lastSelected = item; } }; break; default: base.AttachEvent(handler); break; } }
public void ReloadItem(ITreeGridItem item) { controller.ReloadData(); }
public void ReloadItem(ITreeGridItem item) { throw new NotImplementedException(); }