120 lines
3.7 KiB
C#
120 lines
3.7 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Reflection;
|
|||
|
using System.Text;
|
|||
|
using NStack;
|
|||
|
using Terminal.Gui;
|
|||
|
|
|||
|
namespace BSLManager
|
|||
|
{
|
|||
|
class Program
|
|||
|
{
|
|||
|
static void Main(string[] args)
|
|||
|
{
|
|||
|
Console.OutputEncoding = Encoding.Default;
|
|||
|
|
|||
|
Application.Init();
|
|||
|
var top = Application.Top;
|
|||
|
|
|||
|
// Creates the top-level window to show
|
|||
|
var win = new Window("BSL Manager")
|
|||
|
{
|
|||
|
X = 0,
|
|||
|
Y = 1, // Leave one row for the toplevel menu
|
|||
|
|
|||
|
// By using Dim.Fill(), it will automatically resize without manual intervention
|
|||
|
Width = Dim.Fill(),
|
|||
|
Height = Dim.Fill()
|
|||
|
};
|
|||
|
|
|||
|
top.Add(win);
|
|||
|
|
|||
|
// Creates a menubar, the item "New" has a help menu.
|
|||
|
var menu = new MenuBar(new MenuBarItem[] {
|
|||
|
new MenuBarItem ("_File", new MenuItem [] {
|
|||
|
new MenuItem ("_Quit", "", () => { if (Quit ()) top.Running = false; })
|
|||
|
}),
|
|||
|
//new MenuBarItem ("_Edit", new MenuItem [] {
|
|||
|
// new MenuItem ("_Copy", "", null),
|
|||
|
// new MenuItem ("C_ut", "", null),
|
|||
|
// new MenuItem ("_Paste", "", null)
|
|||
|
//})
|
|||
|
});
|
|||
|
top.Add(menu);
|
|||
|
|
|||
|
static bool Quit()
|
|||
|
{
|
|||
|
var n = MessageBox.Query(50, 7, "Quit BSL Manager", "Are you sure you want to quit?", "Yes", "No");
|
|||
|
return n == 0;
|
|||
|
}
|
|||
|
|
|||
|
var listData = new List<string>();
|
|||
|
for (var i = 0; i < 100; i++)
|
|||
|
{
|
|||
|
listData.Add($"@User{i}@Instance.tld {i*3}");
|
|||
|
}
|
|||
|
|
|||
|
var list = new ListView(listData)
|
|||
|
{
|
|||
|
X = 1,
|
|||
|
Y = 2,
|
|||
|
Width = Dim.Fill(),
|
|||
|
Height = Dim.Fill()
|
|||
|
};
|
|||
|
|
|||
|
list.KeyDown += _ =>
|
|||
|
{
|
|||
|
if (_.KeyEvent.Key == Key.Enter)
|
|||
|
{
|
|||
|
var el = list.SelectedItem;
|
|||
|
|
|||
|
bool okpressed = false;
|
|||
|
var ok = new Button(10, 14, "Yes");
|
|||
|
ok.Clicked += () =>
|
|||
|
{
|
|||
|
Application.RequestStop();
|
|||
|
okpressed = true;
|
|||
|
};
|
|||
|
|
|||
|
var cancel = new Button(3, 14, "No");
|
|||
|
cancel.Clicked += () => Application.RequestStop();
|
|||
|
|
|||
|
var dialog = new Dialog("Delete", 60, 18, cancel, ok);
|
|||
|
|
|||
|
var name = new Label($"User: {listData[el]}")
|
|||
|
{
|
|||
|
X = 1,
|
|||
|
Y = 1,
|
|||
|
Width = Dim.Fill(),
|
|||
|
Height = 1
|
|||
|
};
|
|||
|
var entry = new Label("Delete user and remove all their followings?")
|
|||
|
{
|
|||
|
X = 1,
|
|||
|
Y = 3,
|
|||
|
Width = Dim.Fill(),
|
|||
|
Height = 1
|
|||
|
};
|
|||
|
dialog.Add(name);
|
|||
|
dialog.Add(entry);
|
|||
|
Application.Run(dialog);
|
|||
|
|
|||
|
if (okpressed)
|
|||
|
{
|
|||
|
listData.RemoveAt(el);
|
|||
|
typeof(Application).GetMethod("TerminalResized", BindingFlags.Static | BindingFlags.NonPublic).Invoke(null, null);
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
// Add some controls,
|
|||
|
win.Add(
|
|||
|
new Label(1, 0, "Listing followers"),
|
|||
|
list
|
|||
|
);
|
|||
|
|
|||
|
Application.Run();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|