@@ -15,7 +15,7 @@ class MainWindow : Window
1515{
1616 private const string InstallUnityUrl = "https://unity.com/releases/editor/archive" ;
1717
18- private static MainWindow s_instance ;
18+ public static MainWindow Instance { get ; private set ; }
1919 private static ListBox s_unityInstallationsParent ;
2020
2121 private static ListBox s_unityInstalltionSearchPathsParent ;
@@ -30,14 +30,16 @@ class MainWindow : Window
3030 private static MenuItem s_removeFromListMenuItem ;
3131 private static MenuItem s_revealInFileExplorerMenuItem ;
3232 private static MenuItem s_openInDifferentVersionMenuItem ;
33- private static CheckBox s_transparentCheckbox ;
33+
3434 private static CheckBox s_acrylicCheckbox ;
35+ private static CheckBox s_transparentCheckbox ;
3536 private static DockPanel s_transparentPanel ;
3637 private static Slider s_backgroundBlurIntensitySlider ;
38+ private static CheckBox s_closeAfterOpenProjectCheckbox ;
3739
3840 public MainWindow ( object data )
3941 {
40- s_instance = this ;
42+ Instance = this ;
4143 DataContext = data ;
4244 Title = "UnityHubNative.Net" ;
4345 Content = CreateContent ( ) ;
@@ -179,7 +181,7 @@ private static void ReloadEverything()
179181 Header = "_Close Window" ,
180182 HotKey = new ( Key . W , KeyModifiers . Control ) ,
181183 InputGesture = new ( Key . W , KeyModifiers . Control )
182- } . OnClick ( static ( ) => s_instance . Close ( ) ) ,
184+ } . OnClick ( static ( ) => Instance . Close ( ) ) ,
183185 new MenuItem
184186 {
185187 Header = "_About UnityHubNative.Net" ,
@@ -436,17 +438,58 @@ private static void ReloadEverything()
436438 } . OnValueChanged ( OnAcrylicIntensitySliderValueChanged ) . SetDock ( Dock . Right )
437439 ] ) . SetDock ( Dock . Top )
438440 }
441+ ] ) ,
442+ new SettingsExpander
443+ {
444+ Header = new DockPanel
445+ {
446+ LastChildFill = false
447+ } . AddChildren
448+ ( [
449+ new TextBlock
450+ {
451+ Text = "Behaviour" ,
452+ VerticalAlignment = VerticalAlignment . Center ,
453+ } . SetDock ( Dock . Left )
454+ ] ) ,
455+ } . SetDock ( Dock . Top ) . AddItems
456+ ( [
457+ new SettingsExpanderItem
458+ {
459+ Content = new DockPanel
460+ {
461+ LastChildFill = false
462+ } . AddChildren
463+ ( [
464+ new TextBlock
465+ {
466+ Text = "Close after opening a project" ,
467+ VerticalAlignment = VerticalAlignment . Center ,
468+ } . SetDock ( Dock . Left ) ,
469+ s_closeAfterOpenProjectCheckbox = new CheckBox
470+ {
471+ IsChecked = UnityHubNativeNetApp . Config . closeAfterProjectOpen ,
472+ VerticalAlignment = VerticalAlignment . Center ,
473+ } . OnCheckChanged ( OnCloseAfterOpenProjectCheckboxChanged ) . SetDock ( Dock . Right )
474+ ] )
475+ } . SetTooltip ( "If checked, the app will close after opening a project" )
439476 ] )
440477 ] )
441478 }
442479 ] )
443480 ] )
444481 ] ) ;
445482
483+ private static void OnCloseAfterOpenProjectCheckboxChanged ( )
484+ {
485+ UnityHubNativeNetApp . Config . closeAfterProjectOpen = ! UnityHubNativeNetApp . Config . closeAfterProjectOpen ;
486+ UnityHubNativeNetApp . SaveConfig ( UnityHubNativeNetApp . Config ) ;
487+ }
488+
446489 private static void OnAcrylicIntensitySliderValueChanged ( )
447490 {
448491 UnityHubNativeNetApp . Config . blurIntensity = ( float ) s_backgroundBlurIntensitySlider . Value ;
449- s_instance . SetupBackground ( ) ;
492+ Instance . SetupBackground ( ) ;
450493 UnityHubNativeNetApp . SaveConfig ( UnityHubNativeNetApp . Config ) ;
451494 }
452495
@@ -487,8 +530,7 @@ private static void OnUnityProjectListSubmitted()
487530 {
488531 if ( ! IsAnyProjectSelected ( ) )
489532 return ;
490- UnityHubUtils . UnityProjects [ GetUnityProjectSelectedIndex ( ) ] . OpenProject ( ) ;
491-
533+ ( ( UnityProjectView ) s_unityProjectsParent . Items [ GetUnityProjectSelectedIndex ( ) ] ! ) . OpenProject ( ) ;
492534 }
493535
494536 private static void RemoveSelectedUnitySearchPath ( Button button , RoutedEventArgs args )
@@ -532,7 +574,7 @@ private static async void AddNewUnitySearchPath()
532574 {
533575 try
534576 {
535- var paths = await s_instance . StorageProvider . OpenFolderPickerAsync ( new FolderPickerOpenOptions
577+ var paths = await Instance . StorageProvider . OpenFolderPickerAsync ( new FolderPickerOpenOptions
536578 {
537579 AllowMultiple = true ,
538580 Title = "Pick Folder to search for Unity Installations"
@@ -560,7 +602,7 @@ private static async void AddNewUnitySearchPath()
560602 catch ( Exception ex )
561603 {
562604 Debug . WriteLine ( $ "{ ex . Message } \n { ex . StackTrace } ") ;
563- _ = MessageBoxManager . GetMessageBoxStandard ( "Error" , ex . Message , MsBox . Avalonia . Enums . ButtonEnum . Ok , MsBox . Avalonia . Enums . Icon . Error ) . ShowWindowDialogAsync ( s_instance ) ;
605+ _ = MessageBoxManager . GetMessageBoxStandard ( "Error" , ex . Message , MsBox . Avalonia . Enums . ButtonEnum . Ok , MsBox . Avalonia . Enums . Icon . Error ) . ShowWindowDialogAsync ( Instance ) ;
564606 }
565607 }
566608
@@ -578,7 +620,7 @@ private static async void OnAddExistingProjectClicked()
578620 {
579621 try
580622 {
581- var paths = await s_instance . StorageProvider . OpenFolderPickerAsync ( new ( )
623+ var paths = await Instance . StorageProvider . OpenFolderPickerAsync ( new ( )
582624 {
583625 AllowMultiple = true ,
584626 Title = "Select the folder(s) containing the Unity Project"
@@ -592,7 +634,7 @@ private static async void OnAddExistingProjectClicked()
592634 continue ;
593635 if ( UnityHubUtils . UnityProjects . Any ( p => p . path == folder ) )
594636 {
595- _ = MessageBoxManager . GetMessageBoxStandard ( $ "Project \" { folder } \" has already been added.", "Cannot add project" , MsBox . Avalonia . Enums . ButtonEnum . Ok , MsBox . Avalonia . Enums . Icon . Info ) . ShowWindowDialogAsync ( s_instance ) ;
637+ _ = MessageBoxManager . GetMessageBoxStandard ( $ "Project \" { folder } \" has already been added.", "Cannot add project" , MsBox . Avalonia . Enums . ButtonEnum . Ok , MsBox . Avalonia . Enums . Icon . Info ) . ShowWindowDialogAsync ( Instance ) ;
596638 continue ;
597639 }
598640 bool dirty = false ;
@@ -611,15 +653,15 @@ private static async void OnAddExistingProjectClicked()
611653 }
612654 catch ( Exception ex )
613655 {
614- _ = MessageBoxManager . GetMessageBoxStandard ( "Error" , ex . Message , MsBox . Avalonia . Enums . ButtonEnum . Ok , MsBox . Avalonia . Enums . Icon . Error ) . ShowWindowDialogAsync ( s_instance ) ;
656+ _ = MessageBoxManager . GetMessageBoxStandard ( "Error" , ex . Message , MsBox . Avalonia . Enums . ButtonEnum . Ok , MsBox . Avalonia . Enums . Icon . Error ) . ShowWindowDialogAsync ( Instance ) ;
615657 Debug . WriteLine ( $ "{ ex . Message } \n { ex . StackTrace } ") ;
616658 }
617659 }
618660
619661 private static void OnOpenWithClicked ( )
620662 {
621663 var dialogue = new OpenWithDialogue ( UnityHubUtils . UnityProjects [ GetUnityProjectSelectedIndex ( ) ] ) ;
622- dialogue . ShowDialog ( s_instance ) ;
664+ dialogue . ShowDialog ( Instance ) ;
623665 }
624666
625667 private static void OnCreateNewProjectClicked ( ) => ShowTbiDialogue ( ) ;
@@ -634,7 +676,7 @@ private static void OnRemoveProjectFromListClicked()
634676
635677 private static void OnRevealProjectClicked ( ) => OsUtils . OpenExplorer ( UnityHubUtils . UnityProjects [ GetUnityProjectSelectedIndex ( ) ] . path ) ;
636678
637- private static void OnAboutClicked ( MenuItem item , RoutedEventArgs args ) => new AboutDialogue ( ) . ShowDialog ( s_instance ) ;
679+ private static void OnAboutClicked ( MenuItem item , RoutedEventArgs args ) => new AboutDialogue ( ) . ShowDialog ( Instance ) ;
638680
639681 private static void UpdateUnityVersionViews ( )
640682 {
@@ -679,7 +721,7 @@ private static void UpdateUnityProjectViews()
679721
680722 private static void ShowTbiDialogue ( )
681723 {
682- _ = MessageBoxManager . GetMessageBoxStandard ( "To be implemented" , "Not implemented yet" , MsBox . Avalonia . Enums . ButtonEnum . Ok , MsBox . Avalonia . Enums . Icon . Warning ) . ShowWindowDialogAsync ( s_instance ) ;
724+ _ = MessageBoxManager . GetMessageBoxStandard ( "To be implemented" , "Not implemented yet" , MsBox . Avalonia . Enums . ButtonEnum . Ok , MsBox . Avalonia . Enums . Icon . Warning ) . ShowWindowDialogAsync ( Instance ) ;
683725 }
684726}
685727
0 commit comments