Ejemplo n.º 1
0
    static void Main(string[] args)
    {
        const int     SALTO  = 20;
        const int     ANCHO  = 80;
        const int     ALTO   = 25;
        const int     BUFFER = 1024;
        ListaDeFrases frases = new ListaDeFrases();
        Linea         linea  = new Linea();

        Console.SetBufferSize(BUFFER, BUFFER);
        Console.SetWindowSize(ANCHO, ALTO);
        string nombreFichero = args.Length == 1 ? args[0] : "";

        Cursor cursor;

        cursor.x = 0;
        cursor.y = 1;
        bool           insercion = true;
        string         primeraLinea;
        bool           salir = false;
        ConsoleKeyInfo tecla;

        if (File.Exists(nombreFichero))
        {
            frases.Cargar(nombreFichero);
        }
        linea.LineaActual = frases.Get(cursor.y - 1);
        do
        {
            primeraLinea = "Línea:" + cursor.y + " Columna:" + (cursor.x + 1) +
                           (insercion? " INS" : " SOB") + " Documento:" + nombreFichero;

            DibujarPrimeraLinea(primeraLinea);
            DibujarTexto(frases);
            Console.SetCursorPosition(0, cursor.y);
            Console.Write(linea.LineaActual);
            Console.SetCursorPosition(cursor.x, cursor.y);
            tecla = Console.ReadKey(true);

            if (tecla.Key == ConsoleKey.Insert)
            {
                insercion = !insercion;
            }

            if (EsDibujable(tecla.Key))
            {
                linea.Insertar(cursor.x, tecla.KeyChar, insercion);

                cursor.x++;
            }
            frases.Anyadir(linea.LineaActual, cursor.y - 1);

            // TO DO Encapsular en funciones
            if (tecla.Key == ConsoleKey.Enter)
            {
                cursor.x          = 0;
                linea.LineaActual = frases.Get(cursor.y);
                cursor.y++;
            }
            else if (tecla.Key == ConsoleKey.Backspace)
            {
                linea.Borrar(cursor.x);
                if (cursor.x > 0)
                {
                    cursor.x--;
                }
            }
            else if (tecla.Key == ConsoleKey.Delete)
            {
                linea.Suprimir(cursor.x);
            }
            else if (tecla.Key == ConsoleKey.Home)
            {
                cursor.x = 0;
            }
            else if (tecla.Key == ConsoleKey.End)
            {
                cursor.x = frases.Get(cursor.y - 1).Length;
            }
            else if (tecla.Key == ConsoleKey.LeftArrow)
            {
                if (cursor.x > 0)
                {
                    cursor.x--;
                }
            }
            else if (tecla.Key == ConsoleKey.RightArrow)
            {
                if (cursor.x < linea.LineaActual.Length)
                {
                    cursor.x++;
                }
            }
            else if (tecla.Key == ConsoleKey.UpArrow)
            {
                if (cursor.y - 1 > 0)
                {
                    cursor.y--;
                    linea.LineaActual = frases.Get(cursor.y - 1);
                    ComprobarLongitudCadena(ref cursor.x, cursor.y, frases);
                }
            }
            else if (tecla.Key == ConsoleKey.DownArrow)
            {
                if (cursor.y < frases.Cantidad)
                {
                    cursor.y++;
                    linea.LineaActual = frases.Get(cursor.y - 1);
                    ComprobarLongitudCadena(ref cursor.x, cursor.y, frases);
                }
            }
            else if (tecla.Key == ConsoleKey.PageDown)
            {
                if (cursor.y + SALTO > frases.Cantidad)
                {
                    cursor.y = frases.Cantidad;
                }
                else
                {
                    cursor.y += 20;
                }
                linea.LineaActual = frases.Get(cursor.y - 1);
                ComprobarLongitudCadena(ref cursor.x, cursor.y, frases);
            }
            else if (tecla.Key == ConsoleKey.PageUp)
            {
                if (cursor.y - SALTO < 1)
                {
                    cursor.y = 1;
                }
                else
                {
                    cursor.y -= SALTO;
                }
                linea.LineaActual = frases.Get(cursor.y - 1);
                ComprobarLongitudCadena(ref cursor.x, cursor.y, frases);
            }
            else if (tecla.Key == ConsoleKey.F10)
            {
                salir = true;
            }
        } while (!salir);
        Console.WriteLine();

        if (GuardarCambios())
        {
            if (nombreFichero == "")
            {
                nombreFichero = PedirNombreFichero();
            }
            frases.Guardar(nombreFichero);
        }
        Console.WriteLine();
    }