launcher/Kiseki.Launcher.Windows/MainWindow.cs

83 lines
2.5 KiB
C#

using Kiseki.Launcher.Windows.Properties;
namespace Kiseki.Launcher.Windows
{
[System.ComponentModel.DesignerCategory("")]
public class MainWindow : Form
{
private readonly TaskDialogButton CloseButton;
private readonly TaskDialogPage Page;
private readonly Bootstrapper Bootstrapper;
public MainWindow(string payload)
{
Bootstrapper = new Bootstrapper(payload);
Bootstrapper.OnHeadingChange += Bootstrapper_HeadingChanged;
Bootstrapper.OnProgressBarAdd += Bootstrapper_ProgressBarAdded;
Bootstrapper.OnProgressBarStateChange += Bootstrapper_ProgressBarStateChanged;
Bootstrapper.OnError += Bootstrapper_Errored;
CloseButton = TaskDialogButton.Close;
Page = new TaskDialogPage()
{
Caption = Constants.PROJECT_NAME,
AllowMinimize = true,
ProgressBar = new TaskDialogProgressBar()
{
State = TaskDialogProgressBarState.Marquee
},
Buttons = { CloseButton }
};
Page.Created += (s, e) =>
{
Bootstrapper.Run();
};
ShowTaskDialog();
}
private void ShowTaskDialog()
{
TaskDialogIcon logo = new(Resources.IconKiseki);
Page.Icon = logo;
TaskDialog.ShowDialog(Page);
}
private void CloseButton_Click(object? sender, EventArgs e)
{
Bootstrapper.Abort();
Environment.Exit(0);
}
private void Bootstrapper_HeadingChanged(object? sender, string heading)
{
Page.Heading = heading;
}
private void Bootstrapper_ProgressBarAdded(object? sender, int value)
{
Page.ProgressBar!.Value += value;
}
private void Bootstrapper_ProgressBarStateChanged(object? sender, Enums.ProgressBarState state)
{
Page.ProgressBar!.State = state switch
{
Enums.ProgressBarState.Normal => TaskDialogProgressBarState.Normal,
Enums.ProgressBarState.Marquee => TaskDialogProgressBarState.Marquee,
_ => throw new NotImplementedException()
};
}
private void Bootstrapper_Errored(object? sender, string[] texts)
{
Page.Icon = TaskDialogIcon.Error;
Page.Heading = texts[0];
Page.Text = texts[1];
}
}
}