Browse Source

fix #350 - Refresh item in context menu of assemblies

pull/703/head
Siegfried Pammer 9 years ago
parent
commit
6cdfc22f1c
  1. 20
      ILSpy/AssemblyList.cs
  2. 10
      ILSpy/MainWindow.xaml.cs
  3. 36
      ILSpy/TreeNodes/AssemblyTreeNode.cs

20
ILSpy/AssemblyList.cs

@ -178,8 +178,26 @@ namespace ICSharpCode.ILSpy @@ -178,8 +178,26 @@ namespace ICSharpCode.ILSpy
var index = this.assemblies.IndexOf(target);
var newAsm = new LoadedAssembly(this, file, stream);
newAsm.IsAutoLoaded = target.IsAutoLoaded;
lock (assemblies)
lock (assemblies) {
this.assemblies.Remove(target);
this.assemblies.Insert(index, newAsm);
}
return newAsm;
}
public LoadedAssembly ReloadAssembly(string file)
{
App.Current.Dispatcher.VerifyAccess();
file = Path.GetFullPath(file);
var target = this.assemblies.FirstOrDefault(asm => file.Equals(asm.FileName, StringComparison.OrdinalIgnoreCase));
if (target == null)
return null;
var index = this.assemblies.IndexOf(target);
var newAsm = new LoadedAssembly(this, file);
newAsm.IsAutoLoaded = target.IsAutoLoaded;
lock (assemblies) {
this.assemblies.Remove(target);
this.assemblies.Insert(index, newAsm);
}

10
ILSpy/MainWindow.xaml.cs

@ -532,6 +532,14 @@ namespace ICSharpCode.ILSpy @@ -532,6 +532,14 @@ namespace ICSharpCode.ILSpy
}
}
public void SelectNodes(IEnumerable<SharpTreeNode> nodes)
{
if (nodes.Any() && nodes.All(n => !n.AncestorsAndSelf().Any(a => a.IsHidden))) {
treeView.FocusNode(nodes.First());
treeView.SetSelectedNodes(nodes);
}
}
/// <summary>
/// Retrieves a node using the .ToString() representations of its ancestors.
/// </summary>
@ -557,7 +565,7 @@ namespace ICSharpCode.ILSpy @@ -557,7 +565,7 @@ namespace ICSharpCode.ILSpy
/// <summary>
/// Gets the .ToString() representation of the node's ancestors.
/// </summary>
public string[] GetPathForNode(SharpTreeNode node)
public static string[] GetPathForNode(SharpTreeNode node)
{
if (node == null)
return null;

36
ILSpy/TreeNodes/AssemblyTreeNode.cs

@ -318,7 +318,39 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -318,7 +318,39 @@ namespace ICSharpCode.ILSpy.TreeNodes
}
}
[ExportContextMenuEntryAttribute(Header = "_Load Dependencies")]
[ExportContextMenuEntry(Header = "_Reload", Icon = "images/Refresh.png")]
sealed class ReloadAssembly : IContextMenuEntry
{
public bool IsVisible(TextViewContext context)
{
if (context.SelectedTreeNodes == null)
return false;
return context.SelectedTreeNodes.All(n => n is AssemblyTreeNode);
}
public bool IsEnabled(TextViewContext context)
{
return true;
}
public void Execute(TextViewContext context)
{
if (context.SelectedTreeNodes == null)
return;
var paths = new List<string[]>();
using (context.TreeView.LockUpdates()) {
foreach (var node in context.SelectedTreeNodes) {
paths.Add(MainWindow.GetPathForNode(node));
var la = ((AssemblyTreeNode)node).LoadedAssembly;
la.AssemblyList.ReloadAssembly(la.FileName);
}
}
MainWindow.Instance.SelectNodes(paths.Select(p => MainWindow.Instance.FindNodeByPath(p, true)).ToArray());
MainWindow.Instance.RefreshDecompiledView();
}
}
[ExportContextMenuEntry(Header = "_Load Dependencies")]
sealed class LoadDependencies : IContextMenuEntry
{
public bool IsVisible(TextViewContext context)
@ -349,7 +381,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -349,7 +381,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
}
}
[ExportContextMenuEntryAttribute(Header = "_Add To Main List")]
[ExportContextMenuEntry(Header = "_Add To Main List")]
sealed class AddToMainList : IContextMenuEntry
{
public bool IsVisible(TextViewContext context)

Loading…
Cancel
Save