Skip to content

Commit 122389f

Browse files
version 0.3 & unity version selection added to main unity project view
1 parent 16ebc32 commit 122389f

10 files changed

+144
-103
lines changed

UnityHubNative.Net/MainWindow.cs

Lines changed: 57 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

UnityHubNative.Net/Manifest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ namespace UnityHubNative.Net;
22

33
static class Manifest
44
{
5-
public const string Version = "v0.2";
5+
public const string Version = "v0.3";
66
}

UnityHubNative.Net/UnityHubNative.Net.csproj.Backup.tmp

Lines changed: 0 additions & 67 deletions
This file was deleted.

UnityHubNative.Net/UnityHubNativeNetApp.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ public static AppConfig LoadConfig()
5151
{
5252
transparent = txt.Length >= 1 && txt[0] == "true",
5353
acrylic = txt.Length >= 2 && txt[1] == "true",
54-
blurIntensity = txt.Length >= 3 && float.TryParse(txt[2], out var acrylicAmount) ? acrylicAmount : 0.2f
54+
blurIntensity = txt.Length >= 3 && float.TryParse(txt[2], out var acrylicAmount) ? acrylicAmount : 0.2f,
55+
closeAfterProjectOpen = txt.Length >= 4 && txt[3] == "true",
5556
};
5657
}
5758
catch (Exception ex)
@@ -68,6 +69,7 @@ public static void SaveConfig(AppConfig config)
6869
config.transparent ? "true" : "false",
6970
config.acrylic ? "true" : "false",
7071
config.blurIntensity.ToString(),
72+
config.closeAfterProjectOpen ? "true" : "false",
7173
]);
7274
}
7375

@@ -76,5 +78,6 @@ public struct AppConfig
7678
public bool transparent;
7779
public bool acrylic;
7880
public float blurIntensity;
81+
public bool closeAfterProjectOpen;
7982
}
8083
}

UnityHubNative.Net/UnityHubUtils.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,11 @@ public void OpenProject(UnityPlatform platform = UnityPlatform.CurrentPlatform)
271271
{
272272
MessageBoxManager.GetMessageBoxStandard("Cannot Open Project", $"Cannot open project at {path} because an error occurred: {ex.Message}", ButtonEnum.Ok, Icon.Error).ShowAsync();
273273
}
274+
275+
if (UnityHubNativeNetApp.Config.closeAfterProjectOpen)
276+
{
277+
MainWindow.Instance.Close();
278+
}
274279
}
275280

276281
}

0 commit comments

Comments
 (0)