Com relação às questões postadas pelo Riceman:
1.e 5. A minha base foi o 1.7.1 mesmo. Dai eu gerei o 1.7.2 e depois
passou para o gambler 1.0.53.
IMPORTANTE: eu somente modifiquei os arquivos FormPrincipal.form e
FormPrincipal.class. Todos os outros Form eu não mexi nada. Portanto,
qualquer modificação feita nos Form dos icones mágicos, ou outros,
pode ser portada diretamente. Se houve alguma alteração no nome dos
arquivos foi apenas isso, o conteúdo ficou igual, portanto acho que
tudo ficou certo.
2. e 6. Como vcs. perceberam, o FormPrincipal.class ficou quase que
totalmente com apenas um único tipo de função, aquelas do tipo:
SHELL "`gambler -b BtnDlinkDW650`"
Como Riceman já observou, o código do .class poderia ser reduzido por
causa disso. Mas eu não conhecia aquele esquema do Script.call que ele
tinha bolado. Nós temos que padronizar, certamente, e sugiro que
adotemos o esquema com a melhor performance em tempo de execução.
Probablemente esse esquema seja o do Script.call, pois é feito dentro
do prórpio gambas, por assim dizer.
Vou esclarecer como funciona o esquema do "gambler -b", em parte para
responder as questões do Riceman, em parte para vcs. saberem como
funciona:
O comando "gambler" é aquele shell-script que eu tinha colocado na
pasta /usr/bin e que servia para executar o binário do gambas,
independentemente do nome do painel. Eu acresentei o opção -b, de
button ou botão, que faz o seguinte: quando você roda, por exemplo, o
comando:
gambler -b BtnDlinkDW650
ele procura no arquivo ~/.gambler/gamblerrc alguma linha que começe
com o nome fornecido como argumento na linha de comando, que no caso
do exemplo acima seria BtnDlinkW650. Se ele achar uma tal linha, então
ele tenta ler o que estiver colocado à direita do sinal = e esse ai
deve ser o nome do comando a ser executado. Se ele não encontrar a
linha ou não conseguir ler o nome do comando, então ele tenta fazer a
mesma coisa com o arquivo de configuração global /etc/gambler/
gambler.conf. Se não achar nada ai também não, então desiste e nada é
feito.
Como ele procura a linha que começe exatamente com o nome do button,
ele ignora qualquer linha em branco ou que começe com o caracter #,
por exemplo, o que permite acrescentar comentários nos arquivos de
configuração, igual que o padrão do sistema.
Antes de voltar para o .class é necessário mais um esclarecimento
sobre a Bash, ou seja própria shell usada no Linux. A bash tem um
recurso muito útil que consiste no seguinte: quando você coloca algum
comando entre aspas simples invertidas ela executa primeiro o comando,
substiui o resultado na shell e depois continua com a execução normal.
Vou dar o seguinte exemplo simples: suponha que você quer dar uma
olhada em algum script diretamente no terminal, usando o "cat" ou o
"more", mas você não lembra em qual pasta estava o script. Para
localizar executáveis no sistema você pode usar o comando "which", que
retorna o path do executável, se tal executável existir, por exemplo:
$ which gambler
/usr/bin/gambler
Agora, para visualizar o conteúdo do script vc. deveria usar o
comando:
$ more /usr/bin/gambler
Porém, alternativamente, vc. pode "matar dois coelhos de uma cajadada
só" usando aquele recurso das aspas simples invertidas, e fazer o
seguinte:
$ more `which gambler`
Nesse caso, a bash vai executar primeiro o comando que estiver contido
entre as aspas, which gambler, vai substituir o resultado, /usr/bin/
gambler, e depois disso vai executar a linha de comando original, ou
seja ficaria
$ more /usr/bin/gambler
que era o comando que deveria ser executado no caso do exemplo.
Agora, voltando para o arquivo .class, vocês vão perceber que todos o
comandos gambler -b estão entre aspas simples invertidas. Portanto a
shell vai executar primeiro o comando gambler -b e vai substituir o
resultado no seu lugar. Esse resultado, pela sua vez é o nome do
comando a ser executado pelo painel, que vai ser repassado para o
SHELL que fica no começo da linha:
SHELL "`gambler -b BtnDlinkDW650`"
SHELL " <substitui com o nome do comando>"
e depois executa.
É assim que funciona. Exceto pelo fato de acrescentar a opção -b no
script gambler, eu não teve que programar essas funções em lugar
nenhum, a própria shell é que faz todo o trabalho para nós!
4. Acho que o esquema do script.call é mais eficiente em tempo de
execução. Somente tenho a seguinte dúvida: para mudar a configuração
de algum aplicativo parece-me que deveria ser modificado o arquivo
dentro do projeto e depois o painel teria que ser *recompilado* outra
vez. Estou certo?
O esquema do "gambler -b" funciona com o binário "as is" e não
precisaria de recompilar após cada alteração.
Eu vou estudar o esquema script.call e depois vemos como e qual
implementar.
3. As pastas FormPrincipal.*.d contém de fato trechos dos Form do
projeto. Elas não afetam em nada o projeto, mas apenas refletem a
maneira como eu trabalhaba nele.
A pasta FormPrincipal.form.d não contém quase nada, mas apenas um
modelo de aba, que eu usava como "template" cada vez que queria
acrescentar uma nova aba no projeto principal.
Já a pasta FormPrincipal.class.d contém contem o arquivo
FormPrincipal.class quebrado em diferentes partes. O arquivo 00Main
contém o código com as funções comunes a todo o projeto como assim
também aquele do painel principal (aquele que diz "Bem-vindo..."). Os
outros arquivos vão do 01... ao 06... e correspondem exatamente a cada
um dos MainToolButtons do painel, que são 6 ao total. Ou seja, o
código button "Ferramentas do sistema" está contido no arquivo
06System e não se mistura com nenhum outro arquivo, e mesma coisa
acontece com os outros buttons e arquivos.
Como eu trabalhava sempre sobre algum button de cada vez, para mim era
mais simples entrar no arquivo correspondentes e fazer as alterações
ai e depois juntar todos os pedaços dentro do projeto principal.
Aliás, eu bolei um script chamado mkformclass que junta todos os
pedaços na ordem e gera o arquivo FormPrincipal.class. Esse script é
fornecido junto com o pacote gambler-src, sendo instalado na pasta /
usr/bin.
Eu não apaguei as pastas e conservei o script porque tenho planes para
eles no futuro. Mas por enquanto não afetam o projeto. Quem quiser
pode ficar brincando com o script, mas NÃO recomendo experimentar sem
ter feito um backup do projeto antes! O funcionamento básico é o
seguinte:
$ cd <pasta onde consta o projeto>
$ mkformclass
Sem o comando "cd" antes não vai dar certo.