Browse Source

Merge pull request #3591 from miloush/history

Navigate visible history
pull/3013/head
Siegfried Pammer 3 weeks ago committed by GitHub
parent
commit
612c5bc032
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 9
      ICSharpCode.Decompiler/Metadata/MetadataFile.cs
  2. 4
      ICSharpCode.ILSpyX/TreeView/SharpTreeNode.cs
  3. 21
      ILSpy/AssemblyTree/AssemblyTreeModel.cs
  4. 13
      ILSpy/Commands/BrowseBackCommand.cs
  5. 12
      ILSpy/Commands/BrowseForwardCommand.cs
  6. 7
      ILSpy/Commands/SimpleCommand.cs
  7. 104
      ILSpy/Controls/MainToolBar.xaml.cs
  8. 2
      ILSpy/Metadata/CoffHeaderTreeNode.cs
  9. 2
      ILSpy/Metadata/DataDirectoriesTreeNode.cs
  10. 2
      ILSpy/Metadata/DebugDirectory/DebugDirectoryEntryTreeNode.cs
  11. 2
      ILSpy/Metadata/DebugDirectoryTreeNode.cs
  12. 2
      ILSpy/Metadata/DebugMetadataTablesTreeNode.cs
  13. 2
      ILSpy/Metadata/DosHeaderTreeNode.cs
  14. 2
      ILSpy/Metadata/MetadataHeapTreeNode.cs
  15. 2
      ILSpy/Metadata/MetadataTableTreeNode.cs
  16. 2
      ILSpy/Metadata/MetadataTablesTreeNode.cs
  17. 2
      ILSpy/Metadata/MetadataTreeNode.cs
  18. 2
      ILSpy/Metadata/OptionalHeaderTreeNode.cs
  19. 3
      ILSpy/NavigationHistory.cs
  20. 16
      ILSpy/NavigationState.cs
  21. 9
      ILSpy/Properties/Resources.Designer.cs
  22. 3
      ILSpy/Properties/Resources.resx
  23. 6
      ILSpy/Themes/ThemeManager.cs
  24. 2
      ILSpy/TreeNodes/AssemblyReferenceReferencedTypesTreeNode.cs
  25. 2
      ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs
  26. 2
      ILSpy/TreeNodes/BaseTypesEntryNode.cs
  27. 2
      ILSpy/TreeNodes/BaseTypesTreeNode.cs
  28. 2
      ILSpy/TreeNodes/DerivedTypesEntryNode.cs
  29. 2
      ILSpy/TreeNodes/DerivedTypesTreeNode.cs
  30. 6
      ILSpy/TreeNodes/EventTreeNode.cs
  31. 6
      ILSpy/TreeNodes/FieldTreeNode.cs
  32. 2
      ILSpy/TreeNodes/MemberReferenceTreeNode.cs
  33. 6
      ILSpy/TreeNodes/MethodTreeNode.cs
  34. 2
      ILSpy/TreeNodes/ModuleReferenceTreeNode.cs
  35. 6
      ILSpy/TreeNodes/PropertyTreeNode.cs
  36. 2
      ILSpy/TreeNodes/ReferenceFolderTreeNode.cs
  37. 2
      ILSpy/TreeNodes/ResourceListTreeNode.cs
  38. 2
      ILSpy/TreeNodes/TypeReferenceTreeNode.cs
  39. 3
      ILSpy/TreeNodes/TypeTreeNode.cs

9
ICSharpCode.Decompiler/Metadata/MetadataFile.cs

@ -73,9 +73,12 @@ namespace ICSharpCode.Decompiler.Metadata @@ -73,9 +73,12 @@ namespace ICSharpCode.Decompiler.Metadata
if (value == null)
{
var metadata = Metadata;
value = metadata.IsAssembly
? metadata.GetString(metadata.GetAssemblyDefinition().Name)
: metadata.GetString(metadata.GetModuleDefinition().Name);
if (metadata.IsAssembly)
value = metadata.GetString(metadata.GetAssemblyDefinition().Name);
else if (metadata.DebugMetadataHeader == null) // standalone debug metadata does not contain module table
value = metadata.GetString(metadata.GetModuleDefinition().Name);
else
value = "debug metadata";
value = LazyInit.GetOrSet(ref name, value);
}
return value;

4
ICSharpCode.ILSpyX/TreeView/SharpTreeNode.cs

