private void addNextItems(VirtualizingIEnumerable <T> sourceToAdd, int nItems)
 {
     sourceToAdd.AddNextItems(nItems);
     if (!sourceToAdd.HasNext)
     {
         // all items from IEnumerable have been added
         this.itemsSourceTotalCount = sourceToAdd.Count;
     }
 }
示例#2
0
        public void SetItemsSource(IEnumerable <ITreeNode> value)
        {
            this.itemsSource = value;
            this.lazyGrid    = new LazyItemsControl <ITreeNode>(this.dataGrid, InitialItemsCount);

            // HACK for updating the pins in tooltip
            var observable = new List <ITreeNode>();

            this.itemsSource.ForEach(item => observable.Add(item));

            // verify if at the line of the root there's a pin bookmark
            ITextEditor         editor;
            var                 viewContent = WorkbenchSingleton.Workbench.ActiveViewContent;
            ITextEditorProvider provider    = viewContent as ITextEditorProvider;

            if (provider != null)
            {
                editor = provider.TextEditor;
            }
            else
            {
                editor = viewContent.GetService(typeof(ITextEditor)) as ITextEditor;
            }

            if (editor != null)
            {
                var pin = BookmarkManager.Bookmarks.Find(
                    b => b is PinBookmark &&
                    b.Location.Line == logicalPosition.Line &&
                    b.FileName == editor.FileName) as PinBookmark;

                if (pin != null)
                {
                    observable.ForEach(item => {                     // TODO: find a way not to use "observable"
                        if (pin.ContainsNode(item))
                        {
                            item.IsPinned = true;
                        }
                    });
                }
            }

            var source = new VirtualizingIEnumerable <ITreeNode>(observable);

            lazyGrid.ItemsSource = source;
            this.dataGrid.AddHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(handleScroll));

            if (this.lazyGrid.ItemsSourceTotalCount != null)
            {
                // hide up/down buttons if too few items
                btnUp.Visibility = btnDown.Visibility =
                    this.lazyGrid.ItemsSourceTotalCount.Value <= VisibleItemsCount ? Visibility.Collapsed : Visibility.Visible;
            }
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (!DebuggerService.IsDebuggerStarted)
            {
                return;
            }

            // refresh content
            ITreeNode node = ((FrameworkElement)e.OriginalSource).DataContext as ITreeNode;

            var resultNode = currentDebugger.GetNode(node.FullName, node.ImageName);

            if (resultNode == null)
            {
                return;
            }
            // HACK for updating the pins in tooltip
            var observable = new ObservableCollection <ITreeNode>();
            var source     = lazyGrid.ItemsSource;

            source.ForEach(item => {
                if (item.CompareTo(node) == 0)
                {
                    observable.Add(resultNode);
                }
                else
                {
                    observable.Add(item);
                }
            });

            Mark.Nodes = observable;
            // update UI
            var newSource = new VirtualizingIEnumerable <ITreeNode>(observable);

            lazyGrid.ItemsSource          = newSource;
            lazyExpandersGrid.ItemsSource = newSource;
        }