1+ // Copyright (c) 2025 AlphaSierraPapa for the SharpDevelop Team
2+ //
3+ // Permission is hereby granted, free of charge, to any person obtaining a copy of this
4+ // software and associated documentation files (the "Software"), to deal in the Software
5+ // without restriction, including without limitation the rights to use, copy, modify, merge,
6+ // publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
7+ // to whom the Software is furnished to do so, subject to the following conditions:
8+ //
9+ // The above copyright notice and this permission notice shall be included in all copies or
10+ // substantial portions of the Software.
11+ //
12+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
13+ // INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14+ // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
15+ // FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16+ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17+ // DEALINGS IN THE SOFTWARE.
18+
19+ using System . Composition ;
20+ using System . Threading . Tasks ;
21+
22+ using ICSharpCode . ILSpy . AssemblyTree ;
23+ using ICSharpCode . ILSpy . Docking ;
24+ using ICSharpCode . ILSpy . TreeNodes ;
25+ using ICSharpCode . ILSpy . ViewModels ;
26+ using ICSharpCode . ILSpy . Views ;
27+
28+ namespace ICSharpCode . ILSpy
29+ {
30+ [ ExportContextMenuEntry ( Header = "Compare..." , Order = 9999 ) ]
31+ [ Shared ]
32+ internal sealed class CompareContextMenuEntry ( AssemblyTreeModel assemblyTreeModel , DockWorkspace dockWorkspace ) : IContextMenuEntry
33+ {
34+ public void Execute ( TextViewContext context )
35+ {
36+ var left = ( ( AssemblyTreeNode ) context . SelectedTreeNodes [ 0 ] ) . LoadedAssembly ;
37+ var right = ( ( AssemblyTreeNode ) context . SelectedTreeNodes [ 1 ] ) . LoadedAssembly ;
38+
39+ var tabPage = dockWorkspace . AddTabPage ( ) ;
40+ CompareViewModel . Show ( tabPage , left , right , assemblyTreeModel ) ;
41+ }
42+
43+ public bool IsEnabled ( TextViewContext context )
44+ {
45+ return true ;
46+ }
47+
48+ public bool IsVisible ( TextViewContext context )
49+ {
50+ return context . SelectedTreeNodes is [ AssemblyTreeNode { LoadedAssembly . IsLoadedAsValidAssembly : true } , AssemblyTreeNode { LoadedAssembly . IsLoadedAsValidAssembly : true } ] ;
51+ }
52+ }
53+ }
0 commit comments