Browse Source

Final touches.

pull/1716/head
Siegfried Pammer 6 years ago
parent
commit
bdcce7659e
  1. 41
      ILSpy/Commands/DecompileCommand.cs
  2. 34
      ILSpy/ContextMenuEntry.cs
  3. 38
      ILSpy/ExtensionMethods.cs
  4. 2
      ILSpy/FilterSettings.cs
  5. 1
      ILSpy/MainWindow.xaml.cs
  6. 7
      ILSpy/Metadata/CorTables/AssemblyRefTableTreeNode.cs
  7. 2
      ILSpy/Metadata/CorTables/AssemblyTableTreeNode.cs
  8. 5
      ILSpy/Metadata/CorTables/ClassLayoutTableTreeNode.cs
  9. 5
      ILSpy/Metadata/CorTables/ConstantTableTreeNode.cs
  10. 5
      ILSpy/Metadata/CorTables/CustomAttributeTableTreeNode.cs
  11. 5
      ILSpy/Metadata/CorTables/DeclSecurityTableTreeNode.cs
  12. 5
      ILSpy/Metadata/CorTables/EventMapTableTreeNode.cs
  13. 5
      ILSpy/Metadata/CorTables/EventTableTreeNode.cs
  14. 5
      ILSpy/Metadata/CorTables/ExportedTypeTableTreeNode.cs
  15. 7
      ILSpy/Metadata/CorTables/FieldLayoutTableTreeNode.cs
  16. 14
      ILSpy/Metadata/CorTables/FieldMarshalTableTreeNode.cs
  17. 7
      ILSpy/Metadata/CorTables/FieldRVATableTreeNode.cs
  18. 7
      ILSpy/Metadata/CorTables/FieldTableTreeNode.cs
  19. 5
      ILSpy/Metadata/CorTables/FileTableTreeNode.cs
  20. 5
      ILSpy/Metadata/CorTables/GenericParamConstraintTableTreeNode.cs
  21. 5
      ILSpy/Metadata/CorTables/GenericParamTableTreeNode.cs
  22. 7
      ILSpy/Metadata/CorTables/ImplMapTableTreeNode.cs
  23. 5
      ILSpy/Metadata/CorTables/InterfaceImplTableTreeNode.cs
  24. 5
      ILSpy/Metadata/CorTables/ManifestResourceTableTreeNode.cs
  25. 5
      ILSpy/Metadata/CorTables/MemberRefTableTreeNode.cs
  26. 5
      ILSpy/Metadata/CorTables/MethodImplTableTreeNode.cs
  27. 5
      ILSpy/Metadata/CorTables/MethodSemanticsTableTreeNode.cs
  28. 5
      ILSpy/Metadata/CorTables/MethodSpecTableTreeNode.cs
  29. 11
      ILSpy/Metadata/CorTables/MethodTableTreeNode.cs
  30. 5
      ILSpy/Metadata/CorTables/ModuleRefTableTreeNode.cs
  31. 5
      ILSpy/Metadata/CorTables/ModuleTableTreeNode.cs
  32. 5
      ILSpy/Metadata/CorTables/NestedClassTableTreeNode.cs
  33. 5
      ILSpy/Metadata/CorTables/ParamTableTreeNode.cs
  34. 5
      ILSpy/Metadata/CorTables/PropertyMapTableTreeNode.cs
  35. 5
      ILSpy/Metadata/CorTables/PropertyTableTreeNode.cs
  36. 5
      ILSpy/Metadata/CorTables/StandAloneSigTableTreeNode.cs
  37. 5
      ILSpy/Metadata/CorTables/TypeDefTableTreeNode.cs
  38. 5
      ILSpy/Metadata/CorTables/TypeRefTableTreeNode.cs
  39. 5
      ILSpy/Metadata/CorTables/TypeSpecTableTreeNode.cs
  40. 2
      ILSpy/Metadata/DataDirectoriesTreeNode.cs
  41. 9
      ILSpy/Metadata/DataGridCustomTextColumn.cs
  42. 2
      ILSpy/Metadata/DosHeaderTreeNode.cs
  43. 9
      ILSpy/Metadata/FlagsFilterControl.xaml.cs
  44. 19
      ILSpy/Metadata/Helpers.cs
  45. 17
      ILSpy/Metadata/MetadataTableTreeNode.cs
  46. 2
      ILSpy/Metadata/OptionalHeaderTreeNode.cs

