2929using System . Reflection . Metadata . Ecma335 ;
3030using System . Threading . Tasks ;
3131using System . Windows ;
32- using System . Windows . Documents ;
3332using System . Windows . Input ;
3433using System . Windows . Navigation ;
3534using System . Windows . Threading ;
@@ -57,7 +56,7 @@ namespace ICSharpCode.ILSpy.AssemblyTree
5756{
5857 [ ExportToolPane ]
5958 [ Shared ]
60- public class AssemblyTreeModel : ToolPaneModel
59+ public partial class AssemblyTreeModel : ToolPaneModel
6160 {
6261 public const string PaneContentId = "assemblyListPane" ;
6362
@@ -74,36 +73,6 @@ public class AssemblyTreeModel : ToolPaneModel
7473
7574 private static Dispatcher UIThreadDispatcher => Application . Current . Dispatcher ;
7675
77- public AssemblyTreeModel ( SettingsService settingsService , LanguageService languageService , IExportProvider exportProvider )
78- {
79- this . settingsService = settingsService ;
80- this . languageService = languageService ;
81- this . exportProvider = exportProvider ;
82-
83- Title = Resources . Assemblies ;
84- ContentId = PaneContentId ;
85- IsCloseable = false ;
86- ShortcutKey = new KeyGesture ( Key . F6 ) ;
87-
88- MessageBus < NavigateToReferenceEventArgs > . Subscribers += JumpToReference ;
89- MessageBus < SettingsChangedEventArgs > . Subscribers += ( sender , e ) => Settings_PropertyChanged ( sender , e ) ;
90- MessageBus < ApplySessionSettingsEventArgs > . Subscribers += ApplySessionSettings ;
91- MessageBus < ActiveTabPageChangedEventArgs > . Subscribers += ActiveTabPageChanged ;
92- MessageBus < TabPagesCollectionChangedEventArgs > . Subscribers += ( _ , e ) => history . RemoveAll ( s => ! DockWorkspace . TabPages . Contains ( s . TabPage ) ) ;
93- MessageBus < ResetLayoutEventArgs > . Subscribers += ResetLayout ;
94- MessageBus < NavigateToEventArgs > . Subscribers += ( _ , e ) => NavigateTo ( e . Request , e . InNewTabPage ) ;
95- MessageBus < MainWindowLoadedEventArgs > . Subscribers += ( _ , _ ) => {
96- Initialize ( ) ;
97- Show ( ) ;
98- } ;
99-
100- EventManager . RegisterClassHandler ( typeof ( Window ) , Hyperlink . RequestNavigateEvent , new RequestNavigateEventHandler ( ( _ , e ) => NavigateTo ( e ) ) ) ;
101-
102- refreshThrottle = new ( DispatcherPriority . Background , RefreshInternal ) ;
103-
104- AssemblyList = settingsService . CreateEmptyAssemblyList ( ) ;
105- }
106-
10776 private void Settings_PropertyChanged ( object ? sender , PropertyChangedEventArgs e )
10877 {
10978 if ( sender is SessionSettings sessionSettings )
@@ -161,6 +130,9 @@ public SharpTreeNode[] SelectedItems {
161130 var oldSelection = selectedItems ;
162131 selectedItems = value ;
163132 OnPropertyChanged ( ) ;
133+ #if CROSS_PLATFORM
134+ OnPropertyChanged ( nameof ( SelectedItem ) ) ;
135+ #endif
164136 TreeView_SelectionChanged ( oldSelection , selectedItems ) ;
165137 }
166138 }
@@ -494,24 +466,6 @@ private void assemblyList_CollectionChanged(object? sender, NotifyCollectionChan
494466 MessageBus . Send ( this , new CurrentAssemblyListChangedEventArgs ( e ) ) ;
495467 }
496468
497- private static void LoadInitialAssemblies ( AssemblyList assemblyList )
498- {
499- // Called when loading an empty assembly list; so that
500- // the user can see something initially.
501- System . Reflection . Assembly [ ] initialAssemblies = {
502- typeof ( object ) . Assembly ,
503- typeof ( Uri ) . Assembly ,
504- typeof ( System . Linq . Enumerable ) . Assembly ,
505- typeof ( System . Xml . XmlDocument ) . Assembly ,
506- typeof ( System . Windows . Markup . MarkupExtension ) . Assembly ,
507- typeof ( System . Windows . Rect ) . Assembly ,
508- typeof ( System . Windows . UIElement ) . Assembly ,
509- typeof ( System . Windows . FrameworkElement ) . Assembly
510- } ;
511- foreach ( System . Reflection . Assembly asm in initialAssemblies )
512- assemblyList . OpenAssembly ( asm . Location ) ;
513- }
514-
515469 public AssemblyTreeNode ? FindAssemblyNode ( LoadedAssembly asm )
516470 {
517471 return assemblyListTreeNode ? . FindAssemblyNode ( asm ) ;
@@ -542,10 +496,16 @@ public void SelectNode(SharpTreeNode? node, bool inNewTabPage = false)
542496 }
543497 else
544498 {
499+ #if CROSS_PLATFORM
500+ ExpandAncestors ( node ) ;
501+ #endif
545502 activeView ? . ScrollIntoView ( node ) ;
546503 SelectedItem = node ;
547504
548505 UIThreadDispatcher . BeginInvoke ( DispatcherPriority . Background , ( ) => {
506+ #if CROSS_PLATFORM
507+ SelectedItem = node ;
508+ #endif
549509 activeView ? . ScrollIntoView ( node ) ;
550510 } ) ;
551511 }
@@ -1011,6 +971,15 @@ private IEnumerable<SharpTreeNode> GetTopLevelSelection()
1011971 return selection . Where ( item => item . Ancestors ( ) . All ( a => ! selectionHash . Contains ( a ) ) ) ;
1012972 }
1013973
974+ void ExpandAncestors ( SharpTreeNode node )
975+ {
976+ foreach ( var ancestor in node . Ancestors ( ) . Reverse ( ) )
977+ {
978+ ancestor . EnsureLazyChildren ( ) ;
979+ ancestor . IsExpanded = true ;
980+ }
981+ }
982+
1014983 public void SetActiveView ( AssemblyListPane activeView )
1015984 {
1016985 this . activeView = activeView ;
0 commit comments