Construccin de Interfaces a Usuario Interaccin Construccin de

  • Slides: 56
Download presentation
Construcción de Interfaces a Usuario: Interacción Construcción de Interfaces a Usuario - © 1999

Construcción de Interfaces a Usuario: Interacción Construcción de Interfaces a Usuario - © 1999

Contenidos 4 Modelos de input – – – Modelo básico Eventos del usuario y

Contenidos 4 Modelos de input – – – Modelo básico Eventos del usuario y del sistema de ventanas Representación de eventos Ciclo de eventos Cola de eventos 4 Modelos OO 4 Manejo y tratamiento de eventos 4 Modelos avanzados de interacción Construcción de Interfaces a Usuario - © 1999

Modelos de ‘Input’ 4 Administración de los eventos producidos por el usuario utilizando los

Modelos de ‘Input’ 4 Administración de los eventos producidos por el usuario utilizando los dispositivos de entrada 4 Interacciones básicas – Posicionamiento • Especificación de una coordenada (x, y) – Selección • Eleccion de un elemento en un conjunto – Cuantificación • Especificación de algún valor numérico – Ingreso de Texto Presentación Comandos WM Output Input WS Construcción de Interfaces a Usuario - © 1999

Modelos de ‘Input’ 4 Primeros paquetes gráficos (CORE, PHIGS): – Rutinas para solicitar el

Modelos de ‘Input’ 4 Primeros paquetes gráficos (CORE, PHIGS): – Rutinas para solicitar el valor de algún dispositivo – ‘Request mode’ repeat • El programa solicita la entrada enter. String (string); . . . de datos utilizando un dispoprocess. String(string); . . . sitivo particular. until exit • Enfoque “bloqueante”: el programa debe esperar la acción del usuario • No adecuada para manipulación directa – ‘Sample mode’ • El programa consulta el estado de repeat algún dispositivo get. Mouse. Status(status); . . . • Pueden perderse eventos durante process. Status(status); . . . el procesamiento de un evento until exit anterior Construcción de Interfaces a Usuario - © 1999

Modelos de ‘Input’ 4 Sistemas de ventanas: los eventos son dirigidos hacia la ventana

Modelos de ‘Input’ 4 Sistemas de ventanas: los eventos son dirigidos hacia la ventana activa – Eventos representados por registros • Incluyen el tipo y valor del evento – Los eventos son encolados por el sistema de ventanas. Los programas deben retirarlos de dicha cola y procesarlos. – Modelo más utilizado actualmente 4 Nuevos modelos: – ‘Interactors’ – Comandos Construcción de Interfaces a Usuario - © 1999

Modelo Básico Repeat get. Event (my. Event) case myevent. class locator: . . .

Modelo Básico Repeat get. Event (my. Event) case myevent. class locator: . . . choice: . . . end case until (condition); Construcción de Interfaces a Usuario - © 1999

Modelo básico 4 Las acciones del operador son traducidas en eventos de software –

Modelo básico 4 Las acciones del operador son traducidas en eventos de software – Cada evento es enviado al proceso que controla la ventana asociada 4 Información contenida en los eventos: – Tipo del evento • Eventos del usuario: teclado, mouse • Eventos del sistema de ventanas: manipulación de ventanas – Información propia de cada tipo • ej. eventos del mouse: posición actual, estado botones • ej. eventos teclado: tecla presionada Construcción de Interfaces a Usuario - © 1999

Eventos del usuario 4 Mouse: botones – – ‘mouse-up’ ‘mouse-down’ Siempre contienen la posición

Eventos del usuario 4 Mouse: botones – – ‘mouse-up’ ‘mouse-down’ Siempre contienen la posición del mouse Definición dependiente de las configuraciones de hardware para las que fue diseñado el sistema de ventanas • Macintosh: asume que existe sólo un botón • MS Windows: define eventos diferentes para los botones izquierdo, derecho y medio de un mouse de 3 botones. • X Windows: define eventos ‘button-down’ y ‘button-up’, que contienen el número de botón que fue presionado/liberado. Construcción de Interfaces a Usuario - © 1999

