6.4 Una breve introducción a los inspectores

Para obtener el halo de construcción de una morfología interior, simplemente haz clic-central varias veces para «profundizar» en la jerarquía de submorphs.

ch06-07-MiddleClickRect

Figura 6.6: Clic-central para controles de construcción

ch06-08-2ndMidClckToSubmorph

Figura 6.7: Click-central de nuevo para descender en los submorphs

Hay un control naranja a la derecha, justo debajo del control verde Duplicate. Haga clic-izquierdo del ratón para acceder al menú Debug. Utilice este menú para obtener un inspector para el rectángulo.

Observa la Figura 6.8, a la izquierda tenemos un panel para self, todas las variables de instancia y las variables de instancia individuales. Al hacer clic para seleccionar «all inst vars» y el panel de valores de la derecha, se muestra que el propietario del rectángulo es la elipse y que por ahora no tiene submorphs.

El panel inferior es un editor de código Smalltalk, básicamente un espacio de trabajo, donde self está vinculado al objeto que estamos inspeccionando.

Por cierto, los inspectores trabajan con todos los objetos, no solo con los morphs.

ch06-11aColorClickOnRect

Figura 6.8: Añadir comportamiento específico de la instancia

Para añadir un comportamiento a todas las instancias de una clase, creamos un método de instancia. Aquí vamos a crear un comportamiento para «solo esta instancia BoxedMorph».

Además de las variables de instancia, un morph puede tener cualquier número de propiedades con nombre que pueden ser diferentes para cada morph.

Añadimos aquí dos propiedades:

self setProperty: #handlesMouseDown: toValue: true.
self setProperty: #mouseButton1Up:localPosition:
   toValue: [:ignoredEvent :ignoredPosition| self color: Color random]

Ejemplo 6.1: Modificar el comportamiento de este morph desde su Inspector

Estas propiedades son específicas de la interfaz de usuario. Puede encontrar métodos con estos nombres en la clase Morph para ver qué hacen.

Después de seleccionar el texto y Do-it, cada vez que hagas clic-izquierdo del ratón sobre el rectángulo, ¡cambiará de color!

Ten en cuenta que ya no puedes mover la elipse haciendo clic con el ratón sobre el rectángulo, porque ahora el rectángulo capta el evento del ratón. Tienes que hacer clic con el ratón sobre la elipse. Más información al respecto a continuación.

Una nota rápida sobre Move frente a Pick up. Move mueve un submorph «dentro» de su padre. Pick up saca un morph «fuera» de su padre.

ch06-09-Move-Within

Figura 6.9: Mover un submorph dentro de su padre

ch06-10-PickUp-2-MoveOut

Figura 6.10: Sacar un submorph de su padre

Antes de continuar, utilicemos un inspector en la elipse para cambiar los valores de un par de sus variables de instancia.

ch06-12-InspectEllipse

Figura 6.11: Inspeccionar variables de instancia de la elipse

Observa Figura 6.12 y Ejemplo 6.2. En el panel inferior del inspector, se puede ejecutar código en el contexto del objeto inspeccionado. self hace referencia a la instancia. Aquí, el panel contiene código para establecer el borderWidth y el borderColor.

self borderWidth: 10.
self borderColor: Color blue

Ejemplo 6.2: Modificar el estado de esta elipse desde su Inspector

ch06-14-SetBorderColor

Figura 6.12: Utilizar el Inspector para establecer el color y el ancho del borde

En el caso típico, se desea refinar o cambiar los comportamientos de todas las instancias de una clase.