domingo, 4 de abril de 2010

Quem ama BLOXeia!

Smalltalk GNU Smalltalk é a implementação Smalltalk da Free Software Foundation para o sistema operacional GNU.

Para interface gráfica, ele oferece o módulo BLOX. Sua IDE pode ser iniciada pelo comando:
bash$ gst-blox


Caso queira navegar pelas classes de sua própria imagem – dev.im por exemplo –, use:
bash$ gst-blox -I dev.im


Este artigo apresentará um exemplo extremamente simples de uso programático do BLOX para criar interface gráfica com o usuário, baseado no código encontrado no tutorial oficial.

Primeiro vamos criar a imagem contendo o módulo BLOX:
bash$ gst-load -iI blox-sample.im Blox


Crie um arquivo fonte blox-sample.st onde vamos trabalhar.

Declare as variáveis que usaremos:
| win con lab bt |


Agora crie a janela principal com o título Example e seu container:
" Main window "
win := BLOX.BWindow new: 'Example'.
con := BLOX.BContainer new: win.


Para definar as dimensões da janela e a callback do botão de fechamento:
" Main window's geometry and close button "
win
width: 200 height: 50;

callback: [
BLOX.Blox terminateMainLoop.
true.
] message: #value.


A callback encerrará o ciclo principal. Callbacks de janelas precisam ter a última saída true (quando a janela deve ser fechada) ou false (quando a janela não deve ser fechada).

Podemos então configurar a geometria padrão para widgets filhos:
" Geometry management "
con
setVerticalLayout: true;
defaultHeight: 50;
defaultWidth: 200.


Agora, para criar um rótulo (label) e um botão:
lab := BLOX.BLabel new: con label: 'Waiting...'.
bt := BLOX.BButton new: con label: 'Click me'.


O rótulo exibirá seu texto centralizado, com fundo azul e cor de texto branco:
" Label setup "
lab
alignment: #TopCenter;
backgroundColor: #blue;
foregroundColor: #white.


A callback que responde ao evento clique no botão:
" Button callback "
bt
callback: [
lab label: 'HELLO WORLD!'.
] message: #value.


Para exibir a janela:
" Show window "
win map.


Por último devemos iniciar o ciclo principal (mainloop):
" Start mainloop "
BLOX.Blox dispatchEvents: win.


Se quiser, é possível exibir uma mensagem indicando o fim do programa:
Transcript
show: 'Finished';
cr.


Resta apenas executar a aplicação:
bash$ gst -I blox-sample.im -f blox-sample.st


Outra opção ao BLOX é Gtk+.

[]’s
Cacilhας, La Batalema
blog comments powered by Disqus