|
|
|
@ -105,54 +105,61 @@ namespace Debugger.AddIn.Visualizers.GridVisualizer |
|
|
|
|
|
|
|
|
|
|
|
public void Refresh() |
|
|
|
public void Refresh() |
|
|
|
{ |
|
|
|
{ |
|
|
|
// clear ListView
|
|
|
|
try { |
|
|
|
listView.ItemsSource = null; |
|
|
|
// clear ListView
|
|
|
|
ScrollViewer listViewScroller = listView.GetScrollViewer(); |
|
|
|
listView.ItemsSource = null; |
|
|
|
if (listViewScroller != null) { |
|
|
|
ScrollViewer listViewScroller = listView.GetScrollViewer(); |
|
|
|
listViewScroller.ScrollToVerticalOffset(0); |
|
|
|
if (listViewScroller != null) { |
|
|
|
} |
|
|
|
listViewScroller.ScrollToVerticalOffset(0); |
|
|
|
Value shownValue = null; |
|
|
|
} |
|
|
|
ICSharpCode.NRefactory.Ast.Expression shownExpr = null; |
|
|
|
Value shownValue = null; |
|
|
|
try { |
|
|
|
ICSharpCode.NRefactory.Ast.Expression shownExpr = null; |
|
|
|
shownExpr = debuggerService.GetExpression(txtExpression.Text); |
|
|
|
try { |
|
|
|
shownValue = shownExpr.Evaluate(debuggerService.DebuggedProcess); |
|
|
|
shownExpr = debuggerService.GetExpression(txtExpression.Text); |
|
|
|
} catch(GetValueException) { |
|
|
|
shownValue = shownExpr.Evaluate(debuggerService.DebuggedProcess); |
|
|
|
// display ex.Message
|
|
|
|
} catch(GetValueException) { |
|
|
|
} |
|
|
|
// display ex.Message
|
|
|
|
if (shownValue != null && !shownValue.IsNull) { |
|
|
|
} |
|
|
|
GridValuesProvider gridValuesProvider; |
|
|
|
if (shownValue != null && !shownValue.IsNull) { |
|
|
|
// Value is IList
|
|
|
|
GridValuesProvider gridValuesProvider; |
|
|
|
DebugType iListType, listItemType; |
|
|
|
// Value is IList
|
|
|
|
if (shownValue.Type.ResolveIListImplementation(out iListType, out listItemType)) { |
|
|
|
DebugType iListType, listItemType; |
|
|
|
gridValuesProvider = CreateListValuesProvider(shownExpr, iListType, listItemType); |
|
|
|
if (shownValue.Type.ResolveIListImplementation(out iListType, out listItemType)) { |
|
|
|
} else { |
|
|
|
gridValuesProvider = CreateListValuesProvider(shownValue, iListType, listItemType); |
|
|
|
// Value is IEnumerable
|
|
|
|
} else { |
|
|
|
DebugType iEnumerableType, itemType; |
|
|
|
// Value is IEnumerable
|
|
|
|
if (shownValue.Type.ResolveIEnumerableImplementation(out iEnumerableType, out itemType)) { |
|
|
|
DebugType iEnumerableType, itemType; |
|
|
|
// original
|
|
|
|
if (shownValue.Type.ResolveIEnumerableImplementation(out iEnumerableType, out itemType)) { |
|
|
|
/*var lazyListViewWrapper = new LazyItemsControl<ObjectValue>(this.listView, initialIEnumerableItemsCount); |
|
|
|
// original
|
|
|
|
|
|
|
|
/*var lazyListViewWrapper = new LazyItemsControl<ObjectValue>(this.listView, initialIEnumerableItemsCount); |
|
|
|
var enumerableValuesProvider = new EnumerableValuesProvider(val.ExpressionTree, iEnumerableType, itemType); |
|
|
|
var enumerableValuesProvider = new EnumerableValuesProvider(val.ExpressionTree, iEnumerableType, itemType); |
|
|
|
lazyListViewWrapper.ItemsSource = new VirtualizingIEnumerable<ObjectValue>(enumerableValuesProvider.ItemsSource); |
|
|
|
lazyListViewWrapper.ItemsSource = new VirtualizingIEnumerable<ObjectValue>(enumerableValuesProvider.ItemsSource); |
|
|
|
gridValuesProvider = enumerableValuesProvider;*/ |
|
|
|
gridValuesProvider = enumerableValuesProvider;*/ |
|
|
|
DebugType debugListType; |
|
|
|
DebugType debugListType; |
|
|
|
var debugListExpression = DebuggerHelpers.CreateDebugListExpression(shownExpr, itemType, out debugListType); |
|
|
|
var debugListExpression = DebuggerHelpers.CreateDebugListExpression(shownExpr, itemType, out debugListType); |
|
|
|
gridValuesProvider = CreateListValuesProvider(debugListExpression, debugListType, itemType); |
|
|
|
var debugList = debugListExpression.Evaluate(WindowsDebugger.CurrentProcess); |
|
|
|
} else { |
|
|
|
gridValuesProvider = CreateListValuesProvider(debugList, debugListType, itemType); |
|
|
|
// Value cannot be displayed in GridVisualizer
|
|
|
|
} else { |
|
|
|
return; |
|
|
|
// Value cannot be displayed in GridVisualizer
|
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IList<MemberInfo> itemTypeMembers = gridValuesProvider.GetItemTypeMembers(); |
|
|
|
IList<MemberInfo> itemTypeMembers = gridValuesProvider.GetItemTypeMembers(); |
|
|
|
InitializeColumns((GridView)this.listView.View, itemTypeMembers); |
|
|
|
InitializeColumns((GridView)this.listView.View, itemTypeMembers); |
|
|
|
this.columnHider = new GridViewColumnHider((GridView)this.listView.View); |
|
|
|
this.columnHider = new GridViewColumnHider((GridView)this.listView.View); |
|
|
|
cmbColumns.ItemsSource = this.columnHider.HideableColumns; |
|
|
|
cmbColumns.ItemsSource = this.columnHider.HideableColumns; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} catch (GetValueException ex) { |
|
|
|
|
|
|
|
// TODO display ex msg
|
|
|
|
|
|
|
|
} catch (DebuggerVisualizerException ex) { |
|
|
|
|
|
|
|
// TODO display ex msg
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ListValuesProvider CreateListValuesProvider(ICSharpCode.NRefactory.Ast.Expression targetObject, DebugType iListType, DebugType listItemType) |
|
|
|
ListValuesProvider CreateListValuesProvider(Value targetValue, DebugType iListType, DebugType listItemType) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var listValuesProvider = new ListValuesProvider(targetObject, iListType, listItemType); |
|
|
|
var listValuesProvider = new ListValuesProvider(targetValue, listItemType); |
|
|
|
var virtCollection = new VirtualizingCollection<ObjectValue>(listValuesProvider); |
|
|
|
var virtCollection = new VirtualizingCollection<ObjectValue>(listValuesProvider); |
|
|
|
this.listView.ItemsSource = virtCollection; |
|
|
|
this.listView.ItemsSource = virtCollection; |
|
|
|
return listValuesProvider; |
|
|
|
return listValuesProvider; |
|
|
|
|