segunda-feira, 20 de outubro de 2014

Meu primeiro programa para Linux, Windows e Android.

Apesar do R3 ainda estar em desenvolvimento, resolvi testar a parte gráfica. A ideia foi fazer um programa simples para o cálculo individual do valor a ser pago em um restaurante informando-se o número de pessoas, total da conta e o percentual da gorjeta. Apesar do desenvolvimento ser feito no Linux, o programa deveria rodar no Windows e Android.

O primeiro problema encontrado foi a resolução da tela final. Ficava bom no Linux e razoável no Tablet. Mas muito pequeno no celular. Alguns pequenos cálculos foram suficientes para resolver o problema de forma satisfatória.

O segundo problema foi o modo como o ambiente gráfico era carregado. Estava utilizando load-gui. Funcionava perfeitamente mas, como a instrução pede para carregar o ambiente pela internet, achei que não seria indicado. Se o aparelho estiver desconectado, o comando irá falhar. Optei por baixar o programa r3-gui.r3 (responsável pelo dialeto gráfico) da Saphirion, colocá-lo na mesma pasta do programa e utilizar do %r3-gui.r3. Assim não precisaria de acesso à internet. Rodou bem no Android e no Windows. No Linux estou usando o REBOL da Atronix e o programa apresentou erro. A solução mais simples foi baixar o r3-gui.r3 da Atronix. Aí precisei incluir as linhas 3 até 5 (poderia ser apenas uma linha) para contornar a situação. Não cheguei a testar se o programa da Atronix funciona com o R3 da Saphirion.

O terceiro problema, que é mais uma dificuldade do que um problema propriamente dito, trata-se da execução no Android. Atualmente é necessário executar o REBOL e digitar "do %caminho/programa" para executar. Como estava testando o ambiente para desenvolvimento no tablet (faço outro artigo para explicar como está montado) achava mais fácil abrir o editor, abrir o programa e abrir com aplicativo (o R3 já estava listado). O ideal seria a criação de um .apk para a instalação e execução clicando um ícone. Já é possível criar aplicações para Android com Red, mas fica para outra hora já que o ambiente ainda não está maduro o suficiente para o meu gosto.

O programa ficou maior do que eu pensava. Foram 34 linhas, incluindo as linhas em branco e as três linha para contornar o problema. As linhas 7 e 34 foram para melhorar a aparência nos diversos foramatos de tela (desktop, tablet e celular).




 1 REBOL [Title: "Calculadora de gorjeta"]
 2 
 3 either system/product = 'atronix-view 
 4     [do %r3-gui-a.r3]
 5     [do %r3-gui.r3]
 6 
 7 gui-metric/set 'unit-size (gui-metric 'screen-dpi) / 96
 8 
 9 out: layout [
10     hpanel 2 [
11         text "Qtd. Pessoas" 
12             f-pessoas: field "4"
13             text "Total Conta" 
14             f-conta: field "50"
15             text "Gorjeta"
16             f-gorjeta: field "10"
17             pad
18             button "Calcular" on-action [
19                 pessoas: to-decimal get-face f-pessoas
20                 gorjeta: (to-decimal get-face f-gorjeta) / 100 + 1
21                 conta: to-decimal get-face f-conta
22                 total: round/to (conta * gorjeta) 0.01
23                 individual: round/to (total / pessoas) 0.01
24                 set-face f-total total 
25                 set-face f-individual individual
26             ]
27             text "Total Geral"
28             f-total: field
29             text "Individual"
30         f-individual: field
31     ]
32 ]
33         
34 view/options out [max-hint: round/floor (gui-metric 'work-size) - gui-metric 'title-size]

A aparência ficou assim:

Windows XP (é o único que tenho para testar)


No Linux (Manjaro x64)


No Galaxy S (é velho mas o único que tenho)


No Tablet (Galaxy 10.1). A janela não ocupa toda a tela como no celular mas, como é bem maior, fica perfeitamente legível e fácil de acessar os campos/botão.


Conclusão? Assim até faço alguma coisa para Android, Linux e Windows. ;-)








2 comentários:

  1. Interessante a linguagem. Parece facilitar bastante a questão de formulários. Pelo que entendi, basicamente define a ordem dos elementos na tela na ordem que vai programando. Os "panels" são modificados através de "skins"?

    Nota: meu usuário está como "Unknown", mas aqui quem vos fala é o Wanderson Camargo ;)

    ResponderExcluir
    Respostas
    1. O sistema para a posicionamento dos controles é semelhante (mas mais fácil) ao encontrado no KDE ou GTK. Eles possuem paineis horizontais, verticais e tabelas (também possuem posicionamento fixo como no Windows mas é menos flexível).
      No caso do exemplo acima, especifiquei o layout como sendo uma tabela horizontal de duas colunas. Vou inserindo os componentes e eles serão colocados lado a lado na horizontal. Ao completar a segunda coluna, o próximo será colocado na próxima linha. Existe o "hgroup" que funciona de forma semelhante mas sem limite de colunas. Tenho que inserir "return" para passar para a próxima linha. Existem também as versões verticais.

      O exemplo em GTK de https://developer.gnome.org/gtk-tutorial/stable/x441.html ficaria aproximadamente assim em REBOL (nem vou perguntar qual dos dois eu acho mais simples). :

      --------- 8< ---------

      REBOL [Title: "Table"]

      load-gui

      callback: function [botao] [
      ····print ["Hello again - " botao/facets/text " was pressed!"]
      ]

      view [
      ····hgroup [
      ········b1: button "Button 1" on-action [callback b1]
      ········b2: button "Button 2" on-action [callback b2] return
      ········button "Quit" on-action [quit]
      ····]
      ]

      --------- >8 ---------

      Excluir