148 lines
4.2 KiB
C#
148 lines
4.2 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.OrderBy(u => u.Name).ToList());
|
|
|
|
_listView.SetFocus();
|
|
}
|
|
|
|
private void ListView_OpenSelectedItem(ListViewItemEventArgs item)
|
|
{
|
|
Application.Run(new EditUserDisplay((User)item.Value));
|
|
}
|
|
|
|
private void AddButton_Clicked()
|
|
{
|
|
var dialog = new NewUserDialog();
|
|
|
|
if (dialog.TryShow(out var name, out var token))
|
|
{
|
|
UsersManager.Add(name.ToString(), token.ToString());
|
|
}
|
|
|
|
UpdateList();
|
|
}
|
|
|
|
private void DeleteButton_Clicked()
|
|
{
|
|
var marked = _listView.Source.ToList().Cast<User>().Where((_, index) => _listView.Source.IsMarked(index)).ToHashSet();
|
|
|
|
if (MessageBox.Query("Delete Users", $"Do you really want to delete the {marked.Count} selected users?", "Yes", "No") != 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
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 (MessageBox.Query("Delete Users", "Do you really want to delete all the users?", "yes", "No") != 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (UsersManager.Clear())
|
|
{
|
|
MessageBox.Query("Delete Users", $"Successfully deleted all users", "Ok");
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Query("Delete Users", $"Can't delete all users", "Ok");
|
|
}
|
|
|
|
UpdateList();
|
|
}
|
|
}
|
|
}
|