41
ILSpy/Commands/DecompileCommand.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Reflection.Metadata;
using System.Reflection.Metadata.Ecma335;
using System.Text;
@ -10,6 +11,7 @@ using System.Windows; @@ -10,6 +11,7 @@ using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.Decompiler.TypeSystem;
using ICSharpCode.ILSpy.Analyzers;
using ICSharpCode.ILSpy.Controls;
@ -23,7 +25,6 @@ namespace ICSharpCode.ILSpy.Commands @@ -23,7 +25,6 @@ namespace ICSharpCode.ILSpy.Commands
{
public bool IsVisible(TextViewContext context)
{
var (c, selectedItem) = context.GetColumnAndRowFromMousePosition();
if (context.SelectedTreeNodes == null)
return context.Reference?.Reference is IEntity;
return context.SelectedTreeNodes.Length == 1 && context.SelectedTreeNodes.All(n => n is IMemberTreeNode);
@ -31,7 +32,6 @@ namespace ICSharpCode.ILSpy.Commands @@ -31,7 +32,6 @@ namespace ICSharpCode.ILSpy.Commands
public bool IsEnabled(TextViewContext context)
{
var (c, selectedItem) = context.GetColumnAndRowFromMousePosition();
if (context.SelectedTreeNodes == null)
return context.Reference?.Reference is IEntity;
foreach (IMemberTreeNode node in context.SelectedTreeNodes) {
@ -59,4 +59,41 @@ namespace ICSharpCode.ILSpy.Commands @@ -59,4 +59,41 @@ namespace ICSharpCode.ILSpy.Commands
MainWindow.Instance.JumpToReference(selection);
}
}
[ExportContextMenuEntry(Header = "Go to token", Order = 10)]
class GoToToken : IContextMenuEntry
{
public void Execute(TextViewContext context)
{
int token = GetSelectedToken(context.DataGrid, out PEFile module).Value;
MainWindow.Instance.JumpToReference(("metadata", module, MetadataTokens.Handle(token)));
}
public bool IsEnabled(TextViewContext context)
{
return true;
}
public bool IsVisible(TextViewContext context)
{
return context.DataGrid?.Name == "MetadataView" && GetSelectedToken(context.DataGrid, out _) != null;
}
private int? GetSelectedToken(DataGrid grid, out PEFile module)
{
module = null;
if (grid == null)
return null;
var cell = grid.CurrentCell;
if (!cell.IsValid)
return null;
Type type = cell.Item.GetType();
var property = type.GetProperty(cell.Column.Header.ToString());
var moduleField = type.GetField("module", BindingFlags.NonPublic | BindingFlags.Instance);
if (property == null || property.PropertyType != typeof(int) || !property.GetCustomAttributes(false).Any(a => a is StringFormatAttribute sf && sf.Format == "X8"))
return null;
module = (PEFile)moduleField.GetValue(cell.Item);
return (int)property.GetValue(cell.Item);
}
}
}

34
ILSpy/ContextMenuEntry.cs

@ -82,40 +82,6 @@ namespace ICSharpCode.ILSpy @@ -82,40 +82,6 @@ namespace ICSharpCode.ILSpy
public Point MousePosition { get; private set; }
public (GridViewColumn, object) GetColumnAndRowFromMousePosition()
{
if (!(ListBox is ListView listView))
return (null, null);
GridViewColumn column = null;
var directChild = (FrameworkElement)listView.InputHitTest(listView.PointFromScreen(MousePosition));
var (presenter, previous) = GetAncestorOf<GridViewRowPresenter>(directChild);
if (presenter == null)
return (null, null);
(var container, _) = GetAncestorOf<ListViewItem>(presenter);
var item = listView.ItemContainerGenerator.ItemFromContainer(container);
int count = VisualTreeHelper.GetChildrenCount(presenter);
for (int i = 0; i < count; i++) {
if (VisualTreeHelper.GetChild(presenter, i) != previous)
continue;
column = presenter.Columns[i];
break;
}
return (column, item);
(T, FrameworkElement) GetAncestorOf<T>(FrameworkElement element) where T : FrameworkElement
{
var current = element;
FrameworkElement prev = null;
while (current != null && !(current is T)) {
prev = current;
current = (FrameworkElement)VisualTreeHelper.GetParent(current);
}
return (current as T, prev);
}
}
public static TextViewContext Create(SharpTreeView treeView = null, DecompilerTextView textView = null, ListBox listBox = null, DataGrid dataGrid = null)
{
ReferenceSegment reference;

38
ILSpy/ExtensionMethods.cs

@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using ICSharpCode.ILSpy.Options;
@ -201,5 +202,42 @@ namespace ICSharpCode.ILSpy @@ -201,5 +202,42 @@ namespace ICSharpCode.ILSpy
return matrix.Transform(point);
}
#endregion
public static T FindVisualChild<T>(this DependencyObject depObj) where T : DependencyObject
{
if (depObj != null) {
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) {
DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
if (child != null && child is T) {
return (T)child;
}
T childItem = FindVisualChild<T>(child);
if (childItem != null) return childItem;
}
}
return null;
}
public static T GetParent<T>(this DependencyObject depObj) where T : DependencyObject
{
if (depObj == null)
return null;
while (!(depObj is T)) {
var parent = VisualTreeHelper.GetParent(depObj);
if (parent == null)
return null;
depObj = parent;
}
return (T)depObj;
}
public static void SelectItem(this DataGrid view, object item)
{
var container = (DataGridRow)view.ItemContainerGenerator.ContainerFromItem(item);
if (container != null)
container.IsSelected = true;
view.Focus();
}
}
}

