Já cobri estes Dialogs no
Artigo anterior, mas assim como o Yad, acredito que
aprendi bastante nos últimos meses. Então vou apresentar novamente estes Dialogs, cobrindo novidades e expondo um exemplo útil para o dia a dia de cada um deles.
yad --form
O
form é tão importante, que mereceria um Artigo só pra ele ;-), é uma mão na roda para desenvolver aplicações mais completas que precisam capturar
diversas informações de entradas por usuários.
Abaixo um exemplo usado apenas para demonstrar alguns campos e forma de uso:
#!/bin/bash
# Cadastro de Palestrante em Evento
yad --form \
--title='Cadastro de Palestrante' --center \
--field='Operador do sistema:':RO "$USER" \
--field='':LBL '' \
--field='Nome:' '' \
--field="- [ TIRAR FOTO ] -":BTN "streamer -c /dev/video0 -t 00:00:02 -b 32 -o teste_00.jpeg" \
--field="- [ VER A FOTO ] -":BTN "yad --image='teste_19.jpeg' --timeout=2 --no-buttons --undecorated --geometry=+0+200" \
--field='Mini-curriculo:':FL "$HOME" \
--field='Titulo da Palestra:' '' \
--field='Resumo:':FL "$HOME" \
--field="Slides:":FL "$HOME" \
--date-format="%d/%m/%Y" \
--field="Dia:":DT "$(date +%d/%m/%Y)" \
--field="Nr. Sala:":NUM 1!1..14!1 \
--field="<b>Recursos</b> :":LBL '' \
--field='DataShow':CHK TRUE --field='Quadro Negro':CHK FALSE --field='Microfone':CHK FALSE --field='Computador':CHK FALSE \
--field="Nível:":CB "INICIANTE!INTERMEDIÁRIO!AVANÇADO" \
--field='':LBL '' \
--field="Salvar arquivos em:":DIR \
--columns=2 --button='_Sair':1 --button='_Cadastrar':0 >> cad_palestrantes.txt
Ao executar o script acima, os dados do formulário, ao pressionar o botão 'Cadastrar', serão salvos do arquivo "cad_palestrantes.txt" separados por '|' (barra vertical) que é
o separador padrão do Yad, você pode especificar outro usando o parâmetro '--separator'.
O 'form' contém diversos tipos de campos, denominados '--field', e cada um deles pode ser configurado com um tipo que direciona o comportamento do mesmo.
Sintaxe de uso:
yad --form --field='texto do campo':TIPO 'conteúdo'
Bom, agora vamos apreciar uma rápida descrição de alguns campos usados no exemplo do cadastro de palestrantes:
- --field='Operador do sistema:':RO "$USER" : Este é um campo tipo somente leitura (Read Only), onde a informação é apresentada e não pode ser alterada;
- --field='':LBL '' : Campo tipo rótulo (label), útil para descrever o que virá a seguir, quando usado sem descrever o 'texto do campo', é exibido uma linha horizontal no
seu lugar;
- --field='Nome:' '' : Aqui um campo simples, onde não defini seu TIPO, assim ele cria um campo para entrada de texto;
- --field="- [ VER A FOTO ] -":BTN "yad --image='teste_19.jpeg' --timeout=2 --no-buttons --undecorated --geometry=+0+200" : Nesse usei um campo do tipo BTN,
colocando em seu comando a chamada para outro Dialog do Yad para mostrar a foto tirada com o comando do campo anterior, observem o campo --geometry=+0+200, ele
permite configurar o tamanho e posicionamento do Dialog, nesse caso estou configurando as posições da tela no pixel 0 na horizontal e 200 na vertical;
- --field='Mini-curriculo:':FL "$HOME" : Um botão para selecionar arquivo, passei a ele o diretório inicial "$HOME";
- --date-format="%d/%m/%Y" : Aqui estou configurando o formato da data para o campo do tipo DT (data);
- --field="Dia:":DT "$(date +%d/%m/%Y)" : Campo do tipo data, permite selecionar uma data assim como o Dialog yad --calendar (informei como conteúdo inicial a data
atual);
- --field="Nr. Sala:":NUM 1!1..14!1 : Campo do tipo numérico, onde podemos informar o valor inicial, uma faixa de valores mínimo e máximo, seguido do valor de cada
passo. No caso descrito teremos valor inicial 1, permitindo um valor mínimo de 1 e máximo 14, permitindo passos de 1 em 1;
- --field='DataShow':CHK TRUE : Um campo do tipo Check Box, onde informamos como valor inicial TRUE para marcado e FALSE para desmarcado;
- --field="Nível:":CB "INICIANTE!INTERMEDIÁRIO!AVANÇADO" : Aqui um campo tipo Combo Box, onde uma faixa de valor é pré-configurada e permitido ao usuário
selecionar um deles, observem que cada item é separado por uma exclamação '!';
- --field="Salvar arquivos em:":DIR : Permite selecionar um diretório (usei só para mostrar mesmo);
- --columns=2 : Organiza os campos do formulário em colunas, sendo que os campos são organizados na vertical (observe o que fiz no script Calculadora Shell com Yad).
Agora mais um script para demonstrar algumas das novidades do 'form' no Yad, tendo a possibilidade de imprimir conteúdo dentro de um campo texto e também de
podermos capturar o conteúdo de um campo texto, para ser usado em outro campo, tudo isso sem que o Dialog seja fechado.
O código do script pode ser visto no link:
Calculadora Shell com Yad
Obs.: Não coloquei a opção de '--undecorated', o fato de não aparecer os botões da janela é em decorrência ao uso do
Cinnamon no Gnome3 ;-)
Explicação:
Para imprimir conteúdo em um campo, o campo tipo BTN, deve ser iniciado com um '@', e deve imprimir um texto iniciado com o número do campo a ter o conteúdo
mudado.
Exemplo:
yad --form --field='Mostrar aqui' '' --field='Testar':BTN "@echo '1:Hello world'"
No caso acima, o campo 1 é o --field='Mostrar aqui' ''.
Para capturar o texto de um campo, basta referenciar o campo, usando um '%1' (primeiro campo), '%2' (segundo), e assim por diante.
Exemplo:
yad --form --field='Texto' 'Hello World' --field='Testar':BTN "yad --text '%1'"
Agora um bônus ;-), vejam um Piano usando o '--form' e o novo recurso do campo BTN para executar comandos. No script uso o comando play disponível na aplicação Sox
(Detalhes do código e download em
Piano em Shell + Yad):
Obs.: Para usá-lo você precisa ter instalado o Sox:
sudo apt-get install sox
Ao executá-lo, verás:
O código ficou bem pequeno, porque ao invés de criar manualmente todos os 49 botões, usei o próprio shell para construir o shell. ;-)
Demais campos que poderíamos usar no 'form':
- --field='texto do campo':TIPO 'conteúdo' : Existe uma lista bem extensa de tipos de campos, como: H, RO, NUM, CHK, CB, CBE, FL, SFL, DIR, CDIR, FN, MFL, DT,
CLR,BTN or LBL. Veja detalhes sobre eles no manual do Yad. (Se precisar de ajuda, use a lista do Yad, ou sinta-se a vontade para trocar informações comigo);
- --align=TIPO : Configura o alinhamento do Texto nos campos (left, center ou right);
- --separator=STRING : Como comentado acima, define um carácter para separar o texto de retorno dos campos, sendo o padrão '|';
- --item-separator=STRING : Define um separador para os itens de campos como CB e NUM.
Como disse, são muitas opções. Desculpe se a explicação dada não ter ficado muito clara, mas precisando, basta entrar em contato.