Ejercicios y actividades

En este capítulo el lector ha podido encontrar y practicar con:

Vamos a poner en práctica estas temáticas en un contexto ligeramente diferente o con alguna variante:

  1. Se desea mostrar en pantalla una serie de imágenes para el usuario pueda examinarlas y escoger entre ellas. Estas imágenes pueden representar motivos de diseño, personas, obras de una exposición, etc. En cualquier caso forman una colección organizada de imágenes, esto es: su número es inderminado, pero sus nombres están dispuestos (uno por línea) en un fichero de texto. Suponiendo que se disponen en un directorio miniatures, realiza un interfaz que cree los N objetos de tipo imagen capaces de contenerlos y dispuestos en horizontal en una sola fila, ocupando todo el ancho de la ventana de la aplicación.

    Como muestra la Figura 6-14, esto se puede llevar a cabo con:

    • Un campo de texto (directoriBD) donde se guarda la ruta inicial de la base de datos, que se puede introducir directamente o pulsando sobre él con el ratón, que hace que se abre la caja de diálogo que facilita la inserción (o la elección) de la misma. Para ello hay que emplear el botón secundario del ratón, por que el primero proporciona el foco.

    • Un botón (Carregar BD) encargado de la creación de los objetos, su situación en la pila y la puesta a punto de sus propiedades.

    • Un botón (preparTemplateImage) recoje todas las propiedasdes que definen cómo es una nueva instancia del objeto image. Este es el protagonista de toda la acción: observe como encapsula su actuación entre las instrucciones

      lock screen
      y
      unlock screen
      . De este modo, el usuario final no ve en la pantalla los detalles de creación y posicionamiento de los objetos creados. Este botón se ha establecido como deshabilitado (disabled) para denotar su caracter de auxiliar, en la versión final de la aplicación debería aparecer como oculto.

    Figura 6-14. Detalle de la aplicación planteada donde aparecen: los controles mencionados y un ejmplo de su ejecución.

    #
    # Campo de texto "directoriBD"
    #
    on mouseUp
      set the cursor to watch
      answer folder "Directori on comença la BD?"
      if the result <> "Cancel"  then  put it into me
    end mouseUp
    
    #
    # Botón "Carregar BD"
    #
    on mouseUp
      set the cursor to busy
      send "mouseUp" to button "preparaTemplateImage" 
      
      repeat with i = 1 to the number of lines of\
                         URL("file:" & fld "directoriBD" & "/" & "bdImagens.txt")
        lock screen
        create image
        set the filename of the image id (the id of the last image) to \
            fld "directoriBD" & "/miniatures/" &\
            line i of URL("file:" & fld "directoriBD" & "/" & "bdImagens.txt")
        if (i = 1)
        then
          set the top of the image id (the id of the last image) to \
              (the bottom of me + 4)
          set the left of the image id (the id of the last image) to \
              (the left of this card) + 3
        else
          set the loc of the image id (the id of the last image) to \
              (the first item of the loc of image (the number of images - 1) + \
                  the width of the templateImage ),\
              (the second item of the loc of image (the number of images - 1))
        end if
        unlock screen
      end repeat
    end mouseUp
    
    
    #
    # Botón "preparTemplateImage"
    #
    on mouseUp
      set the cursor to busy
      
      set the width of the templateImage to \
          (the width of this card) /  the number of lines of \
          URL("file:" & fld "directoriBD" & "/" & "bdImagens.txt")
      set the height of the templateImage to the width of the templateImage
      set the lockLocation of the templateImage to true
      set the script of the templateImage to the script of button "patroScript"
    end mouseUp
                          
  2. Añadir al ejemplo realizado en el apartado anterior un botón, cuya tarea es básicamente de ayuda durante la etapa de implementación: será el encargado de eliminar todas las imágenes de una tarjeta para poder establecer una situación de partida.

    Este es un simple ejercio si, a partir de la ayuda sobre la orden create que ha tenido que utilizar previamente localiza la ordren delete. La única dificultad es que no le sirve la misma estructura de iteraciones que en el caso anterior. Así, si se quiere reescribir el mínimo código deberá plantear el bucle en sentido inverso:

    on mouseUp
      set the cursor to busy
      
      repeat with i = the number of images down to 1
        delete image i
      end repeat
    end mouseUp
                          
  3. Continuando sobre el mismo ejemplo, incluir la posibilidad de que el usuario "ordene" según su criterio las imágenes. Para ello se habrá de posibilitar el "pinchar y arrastrar" una imagen y dejarla caer sobre otra. Lo que deberá desencadenar el intercambio de posición entre esas dos imágenes implicadas.

    Aviso

    grab i fer un swap de posicions entre les que intersecten.