using SCI.CursesWrapper; using SCI.CursesWrapper.UiElements; using ANSI_Fahrplan.Screens; using Mindmagma.Curses; using System.Reflection; using Microsoft.Win32.SafeHandles; 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.Draw (); // Close intro screen on any keypress introScreen.OnKeyPress += (object sender, NCursesKeyPressEventArgs e) => { ((Window) sender).Destroy (); }; introScreen.RegisterInputHandler (inputHandler); introScreen.SetWindowActive (); // Wait until intro screen is closed while (introScreen.WindowId > -1) Thread.Sleep (50); // TODO; Unjank this // -- Create menu bar -- // var topMenu = new TopMenu (screen, inputHandler, CreateMenuItems (contentWindow)); // Testing var testwin = contentWindow.CreateInnerWindow (); testwin.BackgroundColorId = ColorSchemes.TextInputField (); NCurses.WindowAddString (testwin, "Hello World."); contentWindow.Draw (); // 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 CreateMenuItems (ContentWindow contentWindow) { var helpItem = new MenuItem ("Help", "F1"); var upcomingItem = new MenuItem ("Upcoming", "b"); //F2 var byDayItem = new MenuItem ("By Day", "n"); // 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) => { contentWindow.Clean (); if (contentWindow.TargetInputHandler is null) return; var scrollWindow = new ScrollWindow (contentWindow, contentWindow.TargetInputHandler, 30); for (int i = 0; i < scrollWindow.PadSize.Height - 1; i++) NCurses.WindowAddString (scrollWindow.InnerPadId, $"Line {i}\n"); NCurses.WindowAddString (scrollWindow.InnerPadId, $"Line {scrollWindow.PadSize.Height}"); scrollWindow.ShowPad (); }; return new List { helpItem, upcomingItem, byDayItem, byRoomItem, bySpeakerItem, quitItem }; } }