2
ILSpy/FilterSettings.cs

@ -49,7 +49,7 @@ namespace ICSharpCode.ILSpy @@ -49,7 +49,7 @@ namespace ICSharpCode.ILSpy
"FilterSettings",
new XElement("ShowAPILevel", (int)this.ShowApiLevel),
new XElement("Language", this.Language.Name),
new XElement("LanguageVersion", this.LanguageVersion.Version)
new XElement("LanguageVersion", this.LanguageVersion?.Version)
);
}

1
ILSpy/MainWindow.xaml.cs

@ -696,6 +696,7 @@ namespace ICSharpCode.ILSpy @@ -696,6 +696,7 @@ namespace ICSharpCode.ILSpy
LanguageVersion = CurrentLanguageVersion
});
DockWorkspace.Instance.ActiveTabPage = DockWorkspace.Instance.TabPages.Last();
treeView.SelectedItem = null;
}
// Set both the selection and focus to ensure that keyboard navigation works as expected.

7
ILSpy/Metadata/CorTables/AssemblyRefTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<AssemblyRefEntry>();
AssemblyRefEntry scrollTargetEntry = default;
@ -59,9 +59,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -59,9 +59,8 @@ namespace ICSharpCode.ILSpy.Metadata
view.ItemsSource = list;
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
if (scrollTargetEntry.RID > 1) {
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

2
ILSpy/Metadata/CorTables/AssemblyTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
view.ItemsSource = new[] { new AssemblyEntry(module) };
tabPage.Content = view;
return true;

5
ILSpy/Metadata/CorTables/ClassLayoutTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<ClassLayoutEntry>();
@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/ConstantTableTreeNode.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<ConstantEntry>();
@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/CustomAttributeTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<CustomAttributeEntry>();
@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/DeclSecurityTableTreeNode.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<DeclSecurityEntry>();
@ -63,8 +63,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -63,8 +63,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/EventMapTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<EventMapEntry>();
@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/EventTableTreeNode.cs

@ -46,7 +46,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -46,7 +46,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<EventDefEntry>();
@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/ExportedTypeTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<ExportedTypeEntry>();
ExportedTypeEntry scrollTargetEntry = default;
@ -61,8 +61,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -61,8 +61,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

7
ILSpy/Metadata/CorTables/FieldLayoutTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<FieldLayoutEntry>();
@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;
@ -108,7 +107,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -108,7 +107,7 @@ namespace ICSharpCode.ILSpy.Metadata
}
}
[StringFormat("X8")]
[StringFormat("X")]
public int FieldOffset => fieldLayout.Offset;
public FieldLayoutEntry(PEFile module, byte* ptr, int metadataOffset, int row)