@ -126,6 +126,10 @@ namespace ICSharpCode.ILSpyX.TreeView @@ -126,6 +126,10 @@ namespace ICSharpCode.ILSpyX.TreeView
get { return null; }
}
public virtual object? NavigationText {
get { return Text; }
}
public virtual object? Icon {
get { return null; }
}

21
ILSpy/AssemblyTree/AssemblyTreeModel.cs

@ -853,15 +853,24 @@ namespace ICSharpCode.ILSpy.AssemblyTree @@ -853,15 +853,24 @@ namespace ICSharpCode.ILSpy.AssemblyTree
#endregion
public void NavigateHistory(bool forward)
public void NavigateHistory(bool forward, NavigationState? toState = null)
{
try
{
TabPageModel tabPage = DockWorkspace.ActiveTabPage;
var state = tabPage.GetState();
if (state != null)
history.UpdateCurrent(new NavigationState(tabPage, state));
var newState = forward ? history.GoForward() : history.GoBack();
var currentState = tabPage.GetState();
if (currentState != null)
history.UpdateCurrent(new NavigationState(tabPage, currentState));
NavigationState newState;
do
{
newState = forward ? history.GoForward() : history.GoBack();
} while (newState != null && toState != null && toState != newState);
if (newState == null)
return;
navigatingToState = newState;
TabPageModel activeTabPage = newState.TabPage;
@ -884,6 +893,8 @@ namespace ICSharpCode.ILSpy.AssemblyTree @@ -884,6 +893,8 @@ namespace ICSharpCode.ILSpy.AssemblyTree
}
}
public NavigationState[] GetNavigateHistory(bool forward) => forward ? history.ForwardList : history.BackList;
public bool CanNavigateBack => history.CanNavigateBack;
public bool CanNavigateForward => history.CanNavigateForward;

13
ILSpy/Commands/BrowseBackCommand.cs

@ -16,7 +16,9 @@ @@ -16,7 +16,9 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System.Collections;
using System.Composition;
using System.Linq;
using System.Windows.Input;
using ICSharpCode.ILSpy.AssemblyTree;
@ -26,7 +28,7 @@ namespace ICSharpCode.ILSpy @@ -26,7 +28,7 @@ namespace ICSharpCode.ILSpy
{
[ExportToolbarCommand(ToolTip = nameof(Resources.Back), ToolbarIcon = "Images/Back", ToolbarCategory = nameof(Resources.Navigation), ToolbarOrder = 0)]
[Shared]
sealed class BrowseBackCommand : CommandWrapper
sealed class BrowseBackCommand : CommandWrapper, IProvideParameterList
{
readonly AssemblyTreeModel assemblyTreeModel;
@ -49,8 +51,15 @@ namespace ICSharpCode.ILSpy @@ -49,8 +51,15 @@ namespace ICSharpCode.ILSpy
if (assemblyTreeModel.CanNavigateBack)
{
e.Handled = true;
assemblyTreeModel.NavigateHistory(false);
assemblyTreeModel.NavigateHistory(false, e.Parameter as NavigationState);
}
}
public IEnumerable ParameterList => assemblyTreeModel.GetNavigateHistory(false).Reverse();
public object GetParameterText(object parameter)
{
return (parameter as NavigationState)?.NavigationText;
}
}
}

12
ILSpy/Commands/BrowseForwardCommand.cs

@ -16,7 +16,9 @@ @@ -16,7 +16,9 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System.Collections;
using System.Composition;
using System.Linq;
using System.Windows.Input;
using ICSharpCode.ILSpy.AssemblyTree;
@ -26,7 +28,7 @@ namespace ICSharpCode.ILSpy @@ -26,7 +28,7 @@ namespace ICSharpCode.ILSpy
{
[ExportToolbarCommand(ToolTip = nameof(Resources.Forward), ToolbarIcon = "Images/Forward", ToolbarCategory = nameof(Resources.Navigation), ToolbarOrder = 1)]
[Shared]
sealed class BrowseForwardCommand : CommandWrapper
sealed class BrowseForwardCommand : CommandWrapper, IProvideParameterList
{
private readonly AssemblyTreeModel assemblyTreeModel;
@ -49,9 +51,15 @@ namespace ICSharpCode.ILSpy @@ -49,9 +51,15 @@ namespace ICSharpCode.ILSpy
if (assemblyTreeModel.CanNavigateForward)
{
e.Handled = true;
assemblyTreeModel.NavigateHistory(true);
assemblyTreeModel.NavigateHistory(true, e.Parameter as NavigationState);
}
}
public IEnumerable ParameterList => assemblyTreeModel.GetNavigateHistory(true).Reverse();
public object GetParameterText(object parameter)
{
return (parameter as NavigationState)?.NavigationText;
}
}
}

