Esempio n. 1
0
		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);
		}
Esempio n. 2
0
 public int GetRowOfItem(ITreeGridItem item)
 {
     if (collection == null)
     {
         return(-1);
     }
     return(collection.IndexOf(item));
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
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));
        }
Esempio n. 5
0
        EtoTreeItem GetCachedItem(ITreeGridItem item)
        {
            EtoTreeItem myitem;

            if (cachedItems.TryGetValue(item, out myitem))
            {
                return(myitem);
            }
            return(null);
        }
Esempio n. 6
0
        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;
            }
        }
Esempio n. 7
0
 public void ReloadItem(ITreeGridItem item, bool reloadChildren)
 {
     if (!reloadChildren)
     {
         controller.ReloadItem(item);
     }
     else
     {
         controller.ReloadData();
     }
 }
Esempio n. 8
0
        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));
        }
Esempio n. 9
0
        IEnumerable <ITreeGridItem> GetParents(ITreeGridItem item)
        {
            var parent = item.Parent;

            while (parent != null)
            {
                yield return(parent);

                parent = parent.Parent;
            }
        }
Esempio n. 10
0
 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;
         }
     }
 }
Esempio n. 11
0
        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();
            }
        }
Esempio n. 12
0
        bool ChildIsSelected(ITreeGridItem item)
        {
            var node = this.SelectedItem;

            while (node != null)
            {
                if (node == item)
                {
                    return(true);
                }
                node = node.Parent;
            }
            return(false);
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
        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));
        }
Esempio n. 15
0
        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();
            }
        }
Esempio n. 16
0
            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;
                }
            }
Esempio n. 17
0
        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;
            }
        }
Esempio n. 18
0
        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);
        }
Esempio n. 19
0
        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);
        }
Esempio n. 20
0
        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;
            }
        }
Esempio n. 21
0
        EtoTreeItem GetCachedItem(ITreeGridItem item)
        {
            EtoTreeItem myitem;

            return(cachedItems.TryGetValue(item, out myitem) ? myitem : null);
        }
Esempio n. 22
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);
		}
Esempio n. 23
0
 /// <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);
Esempio n. 24
0
 /// <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);
Esempio n. 25
0
 /// <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);
 }
Esempio n. 26
0
 public void ReloadItem(ITreeGridItem item)
 {
     ReloadData();
 }
Esempio n. 27
0
 public TreeGridViewItemCancelEventArgs(ITreeGridItem item)
 {
     this.Item = item;
 }
Esempio n. 28
0
        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;
            }
        }
Esempio n. 29
0
        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;
            }
        }
Esempio n. 30
0
 public void ReloadItem(ITreeGridItem item)
 {
     controller.ReloadData();
 }
Esempio n. 31
0
 public void ReloadItem(ITreeGridItem item)
 {
     throw new NotImplementedException();
 }