@@ -85,16 +85,16 @@ private void TreeOnItemMouseSelected(Vector2 mousePosition, long mouseButtonInde
8585
8686 var mouseButtonMask = ( MouseButtonMask ) mouseButtonIndex ;
8787
88- var genericMetadata = selected . GetMetadata ( 0 ) . As < RefCounted ? > ( ) ;
89- switch ( mouseButtonMask , genericMetadata )
88+ var sharpIdeNode = selected . SharpIdeNode ;
89+ switch ( mouseButtonMask , sharpIdeNode )
9090 {
91- case ( MouseButtonMask . Left , RefCountedContainer < SharpIdeFile > fileContainer ) : GodotGlobalEvents . Instance . FileSelected . InvokeParallelFireAndForget ( fileContainer . Item , null ) ; break ;
92- case ( MouseButtonMask . Right , RefCountedContainer < SharpIdeFile > fileContainer ) : OpenContextMenuFile ( fileContainer . Item ) ; break ;
93- case ( MouseButtonMask . Left , RefCountedContainer < SharpIdeProjectModel > { Item . IsInvalid : true } ) : GodotGlobalEvents . Instance . BottomPanelTabExternallySelected . InvokeParallelFireAndForget ( BottomPanelType . Problems ) ; break ;
94- case ( MouseButtonMask . Right , RefCountedContainer < SharpIdeProjectModel > projectContainer ) : OpenContextMenuProject ( projectContainer . Item ) ; break ;
95- case ( MouseButtonMask . Left , RefCountedContainer < SharpIdeFolder > ) : break ;
96- case ( MouseButtonMask . Right , RefCountedContainer < SharpIdeFolder > folderContainer ) : OpenContextMenuFolder ( folderContainer . Item , selected ) ; break ;
97- case ( MouseButtonMask . Left , RefCountedContainer < SharpIdeSolutionFolder > ) : break ;
91+ case ( MouseButtonMask . Left , SharpIdeFile file ) : GodotGlobalEvents . Instance . FileSelected . InvokeParallelFireAndForget ( file , null ) ; break ;
92+ case ( MouseButtonMask . Right , SharpIdeFile file ) : OpenContextMenuFile ( file ) ; break ;
93+ case ( MouseButtonMask . Left , SharpIdeProjectModel { IsInvalid : true } ) : GodotGlobalEvents . Instance . BottomPanelTabExternallySelected . InvokeParallelFireAndForget ( BottomPanelType . Problems ) ; break ;
94+ case ( MouseButtonMask . Right , SharpIdeProjectModel project ) : OpenContextMenuProject ( project ) ; break ;
95+ case ( MouseButtonMask . Left , SharpIdeFolder ) : break ;
96+ case ( MouseButtonMask . Right , SharpIdeFolder folder ) : OpenContextMenuFolder ( folder , selected ) ; break ;
97+ case ( MouseButtonMask . Left , SharpIdeSolutionFolder ) : break ;
9898 default : break ;
9999 }
100100 }
@@ -112,8 +112,8 @@ private async Task OnFileExternallySelected(SharpIdeFile file, SharpIdeFileLineP
112112 var selectedItem = _tree . GetSelected ( ) ;
113113 if ( selectedItem is not null )
114114 {
115- var selectedFile = selectedItem . GetTypedMetadata < RefCountedContainer < SharpIdeFile > ? > ( 0 ) ? . Item ;
116- if ( selectedFile == file )
115+ var selectedSharpIdeNode = selectedItem . SharpIdeNode ;
116+ if ( selectedSharpIdeNode == file )
117117 return ;
118118 }
119119 var item = FindItemRecursive ( _tree . GetRoot ( ) , file ) ;
@@ -132,7 +132,7 @@ await this.InvokeAsync(() =>
132132
133133 private static TreeItem ? FindItemRecursive ( TreeItem item , SharpIdeFile file )
134134 {
135- if ( item . GetTypedMetadata < RefCountedContainer < SharpIdeFile > ? > ( 0 ) ? . Item == file )
135+ if ( item . SharpIdeNode == file )
136136 return item ;
137137
138138 var child = item . GetFirstChild ( ) ;
@@ -201,7 +201,7 @@ private TreeItem CreateSlnFolderTreeItem(Tree tree, TreeItem parent, SharpIdeSol
201201 var folderItem = tree . CreateItem ( parent ) ;
202202 folderItem . SetText ( 0 , slnFolder . Name ) ;
203203 folderItem . SetIcon ( 0 , SlnFolderIcon ) ;
204- folderItem . SetMetadata ( 0 , new RefCountedContainer < SharpIdeSolutionFolder > ( slnFolder ) ) ;
204+ folderItem . SharpIdeNode = slnFolder ;
205205
206206 // Observe folder sub-collections
207207 var subFoldersView = slnFolder . Folders . CreateView ( y => new TreeItemContainer ( ) ) ;
@@ -245,7 +245,7 @@ private TreeItem CreateProjectTreeItem(Tree tree, TreeItem parent, SharpIdeProje
245245 var icon = projectModel . IsLoading ? LoadingProjectIcon : projectModel . IsInvalid ? UnloadedProjectIcon : CsprojIcon ;
246246 projectItem . SetIcon ( 0 , icon ) ;
247247 if ( projectModel . IsLoading is false && projectModel . IsInvalid ) projectItem . SetSuffix ( 0 , " · load failed" ) ;
248- projectItem . SetMetadata ( 0 , new RefCountedContainer < SharpIdeProjectModel > ( projectModel ) ) ;
248+ projectItem . SharpIdeNode = projectModel ;
249249
250250 projectModel . MsBuildProjectLoadState . SubscribeOnThreadPool ( ) . ObserveOnThreadPool ( ) . SubscribeAwait ( async ( loadState , ct ) =>
251251 {
@@ -298,7 +298,7 @@ private TreeItem CreateFolderTreeItem(Tree tree, TreeItem parent, SharpIdeFolder
298298 var folderItem = tree . CreateItem ( parent , newStartingIndex ) ;
299299 folderItem . SetText ( 0 , sharpIdeFolder . Name . Value ) ;
300300 folderItem . SetIcon ( 0 , FolderIcon ) ;
301- folderItem . SetMetadata ( 0 , new RefCountedContainer < SharpIdeFolder > ( sharpIdeFolder ) ) ;
301+ folderItem . SharpIdeNode = sharpIdeFolder ;
302302
303303 Observable . EveryValueChanged ( sharpIdeFolder , folder => folder . Name . Value )
304304 . Skip ( 1 ) . SubscribeOnThreadPool ( ) . ObserveOnThreadPool ( ) . SubscribeAwait ( async ( s , ct ) =>
@@ -350,7 +350,7 @@ private TreeItem CreateFileTreeItem(Tree tree, TreeItem parent, SharpIdeFile sha
350350 fileItem . SetIconsForFileExtension ( sharpIdeFile ) ;
351351 if ( GitColours . GetColorForGitFileStatus ( sharpIdeFile . GitStatus ) is { } notnullColor ) fileItem . SetCustomColor ( 0 , notnullColor ) ;
352352 else fileItem . ClearCustomColor ( 0 ) ;
353- fileItem . SetMetadata ( 0 , new RefCountedContainer < SharpIdeFile > ( sharpIdeFile ) ) ;
353+ fileItem . SharpIdeNode = sharpIdeFile ;
354354
355355 Observable . EveryValueChanged ( sharpIdeFile , file => file . Name . Value )
356356 . Skip ( 1 ) . SubscribeOnThreadPool ( ) . ObserveOnThreadPool ( ) . SubscribeAwait ( async ( s , ct ) =>
0 commit comments