LG_jc.gif (3670 bytes)
 






Atualizada às terças

Visual Tcl - Parte 3

Continuando o nosso programa da semana passada (Executor), adicionaremos uma facilidade de história, para salvar os comandos que executamos anteriormente, em um objeto chamado "listbox".  Primeiramente, devemos modificar a nossa janela principal para conter mais um botão, que daremos o nome de "história". Aproveitamos também para criar um apelido para a nossa caixa de entrada, teclando Alt-A ou no menu "Options->SetAlias", e introduzindo seu apelido: "entrada".


janela principal

O próximo passo é criar um novo toplevel e empacotar (com o "pack") nele um "listbox" com barras de rolagem. O Visual Tcl já tem esse objeto como um composto (menu"Compound-> Insert -> System -> ScrollableListbox"). Precisaremos também criar
um apelido para o "listbox", digamos "comandos", e para a segunda janela ou toplevel, digamos "comandos_top".


fig.2 - janela com listbox e scrollbars

Controlaremos o aparecimento da segunda janela com o comando "Window", definido automaticamente pelo Visual Tcl. O subcomando "hide" faz a janela desaparecer sem destruí-la, enquanto que o subcomando "show" torna a deixá-la visível. Através dos apelidos, podemos acessar os nomes reaisdos objetos (widgets) no vetor "widget". Por exemplo, nossa caixa de entrada será agora "widget (entrada)"¸ muito mais mnemônico que ".top17.e18" ou algo parecido.

Quando o usuário aciona o botão "RUN", salvamos nas variáveis "e" e "l" os nomes da "entrada" e "comandos", respectivamente (tabela.1). Em seguida, inserimos no final da "listbox" o conteúdo da "entrada" e usamos um "if" para não deixá-la crescer mais que 20 linhas. Você pode colocar números maiores, se preferir. Então executamos, como mostrado na semana anterior, e finalmente limpamos o conteúdo da caixa de entrada, com o comando "delete 0 end", isto é, do primeiro ao último índice.

O botão "história" é o mais simples, pois somente irá mostrar a segunda janela, usando o comando "Window show" (tabela.2). A parte com mais truques é o "binding" para a "listbox". Queremos que, quando clicarmos duplamente numa linha dessa lista, este valor seja colocado na caixa de entrada (mas sem executar nada) e em seguida fazer a segunda janela desaparecer novamente.  Para isso, devemos selecionar a "listbox", com o cuidado de não incluir todo o "toplevel" nessa seleção e usar o editor de bindings, com o comando Alt-B ou menu "Options-> Bindings" (fig.3 - editor de bindings).



editor de bindings


Na linha contendo "Event" escreveremos "<Double-Button-1>" que significa um duplo-clique no botão da esquerda do mouse e introduzimos na caixa de texto superior (com o rótulo "Command") os comandos desejados (tabela.3).  Ao concluir, pressionamos o botão "Add" e em seguida "Done".


tabela.1
-----------------------------------------------
Comando executado pelo botão "RUN":

set e $widget(entrada)
set l $widget(comandos)
$l insert end [$e get]
if {[$l size] > 20} {
 
$l delete 0
}
eval exec [$e get]
$e delete 0 end
-----------------------------------------------

tabela.2
-----------------------------------------------
Comando executado pelo botão "história":

Window show $widget(comandos_top)
-----------------------------------------------


tabela.3
--------------------------------------------------------------
Binding para o duplo-clique em um item da lista de comandos:
(<Double-Button-1>)

set e $widget(entrada)
set l $widget(comandos)
$e delete 0 end
$e insert end [$l get [$l curselection]]
Window hide $widget(comandos_top)
--------------------------------------------------------------

Anteriores

Visual Tcl Parte 2 (21/09/1999)
O Visual Tcl 
(14/09/99)
Programando para Linux (08/09/1999)