using System; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.VisualTree; using Plombir; using LauncherGUI.ViewModels; using System.Diagnostics; using System.Runtime.InteropServices; namespace LauncherGUI.Views; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new MainWindowViewModel(); if (DataContext == null) throw new NullReferenceException("Failed to set DataContext for MainWindow"); } private async void OnLaunchMinecraftClick(object sender, RoutedEventArgs e) { var button = sender as Button; if (button == null) return; var root = button.GetVisualRoot() as MainWindow; if (root == null) return; var vm = DataContext as MainWindowViewModel; await LauncherUtils.CreateMinecraftInstance(vm, root); button.Content = "Minecraft launched"; } private void OnChooseVersionClick(object sender, RoutedEventArgs e) { if (sender is not Button button) return; if (button.GetVisualRoot() is not MainWindow root) return; VersionSelectorWindow selector = new(DataContext as MainWindowViewModel); selector.Show(root); } private void OnCogPressed(object sender, RoutedEventArgs e) { if (sender is not Image img) return; if (img.GetVisualRoot() is not MainWindow root) return; SettingsWindow settings = new(DataContext as MainWindowViewModel); settings.Show(root); } private void OnGitlabPressed(object sender, RoutedEventArgs e) { string url = "https://gitlab.com/nullmax17/PlombirLauncher"; try { Process.Start(url); } catch { // hack because of this: https://github.com/dotnet/corefx/issues/10361 if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { url = url.Replace("&", "^&"); Process.Start(new ProcessStartInfo(url) { UseShellExecute = true }); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { Process.Start("xdg-open", url); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { Process.Start("open", url); } else { throw; } } } private void OnAccountSettingsPressed(object sender, RoutedEventArgs e) { //todo: account managment window } }