Para onde deve ir o foco quando o objeto com foco muda para sleeping?
30 de Outubro de 2013, 21:37
, por Desconhecido
|
1 Pessoa seguindo este artigo.
Olá pessoal tudo bem?
Me formei no meio deste ano em Análise e Desenvolvimento de Sistemas pela Unicamp, e tenho estudado e feito alguns trabalhos relacionados ao Ginga há algum tempo. Nunca participei ativamente aqui no fórum e vi que as últimas postagens não são tão recentes assim, de qualquer forma estou publicando minha dúvida aqui a pedido do Roberto Azevedo.
É o seguinte, estou testando a aplicação de Jogo da Velha feita totalmente em NCL, sem código Lua. A aplicação é antiga e bem conhecida pela comunidade que estuda/trabalha com Ginga, de qualquer forma aqui está o link http://club.ncl.org.br/node/6. O que estou tentando entender é o seguinte, em alguns middlewares logo após uma jogada ser feita na aplicação, o campo selecionado é marcado com "X" ou "O" (dependendo de quem é a vez) e logo em seguida o foco volta para o primeiro campo do tabuleiro. Já em outros middlewares isso não ocorre, o foco continua no campo em que fiz a jogada.
Analisando o código da aplicação é possível ver que existem links chamando "onKeySelectionPropertyTestStopSetStart" que é chamado na seleção dos campos, ou seja, nas jogadas que fazemos. Algumas condições são verificadas pra definir de quem será a próxima jogada, pra preencher um "vetor" que é consultado verificando se houve vitória e para inserir a mídia de "X" ou "O" na posição onde houve a seleção. O problema é que a aplicação começa com 8 mídias com uma imagem vazia (invisível), a seleção ocorre nessas mídias e quando o link é satisfeito essa mídia que estava com foco recebe um stop antes de iniciar a mídia correta ("X" ou "O") no mesmo descritor que a mídia vazia estava.
Escrevi tudo isso para verificar se alguém sabe: quando uma mídia que estava com foco recebe um stop e entra em sleeping, o foco deve voltar para a primeira mídia possível com foco? Deve continuar na mídia que recebeu o start logo em seguida? Ou o foco deve sair das mídias e o formatador é quem deve controlar o foco?
Procurei na norma ABNTNR 151606-2_2011ED2 - Ginga-NCL para receptores fixos e móveis – Linguagem de aplicação XML para codificação de aplicações sobre esta dúvida e o máximo que achei foi algo sobre o service.currentKeyMaster na página 38.
Abraço!
Autor: Adriano Leal
22 comentários
<connectorParam name="key"/>
<connectorParam name="val"/>
<!-- condition -->
<compoundCondition operator="and">
<simpleCondition role="onSelection" key="$key"/>
<assessmentStatement comparator="eq">
<attributeAssessment role="propertyTest"
eventType="attribution"
attributeType="nodeProperty"/>
<valueAssessment value="$val"/>
</assessmentStatement>
</compoundCondition>
<!-- action -->
<compoundAction operator="seq">
<simpleAction role="stop" max="unbounded" />
<simpleAction role="set" value="$val" max="unbounded"/>
<simpleAction role="start" max="unbounded" />
</compoundAction>
</causalConnector>
Nesse caso, conforme especificado no connector acima, as acões stop, set e start devem ser realizadas em sequencia. E, sendo assim, é possível argumentar que no exato momento que o stop é executado, o foco será perdido e automaticamente, naquele momento, o foco corrente irá para o de menor focusIndex (que seria o primeiro). E, somente depois, as outras acões serão aplicadas. Embora eu também acredite que seja possível uma outra interpretacão (por exemplo, que a mudanca de focusIndex só vai ser avaliado depois de todas as acões do compoundAction serem executados), ainda acho que o mais correto (com o q está especificado na Norma hoje) é que o foco volte para o primeiro. Se você quiser garantir que o foco vai permanecer no objeto que você acabou de iniciar, o que você pode fazer é um set no currentFocus para o valor de focusIndex desse objeto, depois de iniciá-lo.