14
ILSpy/Metadata/CorTables/FieldMarshalTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<FieldMarshalEntry>();
@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;
@ -77,10 +76,10 @@ namespace ICSharpCode.ILSpy.Metadata @@ -77,10 +76,10 @@ namespace ICSharpCode.ILSpy.Metadata
public readonly BlobHandle NativeType;
public readonly EntityHandle Parent;
public unsafe FieldMarshal(byte* ptr, int hasFieldMarshalRefSize)
public unsafe FieldMarshal(byte* ptr, int blobHeapSize, int hasFieldMarshalRefSize)
{
NativeType = MetadataTokens.BlobHandle(Helpers.GetValue(ptr, 4));
Parent = Helpers.FromHasFieldMarshalTag((uint)Helpers.GetValue(ptr + 4, hasFieldMarshalRefSize));
Parent = Helpers.FromHasFieldMarshalTag((uint)Helpers.GetValue(ptr, hasFieldMarshalRefSize));
NativeType = MetadataTokens.BlobHandle(Helpers.GetValue(ptr + hasFieldMarshalRefSize, blobHeapSize));
}
}
@ -120,7 +119,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -120,7 +119,8 @@ namespace ICSharpCode.ILSpy.Metadata
+ metadata.GetTableRowSize(TableIndex.FieldMarshal) * (row - 1);
this.Offset = metadataOffset + rowOffset;
int hasFieldMarshalRefSize = metadata.ComputeCodedTokenSize(32768, TableMask.Field | TableMask.Param);
this.fieldMarshal = new FieldMarshal(ptr + rowOffset, hasFieldMarshalRefSize);
int blobHeapSize = metadata.GetHeapSize(HeapIndex.Blob) < ushort.MaxValue ? 2 : 4;
this.fieldMarshal = new FieldMarshal(ptr + rowOffset, blobHeapSize, hasFieldMarshalRefSize);
}
}

7
ILSpy/Metadata/CorTables/FieldRVATableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<FieldRVAEntry>();
@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;
@ -108,7 +107,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -108,7 +107,7 @@ namespace ICSharpCode.ILSpy.Metadata
}
}
[StringFormat("X8")]
[StringFormat("X")]
public int FieldOffset => fieldLayout.Offset;
public FieldRVAEntry(PEFile module, byte* ptr, int metadataOffset, int row)

7
ILSpy/Metadata/CorTables/FieldTableTreeNode.cs

