Beispiel #1
0
        static void Mouse()
        {
            NCurses.NoDelay(Screen, true);
            NCurses.NoEcho();

            NCurses.MoveAddString(0, 0, "Click a button or press any key to exit.");
            NCurses.MoveAddString(2, 0, "[X]  [Y]");

            // some terminals require this to differentiate mouse "keys" from random keyboard input
            NCurses.Keypad(Screen, true);

            // not reporting mouse movement?
            // https://stackoverflow.com/questions/52047158/report-mouse-position-for-ncurses-on-windows/52053196
            // https://stackoverflow.com/questions/7462850/mouse-movement-events-in-ncurses

            var eventsToReport =
                CursesMouseEvent.BUTTON1_CLICKED |
                CursesMouseEvent.BUTTON2_CLICKED |
                CursesMouseEvent.REPORT_MOUSE_POSITION;

            var availableMouseEvents = NCurses.MouseMask(eventsToReport, out uint oldMask);

            bool exit   = false;
            bool update = true;

            while (!exit)
            {
                switch (NCurses.GetChar())
                {
                case CursesKey.MOUSE:
                    try
                    {
                        NCurses.GetMouse(out MouseEvent mouse);
                        NCurses.MoveAddString(3, 0, $"{mouse.x.ToString("000")}  {mouse.y.ToString("000")}");
                        update = true;
                    }
                    catch (DotnetCursesException)
                    {
                        // no events in the queue
                    }
                    break;

                case -1:
                    // no input received
                    break;

                default:
                    exit = true;
                    break;
                }

                if (update)
                {
                    NCurses.Move(NCurses.Lines - 1, NCurses.Columns - 1);
                    NCurses.Refresh();
                    update = false;
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Select the routine and initialize it.
        /// </summary>
        public static void Init()
        {
            // Initialize NCurses
            _window = NCurses.InitScreen();
            NCurses.CBreak();
            NCurses.NoEcho();
            NCurses.Keypad(_window, true);

            // Pick routine, and generate its map and views
            _routine = PickRoutine();
            _routine.GenerateMap();
            _routine.CreateViews();

            // Set up viewport, defaulting to first item in views list
            _mapView = new RoutineViewport(_routine, Console.WindowWidth - 1, Console.WindowHeight - 1);
        }