Eduardo:
Trataré de ayudarte a construir tu programa.
Espero que hayas leído lo que tenemos en Internet y que hayas bajado los
libros SmalltalkByExample y Smalltalk with Style del sitio de Ducasse.
Hay una lista de links en el sitio, te mando una mas actualizada a[parte.
No te molestes en buscar en Internet, lo que deseas no existe. (hay muchos
tutoriales parciales a distintas cosas, dispersos por ahí_
Lo mas cercano sería el primer libro de Mark Guzdial.
Pero a no desesperarse, aquí te ayudaremos.
No sé como serán las bibliotecas en España, imagino que mucho mas modernas.
Aquí las bibliotecas tienen un salón grande con muchos ficheros metálicos
con rótulos y que contienen montones de fichas con datos como nombre,
título, clave.
No tienen fotos.
Pero eso no importa.
Quisiera saber como has "importado" o visto tu .jpg dentro de Squeak.
Hay muchas formas de hacerlo.
Así que te dare una posible solución al problema que deberás ver si te
sirve.
Como el Squeak va cambiando, usar el 3.8b 6548
Hagamos una clase libro (Ver página web)
Hagamos que sus variables de instancia sean autor, titulo, clave , foto.
Con el nombre de la clase seleccionado, hacer que aparezca el menú,
seleccionar "more" y luego create inst var accessor (ver fotito).
Aquí tienes tu clase, pero no como poner los datos o verlos.
La forma clásica es usar el Workspace y el Transcript,
A los alumnos que se encuentran con Smalltalk por primera vez , generalmente
no se les deja hacer otra cosa (ni usan Squeak)
Como quieres una forma visual y usar Morph, veremos entonces como hacer una
especie de "form" de Visualbasic en Squeak.
Combinaremos la forma manual y codificaremos.
Mi estilo es usar siempore contenedores, asi que la "ficha" de carton de la
biblioteca, será un BorderedMorph.
En el Worspace hacemos
ficha := BorderedMorph new openInWorld
Saldra un pequeño rectangulo azul en el vertice superior de la pantalla.
Con el "halo", lo podemos manipular a gusto para que tenga el tamaño y color
que deseemos.
Con los inspectores podemos ver los valores de todo lo que deseamos tenga
nuestro objeto.
Ahora, al código,
Es costumbre que todos los objetos tengan una forma de "nacer" dentro del
sistema, esto se realiza solo una vez con el metodo initialize y como somos
ordenados (ja ja ja) ponemos el metodo initialize dentro de la categoria de
metodos initialization.
initialize
super initialize.
self extent: 512 @ 342;color: Color paleYellow.
Ahora vamos a necesitar "algo" para ingresar los datos.
Otra vez en el Workspace hacemos
campo _ TextMorph borderedPrototype openInWorld
Y veremos un texto transparente con letra grande aparecer en el vertice
superior de la pantalla.
Si seleccionamos con doble click borderedPrototype ya hacemos control m
(Alt m en Windows) nos sale una ventana con los implementadores del método,
buscamos el de TextMorph.
| t |
t _ TextMorph authoringPrototype.
t fontName: 'Accuny' pointSize: 12.
t autoFit: false; extent: 100@20.
t borderWidth: 1;color: Color red;
backgroundColor: Color paleBlue.
t openInWorld
Este es mas lindo, perdona si soy incoherente, pero lo voy haciendo y
escribiendo.
Pero te ira dando una pista de como se puede hacer algo.
Lo probas manualmente o con el Workspace y cuando te gusta lo transformas en
una clase.
Asi creariamos un clase Campo (al estilo de las viejas bases de datos o del
Pascal o Cobol)
Ahora necesitamos algo para las fotos.
Como esto es medio bravo y largo de explicar, te mando el código y si no
entendes algo pregunta.
Por ahora , baste saber que tenemos algo llamado MiFotoMiniatura que te
permitira visualizar tus jpg en tamaño miniatura.
Y para que todo funcione , hay que ensamblar todos estos elementos en un
todo.
A los morph se les pueden adicionar otros morphs hasta.
Así que tenemos nuestro contenedor Libro, nuestro Campo para ingresar texto
y nuesto visualizador de fotos MiFotoMiniatura.
Faltaria agregar estos elementos.
agregarCampos
self autor: Campo new.
autor topLeft: self topLeft + (10@10) asPoint.
self addMorph: autor.
titulo _ Campo new.
self addMorph: titulo.
titulo topLeft: self topLeft +( 10@30) asPoint.
clave _ Campo new.
self addMorph: clave.
clave topLeft: self topLeft + (10@50) asPoint.
foto _ MiFotoMiniatura new.
self addMorph: foto.
foto topLeft: self topLeft + (10@75) asPoint.
Donde llamar a agregarCampos ?
En el último renglon de initialize.
Te mando el st del ejercicio, para que lo veas y juegues un poco.
Seguramente te quedarán infinitas dudas, bienvenido al club.
Prometo mañana hacer otro para que veas como conectar esta "ficha" visual
con tu "negocio" o datos .
Manda foto de que se ve desde tu ventana, aqui somos curiosos.
Chau y espero no haberte cansado.
Edgar
.