84 lines
2.8 KiB
C#
84 lines
2.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Eto.Drawing;
|
|
using Eto.Forms;
|
|
using UpToolEto.Forms;
|
|
using UpToolLib.DataStructures;
|
|
using UpToolLib.v2;
|
|
using UpToolLib.v2.TaskQueue;
|
|
|
|
namespace UpToolEto.Controls
|
|
{
|
|
public class AppControls : StackLayout
|
|
{
|
|
private readonly IList<AppTask> _tasks;
|
|
private readonly List<AppControlButton> _buttons;
|
|
private readonly Button _applyButton;
|
|
public AppControls(TaskFactory factory, IList<AppTask> tasks, IExternalFunctionality platform, Action update)
|
|
{
|
|
_tasks = tasks;
|
|
_buttons = new List<AppControlButton>
|
|
{
|
|
new AppControlButton<InstallTask>("Install", factory.CreateInstall, tasks, ReloadState,
|
|
app => !app.Status.Contains(Status.Installed)),
|
|
new AppControlButton<UpdateTask>("Update", factory.CreateUpdate, tasks, ReloadState,
|
|
app => app.Status.Contains(Status.Updatable)),
|
|
new AppControlButton<RemoveTask>("Remove", factory.CreateRemove, tasks, ReloadState,
|
|
app => app.Status.Contains(Status.Installed))
|
|
};
|
|
_applyButton = new Button((_, _) =>
|
|
{
|
|
try
|
|
{
|
|
QueueOverview overview = new(tasks);
|
|
overview.ShowModal();
|
|
if (!overview.Cancelled)
|
|
{
|
|
foreach (AppTask task in overview.TasksResulting)
|
|
{
|
|
task.Run();
|
|
_tasks.RemoveAt(0);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
platform.OkDialog("Failed to complete queue:\r\n" + e);
|
|
}
|
|
finally
|
|
{
|
|
ReloadState();
|
|
update();
|
|
}
|
|
})
|
|
{
|
|
Text = "Apply",
|
|
Enabled = false
|
|
};
|
|
foreach (AppControlButton button in _buttons) Items.Add(button);
|
|
Items.Add(new StackLayoutItem(_applyButton, HorizontalAlignment.Right));
|
|
if (Main.DebugColors)
|
|
BackgroundColor = Colors.Yellow;
|
|
Orientation = Orientation.Horizontal;
|
|
}
|
|
|
|
public void SetApp(App app)
|
|
{
|
|
foreach (AppControlButton button in _buttons) button.SetApp(app);
|
|
ReloadState();
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
foreach (AppControlButton button in _buttons) button.Clear();
|
|
}
|
|
|
|
private void ReloadState()
|
|
{
|
|
foreach (AppControlButton button in _buttons) button.ReloadState();
|
|
_applyButton.Enabled = _tasks.Any();
|
|
}
|
|
}
|
|
}
|