You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
3.2 KiB

using SCI.CursesWrapper;
using SCI.CursesWrapper.UiElements;
using ANSI_Fahrplan.Screens;
using Mindmagma.Curses;
namespace ANSI_Fahrplan;
class Program {
private static void Main (string [] args) {
/**
* General procedure:
* - Draw welcome screen
* - User picks the view they want to see
* - Data is being pulled from server
* - Data is being read, processed and displayed in the selected view
* - User can scroll up and down with Up and Down the view if it is longer than one page
* - User can change date, room, speaker etc. by pressing left and right
* - User can change the list type with function keys
**/
var screen = CursesWrapper.InitNCurses ();
// -- Screen-wide input handler -- //
var inputHandler = new InputHandler ();
inputHandler.StartListening ();
// Register global quit key
inputHandler.OnKeyPressPrivileged += (object sender, NCursesKeyPressEventArgs e) => {
if (!CursesWrapper.KeyPressIsCtrl (e.KeyCode, 'q')) return;
NCurses.EndWin ();
Console.WriteLine ("Bye-bye!");
Environment.Exit (0);
};
// -- Content Window -- //
//
// This window contains all the dynamic content between
// the menu and status bars
var contentWindow = new ContentWindow (screen, inputHandler) {
BorderEnabled = true
};
// -- Intro screen -- //
var introScreen = new IntroScreen (contentWindow);
introScreen.RegisterInputHandler (inputHandler);
introScreen.SetWindowActive ();
// Wait until intro screen is closed
while (introScreen.WindowId > -1) Thread.Sleep (50); // TODO; Unjank this
introScreen = null;
// -- Create footer bar -- //
var footerWindow = new FooterWindow (screen);
footerWindow.DrawFooter ("Fahrplan", "LLLeft", "RRRRRight");
// -- Create menu bar -- //
var topMenu = new TopMenu (screen, inputHandler, CreateMenuItems (contentWindow));
topMenu.ActivateItem (topMenu.MenuItems [1]);
// Wait until the input handler routine stops
while (inputHandler.IsListening ()) Thread.Sleep (50);
NCurses.EndWin ();
Console.WriteLine ("Oh wow, the input handler crashed, that's not supposed to happen. Sorry!");
Environment.Exit (1);
}
private static List<MenuItem> CreateMenuItems (ContentWindow contentWindow) {
var helpItem = new MenuItem ("Help", "F1");
var upcomingItem = new MenuItem ("Upcoming", "F2");
var byDayItem = new MenuItem ("By Day", "F3");
var byRoomItem = new MenuItem ("By Room", "F4");
var bySpeakerItem = new MenuItem ("By Speaker", "F5");
var quitItem = new MenuItem ("Quit (C-q)");
helpItem.OnItemActivated += (object sender, MenuItemActivatedEventArgs e) => {
var scrollWindow = contentWindow.CreateInnerScrollWindow ();
for (int i = 0; i <= 100; i++)
scrollWindow.AddContent ($"Line {i} {AsciiArt.lorem_ipsum}\n");
scrollWindow.RenderCurrentViewport ();
};
upcomingItem.OnItemActivated += (object sender, MenuItemActivatedEventArgs e) => {
var scrollWindow = contentWindow.CreateInnerScrollWindow ();
scrollWindow.AddContent ("-- Upcoming --");
scrollWindow.RenderCurrentViewport ();
};
return new List<MenuItem> {
helpItem,
upcomingItem,
byDayItem,
byRoomItem,
bySpeakerItem,
quitItem
};
}
}