Eventos del usuario 4 Mouse: modificadores – ej. teclas Shift, Control, Alt – Permiten

Eventos del usuario 4 Mouse: modificadores – ej. teclas Shift, Control, Alt – Permiten modificar el comportamiento asociado con los eventos de los botones del mouse – Generalmente, se define un byte o word (‘modifiers’ o ‘flags’), contenida en los eventos de botones. • Se asigna un bit a cada tecla modificadora • Algunos sistemas añaden un word para indicar el estado de los botones del mouse. – permite tratar eventos con varios botones presionados simultáneamente. Construcción de Interfaces a Usuario - © 1999

Eventos del usuario 4 Mouse: ‘doble click’ – Dos eventos ‘button down’ ocurridos dentro

Eventos del usuario 4 Mouse: ‘doble click’ – Dos eventos ‘button down’ ocurridos dentro de un intervalo reducido de tiempo. • La longitud del intervalo suele ser configurable por el usuario. – MS Windows • Un evento doble-click diferente para cada uno de los 3 botones – X Windows • No provee doble click. • Generalmente interpretado a partir de la comparación del tiempo (‘time stamp’ ) asociado con los eventos button-down – Díficil de tratar: depende del timing de los eventos, que puede tener deformaciones debido al networking y el multiprocesamiento. Construcción de Interfaces a Usuario - © 1999

Eventos del usuario 4 Mouse: movimientos – Generalmente, se genera un evento cada vez

Eventos del usuario 4 Mouse: movimientos – Generalmente, se genera un evento cada vez que el mouse cambia de posición (move. Mouse) • Puede proveerse un filtrado, para evitar tratamientos innecesarios – en general, sólo son necesarios en operaciones como ‘dragging’ • “Buffer de historia de movimientos”: agrupa varios eventos de movimiento, siendo reportados todos en un solo bloque – Provisto por algunas versiones de X Windows 4 Mouse: entrada y salida de una ventana – ‘Mouse-Enter’ y ‘Mouse-Exit’ Construcción de Interfaces a Usuario - © 1999

Eventos del usuario 4 Teclado – Cada presión de una tecla genera un evento.

Eventos del usuario 4 Teclado – Cada presión de una tecla genera un evento. • Un codigo (‘scan code’) indicando la tecla presionada. – Algunas dificultades en su tratamiento • Los teclados no son estandar – La disposición de las letras en Europa y USA es diferente. • Las teclas suelen trabajar conjuntamente con las teclas modificadoras o con otras teclas – ej. juegos • Teclas aceleradoras – Deben ser enviados directamente al sistema de menúes, no a la aplicación. Construcción de Interfaces a Usuario - © 1999

Eventos del sistema de ventanas 4 Eventos relacionados con el manejo de ventanas –

Eventos del sistema de ventanas 4 Eventos relacionados con el manejo de ventanas – – – – Creación Destrucción Apertura Cerrado Iconificación/deiconificación Selección/deselección Redimensionamiento – Generalmente, estos eventos también son colocados en la cola de eventos Construcción de Interfaces a Usuario - © 1999

Redibujo de una ventana 4 Evento de redibujo (‘redraw’) – Indica que una región

Redibujo de una ventana 4 Evento de redibujo (‘redraw’) – Indica que una región de la ventana debe ser redibujada. – Denominado: • • ‘Exposure events’ (X) ‘Draw. Self’ (Ne. XTSTEP) ‘WM_PAINT’ (MS Windows) ‘Update. Evt’ (Macintosh) – Las instrucciones de dibujo de una aplicación deben ser efectuadas como respuesta a un evento de redibujo. • La aplicación dibuja cuando las acciones del usuario lo requieren, no cuando el software decide hacerlo Construcción de Interfaces a Usuario - © 1999

Representación de eventos 4 Registros conteniendo toda la información acerca de un evento –

