Recuerde que el planteamiento que abordamos aquí es que es posible modificar las pilas que componen el entorno de edición de MetaCard, incluso la propia pila "Home". También es posible aplicar estas ideas a Revolution. Pero ahora que se ha asentado un protocolo para la inclusión de nuevos componentes (plug-ins) en ambas herramientas, este es un ejercicio de profundizar en la estructura de estas herramientas, en absoluto una guía de obligado cumplimiento para extender las posibilidades existentes.
Para crear nuestra propia "barra de herramientas", se ha planteado el desarrollar un catálogo de objetos para su utilización en el desarrollo de aplicaciones en MetaCard. La pila propuesta debe poder ser lanzada desde la pila "Home" y dará paso a diferentes realizaciones: desde tipos de botones, hasta nuevos controles que se desarrollen.
Para ello aquí se propone la definición de una estructura de este "catálogo de objetos" y un ejemplo inicial a lo que llamaremos "galería de objetos". Se quiere con este ejemplo descubrir la forma de operar de una aplicación de este estilo. Una vez concretado el mecanimo, hacer crecer la lista de objetos disponibles es sólo cuestión de ir recogiendo los que se vayan sugiriendo o inventando.
A partir de aquí la inclusión de nuevos elementos se puede llevar a cabo por diferentes personas de forma independiente. Para ello se utilizará la información del fichero "galeria.ini", que en formato de texto plano, contendrá líneas de la forma:
etiqueta_del_boton_en_la_pila_principal nombre_pila_sin_extensiony la forma más simple se muestra en la Figura 14-1.
La estructura de esta pila está basada en una sencilla pila de una única tarjeta y un número indeterminado de botones. Estos se averiguarán en tiempo de ejecución al abrir el fichero de configuración. Cada uno de estos controles abrirá una pila y en esta, con pequeñas imágenes por ejemplo, se ofrecen las distintas variantes a utilizar de ese tipo de control. El usuario escogerá una y esta se hará aparecer en la pila que se está desarrollando. Así que, básicamente, tenemos dos controles:
La pila principal; que contiene la lista de botones que implementen los usuarios y que se inicia con el código:
palette "galeria.mc"
Así como un botón oculto que servirá para facilitar la inclusión de los que se vayan creando.El código de la pila queda libre, de momento, para realizar inicializaciones: directorio inicial, búsqueda del fichero "galeria.ini", ...
En la única tarjeta que posee se inicializa la disposición de los botones que contiene con
local listaBotones on preOpenCard put url "file:galeria.ini" into listaBotones repeat for each line k in listaBotones if not exists( btn the second word of k ) then put the short name of last button into nomUltimBoto clone button "ocult" set the name of btn id (the third word of it) to the second word of k set the label of the btn (the second word of k) to the first word of k set the left of btn (the second word of k) to the left of this card if the number of buttons is 3 then set the top of btn (the second word of k) to the top of this card else set the top of btn (the second word of k) to the bottom of the btn nomUltimBoto end if end if end repeat set the height of this stack to ((the number of buttons - 1) * the height of btn "ocult") end preOpenCard
Y el botón "ocult", que está oculto realmente, en esta pila tiene el código:
on mouseUp palette (the short name of me) end mouseUp
Y un botón de ejemplo; para incluir un primer botón en la galería, que facilite la creación de botones con diferentes estilos en la pila que se esté desarrollando, se creará una pila que contenga las imágenes de estos. De forma que al pulsar sobre una de estas imágenes se cree un botón del estilo indicado. En la propiedad nombre de estas imágenes deberá figurar el estilo del botón al que corresponde. Para que sea operativa deberá incluirse una línea Botons botones.mc en el fichero galeria.ini
En estas pilas (botones.mc) será necesario incluir el código siguiente:
En estas pilas (botones.mc) será necesario incluir el código siguiente:
on mouseUp close me end mouseUp
Y en cada botón
on mouseUp set defaultStack to the topStack create invisible button set the style of button id (the third word of it) to the short name of me show the last button pass mouseUp end mouseUp
Pero la pantalla se llena con muchas ventanitas fácilmente, así que aunque la idea parece interesante, no nos satisface como para emplearla a diario. Tampoco hemos conseguido imita el funcionamiento de MetaCard así que hemos de seguir explorando nuevas soluciones que discrepen menos en su modo de funcionar respecto a aquel al que ya nos hemos acostumbrado trabajando con estas herramientas. Veamos otra aproximación.