Capítulo 5. Otros elementos

Tabla de contenidos
Cajas de diálogo predefinidas
Construcción de un menú
El ratón
El teclado
La pantalla
Acceso a ficheros y URLs
Aplicaciones externas
Librerías
Creación de ejecutables
Caso de estudio: una revisión de los tutoriales básicos
Ejercicios y actividades

Ya se ha hablado los objetos básicos que existen para implementar una interfaz gráfica como son las barras de desplazamiento ("scrollbar"), las ventanas (pilas) o las tarjetas (stacks y cards, respectivamente, en la nomenclatura de MetaCard)el contendor de elementos audiovisuales ("player"). Ahora es el momento de revisar cómo se puede hacer uso de funcionalidades habituales en otros entornos y que el sistema nos ofrece ya construidas a partir de los elementos básicos vistos.

En este apartado el lector podrá revisar cómo lanzar laes cajas de diálogo típicas, acceder a ficheros, utilizar URLs para referenciar recursos, ejecutar aplicaciones externas y obtener información de los components del sistema (como la pantalla y el ratón).

Cajas de diálogo predefinidas

En este caso presentaremos las cajas estándar que se soportan en las diferentes plataformas y que podemos utilizar sin más que utilizar la orden correspondiente. Por supuesto que uno se puede construir sus propios diálogos, ya que estos son finalmente pilas que se ejecutan en un momento dado y que podríamos ejecutar con la orden modal. Aquí nos centramos en ilustrar cómo se lanza a ejecutar y cómo se puede recoger el resultado de su ejecución. Puesto que las diferentes opciones (botones) permiten opciones (como el filtrado por un patrón) que se harán sin intervención del usuario. Así que nuestra siguiente acción será ya cuando se haya completado la ejecución de la caja de diálogo.

La primera, por aquello del orden con que se encontraría al desplegar el menú de una aplicación típica, es el que implementa la opción de Open... de la "Menu Bar" : el "Abrir fichero". En el siguiente fragmento de código se muestra un ejemplo, la mayor parte del código se emplea en recoger el resultado de ejecutar la orden answer. Si se intenta escoger un nombre de fichero que no existe (por ejemplo tecleándolo en campo de texto correspondiente), el propio sistema se quejará.

on mouseUp
  answer file "Tria un fitxer d'audio"
  if  not( the result is "Cancel" )
  then
    put "Has triat " && it
# Per exemple:    put URL( "file:" & it ) into field "fitxerAudio"
  end if
end mouseUp
                    

La siguiente opción que uno, posiblemente, espera saber cómo hacer es la de "Guardar como". Para ello se puede utilizar la orden askSi se escoge un fichero que existe (por ejemplo escogiéndolo de la lista con el teclado o el ratón), el propio sistema preguntará si se deseea sobreescribir un fichero que ya existe quejará. En el siguiente ejemplo se muestra una posible instanciación de los parámetros de la caja de diálogo y cómo recoger el resultado de la ejecución.

    ask file "Tria el fitxer on guardar el contingut del tutorial ..." with "tutorialApp.txt"
    if  it is not "Cancel" and it is not empty
     then
      put contingutFitxer into url ("file:" & it)
    end if
                    

Figura 5-1. Ejemplo de la orden ask.

Nota: En plataformas diferentes de Unix se puede escoger entre estas cajas de diálogo que proporciona la herramienta y las que son propias del sistema. En la ayuda encontrará la referencia sobre systemFileSelector al respecto.

Otras cajas de diálogo estándares son las que permiten escoger la impresora y un color. Estas se resuelven con la orden answer a la que se la invoque con el parámetro printer o color. Existe un tercer parámetro effect, que no tiene sentido en plataformas donde no se pueda ejecutar QuickTime (al menos, de momento), pero si es Vd. uno de ellos igual quiere consultar la ayuda para ver qué puede hacer en ese caso.

En el caso de UNIX hay que ejecutar una pila que incorpora MetaCard (o Revolution) con una orden como

modeless "Color Chooser"
y que habría que recordar de seleccionar para importar al crear el ejecutable (como ser verá en la la sección de nombre Creación de ejecutables) correspondiente. Un ejemplo de utilización de estas variantes de cajas "estándares" lo vemos en el siguiente código para lanzar la caja de diálogo de impresión:

  if the platform is "Win32" or the platform is "MacOS"
  then answer printer
  else modeless "Printer Chooser"
                    

Otra posibilidad interesante es escoger un directorio, no un fichero, para ello tan sencillo como lo que muestra la Figura 5-2.

Figura 5-2. Ejemplo de la orden answer para escoger un directorio:

on mouseUp
  answer folder "Tria un directori"
  put it
end mouseUp
                       

Otra caja usual es aquella que permite introducir datos "sensibles", que en pantalla se verán alterados, de modo que no sea fácil a otros que puedan esta viendo la pantalla averiguar tal información: el caso más típico es la introducción de contraseñas que se realiza con

 ask password
. Si la necesidad de confidencialidad es baja, puede emplear el modficador clear para que el resultado devuelto por la caja de diálogo sea la cadena de carateres introducida en texto plano. Si necesita un nivel de confidencialidad mayor no lo utilize y el resultado devuelto habrá sido encriptado utilizando la función mcencrypt. El siguiente breve listado ilustra el proceso de ejecutar el diálogo y recoger el resultado:

on mouseUp
  ask password clear "Dime el teu secret:"
  put it && "--" && the result

  ask password "Dime el teu secret més secret:"
  put it && "--" && the result 
end mouseUp
                       

Existen unos modificadores que hacen más clara la tarea del diálogo que, no me canso de recordar, queremos establecer con el usuario. En sus variantes de "pregúntale al usuario" o "dile al usuario" (ask y answer respectivamente). Este último se puede matizar y como Figura 5-3 muestra estas ideas de forma directa, la Figura 5-3:

Figura 5-3. Ejemplos de creación de cajas de diálogo con modificadores situados en manejadores del evento mouseUp situados en dos botones diferentes.

on mouseUp
  answer question "El text que siga" titled "El tema: question"
  answer information "El text que siga" titled "El tema: information"
  answer error "El text que siga" titled "El tema: error"
end mouseUp

#
# Ejemplo de mensaje que se distribuye en más de una línea
#
on mouseUp
  answer warning "El text que siga" &  return &\
                "Atra linea" & return &\
                "Atra" & return &\
                " i prou ..." \
               titled "El tema"
end mouseUp
                    

Para finalizar este punto, señalar que es posible personalizar las cajas de diálogo mínimamente: se puede instruir al sistema a que cree un número de botones y con una leyenda diferente de la estándar. El resultado devuelto es la tira de caracteres asociada al botón que haya pulsado el usuario. Esto es, desde la "Message Box" podemos probar el siguiente código:

answer question "A qui ha votaria?" with "Uns" or "Atres" or "NS/NC" titled "Intenció de vot:"; put it
                    

devuelve "NS/NC" si el usuario pulsa el primer botón. Observe que el orden de los botones en la caja de diálogo es el inverso a aquel en que se listan, por lo que la opción más habitual o la menos perjudicial debería listarse la última.