Hola Facundo,
  No sé con que nivel de detalle te interesa que te cuente, más o
menos así es como usamos el constructor de interfaces en SmallFaces,
aunque debo aclarar que es un trabajo que ha quedado por la mitad (no
era la prioridad en nuestro trabajo cotidiano) y no ha sido publicado.

El constructor se ejecuta sobre el mismo navegador web, para esto
usamos MooTools que es una librería JavaScript más rica en controles
que Scriptaculous (en ese momento no estaba portado jQuery) o al menos
fue más cómoda, en verdad había buenos argumentos a favor de MooTools
en el foro e iba a enviarles las referencias, pero el foro fue mudado
y se perdió el contenido. Fue un poco decepcionante todo esto de las
librerías JavaScript, tuvimos que armar tablas para traducir lo que
sabíamos de Scriptaculous a MooTools. Ahora la discusión es versus
jQuery...en fin, modas.

Sobre MooTools portamos a Seaside otro un par de librerías JavaScript
para el dibujado del árbol de controles y manejo de eventos,
retamañado de controles, y edición en grilla de propiedades de un
control. La interface estaba compuesta de 4 áreas: Una galería de
controles (cada control se corresponde con un objeto SmallFaces) en
forma de árbol, un área de edición de controles visual, una grilla de
edición de propiedades y un previsualizador del código generado. Todo
lo que es creación visual de controles está en el JavaScript, por ej:

var aDiv = createResizableElement("resizeImageField");
var aWidget = new Element("input", { "type": "image" });

para capturar todos los eventos en Seaside interceptamos #start:
redirigiendo el #initialRequest desde el root actual:

root visiblePresentersDo: [:ea | ea initialRequest: aRequest].

el Request estaba configurado como para obtener y actualizar todas las
propiedades modificables de un control, algo así

aControlProperty perform: (aRequest fields at: 'attribute') asMutator
with: (aRequest fields at: 'value')

La secuencia era más o menos:

-El usuario escribe el nombre de la clase a crear (WAExampleBuilded)
-Selecciona un control de una lista
-Se agrega un nodo en el árbol de la interface, esto también inserta
el control dentro de un retamañador.
-Se agrega un nodo en el árbol del modelo
-Se selecciona el nodo desde la interface
--Aparece un editor en grilla para el control seleccionado en la
interface (esto configura una cookie con el identificador del control
y un updater en la función addEvent de MooTools para dibujar un editor
de propiedades).
--Se configura el control desde la grilla, actualizando el editor de
código mediante un callback en el updater del paso anterior.
---La previsualización del control se realiza automáticamente con otro
updater que va actualizando a medida que se deselecciona cada campo de
entrada de la grilla.
---Durante la previsualización un acumulador de código genera la
cadena de creación y se compila este código.
-Al finalizar, se generaba el #renderContentOn: en WAExampleBuilded
recorriendo el árbol e instalando los método compilados en su
diccionario de clases.

También agregamos una papelera de reciclaje sobre la cual uno
arrastraba el control y desaparecía, esto significaba enlazar algunos
eventos JavaScript más, etc. Bueno, tal vez en estos días suba un
video si alguien está interesado.
Saludos

Hernán

2009/11/27 Facundo Vozzi <[email protected]>:
> Hernán,
> a mí me gusta como guarda la descripción VS pero Dolphin lo serializa e
> igualmente funciona sin problemas.
> Lo que no entiendo es porque deberías guardar la especificación de una
> ventana generada dinamicamente para luego modificarla con un constructor? Me
> podés contar como lo usan?
> Un abrazo,
> Facu
>
> 2009/11/27 Hernán Morales Durand <[email protected]>
>>
>> Hola Gallego,
>>  Me refiero a la representación de la interface generada
>> dinámicamente (por un usuario) para que pueda ser regenerada por una
>> herramienta de edición luego.
>>  En el constructor de SmallFaces, con Juan usamos Aspectos en el
>> generador de código para poder modificar en vivo un objeto de
>> interface, así que puede venir por el lado de lo que vos llamás
>> Descriptors, es decir, mi duda sería más si caminar un #windowSpec es
>> la mejor forma de trabajar en estos casos.
>> Saludos
>>
>> Hernán
>>
>> 2009/11/27 GallegO <[email protected]>:
>> >
>> > Hernan:
>> >
>> > ¿Te referis a Descriptors o Aspects?
>> >
>> > Saludos
>> >  GallegO
>> >
>> > El día 26 de noviembre de 2009 23:26, Hernán Morales Durand
>> > <[email protected]> escribió:
>> >>
>> >> Hola gente,
>> >>  Si alguien tiene experiencia implementando constructores de
>> >> interface de usuario en Smalltalk, ¿podría comentar sobre algún buen
>> >> paper, reporte o simplemente ideas? Estoy interesado en lo que la
>> >> mayoría de los constructores solucionan con "Especificaciones".
>> >> Muchas gracias,
>> >>
>> >> Hernán
>> >>
>> >> >
>> >>
>> >
>> > >
>> >
>>
>>
>
>
>
> --
> Facundo Vozzi
> InfOil S.A.
> Project Leader
> (+54-11) 4542-9999 x108
> [email protected]
>
> >
>

--~--~---------~--~----~------------~-------~--~----~

To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]

http://www.clubSmalltalk.org
-~----------~----~----~----~------~----~------~--~---

Responder a