This repository has been archived on 2022-08-05. You can view files and clone it, but cannot push or open issues or pull requests.
UpTool2/UpToolEto/UpToolEto/Controls/AppControls.cs

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();
}
}
}