7
ILSpy/Commands/SimpleCommand.cs

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections;
using System.Windows.Data;
using System.Windows.Input;
@ -41,4 +42,10 @@ namespace ICSharpCode.ILSpy @@ -41,4 +42,10 @@ namespace ICSharpCode.ILSpy
{
Binding ParameterBinding { get; }
}
public interface IProvideParameterList
{
IEnumerable ParameterList { get; }
object GetParameterText(object parameter);
}
}

104
ILSpy/Controls/MainToolBar.xaml.cs

@ -16,6 +16,8 @@ @@ -16,6 +16,8 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.ComponentModel;
using System.Composition;
using System.Linq;
using System.Windows;
@ -23,9 +25,11 @@ using System.Windows.Controls; @@ -23,9 +25,11 @@ using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using ICSharpCode.ILSpy.Themes;
using ICSharpCode.ILSpyX.TreeView;
using TomsToolbox.Composition;
@ -85,7 +89,8 @@ namespace ICSharpCode.ILSpy.Controls @@ -85,7 +89,8 @@ namespace ICSharpCode.ILSpy.Controls
}
}
static Button CreateToolbarItem(IExport<ICommand, IToolbarCommandMetadata> commandExport)
static UIElement CreateToolbarItem(IExport<ICommand, IToolbarCommandMetadata> commandExport)
{
var command = commandExport.Value;
@ -108,9 +113,106 @@ namespace ICSharpCode.ILSpy.Controls @@ -108,9 +113,106 @@ namespace ICSharpCode.ILSpy.Controls
parameterBinding.ParameterBinding);
}
if (command is IProvideParameterList parameterList)
{
toolbarItem.Margin = new Thickness(2, 0, 0, 0);
var dropDownPanel = new StackPanel { Orientation = Orientation.Horizontal };
var dropDownToggle = new ToggleButton {
Style = ThemeManager.Current.CreateToolBarToggleButtonStyle(),
Content = "▾",
Padding = new Thickness(0),
MinWidth = 0,
Margin = new Thickness(0, 0, 2, 0)
};
var contextMenu = new ContextMenu {
PlacementTarget = dropDownPanel,
Tag = command
};
ContextMenuService.SetPlacement(toolbarItem, PlacementMode.Bottom);
toolbarItem.ContextMenu = contextMenu;
toolbarItem.ContextMenuOpening += (_, _) =>
PrepareParameterList(contextMenu);
dropDownToggle.Checked += (_, _) => {
PrepareParameterList(contextMenu);
contextMenu.Placement = PlacementMode.Bottom;
contextMenu.SetCurrentValue(ContextMenu.IsOpenProperty, true);
};
BindingOperations.SetBinding(dropDownToggle, ToggleButton.IsCheckedProperty,
new Binding(nameof(contextMenu.IsOpen)) { Source = contextMenu });
BindingOperations.SetBinding(dropDownToggle, IsEnabledProperty,
new Binding(nameof(IsEnabled)) { Source = toolbarItem });
// When the toggle button is checked, clicking it to uncheck will dismiss the menu first
// which unchecks the toggle button via binding above and the click is used to open it again.
// This is a workaround to ignore the click to uncheck the already unchecked toggle button.
// We have to ensure the dismissing click is on the toggle button, otherwise the flag
// will not get cleared and menu will not open next time.
Mouse.AddPreviewMouseDownOutsideCapturedElementHandler(contextMenu, (_, e) => {
var point = e.GetPosition(dropDownToggle);
dropDownToggle.Tag = dropDownToggle.InputHitTest(point);
});
dropDownToggle.PreviewMouseLeftButtonDown += (_, e) => {
e.Handled = dropDownToggle.Tag != null;
dropDownToggle.Tag = null;
};
dropDownPanel.Children.Add(toolbarItem);
dropDownPanel.Children.Add(dropDownToggle);
return dropDownPanel;
}
return toolbarItem;
}
static void PrepareParameterList(ContextMenu menu)
{
const int maximumParameterListCount = 20;
var command = (ICommand)menu.Tag;
var parameterList = (IProvideParameterList)command;
menu.Items.Clear();
foreach (var parameter in parameterList.ParameterList)
{
MenuItem parameterItem = new MenuItem();
parameterItem.Command = CommandWrapper.Unwrap(command);
parameterItem.CommandParameter = parameter;
parameterItem.CommandTarget = menu.PlacementTarget;
parameterItem.InputGestureText = " ";
var headerPresenter = new ContentPresenter { RecognizesAccessKey = false };
parameterItem.Header = headerPresenter;
var header = parameterList.GetParameterText(parameter);
switch (header)
{
case SharpTreeNode node:
headerPresenter.Content = node.NavigationText;
if (node.Icon is ImageSource icon)
parameterItem.Icon = new Image {
Width = 16,
Height = 16,
Source = icon
};
break;
default:
headerPresenter.Content = header;
break;
}
menu.Items.Add(parameterItem);
if (menu.Items.Count >= maximumParameterListCount)
break;
}
}
void MainWindow_KeyDown(object sender, KeyEventArgs e)
{
if (e.Handled || e.KeyboardDevice.Modifiers != ModifierKeys.Alt || e.Key != Key.System)

2
ILSpy/Metadata/CoffHeaderTreeNode.cs

@ -43,6 +43,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -43,6 +43,8 @@ namespace ICSharpCode.ILSpy.Metadata
public override object Text => "COFF Header";
public override object NavigationText => $"{Text} ({module.Name})";
public override object Icon => Images.Header;
public override bool View(TabPageModel tabPage)

2
ILSpy/Metadata/DataDirectoriesTreeNode.cs

@ -35,6 +35,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -35,6 +35,8 @@ namespace ICSharpCode.ILSpy.Metadata
public override object Text => "Data Directories";
public override object NavigationText => $"{Text} ({module.Name})";
public override object Icon => Images.ListFolder;
public override object ExpandedIcon => Images.ListFolderOpen;

2
ILSpy/Metadata/DebugDirectory/DebugDirectoryEntryTreeNode.cs

@ -40,6 +40,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -40,6 +40,8 @@ namespace ICSharpCode.ILSpy.Metadata
override public object Text => entry.Type.ToString();
public override object NavigationText => $"{Text} ({module.Name})";
public override object Icon => Images.MetadataTable;
public override void Decompile(Language language, ITextOutput output, DecompilationOptions options)

2
ILSpy/Metadata/DebugDirectoryTreeNode.cs

@ -40,6 +40,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -40,6 +40,8 @@ namespace ICSharpCode.ILSpy.Metadata
public override object Text => "Debug Directory";
public override object NavigationText => $"{Text} ({module.Name})";
public override object Icon => Images.ListFolder;
public override object ExpandedIcon => Images.ListFolderOpen;

2
ILSpy/Metadata/DebugMetadataTablesTreeNode.cs

@ -37,6 +37,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -37,6 +37,8 @@ namespace ICSharpCode.ILSpy.Metadata
public override object Text => "Tables";
public override object NavigationText => $"{Text} ({metadataFile.Name})";
public override object Icon => Images.MetadataTableGroup;
protected override void LoadChildren()

2
ILSpy/Metadata/DosHeaderTreeNode.cs

@ -36,6 +36,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -36,6 +36,8 @@ namespace ICSharpCode.ILSpy.Metadata
public override object Text => "DOS Header";
public override object NavigationText => $"{Text} ({module.Name})";
public override object Icon => Images.Header;
public override bool View(TabPageModel tabPage)

2
ILSpy/Metadata/MetadataHeapTreeNode.cs

@ -33,6 +33,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -33,6 +33,8 @@ namespace ICSharpCode.ILSpy.Metadata
public HandleKind Kind { get; }
public override object NavigationText => $"{Text} ({metadataFile.Name})";
public override object Icon => Images.Heap;
public MetadataHeapTreeNode(HandleKind kind, MetadataFile metadataFile)

2
ILSpy/Metadata/MetadataTableTreeNode.cs

@ -39,6 +39,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -39,6 +39,8 @@ namespace ICSharpCode.ILSpy.Metadata
public override object Text => $"{(int)Kind:X2} {Kind} ({metadataFile.Metadata.GetTableRowCount(Kind)})";
public override object NavigationText => $"{(int)Kind:X2} {Kind} ({metadataFile.Name})";
public override object Icon => Images.MetadataTable;
public MetadataTableTreeNode(TableIndex table, MetadataFile metadataFile)

2
ILSpy/Metadata/MetadataTablesTreeNode.cs

@ -39,6 +39,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -39,6 +39,8 @@ namespace ICSharpCode.ILSpy.Metadata
public override object Text => "Tables";
public override object NavigationText => $"{Text} ({metadataFile.Name})";
public override object Icon => Images.MetadataTableGroup;
protected override void LoadChildren()

2
ILSpy/Metadata/MetadataTreeNode.cs

@ -45,6 +45,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -45,6 +45,8 @@ namespace ICSharpCode.ILSpy.Metadata
public override object Text => title;
public override object NavigationText => $"{Text} ({metadataFile.Name})";
public override object Icon => Images.Metadata;
public override bool View(TabPageModel tabPage)

2
ILSpy/Metadata/OptionalHeaderTreeNode.cs

@ -42,6 +42,8 @@ namespace ICSharpCode.ILSpy.Metadata @@ -42,6 +42,8 @@ namespace ICSharpCode.ILSpy.Metadata
public override object Text => "Optional Header";
public override object NavigationText => $"{Text} ({module.Name})";
public override object Icon => Images.Header;
public override bool View(ViewModels.TabPageModel tabPage)

3
ILSpy/NavigationHistory.cs

@ -34,6 +34,9 @@ namespace ICSharpCode.ILSpy @@ -34,6 +34,9 @@ namespace ICSharpCode.ILSpy
List<T> back = new List<T>();
List<T> forward = new List<T>();
public T[] BackList => back.ToArray();
public T[] ForwardList => forward.ToArray();
public bool CanNavigateBack {
get { return back.Count > 0; }
}

16
ILSpy/NavigationState.cs

@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using ICSharpCode.ILSpy.TextView;
using ICSharpCode.ILSpy.ViewModels;
@ -62,5 +63,20 @@ namespace ICSharpCode.ILSpy @@ -62,5 +63,20 @@ namespace ICSharpCode.ILSpy
return this.ViewState.Equals(other.ViewState);
}
public object NavigationText {
get {
if (this.treeNodes.Count == 1)
return this.treeNodes.First();
if (this.treeNodes.Count > 0)
return string.Join(", ", treeNodes.Select(tn => tn.NavigationText));
if (this.ViewState?.ViewedUri is Uri uri)
return uri;
return ToString();
}
}
}
}

