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