Luski/Luski/GUI/UpdateWindow.cs
2023-11-18 12:33:05 -05:00

98 lines
3.1 KiB
C#

using GraphicsManager;
using GraphicsManager.Interfaces;
using GraphicsManager.Objects;
using OpenTK.Mathematics;
using OpenTK.Windowing.Desktop;
using OpenTK.Windowing.Common;
namespace Luski.GUI;
public class UpdateWindow : Window
{
private RoundedButton? yes, no;
private static readonly NativeWindowSettings Settings = new()
{
Title = "Update Available",
WindowBorder = WindowBorder.Fixed,
APIVersion = new Version(3, 2),
StartFocused = true,
Size = new Vector2i(481, 838),
Icon = Globals.Icon,
SharedContext = null
};
public enum DialogueResult
{
Yes,
No,
Closed
}
private DialogueResult Result = DialogueResult.Closed;
public UpdateWindow() : base(Settings)
{
Label t;
Controls.Add(t = new Label(Globals.DefaultFont) { Scale = 1.2f, Location = new((int)(17.5*Globals.Settings.Scale)), Text = "Luski has detected that your\nclient is on an older version\nfor your branch."});
if (!Globals.Empty(Globals.UpdaterSettings.Updater))
{
t.Text += "\n\nWould you like to update?";
Controls.Add(yes = new(Globals.LuskiTexture, Globals.DefaultFont)
{
Text = "Yes",
Location = new(t.Location.X, t.Location.Y + t.Size.Y + (int)(t.Scale * t.Font.PixelHeight), 0),
Size = new(t.Size.X, (int)(35.5 * Globals.Settings.Scale))
});
Controls.Add(no = new(Globals.LuskiTexture, Globals.DefaultFont)
{
Text = "No", Location = new(t.Location.X, yes.Location.Y + yes.Size.Y + 20, 0),
Size = new(yes.Size.X, (int)(35.5 * Globals.Settings.Scale))
});
Size = new(t.Location.X + t.Location.X + t.Size.X, no.Location.Y + no.Size.Y + t.Location.X);
yes.Clicked += YesOnClicked;
no.Clicked += NoOnClicked;
}
else
{
t.Text += "\n\nNo updater path was set\nSet a path for auto updates";
Controls.Add(no = new(Globals.LuskiTexture, Globals.DefaultFont)
{
Text = "Ok",
Location = new(t.Location.X, t.Location.Y + t.Size.Y + (int)(t.Scale * t.Font.PixelHeight), 0),
Size = new(t.Size.X, (int)(35.5 * Globals.Settings.Scale)),
});
Size = new(t.Location.X + t.Location.X + t.Size.X, no.Location.Y + no.Size.Y + t.Location.X);
no.Clicked += NoOnClicked;
}
CenterWindow();
}
private Task NoOnClicked(IRenderObject arg)
{
Result = DialogueResult.No;
base.Close();
return Task.CompletedTask;
}
private Task YesOnClicked(IRenderObject arg)
{
Result = DialogueResult.Yes;
base.Close();
return Task.CompletedTask;
}
public DialogueResult ShowDialogue(Window? Parent = null)
{
try
{
if (Parent is not null) Parent.DrawFrame();
StartRender();
return Result;
}
finally
{
IsVisible = false;
//Dispose();
}
}
}