9
ILSpy/Properties/Resources.Designer.cs generated

@ -2401,6 +2401,15 @@ namespace ICSharpCode.ILSpy.Properties { @@ -2401,6 +2401,15 @@ namespace ICSharpCode.ILSpy.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Referenced Types.
/// </summary>
public static string ReferencedTypes {
get {
return ResourceManager.GetString("ReferencedTypes", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Reference Name.
/// </summary>

3
ILSpy/Properties/Resources.resx

@ -824,6 +824,9 @@ If this does not solve the problem and your system supports long paths, you can @@ -824,6 +824,9 @@ If this does not solve the problem and your system supports long paths, you can
<data name="ReferenceName" xml:space="preserve">
<value>Reference Name</value>
</data>
<data name="ReferencedTypes" xml:space="preserve">
<value>Referenced Types</value>
</data>
<data name="References" xml:space="preserve">
<value>References</value>
</data>

6
ILSpy/Themes/ThemeManager.cs

@ -24,6 +24,7 @@ using System.ComponentModel; @@ -24,6 +24,7 @@ using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;
using ICSharpCode.AvalonEdit.Highlighting;
@ -81,6 +82,11 @@ namespace ICSharpCode.ILSpy.Themes @@ -81,6 +82,11 @@ namespace ICSharpCode.ILSpy.Themes
return new Style(typeof(Button), (Style)Application.Current.FindResource(ToolBar.ButtonStyleKey));
}
public Style CreateToolBarToggleButtonStyle()
{
return new Style(typeof(ToggleButton), (Style)Application.Current.FindResource(ToolBar.ToggleButtonStyleKey));
}
public void ApplyHighlightingColors(IHighlightingDefinition highlightingDefinition)
{
// Make sure all color values are taken from the theme

2
ILSpy/TreeNodes/AssemblyReferenceReferencedTypesTreeNode.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -40,7 +40,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
this.LazyLoading = true;
}
public override object Text => $"Referenced Types ({r.TypeReferences.Length + r.ExportedTypes.Length})";
public override object Text => $"{Properties.Resources.ReferencedTypes} ({r.TypeReferences.Length + r.ExportedTypes.Length})";
public override object Icon => Images.MetadataTable;
protected override void LoadChildren()

2
ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs

@ -53,6 +53,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -53,6 +53,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
get { return Language.EscapeName(r.Name) + GetSuffixString(r.Handle); }
}
public override object NavigationText => $"{Text} ({Properties.Resources.References})";
public override object Icon => ImagesProvider.Assembly;
public override bool ShowExpander {

2
ILSpy/TreeNodes/BaseTypesEntryNode.cs

@ -36,6 +36,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -36,6 +36,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text => this.Language.TypeToString(type, includeNamespace: true);
public override object NavigationText => $"{Text} ({Properties.Resources.BaseTypes})";
public override object Icon => type.Kind == TypeKind.Interface ? Images.Interface : Images.Class;
public override void ActivateItem(IPlatformRoutedEventArgs e)

2
ILSpy/TreeNodes/BaseTypesTreeNode.cs

@ -46,6 +46,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -46,6 +46,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text => Properties.Resources.BaseTypes;
public override object NavigationText => $"{Text} ({this.Language.TypeToString(type, includeNamespace: true)})";
public override object Icon => Images.SuperTypes;
protected override void LoadChildren()

2
ILSpy/TreeNodes/DerivedTypesEntryNode.cs

@ -47,6 +47,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -47,6 +47,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
get { return Language.TypeToString(type, includeNamespace: true) + GetSuffixString(type.MetadataToken); }
}
public override object NavigationText => $"{Text} ({Properties.Resources.DerivedTypes})";
public override object Icon => TypeTreeNode.GetIcon(type);
public override FilterResult Filter(LanguageSettings settings)

2
ILSpy/TreeNodes/DerivedTypesTreeNode.cs

@ -46,6 +46,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -46,6 +46,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text => Resources.DerivedTypes;
public override object NavigationText => $"{Text} ({this.Language.TypeToString(type, includeNamespace: true)})";
public override object Icon => Images.SubTypes;
protected override void LoadChildren()

6
ILSpy/TreeNodes/EventTreeNode.cs

@ -49,6 +49,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -49,6 +49,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text => GetText(GetEventDefinition(), this.Language) + GetSuffixString(EventDefinition);
public override object NavigationText => GetText(GetEventDefinition(), Language, includeDeclaringTypeName: true);
private IEvent GetEventDefinition()
{
return ((MetadataModule)EventDefinition.ParentModule?.MetadataFile
@ -56,9 +58,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -56,9 +58,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
?.MainModule)?.GetDefinition((EventDefinitionHandle)EventDefinition.MetadataToken) ?? EventDefinition;
}
public static object GetText(IEvent ev, Language language)
public static object GetText(IEvent ev, Language language, bool includeDeclaringTypeName = false)
{
return language.EventToString(ev, false, false, false);
return language.EventToString(ev, includeDeclaringTypeName, false, false);
}
public override object Icon => GetIcon(GetEventDefinition());

6
ILSpy/TreeNodes/FieldTreeNode.cs

@ -41,6 +41,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -41,6 +41,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text => GetText(GetFieldDefinition(), Language) + GetSuffixString(FieldDefinition);
public override object NavigationText => GetText(GetFieldDefinition(), Language, includeDeclaringTypeName: true);
private IField GetFieldDefinition()
{
return ((MetadataModule)FieldDefinition.ParentModule?.MetadataFile
@ -48,9 +50,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -48,9 +50,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
?.MainModule)?.GetDefinition((FieldDefinitionHandle)FieldDefinition.MetadataToken) ?? FieldDefinition;
}
public static object GetText(IField field, Language language)
public static object GetText(IField field, Language language, bool includeDeclaringTypeName = false)
{
return language.FieldToString(field, includeDeclaringTypeName: false, includeNamespace: false, includeNamespaceOfDeclaringTypeName: false);
return language.FieldToString(field, includeDeclaringTypeName, includeNamespace: false, includeNamespaceOfDeclaringTypeName: false);
}
public override object Icon => GetIcon(GetFieldDefinition());

2
ILSpy/TreeNodes/MemberReferenceTreeNode.cs

@ -49,6 +49,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -49,6 +49,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text => Signature + GetSuffixString(r.Handle);
public override object NavigationText => $"{Text} ({Properties.Resources.ReferencedTypes})";
public override object Icon => r.MemberReferenceKind switch {
MemberReferenceKind.Method => Images.MethodReference,
MemberReferenceKind.Field => Images.FieldReference,

6
ILSpy/TreeNodes/MethodTreeNode.cs

@ -41,6 +41,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -41,6 +41,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text => GetText(GetMethodDefinition(), Language) + GetSuffixString(MethodDefinition);
public override object NavigationText => GetText(GetMethodDefinition(), Language, includeDeclaringTypeName: true);
private IMethod GetMethodDefinition()
{
return ((MetadataModule)MethodDefinition.ParentModule?.MetadataFile
@ -48,9 +50,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -48,9 +50,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
?.MainModule)?.GetDefinition((MethodDefinitionHandle)MethodDefinition.MetadataToken) ?? MethodDefinition;
}
public static object GetText(IMethod method, Language language)
public static object GetText(IMethod method, Language language, bool includeDeclaringTypeName = false)
{
return language.MethodToString(method, false, false, false);
return language.MethodToString(method, includeDeclaringTypeName, false, false);
}
public override object Icon => GetIcon(GetMethodDefinition());

2
ILSpy/TreeNodes/ModuleReferenceTreeNode.cs

@ -68,6 +68,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -68,6 +68,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
get { return moduleName + GetSuffixString(handle); }
}
public override object NavigationText => $"{Text} ({Properties.Resources.References})";
public override object Icon => Images.Library;
public override void ActivateItem(IPlatformRoutedEventArgs e)

6
ILSpy/TreeNodes/PropertyTreeNode.cs

@ -51,6 +51,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -51,6 +51,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text => GetText(GetPropertyDefinition(), Language) + GetSuffixString(PropertyDefinition);
public override object NavigationText => GetText(GetPropertyDefinition(), Language, includeDeclaringTypeName: true);
private IProperty GetPropertyDefinition()
{
return ((MetadataModule)PropertyDefinition.ParentModule?.MetadataFile
@ -58,9 +60,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -58,9 +60,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
?.MainModule)?.GetDefinition((PropertyDefinitionHandle)PropertyDefinition.MetadataToken) ?? PropertyDefinition;
}
public static object GetText(IProperty property, Language language)
public static object GetText(IProperty property, Language language, bool includeDeclaringTypeName = false)
{
return language.PropertyToString(property, false, false, false);
return language.PropertyToString(property, includeDeclaringTypeName, false, false);
}
public override object Icon => GetIcon(GetPropertyDefinition());

2
ILSpy/TreeNodes/ReferenceFolderTreeNode.cs

@ -44,6 +44,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -44,6 +44,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text => Resources.References;
public override object NavigationText => $"{Text} ({module.Name})";
public override object Icon => Images.ReferenceFolder;
protected override void LoadChildren()

2
ILSpy/TreeNodes/ResourceListTreeNode.cs

@ -41,6 +41,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -41,6 +41,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text => Resources._Resources;
public override object NavigationText => $"{Text} ({module.Name})";
public override object Icon => Images.FolderClosed;
public override object ExpandedIcon => Images.FolderOpen;

2
ILSpy/TreeNodes/TypeReferenceTreeNode.cs

@ -45,6 +45,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -45,6 +45,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text
=> Language.TypeToString(resolvedType, includeNamespace: false) + GetSuffixString(r.Handle);
public override object NavigationText => $"{Text} ({Properties.Resources.ReferencedTypes})";
public override object Icon => Images.TypeReference;
protected override void LoadChildren()

3
ILSpy/TreeNodes/TypeTreeNode.cs

@ -45,6 +45,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -45,6 +45,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override object Text => this.Language.TypeToString(GetTypeDefinition(), includeNamespace: false)
+ GetSuffixString(TypeDefinition.MetadataToken);
public override object NavigationText => this.Language.TypeToString(GetTypeDefinition(), includeNamespace: true)
+ GetSuffixString(TypeDefinition.MetadataToken);
private ITypeDefinition GetTypeDefinition()
{
return ((MetadataModule)ParentAssemblyNode.LoadedAssembly

Loading…
Cancel
Save