terça-feira, 7 de junho de 2011

Apresentando o Yad - "zenity melhorado"

Esse artigo foi cedido pelo Raimundo Alves Portela Filho ( "rai3mb" nick no viva o linux ) onde  mostrar uma maravilhosa ferramenta para GUI (Interface Gráfica com o Usuário), que acabou de sair do forno, o Yad, um fork do Zenity ( Já testei e achei bem melhor)  que vem com diversas melhorias, dentre elas a possibilidade de fazer formulários, melhorando a interação do usuário com nossos scripts em shell.

O bichinho é tão recente que nem o manual cobre todas as opções disponíveis
O autor do Yad é o ucraniano Victor Ananjevsky, e a página do projeto pode ser encontrada no:

Mesmo nessa página ainda há pouca informação sobre o uso do Yad, o melhor lugar que achei no momento é o manual dele (man yad) onde temos uma noção do que o Yad pode fazer .

Caso forem buscar informações, pouca coisa ainda está disponível, o manual está datado em “Marth 24, 2011”, e ainda tem o fato de Yad ser o nome de uma ferramenta “...usada em para apontar o texto durante a leitura do Torá...” (Fonte: http://en.wikipedia.org/wiki/Yad). Então ao buscar informações, busque por 'yad fork zenity' vai ser mais fácil.

Ok, vamos em frente pois no artigo pretendo mostrar alguns recursos do Yad, com uns 2 exemplo.

Instalação

Baixe o Yad no link abaixo:

Descompacte:

$ tar –jxf yad-0.11.0.tar.xz

Instale:

$cd yad-0.11.0/
$ ./configure
$ sudo make
$ sudo make install


Pode acontecer dele reclamar de alguma dependência, aqui no meu Debian, reclamou do libgtk2, basta instalar com:

$ sudo apt-get install libgtk2.0-dev


Após instalar, podemos testar com:

$ yad
e irá aparecer na tela

Parabéns o yad esta instalado e funcionado
Agora vamos à parte divertida e viciante, programar

Possibilidades e Exemplos de Uso

A sintaxe básica é :

yad [--tipo-dialogo] [--options]

Abaixo mostro exemplo com os tipos de diálogo:

--calendar (calendário)
--color (paleta de cores)
--entry (entrada de dados)
--icons (mostra uma caixa com ícones de atalho para aplicações)
--file (diálogo para selecionar arquivos)
--font (diálogo para seleção de fontes)
--form (aeeeeeee formulários)
--list (diálogo com ítens em lista)
--notification (mostra um ícone da barra de notificação do sistema)
--progress (diálogo de progresso)
--text-info (mostra o conteúdo de um arquivo texto)
--scale (diálogo para seleção de valor, usando uma escala)

Vamos lá, para cada um dos exemplos coloco o script e depois algumas imagens da sua execução.
Exemplo com " --calendar "
Mostra um calendário permitindo selecionar a data e envia o valor para a saída padrão
Crie um arquivo e edite com o " vi "
 $vi  calendar.sh

#!/bin/bash
# uso do yad com --calendar

# mostra um calendário iniciando com o dia 20/05/2011
# guarda o valor selecionar na variável $DATA
DATA=$(\
        yad --calendar \
        --day=20 \
        --month=5 \
        --year=2011 \
        --date-format=%d\/%m\/%Y \
                --title=Calendario \
                --center \ # disposição do diálogo na tela
)

# mostra um diálogo informando a $DATA selecionada
yad --title="AVISO" \         --text="Você selecionou a data $DATA"

#.EOF
Salve com o nome de "calendar.sh", dê permissão de execução:

$ chmod +x calendar.sh

Execute:

$ ./calendar.sh


Após selecionar uma data:



 Exemplo com " --form "

Uma das novidades que mais gostei: FORMULÁRIOS, não dava pra fazer isso no Zenity, e limitava as entradas do usuário tendo que aprensetar várias telas para coletar dados, o que não é muito prático.
Crie um arquivo e edite com o "vi"
 $vi  form.sh

#!/bin/bash
# yad com FORMULARIOS, que bacana, tem algumas novidades aprecie com calma
HOJE=$(date +%d/%m/%Y)
touch $HOME/cad_usuario.txt

VAR_FORM=$( \
   yad --form \
        --title="CADASTRO DE USUÁRIOS" \
        --width=400 \
        --height=400 \
        --image="accessories-text-editor" \
      --field="Cadastrando em":RO "$HOJE" \
        --field="Nome:" "" \
      --field="Sexo":CB Masculino!Feminino \
      --field="Login:" "$USER" \
      --field="Senha:":H "123456"\
        --field="Ler livro sobre:":RO "" \
      --field="Programação":CHK FALSE \
      --field="Redes":CHK FALSE \
      --field="Linux":CHK TRUE \
      --field="Quantos Filhos:":NUM 0!0..10!1 \
        --field="Foto:":FL "$HOME/Pictures" \
      --field="Salvar dados em:":DIR "$HOME" \
      --field="Cor preferida:":CLR "#00DDDD" \
)

DATA=$(echo "$VAR_FORM" | cut -d"|" -f 1)
NOME=$(echo "$VAR_FORM" | cut -d"|" -f 2)
SEXO=$(echo "$VAR_FORM" | cut -d"|" -f 3)
LOGIN=$(echo "$VAR_FORM" | cut -d"|" -f 4)
SENHA=$(echo "$VAR_FORM" | cut -d"|" -f 5)
#notem que pulei o campo 6, pois o mesmo nao retorna valor útil para nós
LIVRO_PROGRAMACAO=$(echo "$VAR_FORM" | cut -d"|" -f 7)
LIVRO_REDES=$(echo "$VAR_FORM" | cut -d"|" -f 8)
LIVRO_LINUX=$(echo "$VAR_FORM" | cut -d"|" -f 9)
QTD_FILHOS=$(echo "$VAR_FORM" | cut -d"|" -f 10)
FOTO=$(echo "$VAR_FORM" | cut -d"|" -f 11)
SALVAR_EM=$(echo "$VAR_FORM" | cut -d"|" -f 12)
COR=$(echo "$VAR_FORM" | cut -d"|" -f 13)
# repare que o campo $QTD_FILHOS retorna um valor no formato 0.000000
# vc pode usar uma expressão regular, ou o cut, para capturar apenas os digitos antes do .

QTD_FILHOS=$(echo $QTD_FILHOS | cut -d"." -f 1)

#apenas vou mostrar os campos e valores de retorno em um html
DADOS_USUARIO="<table border=1><br/>
         <tr><th>CAMPO</th><th>VALOR</th></tr>
         <tr><td>DATA</td><td>$DATA</td></tr>
         <tr><td>NOME</td><td>$NOME</td></tr>
         <tr><td>SEXO</td><td>$SEXO</td></tr>
         <tr><td>LOGIN</td><td>$LOGIN</td></tr>
         <tr><td colspan=2 align=center>LIVROS</td></tr>
         <tr><td>PROGRAMACAO</td><td>$LIVRO_PROGRAMACAO</td></tr>
         <tr><td>REDES</td><td>$LIVRO_REDES</td></tr>
         <tr><td>LINUX</td><td>$LIVRO_LINUX</td></tr>
         <tr><td>QTD_FILHOS</td><td>$QTD_FILHOS</td></tr>
         <tr><td>FOTO</td><td><img src='$FOTO' /></td></tr>
         <tr><td>DIRETORIO</td><td>$SALVAR_EM</td></tr>
         <tr><td>COR</td><td bgcolor='$COR'></td></tr>
      </table>"

echo $DADOS_USUARIO > cad_usuario.htm

firefox cad_usuario.htm

#.EOF


Salve com o nome de "form.sh", dê permissão de execução:

$ chmod +x form.sh

Execute:

$ ./form.sh


Após preencher o formulário:


Conclusões e Agradecimentos

Estou adorando conhecer o Yad, espero que a comunidade goste também, quanto mais pessoas apoiarem esse projeto, seja usando, seja divulgando, mais temos chances que ele se torne padrão futuramente nas distribuições mais usadas, como Ubuntu.
As possibilidades com o Yad são várias, depende apenas da criatividade,
Esses exemplos foram apenas demonstrativos. No site do projeto,
temos alguns exemplos bem interessantes
Mas ao longo do tempo vou postar aqui vários Scripts com Yad .
O Julio Neves apresentou uma palestra sobre o Yad no CONSEGI ,
 Ele tambem já informou que está trabalhando numa documentação,
onde já tem 70 Paginas acho que logo sai um livro sobre YAD será ?
Quero Agradecer o Raimundo Alves Portela Filho
por ter cedido seu artigo no Viva o Linux
ao Julio Neves pelo seu artigo no Dicas-L onde eu conheci o Yad
e também o Victor Ananjevsky por criar o Yad

Link do Artigo do Raimundo no Viva o Linux

Link do Artigo do Julio Neves no Dicas-L onde eu conheci o yad

Lista de Discussão do Yad no google  o Victor Ananjevsky sempre aparece por lá













Um comentário: