|
|
|
@ -46,8 +46,7 @@ namespace ICSharpCode.ILSpy
@@ -46,8 +46,7 @@ namespace ICSharpCode.ILSpy
|
|
|
|
|
/// </summary>
|
|
|
|
|
partial class MainWindow : Window |
|
|
|
|
{ |
|
|
|
|
NavigationHistory<Tuple<List<SharpTreeNode>, DecompilerTextViewState>> history = |
|
|
|
|
new NavigationHistory<Tuple<List<SharpTreeNode>, DecompilerTextViewState>>(); |
|
|
|
|
NavigationHistory<NavigationState> history = new NavigationHistory<NavigationState>(); |
|
|
|
|
ILSpySettings spySettings; |
|
|
|
|
SessionSettings sessionSettings; |
|
|
|
|
AssemblyListManager assemblyListManager; |
|
|
|
@ -334,7 +333,7 @@ namespace ICSharpCode.ILSpy
@@ -334,7 +333,7 @@ namespace ICSharpCode.ILSpy
|
|
|
|
|
{ |
|
|
|
|
if (e.OldItems != null) |
|
|
|
|
foreach (LoadedAssembly asm in e.OldItems) |
|
|
|
|
history.RemoveAll(n => n.Item1.Any(nd => nd.AncestorsAndSelf().OfType<AssemblyTreeNode>().Any(a => a.LoadedAssembly == asm))); |
|
|
|
|
history.RemoveAll(n => n.TreeNodes.Any(nd => nd.AncestorsAndSelf().OfType<AssemblyTreeNode>().Any(a => a.LoadedAssembly == asm))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void LoadInitialAssemblies() |
|
|
|
@ -382,12 +381,9 @@ namespace ICSharpCode.ILSpy
@@ -382,12 +381,9 @@ namespace ICSharpCode.ILSpy
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#region Node Selection
|
|
|
|
|
internal void SelectNode(SharpTreeNode obj, bool recordNavigationInHistory = true) |
|
|
|
|
internal void SelectNode(SharpTreeNode obj) |
|
|
|
|
{ |
|
|
|
|
if (obj != null) { |
|
|
|
|
SharpTreeNode oldNode = treeView.SelectedItem as SharpTreeNode; |
|
|
|
|
if (oldNode != null && recordNavigationInHistory) |
|
|
|
|
history.Record(Tuple.Create(treeView.SelectedItems.OfType<SharpTreeNode>().ToList(), decompilerTextView.GetState())); |
|
|
|
|
// Set both the selection and focus to ensure that keyboard navigation works as expected.
|
|
|
|
|
treeView.FocusNode(obj); |
|
|
|
|
treeView.SelectedItem = obj; |
|
|
|
@ -507,11 +503,14 @@ namespace ICSharpCode.ILSpy
@@ -507,11 +503,14 @@ namespace ICSharpCode.ILSpy
|
|
|
|
|
|
|
|
|
|
private bool ignoreDecompilationRequests; |
|
|
|
|
|
|
|
|
|
private void DecompileSelectedNodes(DecompilerTextViewState state = null) |
|
|
|
|
private void DecompileSelectedNodes(DecompilerTextViewState state = null, bool recordHistory = true) |
|
|
|
|
{ |
|
|
|
|
if (ignoreDecompilationRequests) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
if (recordHistory) |
|
|
|
|
history.Record(new NavigationState(treeView.SelectedItems.OfType<SharpTreeNode>(), decompilerTextView.GetState())); |
|
|
|
|
|
|
|
|
|
if (treeView.SelectedItems.Count == 1) { |
|
|
|
|
ILSpyTreeNode node = treeView.SelectedItem as ILSpyTreeNode; |
|
|
|
|
if (node != null && node.View(decompilerTextView)) |
|
|
|
@ -584,21 +583,20 @@ namespace ICSharpCode.ILSpy
@@ -584,21 +583,20 @@ namespace ICSharpCode.ILSpy
|
|
|
|
|
|
|
|
|
|
void NavigateHistory(bool forward) |
|
|
|
|
{ |
|
|
|
|
var currentSelection = treeView.SelectedItems.OfType<SharpTreeNode>().ToList(); |
|
|
|
|
var state = decompilerTextView.GetState(); |
|
|
|
|
var combinedState = Tuple.Create(currentSelection, state); |
|
|
|
|
var newState = forward ? history.GoForward(combinedState) : history.GoBack(combinedState); |
|
|
|
|
var combinedState = new NavigationState(treeView.SelectedItems.OfType<SharpTreeNode>(), decompilerTextView.GetState()); |
|
|
|
|
history.Record(combinedState, replace: true, clearForward: false); |
|
|
|
|
var newState = forward ? history.GoForward() : history.GoBack(); |
|
|
|
|
|
|
|
|
|
ignoreDecompilationRequests = true; |
|
|
|
|
treeView.SelectedItems.Clear(); |
|
|
|
|
foreach (var node in newState.Item1) |
|
|
|
|
foreach (var node in newState.TreeNodes) |
|
|
|
|
{ |
|
|
|
|
treeView.SelectedItems.Add(node); |
|
|
|
|
} |
|
|
|
|
if (newState.Item1.Count > 0) |
|
|
|
|
treeView.FocusNode(newState.Item1[0]); |
|
|
|
|
if (newState.TreeNodes.Any()) |
|
|
|
|
treeView.FocusNode(newState.TreeNodes.First()); |
|
|
|
|
ignoreDecompilationRequests = false; |
|
|
|
|
DecompileSelectedNodes(newState.Item2); |
|
|
|
|
DecompileSelectedNodes(newState.ViewState, false); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
@ -655,4 +653,4 @@ namespace ICSharpCode.ILSpy
@@ -655,4 +653,4 @@ namespace ICSharpCode.ILSpy
|
|
|
|
|
analyzerRow.Height = new GridLength(0); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|