next up previous contents
Next: 3.6.4 La definición de Up: 3.6 Construcción de la Previous: 3.6.2 Construcción de la

Contrucción del editor

Sin duda, el elemento más importante de la imagen de ICEeditor es el editor de textos que incorpora. Esta importancia viene dada por las siguientes causas:

En la función create-ICEeditor se crea el componente TEXTEDITOR mediante una llamada a la función create-texteditor-of-ICE.

Los objetos de tipo {textedit} no están incorporados en la jerarquía estándar de clases de AÏDA, sino que es preciso cargar el módulo textedit para tener acceso a este tipo de editores. La carga de un módulo consume bastante tiempo: dependiendo del tamaño del módulo se puede tardar incluso del orden de una decena de segundos. Una vez que un módulo ha sido incorporado al sistema, no es preciso volver a cargarlo durante el resto de la sesión. Es conveniente realizar una llamada a la función featurep antes de intentar cargar un módulo. Con ello se evitará perder tiempo en tareas inecesarias y se realizarán menos llamadas a las rutinas del garbage collector.

La expresión (featurep 'textedit) devuelve () si el módulo textedit aún no ha sido cargado. En tal caso se procederá a cargarlo mediante la función loadmodule.

Características del editor

Los editores textedit son lo únicos editores de AÏDA que se adaptan a los requerimientos de ICEeditor:

Sin embargo, también presentan cietos inconvenientes, entre los cuales detacan:

En ICEeditor es preciso mantener en todo momento la correspondencia entre los componentes léxicos y el texto que los representa en el editor. Las modificaciones de la distribución de las líneas en el editor trastoca esta correspondencia, puesto que no se puede utilizar el concepto de línea como elemento fiable.

Una posible solución consiste en impedir las operaciones de redimensionamiento del editor. Esta no es una opción aceptable por las siguientes razones:

La solución adoptada finalmente en ICEeditor puede considerarse un punto intermedio entre la anarquía de líneas de la versión original y la rigidez de la ausencia de redimensionamiento:

El editor de textos se crea con una anchura suficiente como para dar cabida a prácticamente cualquier línea. Se ha optado por una anchura equivalente a 255 caracteres. No se permiten líneas de mayor longitud. Si alguna supera estas dimensiones, será truncada.

El editor se encapsula en un desplazador cuya anchura es inicialmente de 80 caracteres. Cuando el usuario modifica el tamaño de la ventana de ICEeditor, el elemento que varía de tamaño es el desplazador, no el editor.

Inicialización del editor

La función textedit devuelve un editor de tipo {textedit}. Al llamarla se le deben pasar cuatro parámetros: las coordenadas vertical y horizontal, la anchura y la altura. Para calcular las dimensionas iniciales se utilizan las macros #<valor>hchar y #<valor>wchar que devuelven, respectivamente, el valor en pixels de la anchura y la altura de un caracter en la fuente utilizada cuando fueron llamadas. Se puede cambiar temporalmente la fuente utilizada encerrando la llamada a current-font dentro del ámbito establecido por un with.

Mediante una llamada a te-keep-redisplay-regions se pone a t el flag que establece cómo se realizan las actualizaciones de la imagen cuando hay cambios en el editor. Con el flag a t, se va almacenando una historia de las modificaciones realizadas. Con ello es posible realizar operaciones complejas sin necesidad de redibujar el editor al final de cada una de ellas, sino que se van acumulando y al finalizar todas ellas es cuando tiene lugar el redisplay de la imagengif.

Como se tendrán que capturar los eventos provocados por la pulsación del botón izquierdo del ratón sobre el editor, se utiliza la variable #:ICEeditor:texteditor:down0 para almacenar la función estándar utiliza por el editor cuando ocurre tal tipo de eventos en condiciones normales de operación. Para ello se utiliza el código del siguiente fragmento de programa:

(defvar #:ICEeditor:texteditor-down0 'te-mouse-generate-display-selection)

La definición de estilos

Como se mencionó anteriormente, es posible utilizar múltiples fuentes y colores en un editor de tipo textedit. Un estilo está compuesto de cuatro elementos:

Para que un conjunto de caracteres aparezcan en pantalla en un determinado tipo de fuente y color, hay que realizar los siguientes pasos:

  1. Crear un nuevo estilo mediante te-define-style con la fuente y los colores deseados.
  2. Aplicar el estilo al grupo de caracteres seleccionados.

En ICEeditor se utilizan los siguientes estilos:


next up previous contents
Next: 3.6.4 La definición de Up: 3.6 Construcción de la Previous: 3.6.2 Construcción de la

Miguel A. Alonso Pardo
Thu Nov 20 16:47:01 CET 1997