Skip to content

Commit 44aa41d

Browse files
Fix #2686: Introduce ToolPaneModel.AssociatedCommand to allow overriding Window-menu action.
1 parent 7e08c34 commit 44aa41d

File tree

4 files changed

+17
-7
lines changed

4 files changed

+17
-7
lines changed

ILSpy/Analyzers/AnalyzeCommand.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,24 +58,30 @@ bool IsValidReference(object reference)
5858

5959
public void Execute(TextViewContext context)
6060
{
61+
AnalyzerTreeView analyzerTreeView = MainWindow.Instance.AnalyzerTreeView;
62+
if (analyzerTreeView == null)
63+
{
64+
return;
65+
}
6166
if (context.SelectedTreeNodes != null)
6267
{
6368
foreach (IMemberTreeNode node in context.SelectedTreeNodes)
6469
{
65-
MainWindow.Instance.AnalyzerTreeView.Analyze(node.Member);
70+
analyzerTreeView.Analyze(node.Member);
6671
}
6772
}
6873
else if (context.Reference != null && context.Reference.Reference is IEntity entity)
6974
{
70-
MainWindow.Instance.AnalyzerTreeView.Analyze(entity);
75+
analyzerTreeView.Analyze(entity);
7176
}
7277
}
7378

7479
public override bool CanExecute(object parameter)
7580
{
76-
if (MainWindow.Instance.AnalyzerTreeView.IsKeyboardFocusWithin)
81+
AnalyzerTreeView analyzerTreeView = MainWindow.Instance.AnalyzerTreeView;
82+
if (analyzerTreeView != null && analyzerTreeView.IsKeyboardFocusWithin)
7783
{
78-
return MainWindow.Instance.AnalyzerTreeView.SelectedItems.OfType<object>().All(n => n is IMemberTreeNode);
84+
return analyzerTreeView.SelectedItems.OfType<object>().All(n => n is IMemberTreeNode);
7985
}
8086
else
8187
{
@@ -85,7 +91,8 @@ public override bool CanExecute(object parameter)
8591

8692
public override void Execute(object parameter)
8793
{
88-
if (MainWindow.Instance.AnalyzerTreeView.IsKeyboardFocusWithin)
94+
AnalyzerTreeView analyzerTreeView = MainWindow.Instance.AnalyzerTreeView;
95+
if (analyzerTreeView != null && analyzerTreeView.IsKeyboardFocusWithin)
8996
{
9097
foreach (IMemberTreeNode node in MainWindow.Instance.AnalyzerTreeView.SelectedItems.OfType<IMemberTreeNode>().ToArray())
9198
{

ILSpy/MainWindow.xaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public SharpTreeView AssemblyTreeView {
8989

9090
public AnalyzerTreeView AnalyzerTreeView {
9191
get {
92-
return FindResource("AnalyzerTreeView") as AnalyzerTreeView;
92+
return !IsLoaded ? null : FindResource("AnalyzerTreeView") as AnalyzerTreeView;
9393
}
9494
}
9595

@@ -428,7 +428,7 @@ void ToolsChanged(object sender, NotifyCollectionChangedEventArgs e)
428428
MenuItem CreateMenuItem(ToolPaneModel pane)
429429
{
430430
MenuItem menuItem = new MenuItem();
431-
menuItem.Command = new ToolPaneCommand(pane.ContentId);
431+
menuItem.Command = pane.AssociatedCommand ?? new ToolPaneCommand(pane.ContentId);
432432
menuItem.Header = pane.Title;
433433
menuItem.Tag = pane;
434434
var shortcutKey = pane.ShortcutKey;

ILSpy/ViewModels/AnalyzerPaneModel.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ private AnalyzerPaneModel()
3131
ContentId = PaneContentId;
3232
Title = Properties.Resources.Analyze;
3333
ShortcutKey = new KeyGesture(Key.R, ModifierKeys.Control);
34+
AssociatedCommand = ILSpyCommands.Analyze;
3435
}
3536

3637
public override DataTemplate Template => (DataTemplate)MainWindow.Instance.FindResource("AnalyzerPaneTemplate");

ILSpy/ViewModels/ToolPaneModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,7 @@ public virtual void Show()
3434
public KeyGesture ShortcutKey { get; protected set; }
3535

3636
public string Icon { get; protected set; }
37+
38+
public ICommand AssociatedCommand { get; set; }
3739
}
3840
}

0 commit comments

Comments
 (0)