Representación de eventos 4 Registros conteniendo toda la información acerca de un evento – Creados por el WS, ante cada acción del usuario – Colocados en una cola para cada ventana 4 Identifican los distintos tipos de eventos: – ej. X define 33 tipos diferentes de eventos • ej. button. Press, button. Release, key. Press, expose, focus. In, . . • Estructuras ‘union’, para considerar los distintos campos de cada tipo de evento Construcción de Interfaces a Usuario - © 1999

Ciclo de Procesamiento de Eventos 4 Forma general: Definición de ventanas, configuración de la

Ciclo de Procesamiento de Eventos 4 Forma general: Definición de ventanas, configuración de la aplicación, etc. Initialization; while (not time to quit) { get next event E; dispatch event E; } Condición de terminación Obtención del evento de la cola Tratamiento del Evento – La funcionalidad del programa está dada por el código que administra los eventos pasados a las ventanas Construcción de Interfaces a Usuario - © 1999

Ciclo de Procesamiento de Eventos 4 X Windows while (1) { Xevent an_event; Xt.

Ciclo de Procesamiento de Eventos 4 X Windows while (1) { Xevent an_event; Xt. Next. Event (&an_event); Xt. Dispath. Event (&an_event); } Construcción de Interfaces a Usuario - © 1999

Ciclo de Procesamiento de Eventos 4 Macintosh while (f. Done==false) { which. Window =

Ciclo de Procesamiento de Eventos 4 Macintosh while (f. Done==false) { which. Window = front. Window(); Set. Port(which. Window); . . got. Event = get. Next. Event (every. Event, &an. Event); if (got. Event) { switch (an. Event. what) { case mouse. Down: . . . . case update. Evt: . . . . default: . . . . }} } Construcción de Interfaces a Usuario - © 1999

Ciclo de Procesamiento de Eventos 4 Los toolkits suelen proveen esta rutina en forma

Ciclo de Procesamiento de Eventos 4 Los toolkits suelen proveen esta rutina en forma interna: – Xt. App. Main. Loop(. . . ) en X – v. Event. Process() en Galaxy, – Am_Main_Event_Loop() en Amulet 4 Pueden especificarse ‘timeouts’, para ser notificados luego de un determinado tiempo sin eventos. Construcción de Interfaces a Usuario - © 1999

Cola de Eventos 4 Contiene los registros representando los eventos del usuario – La

Cola de Eventos 4 Contiene los registros representando los eventos del usuario – La rutina con el ciclo de eventos los retira de la cola, y los procesa – Los sistemas de ventanas proveen una rutina para obtener el siguiente evento de la cola 4 Sistemas multitarea (X, Ne. XTSTEP): – Una cola para cada proceso. 4 Macintosh, X: – Toda la comunicación proceso- ventanas debe realizarse a través de la cola, utilizando eventos. 4 MS Windows, Ne. XTSTEP: – Proveen mecanismos que permiten la distribución de eventos sin utilizar la cola. • Invocando directamente el mecanismo de dispatching. Construcción de Interfaces a Usuario - © 1999

Filtrado de eventos 4 Permite descartar aquellos eventos que no son de interés para

Filtrado de eventos 4 Permite descartar aquellos eventos que no son de interés para el procesamiento – Enmascaramiento de eventos – Modificación del ciclo de eventos Initialization; Condición de filtrado while (not time to quit) { get next event E; if (not Filtered Event (E)) Dispatch event E; } } – Reduce el tráfico en la red, y el procesamiento innecesario Construcción de Interfaces a Usuario - © 1999

Evento de terminación (‘Quit’) 4 Variable global – En el ciclo de eventos 4

Evento de terminación (‘Quit’) 4 Variable global – En el ciclo de eventos 4 Eventos de terminación y cerrado de ventanas – En aplicaciones complejas – Permite a las ventanas tomar las acciones correspondientes – MS Windows: rutina Post. Quit. Message Construcción de Interfaces a Usuario - © 1999

Modelos OO 4 Los toolkits OO suelen proveer una ‘Application class’ – Contiene métodos

Modelos OO 4 Los toolkits OO suelen proveer una ‘Application class’ – Contiene métodos de inicialización para configurar la aplicación – Provee un método ‘run’, conteniendo el ciclo de eventos. Application my. App; Inicializar ventanas y estructuras de datos; Colocar las máscaras de eventos; my. App. Run(); – Un método Quit controla la terminación del ciclo de eventos – Provee métodos que permiten controlar todos los casos especiales de manejo de eventos. – Es posible especializar esta clase para implementar procesamientos especiales Construcción de Interfaces a Usuario - © 1999

Manejo y tratamiento de eventos 4 Como son despachados los eventos? 4 Como escribir

Manejo y tratamiento de eventos 4 Como son despachados los eventos? 4 Como escribir código para la aplicación, asociarlo a una ventana y tratar los eventos recibidos por la ventana? Construcción de Interfaces a Usuario - © 1999

Despacho de eventos 4 Modelos generalmente basados en la jerarquía de ventanas 4 Modelo

Despacho de eventos 4 Modelos generalmente basados en la jerarquía de ventanas 4 Modelo ‘bottom-first’ : – Se selecciona la ventana “hoja” (colocada al frente de la presentación) que contiene al mouse. – El evento es enviado al código que controla esta ventana. C Los objetos que controlan la ventana sólo necesitan considerar sus eventos. Construcción de Interfaces a Usuario - © 1999

Jerarquías de ventana: eventos x Titulo y Titulo x y Construcción de Interfaces a

Jerarquías de ventana: eventos x Titulo y Titulo x y Construcción de Interfaces a Usuario - © 1999

Despacho de eventos 4 Modelo ‘top-down’: – Se selecciona una ventana raíz de una

Despacho de eventos 4 Modelo ‘top-down’: – Se selecciona una ventana raíz de una jerarquia (colocada al frente de la presentación) que contiene el mouse • Ventana “contenedora” – La ventana contenedora posee un código especial para despachar el evento a una o más de sus subventanas Construcción de Interfaces a Usuario - © 1999

Jerarquías de ventana: eventos x Titulo y Titulo x y Construcción de Interfaces a

Jerarquías de ventana: eventos x Titulo y Titulo x y Construcción de Interfaces a Usuario - © 1999

Despacho de eventos de teclado 4 Eventos de teclado – No poseen una posición

Despacho de eventos de teclado 4 Eventos de teclado – No poseen una posición inherente – ‘Mouse-based’: • Se agrega la localización del mouse a los eventos de teclado, – ‘Click-to-type’: • Enviará los eventos de teclado a la última ventana donde ha ocurrido un evento mouse-down. – ‘Key focus’: • Una ventana informa al sistema de ventanas que desea recibir todos los eventos de teclado futuros. Construcción de Interfaces a Usuario - © 1999

Despacho de eventos 4 ‘Mouse focus’ – Similar al ‘key focus’. – Produce que

Despacho de eventos 4 ‘Mouse focus’ – Similar al ‘key focus’. – Produce que todos los eventos del mouse sean enviados a una ventana particular, independientemente de la localización real del mouse. – Ej. ‘dragging’ en una barra de desplazamiento. • Al presionarse el mouse dentro de la barra, ésta puede requerir el ‘mouse focus’. • El foco es retenido hasta recibir un button up (aunque el mouse no esté dentro de la barra de desplazamiento). • Al liberarse el botón, la barra libera el foco, que restablece el algoritmo de despacho estandar. Construcción de Interfaces a Usuario - © 1999

Tratamiento de eventos 4 Formas de asociar el código de la aplicación con los

Tratamiento de eventos 4 Formas de asociar el código de la aplicación con los eventos – Tabla de Eventos – Modelo de Callbacks (Xtk/Motif) – Tratamiento de eventos con procedimientos (Window. Proc) Construcción de Interfaces a Usuario - © 1999

Tabla de Eventos 4 Cada ventana posee asociada una tabla de eventos – Contiene

Tabla de Eventos 4 Cada ventana posee asociada una tabla de eventos – Contiene las direcciones de procedimientos C, que tratarán los distintos tipos de eventos. – Utilizado en Notifier (Sun. View) 4 Algoritmo: – Selección de una ventana – Localizar su tabla de eventos – Hallar la entrada de la tabla correspondiente al tipo de evento (indicado por un valor entero) – Recuperar el procedimiento asociado Construcción de Interfaces a Usuario - © 1999

Tabla de Eventos 4 Características: – Se provee una tabla de eventos por omisión

Tabla de Eventos 4 Características: – Se provee una tabla de eventos por omisión • Rutinas estandard, que redireccionan el evento a la ventana padre. – El programador puede definir nuevos eventos • ‘Pseudoevents’. – Es necesario ser cuidadoso en la construcción de la tabla • Una entrada errónea puede ser muy dificil de depurar. Construcción de Interfaces a Usuario - © 1999

Modelo Callbacks Xtk/Motif 4 Callback: procedimiento asociado con un evento dado sobre un ‘widget’

Modelo Callbacks Xtk/Motif 4 Callback: procedimiento asociado con un evento dado sobre un ‘widget’ (Motif) – Al recibir un evento, el widget invoca el procedimiento callback asociado a tal evento 4 Forma general: void callback(w, client_d, class_c) Widget w; //widget originador del callback Xt. Pointer client_d; //datos de la aplic. Xt. Pointer class_d; //datos de la clase del widget – Ocultan al programador el mecanismo de despacho de eventos. Construcción de Interfaces a Usuario - © 1999

Modelo Callbacks Xtk/Motif 4 Asociación de callbacks con un widget – Xt. Add. Callback:

Modelo Callbacks Xtk/Motif 4 Asociación de callbacks con un widget – Xt. Add. Callback: void Xt. Add. Callback(w, cb_name, cb_proc, client_d) Widget w; // widget al que se asocia el callback String cb_name; // nombre del callback Xt. Callback. Proc cb_proc; // procedimiento callback Xt. Pointer client_d; // los datos cliente – ej. Xt. Add. Callback(hello_button, Xt. NActivate. Callback, (Xt. Callback. Proc) do_hello_button, (Xt. Pointer)ibuf) void do_hello_button (Widget w, int *data 1, int *data 2){ printf(“hellon”); } Construcción de Interfaces a Usuario - © 1999

Window-Proc 4 MS Windows: las ventanas pertenecen a determinadas ‘window classes’ – Cada clase

Window-Proc 4 MS Windows: las ventanas pertenecen a determinadas ‘window classes’ – Cada clase define un procedimiento Window. Proc que procesa todos los eventos 4 Algoritmo: – Identificación de la ventana asociada – Invocar el Window. Proc asociado con esta ventana 4 Un Window. Proc generalmente consiste de un switch para el tratamiento de los distintos tipos de eventos. – Window. Proc trata sólo una fracción de los eventos posibles – Los eventos no tratados son delegados a otras ventanas (invocando Def. Window. Proc). Construcción de Interfaces a Usuario - © 1999

Window-Proc Wnd. Proc (HWND h. Wnd, WORD i. Message, WORD w. Param, LONG l.

Window-Proc Wnd. Proc (HWND h. Wnd, WORD i. Message, WORD w. Param, LONG l. Param) { switch (i. Message) { case WM_CREATE: . . case WM_PAINT: . . case WM_LBUTTONDOWN: . . case WM_MOUSEMOVE: . . case WM_DESTROY: . . default: Def. Window. Proc (h. Wnd, i. Message, w. Param, l. Param) } } Construcción de Interfaces a Usuario - © 1999

Tratamiento de eventos OO 4 Los lenguajes OO proveen mecanismos más naturales para el

Tratamiento de eventos OO 4 Los lenguajes OO proveen mecanismos más naturales para el tratamiento de eventos – No requieren sentencias case o switch explícitas, o el registro de registrar las rutinas de tratamiento de los eventos. 4 Algunos sistemas con características OO: – – – Ne. XTSTEP Mac. App Visual C++ Interviews Java Construidas sobre un sistema de ventanas sin características OO Construcción de Interfaces a Usuario - © 1999

Tratamiento de eventos OO 4 Una clase abstracta (Window. Event. Handler) define el comportamiento

Tratamiento de eventos OO 4 Una clase abstracta (Window. Event. Handler) define el comportamiento estandar de los mecanismos de tratamientos de eventos Mouse. Down(Button, Location, Modifiers) Mouse. Up(Location, Modifiers) Key. Press(Key, Modifiers) Mouse. Enter(Location, Modifiers) Mouse. Exit(Location, Modifiers) Redraw(Damaged. Region) Set. Canvas (Canvas) Set. Bounds(Bounds. Rect) Rectangle Get. Bounds() – En la mayoría de estos métodos, la implementación por omisión no realiza ninguna acción. Construcción de Interfaces a Usuario - © 1999

Inconvenientes modelos actuales 4 No suele existir un mecanismo distinto para algunos eventos especiales

Inconvenientes modelos actuales 4 No suele existir un mecanismo distinto para algunos eventos especiales – Los eventos stop, abort, etc. son colocados en la conjuntamente con los demás tipos de eventos • La aplicación debe estar siempre esperando nuevos eventos, para procesar interrupciones (aborts) y redibujos. • Si no fuera así, las operaciones largas no podrían ser abortadas, y podrían existir lapsos de tiempo con la ventana conteniendo áreas en blanco Construcción de Interfaces a Usuario - © 1999

Inconvenientes modelos actuales 4 Modelo dependiente del dispositivo – La representación de los eventos

Inconvenientes modelos actuales 4 Modelo dependiente del dispositivo – La representación de los eventos (registros) posee campos fijos. • Es dificil incluir nuevos dispositivos (ej. apuntadores 3 D) 4 Tratamiento asincrónico de los eventos – Puede producirse una desincronización entre los programas y el sistema de ventanas • ej. si existe una solicitud del sistema de ventanas para redibujar un área, pero el programa está cambiando los contenidos de la ventana, puede producirse un redibujo erróneo Construcción de Interfaces a Usuario - © 1999

Modelos avanzados de interacción 4 Proveen abstracciones de más alto nivel, para la administración

Modelos avanzados de interacción 4 Proveen abstracciones de más alto nivel, para la administración de interacciones – ‘Interactors’ [Myers 90] – Comandos [Myers 96 a] Construcción de Interfaces a Usuario - © 1999

‘Interactors’ 4 Objetivo: proveer mayor soporte para la programación del manejo de eventos 4

‘Interactors’ 4 Objetivo: proveer mayor soporte para la programación del manejo de eventos 4 Foco: interfaces de manipulación directa 4 Identifica 6 tipos de interacciones básicas • • • ‘move’ ‘grow’ ‘rotate’ ‘text edit’ ‘gesture’ ‘select’ (‘pick’) 4 Garnet, Amulet, UGA Construcción de Interfaces a Usuario - © 1999

‘Interactors’ 4 Características: – Identificación de un conjunto de interactores primitivos y sus parámetros

‘Interactors’ 4 Características: – Identificación de un conjunto de interactores primitivos y sus parámetros correspondientes • Las interfaces de manipulación directa pueden ser constuidas directamente reutilizando estos interactores • Sólo se proveen unos pocos tipos de comportamientos, y parámetros estandares – Separación real entre el manejo de inputs y outputs – Encapsula toda la administración de eventos correspondiente a un determinado objeto gráfico C Fácil de implementar C Alta reusabilidad C Provee soporte para operaciones difíciles como el dragging Construcción de Interfaces a Usuario - © 1999

‘Interactors’ 4 Idea general: asociar interactores a un objeto gráfico (o varios), para administrar

‘Interactors’ 4 Idea general: asociar interactores a un objeto gráfico (o varios), para administrar sus inputs – Los objetos gráficos no necesitan ser conscientes de sus inputs • no existen métodos para el tratamiento de eventos en los objetos gráficos – Los interactores son “invisibles” para los objetos gráficos – Pueden asociarse múltiples interactores a un objeto – Un mismo tipo de interactor puede operar sobre múltiples objetos 4 Estrategia: – – Seleccionar el tipo correcto de interactor Crear una instancia de ese interactor Colocar los valores para sus parámetros (‘slots’) Asociarlo con el objeto gráfico Construcción de Interfaces a Usuario - © 1999 – Los widgets utilizan internamente los interactores

Tipos de interactores – ‘Am_Choice_Interactor’ (interactor de selección) • Selecciona uno o más objetos

Tipos de interactores – ‘Am_Choice_Interactor’ (interactor de selección) • Selecciona uno o más objetos de un conjunto – ‘Am_One_Shot_Interactor’ (interactor de acción simple) • Efectúa una acción simple – ‘Am_Move_Grow_Interactor’ (interactor de movimiento) • Efectúa un movimiento o ‘grow’ de objetos con el mouse – ‘Am_New_Points_Interactor’ (interactor de puntos) • Creación de nuevos objetos por medio de la entrada de puntos, con ‘rubberbanding’ como feedback – ‘Am_Text_Edit_Interactor’ (interactor de edición) • Edición con teclado y mouse de texto – ‘Am_Gesture_Interactor’ (interactor de gestos) • Interpreta gestos ‘freehand’ Construcción de Interfaces a Usuario - © 1999

Ejemplo simple 4 Para posibilitar el movimiento de un objeto Am_Interactor interactor = Am_Move_Grow_Interactor.

Ejemplo simple 4 Para posibilitar el movimiento de un objeto Am_Interactor interactor = Am_Move_Grow_Interactor. Create(); Am_Object rect = Am_Rectangle. Create(). Set(Am_LEFT, 40). Set(Am_TOP, 50). Set(Am_FILL_STYLE, Am_Red). Add_Part(interactor); Construcción de Interfaces a Usuario - © 1999

Parámetros comunes de los interactuadores 4 Activación – Un interactor se activa cuando su

Parámetros comunes de los interactuadores 4 Activación – Un interactor se activa cuando su objeto gráfico asociado es colocado en una presentación – Am_ACTIVE: determina si el interactor procesa o no eventos 4 Eventos de comienzo, terminación e interrupción (start, stop, abort) – Asociados a una tecla, botón del mouse, modificadores, doble click, etc. select_it = Am_Choice_Interactor. Create("Select It"). Set(Am_START_WHEN, "MIDDLE_DOWN"); Construcción de Interfaces a Usuario - © 1999

Comportamiento estandar Running_Action Idle Start_event over object Start_Action stop event Stop_Action abort event Abort_Action

Comportamiento estandar Running_Action Idle Start_event over object Start_Action stop event Stop_Action abort event Abort_Action not over running_where Running Outside_Action Back over running_where Back_Inside_Action abort event Abort_Action stop event Stop_Action Construcción de Interfaces a Usuario - © 1999

Parámetros comunes de los interactuadores 4 Objeto sobre el que opera – Por omisión,

Parámetros comunes de los interactuadores 4 Objeto sobre el que opera – Por omisión, opera sobre el objeto que tiene asociado – Es posible operar sobre algun miembro de un grupo SP_Ship_Mover = Am_Move_Grow_Interactor. Create("SP_Ship_Mover"). Set (Am_START_WHEN, "LEFT_DOWN"). Set (Am_START_WHERE_TEST, Am_Inter_In_Part); ship_group. Add_Part(SP_Ship_Mover); Grupo Partes Construcción de Interfaces a Usuario - © 1999

Parámetros para tipos específicos de interactores 4 Ej. Botones (interactores de selección) – Tipo

Parámetros para tipos específicos de interactores 4 Ej. Botones (interactores de selección) – Tipo de selección (Am_HOW_SET): • set (radio buttons, Am_CHOICE_SET ) • toggle (check buttons, Am_CHOICE_TOGGLE) • list-toggle (selecciones múltiples, Am_CHOICE_LIST_TOGGLE ) Construcción de Interfaces a Usuario - © 1999

Parámetros para tipos específicos de interactores 4 Ej. Movimientos, ‘grow’: – Objeto para representar

Parámetros para tipos específicos de interactores 4 Ej. Movimientos, ‘grow’: – Objeto para representar el feedback intermedio Am_Object feedback_circle = moving_circle. Create(). Set (Am_LINE_STYLE, Am_Dashed_Line); my_win. Add_Part (feedback_circle); // The definition of the interactor Am_Object objs_grower = Am_Move_Grow_Interactor. Create (). Set (Am_START_WHEN, “LEFT_DOWN”). Set (Am_GROWING, true) // grow instead of move. Set (Am_FEEDBACK_OBJECT, feedback_circle); objs_group. Add_Part (objs_grower); – otros parámetros: • ‘gridding’ • ‘where_attach’ • tamaño mínimo Construcción de Interfaces a Usuario - © 1999

Relación Interactor - Objeto Gráfico 4 Los interactores suelen modificar el valor de algunos

Relación Interactor - Objeto Gráfico 4 Los interactores suelen modificar el valor de algunos slots de sus objetos gráficos asociados – Ej. Interactor de selección • El interactor coloca el valor del slot Am_SELECTED del objeto gráfico asociado • La presentación del objeto gráfico puede verse modificada – ej. utilizando restricciones (fórmulas) Am_Define_Formula (line_selected) { if (self. Get(Am_SELECTED)) return Am_Red; else return Am_Black; } Am_Object my_line = Am_Line. Create(). Set(Am_LINE_STYLE, line_selected). Add_Part(Am_Choice_Interactor. Create()); Construcción de Interfaces a Usuario - © 1999

Prioridades 4 Si dos interactores desean ejecutarse conjuntamente, se utilizan prioridades para determinar cuál

Prioridades 4 Si dos interactores desean ejecutarse conjuntamente, se utilizan prioridades para determinar cuál es el que se ejecutará – slot Am_PRIORITY • Valor por omisión = 1 • Cuando está ejecutándose, se agrega un valor de 100 Construcción de Interfaces a Usuario - © 1999

Objetos “Comando” 4 Cada interactuador puede poseer asociado un objeto “comando” – Contiene las

Objetos “Comando” 4 Cada interactuador puede poseer asociado un objeto “comando” – Contiene las funciones que determinarán el comportamiento del interactor • slot Am_COMMAND – Al finalizar su operación, el interactor ejecuta el método ‘Do’ de su objeto “comando” – Los objetos “comando” permiten la incorporación de funciones para (entre otras): • ‘undo’ (‘UNDO_METHOD’) • ‘redo’ (‘REDO_METHOD’) • ‘help’ (‘HELP’) – Reusabilidad • Biblioteca de comandos generales Construcción de Interfaces a Usuario - © 1999

Objetos “Comando” Am_Object change_setting_command = Am_Command. Create(). Set(Am_DO_METHOD, do_change_setting). Set(Am_UNDO_METHOD, undo_change_setting); Am_Object inter =

Objetos “Comando” Am_Object change_setting_command = Am_Command. Create(). Set(Am_DO_METHOD, do_change_setting). Set(Am_UNDO_METHOD, undo_change_setting); Am_Object inter = Am_One_Shot_Interactor. Create("change_settings"). Set(Am_START_WHEN, "ANY_KEYBOARD"). Set_Part(Am_COMMAND, change_setting_command); window. Add_Part (how_set_inter); Construcción de Interfaces a Usuario - © 1999