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. ;-)
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"?
ResponderExcluirNota: meu usuário está como "Unknown", mas aqui quem vos fala é o Wanderson Camargo ;)
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).
ExcluirNo 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 ---------