Files
Akari.Provider.WaveshareUART/Views/ManageUsersDisplay.cs
2021-01-23 14:53:00 +01:00

131 lines
3.5 KiB
C#

using Akari.Provider.WaveshareUART.Users;
using System.Linq;
using Terminal.Gui;
namespace Akari.Provider.WaveshareUART.Views
{
public class ManageUsersDisplay : Toplevel
{
public UsersManager UsersManager => WaveshareUARTProvider.Instance.UsersManager;
private ListView _listView;
public ManageUsersDisplay()
{
Init();
}
private void Init()
{
Modal = true;
ColorScheme = Colors.Error;
// Creates the top-level window to show
var win = new Window("Manage Users")
{
X = 0,
Y = 0,
// By using Dim.Fill(), it will automatically resize without manual intervention
Width = Dim.Fill(),
Height = Dim.Fill()
};
win.ColorScheme = Colors.ColorSchemes["Dialog"];
Add(win);
// Window Content
_listView = new ListView()
{
X = 2,
Y = 1,
Height = Dim.Fill() - 1,
Width = Dim.Fill(),
AllowsMarking = true
};
_listView.OpenSelectedItem += ListView_OpenSelectedItem;
UpdateList();
var addButton = new Button("_Add")
{
X = Pos.Right(this) - 54,
Y = Pos.Bottom(this) - 3
};
addButton.Clicked += AddButton_Clicked;
var deleteButton = new Button("_Delete Selected")
{
X = Pos.Right(addButton) + 1,
Y = Pos.Top(addButton)
};
deleteButton.Clicked += DeleteButton_Clicked;
var deleteAllButton = new Button("Delete All")
{
X = Pos.Right(deleteButton) + 1,
Y = Pos.Top(deleteButton)
};
deleteAllButton.Clicked += DeleteAllButton_Clicked;
var quitButton = new Button("_Quit")
{
X = Pos.Right(deleteAllButton) + 1,
Y = Pos.Top(deleteAllButton)
};
quitButton.Clicked += () => { Application.RequestStop(); };
win.Add(_listView, addButton, deleteButton, deleteAllButton, quitButton);
}
private void UpdateList()
{
_listView.SetSource(UsersManager.Users.ToList());
_listView.SetFocus();
}
private void ListView_OpenSelectedItem(ListViewItemEventArgs item)
{
}
private void AddButton_Clicked()
{
}
private void DeleteButton_Clicked()
{
var marked = UsersManager.Users.Where((_, index) => _listView.Source.IsMarked(index)).ToHashSet();
if (UsersManager.Remove(marked))
{
MessageBox.Query("Delete Users", $"Successfully deleted {marked.Count} user{(marked.Count > 1 ? "s" : "")}", "Ok");
}
else
{
MessageBox.ErrorQuery("Delete Users", "Can't delete all selected users", "Ok");
}
UpdateList();
}
private void DeleteAllButton_Clicked()
{
if (UsersManager.Clear())
{
MessageBox.Query("Delete Users", $"Successfully deleted all users", "Ok");
}
else
{
MessageBox.Query("Delete Users", $"Can't delete all users", "Ok");
}
UpdateList();
}
}
}