public void Refresh() { try { // clear ListView listView.ItemsSource = null; ScrollViewer listViewScroller = listView.GetScrollViewer(); if (listViewScroller != null) { listViewScroller.ScrollToVerticalOffset(0); } Value shownValue = null; ICSharpCode.NRefactory.Ast.Expression shownExpr = null; try { shownExpr = debuggerService.GetExpression(txtExpression.Text); shownValue = shownExpr.Evaluate(debuggerService.DebuggedProcess); } catch (GetValueException e) { MessageService.ShowMessage(e.Message); } if (shownValue != null && !shownValue.IsNull) { GridValuesProvider gridValuesProvider; // Value is IList DebugType iListType, listItemType; if (shownValue.Type.ResolveIListImplementation(out iListType, out listItemType)) { gridValuesProvider = CreateListValuesProvider(shownExpr.CastToIList(), listItemType); } else { // Value is IEnumerable DebugType iEnumerableType, itemType; if (shownValue.Type.ResolveIEnumerableImplementation(out iEnumerableType, out itemType)) { DebugType debugListType; var debugListExpression = DebuggerHelpers.CreateDebugListExpression(shownExpr, itemType, out debugListType); gridValuesProvider = CreateListValuesProvider(debugListExpression, itemType); } else { // Not IList or IEnumerable<T> - can't be displayed in GridVisualizer return; } } IList <MemberInfo> itemTypeMembers = gridValuesProvider.GetItemTypeMembers(); InitializeColumns((GridView)this.listView.View, itemTypeMembers); this.columnHider = new GridViewColumnHider((GridView)this.listView.View); cmbColumns.ItemsSource = this.columnHider.HideableColumns; } } catch (GetValueException e) { MessageService.ShowMessage(e.Message); } catch (DebuggerVisualizerException e) { MessageService.ShowMessage(e.Message); } }
public static IEnumerable<TreeNode> LazyGetItemsOfIList(TreeNode parent, Expression targetObject) { // Add a cast, so that we are sure the expression has an indexer. // (The expression can be e.g. of type 'object' but its value is a List. // Without the cast, evaluating "expr[i]" would fail, because object does not have an indexer). targetObject = targetObject.CastToIList(); int count = 0; GetValueException error = null; try { count = targetObject.GetIListCount(); } catch (GetValueException e) { // Cannot yield a value in the body of a catch clause (CS1631) error = e; } if (error != null) { yield return new TreeNode(null, "(error)", error.Message, null, null, null); } else if (count == 0) { yield return new TreeNode(null, "(empty)", null, null, null, null); } else { for(int i = 0; i < count; i++) { string imageName; var image = ExpressionNode.GetImageForArrayIndexer(out imageName); var itemNode = new ExpressionNode(parent, image, "[" + i + "]", targetObject.AppendIndexer(i)); itemNode.ImageName = imageName; yield return itemNode; } } }
public void Refresh() { try { // clear ListView listView.ItemsSource = null; ScrollViewer listViewScroller = listView.GetScrollViewer(); if (listViewScroller != null) { listViewScroller.ScrollToVerticalOffset(0); } Value shownValue = null; ICSharpCode.NRefactory.Ast.Expression shownExpr = null; try { shownExpr = debuggerService.GetExpression(txtExpression.Text); shownValue = shownExpr.Evaluate(debuggerService.DebuggedProcess); } catch (GetValueException) { // display ex.Message } if (shownValue != null && !shownValue.IsNull) { GridValuesProvider gridValuesProvider; // Value is IList DebugType iListType, listItemType; if (shownValue.Type.ResolveIListImplementation(out iListType, out listItemType)) { gridValuesProvider = CreateListValuesProvider(shownExpr.CastToIList(), listItemType); } else { // Value is IEnumerable DebugType iEnumerableType, itemType; if (shownValue.Type.ResolveIEnumerableImplementation(out iEnumerableType, out itemType)) { // original /*var lazyListViewWrapper = new LazyItemsControl<ObjectValue>(this.listView, initialIEnumerableItemsCount); * var enumerableValuesProvider = new EnumerableValuesProvider(val.ExpressionTree, iEnumerableType, itemType); * lazyListViewWrapper.ItemsSource = new VirtualizingIEnumerable<ObjectValue>(enumerableValuesProvider.ItemsSource); * gridValuesProvider = enumerableValuesProvider;*/ DebugType debugListType; var debugListExpression = DebuggerHelpers.CreateDebugListExpression(shownExpr, itemType, out debugListType); gridValuesProvider = CreateListValuesProvider(debugListExpression, itemType); } else { // Value cannot be displayed in GridVisualizer return; } } IList <MemberInfo> itemTypeMembers = gridValuesProvider.GetItemTypeMembers(); InitializeColumns((GridView)this.listView.View, itemTypeMembers); this.columnHider = new GridViewColumnHider((GridView)this.listView.View); cmbColumns.ItemsSource = this.columnHider.HideableColumns; } } catch (GetValueException) { // display ex msg } catch (DebuggerVisualizerException) { // display ex msg } }
void LoadNodeCollectionContent(AbstractNode node, Expression thisObject, DebugType iListType) { thisObject = thisObject.CastToIList(); int listCount = thisObject.GetIListCount(); PropertyInfo indexerProp = iListType.GetProperty("Item"); for (int i = 0; i < listCount; i++) { Expression itemExpr = thisObject.AppendIndexer(i); PropertyNode itemNode = new PropertyNode( new ObjectGraphProperty { Name = "[" + i + "]", MemberInfo = indexerProp, Expression = itemExpr, Value = "", IsAtomic = true, TargetNode = null }); node.AddChild(itemNode); } }