@ -48,7 +48,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -48,7 +48,7 @@ namespace ICSharpCode.ILSpy.Metadata
{
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<FieldDefEntry>();
@ -57,7 +57,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -57,7 +57,7 @@ namespace ICSharpCode.ILSpy.Metadata
foreach (var row in metadata.FieldDefinitions) {
var entry = new FieldDefEntry(module, row);
if (scrollTarget.Equals(row)) {
if (scrollTarget == entry.RID) {
scrollTargetEntry = entry;
}
list.Add(entry);
@ -68,8 +68,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -68,8 +68,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/FileTableTreeNode.cs

@ -41,7 +41,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -41,7 +41,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<FileEntry>();
@ -60,8 +60,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -60,8 +60,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/GenericParamConstraintTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<GenericParamConstraintEntry>();
@ -61,8 +61,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -61,8 +61,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/GenericParamTableTreeNode.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<GenericParamEntry>();
@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

7
ILSpy/Metadata/CorTables/ImplMapTableTreeNode.cs

@ -45,7 +45,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -45,7 +45,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<ImplMapEntry>();
@ -67,8 +67,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -67,8 +67,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;
@ -126,7 +125,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -126,7 +125,7 @@ namespace ICSharpCode.ILSpy.Metadata
}
[StringFormat("X8")]
public object ImportScope => MetadataTokens.GetToken(implMap.ImportScope);
public int ImportScope => MetadataTokens.GetToken(implMap.ImportScope);
public string ImportScopeTooltip {
get {

5
ILSpy/Metadata/CorTables/InterfaceImplTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<InterfaceImplEntry>();
@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/ManifestResourceTableTreeNode.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<ManifestResourceEntry>();
@ -63,8 +63,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -63,8 +63,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/MemberRefTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<MemberRefEntry>();
@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/MethodImplTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<MethodImplEntry>();
@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/MethodSemanticsTableTreeNode.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<MethodSemanticsEntry>();
@ -63,8 +63,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -63,8 +63,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/MethodSpecTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<MethodSpecEntry>();
@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

11
ILSpy/Metadata/CorTables/MethodTableTreeNode.cs

@ -16,11 +16,13 @@ @@ -16,11 +16,13 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Reflection.Metadata;
using System.Reflection.Metadata.Ecma335;
using System.Windows.Controls;
using System.Windows.Threading;
using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.Disassembler;
using ICSharpCode.Decompiler.IL;
@ -46,7 +48,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -46,7 +48,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<MethodDefEntry>();
MethodDefEntry scrollTargetEntry = default;
@ -63,9 +65,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -63,9 +65,8 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
if (scrollTargetEntry.RID > 1) {
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/ModuleRefTableTreeNode.cs

@ -41,7 +41,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -41,7 +41,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<ModuleRefEntry>();
@ -60,8 +60,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -60,8 +60,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/ModuleTableTreeNode.cs

@ -41,7 +41,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -41,7 +41,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<ModuleEntry>();
@ -54,8 +54,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -54,8 +54,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/NestedClassTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<NestedClassEntry>();
@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/ParamTableTreeNode.cs

@ -42,7 +42,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -42,7 +42,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<ParamEntry>();
@ -61,8 +61,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -61,8 +61,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/PropertyMapTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<PropertyMapEntry>();
@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/PropertyTableTreeNode.cs

@ -46,7 +46,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -46,7 +46,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<PropertyDefEntry>();
@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -65,8 +65,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/StandAloneSigTableTreeNode.cs

@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<StandAloneSigEntry>();
@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -62,8 +62,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/TypeDefTableTreeNode.cs

@ -47,7 +47,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -47,7 +47,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<TypeDefEntry>();
@ -66,8 +66,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -66,8 +66,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/TypeRefTableTreeNode.cs

@ -42,7 +42,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -42,7 +42,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<TypeRefEntry>();
@ -61,8 +61,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -61,8 +61,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

5
ILSpy/Metadata/CorTables/TypeSpecTableTreeNode.cs

@ -42,7 +42,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -42,7 +42,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var metadata = module.Metadata;
var list = new List<TypeSpecEntry>();
@ -61,8 +61,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -61,8 +61,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Content = view;
if (scrollTargetEntry.RID > 0) {
view.ScrollIntoView(scrollTargetEntry);
this.scrollTarget = default;
ScrollItemIntoView(view, scrollTargetEntry);
}
return true;

2
ILSpy/Metadata/DataDirectoriesTreeNode.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var dataGrid = Helpers.PrepareDataGrid(tabPage);
var dataGrid = Helpers.PrepareDataGrid(tabPage, this);
//dataGrid.AutoGenerateColumns = false;
//dataGrid.Columns.Add(new DataGridTextColumn { IsReadOnly = true, Header = "Name", Binding = new Binding("Name") });
//dataGrid.Columns.Add(new DataGridTextColumn { IsReadOnly = true, Header = "RVA", Binding = new Binding("RVA") { StringFormat = "X8" } });

9
ILSpy/Metadata/DataGridCustomTextColumn.cs

@ -35,9 +35,18 @@ namespace ICSharpCode.ILSpy.Metadata @@ -35,9 +35,18 @@ namespace ICSharpCode.ILSpy.Metadata
if (ToolTipBinding != null) {
textBox.MouseMove += TextBox_MouseMove;
}
textBox.GotFocus += TextBox_GotFocus;
return textBox;
}
private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
TextBox tb = (TextBox)sender;
var cell = tb.GetParent<DataGridCell>();
var row = cell.GetParent<DataGridRow>();
row.IsSelected = cell.IsSelected = true;
}
private void TextBox_MouseMove(object sender, MouseEventArgs e)
{
e.Handled = true;

2
ILSpy/Metadata/DosHeaderTreeNode.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -44,7 +44,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var view = Helpers.PrepareDataGrid(tabPage);
var view = Helpers.PrepareDataGrid(tabPage, this);
var reader = module.Reader.GetEntireImage().GetReader(0, 64);
var entries = new List<Entry>();

9
ILSpy/Metadata/FlagsFilterControl.xaml.cs

@ -76,9 +76,18 @@ namespace ICSharpCode.ILSpy.Metadata @@ -76,9 +76,18 @@ namespace ICSharpCode.ILSpy.Metadata
listBox.UnselectAll();
return;
}
if (e.AddedItems?.OfType<Flag>().Any(f => f.Value == -1) == true) {
Filter = new FlagsContentFilter(-1);
listBox.SelectAll();
return;
}
bool deselectAny = e.RemovedItems?.OfType<Flag>().Any(f => f.Value != -1) == true;
int mask = 0;
foreach (var item in listBox.SelectedItems.Cast<Flag>()) {
if (deselectAny && item.Value == -1)
continue;
mask |= item.Value;
}

19
ILSpy/Metadata/Helpers.cs

@ -35,16 +35,17 @@ using DataGridExtensions; @@ -35,16 +35,17 @@ using DataGridExtensions;
using ICSharpCode.Decompiler.Util;
using ICSharpCode.ILSpy.Controls;
using ICSharpCode.ILSpy.TextView;
using ICSharpCode.ILSpy.TreeNodes;
using ICSharpCode.ILSpy.ViewModels;
namespace ICSharpCode.ILSpy.Metadata
{
static class Helpers
{
public static DataGrid PrepareDataGrid(TabPageModel tabPage)
public static DataGrid PrepareDataGrid(TabPageModel tabPage, ILSpyTreeNode selectedNode)
{
if (!(tabPage.Content is DataGrid view && view.Name == "MetadataView")) {
view = new DataGrid() {
view = new MetaDataGrid() {
Name = "MetadataView",
GridLinesVisibility = DataGridGridLinesVisibility.None,
CanUserAddRows = false,
@ -55,7 +56,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -55,7 +56,8 @@ namespace ICSharpCode.ILSpy.Metadata
EnableRowVirtualization = true,
IsReadOnly = true,
SelectionMode = DataGridSelectionMode.Single,
SelectionUnit = DataGridSelectionUnit.FullRow,
SelectionUnit = DataGridSelectionUnit.CellOrRowHeader,
SelectedTreeNode = selectedNode,
CellStyle = new Style {
Setters = {
new Setter {
@ -72,6 +74,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -72,6 +74,7 @@ namespace ICSharpCode.ILSpy.Metadata
}
view.RowDetailsTemplateSelector = null;
view.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.Collapsed;
((MetaDataGrid)view).SelectedTreeNode = selectedNode;
if (!view.AutoGenerateColumns)
view.Columns.Clear();
view.AutoGenerateColumns = true;
@ -82,6 +85,16 @@ namespace ICSharpCode.ILSpy.Metadata @@ -82,6 +85,16 @@ namespace ICSharpCode.ILSpy.Metadata
return view;
}
class MetaDataGrid : DataGrid, IHaveState
{
public ILSpyTreeNode SelectedTreeNode { get; set; }
public ViewState GetState()
{
return new ViewState { DecompiledNodes = SelectedTreeNode == null ? null : new[] { SelectedTreeNode } };
}
}
private static void View_AutoGeneratedColumns(object sender, EventArgs e)
{
((DataGrid)sender).AutoGeneratedColumns -= View_AutoGeneratedColumns;

17
ILSpy/Metadata/MetadataTableTreeNode.cs

@ -19,6 +19,8 @@ @@ -19,6 +19,8 @@
using System;
using System.Reflection.Metadata;
using System.Reflection.Metadata.Ecma335;
using System.Windows.Controls;
using System.Windows.Threading;
using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.ILSpy.TextView;
using ICSharpCode.ILSpy.TreeNodes;
@ -44,5 +46,20 @@ namespace ICSharpCode.ILSpy.Metadata @@ -44,5 +46,20 @@ namespace ICSharpCode.ILSpy.Metadata
{
this.scrollTarget = MetadataTokens.GetRowNumber((EntityHandle)handle);
}
protected void ScrollItemIntoView(DataGrid view, object item)
{
view.Loaded += View_Loaded;
view.Dispatcher.BeginInvoke((Action)(() => view.SelectItem(item)), DispatcherPriority.Background);
}
private void View_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
DataGrid view = (DataGrid)sender;
var sv = view.FindVisualChild<ScrollViewer>();
sv.ScrollToVerticalOffset(scrollTarget - 1);
view.Loaded -= View_Loaded;
this.scrollTarget = default;
}
}
}

2
ILSpy/Metadata/OptionalHeaderTreeNode.cs

@ -46,7 +46,7 @@ namespace ICSharpCode.ILSpy.Metadata @@ -46,7 +46,7 @@ namespace ICSharpCode.ILSpy.Metadata
tabPage.Title = Text.ToString();
tabPage.SupportsLanguageSwitching = false;
var dataGrid = Helpers.PrepareDataGrid(tabPage);
var dataGrid = Helpers.PrepareDataGrid(tabPage, this);
dataGrid.RowDetailsTemplateSelector = new DllCharacteristicsDataTemplateSelector();
dataGrid.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.Visible;
dataGrid.AutoGenerateColumns = false;

Loading…
Cancel
Save