PlombirLauncher/Launcher-UI/Views/MainWindow.axaml.cs

96 lines
2.8 KiB
C#

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);
}
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)
{
if (sender is not Image img) return;
if (img.GetVisualRoot() is not MainWindow root) return;
SessionManagmentWindow sessionManager = new(DataContext as MainWindowViewModel);
sessionManager.Show(root);
}
}