Ir para o conteúdo

 Voltar a Linguagem NCL
Tela cheia

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.
Visualizado 25 vezes

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

  • 5df5d8eeb3770422cc9c42a466faee62?only path=false&size=50&d=404Roberto Azevedo(usuário não autenticado)
    31 de Outubro de 2013, 14:38

     

    Oi Adriano,

    o texto que define esse comportamento está na página 47 da Norma ITU-T H.761 (06/2011) (http://www.itu.int/rec/T-REC-H.761):

    "In a certain presentation moment, if the focus has not been already defined, or is lost, a focus will be initially applied to the element being presented with the smallest index value."

     Não tenho acesso aqui a Norma Brasileira, mas dado que as duas são equivalentes, também deve ter algo similar.

    Vou tentar explicar um pouco mais. Este é o connector que está sendo usado: 

          <causalConnector id="onKeySelectionPropertyTestStopSetStart">
            <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.

    • 19012b1f96d05946fb6e9cff73dddc1e?only path=false&size=50&d=404Adriano Leal(usuário não autenticado)
      31 de Outubro de 2013, 15:06

       

      Muito obrigado Roberto! Fui verificar a norma que citei em meu último post e há esse mesmo trecho na página 60, 7.2.12 Área funcional Navigational Key (nesse caso estou com a norma em português), não havia realmente visto essa parte.

      O curioso é que a Sony, que é uma grande fabricante, não implementa esse trecho da norma corretamente. Nesse exemplo de aplicação do Jogo da Velha, ao se efetuar uma jogada o foco continua no campo em que a jogada foi feita. Em teoria esse comportamento é o mais indicado e a primeira vista parece estar correto, mas o correto (pela norma) seria voltar para a primeira mídia que possui o menor valor de index, já que em nenhum momento a aplicação fez um set na propriedade currentFocus ou currentKeyMaster.

      Fiz alguns testes para tentar entender como a Sony trata esse tipo de comportamento e pelos testes que fiz conclui que eles passam o foco para a primeira mídia que recebe a ação de start após a atual mídia com foco entra para o estado de sleeping.

      Vejam que não estou querendo desmerecer a empresa nesse caso, estou a citando pelo fato de meus testes terem sido feitos em seu middleware.

      Enfim, esperamos que os grandes fabricantes passem a se preocupar mais com esse tipo de coisa, pois se não implementam a norma corretamente, muitas vezes os desenvolvedores de aplicações podem pensar estar fazendo algo errado quando não estão, ou pior, os middlewares podem induzir os desenvolvedors a implementarem de uma forma que, dentro da norma, não funcionaria como esperado.

      Obrigado mais uma vez Roberto.

      Abraço!

Concurso ITU-T de Aplicações para IPTV 2012

13 de Agosto de 2012, 19:38, por Desconhecido

Gostaríamos de lembrar aos possíveis interessados que o prazo de registro para participação no Concurso ITU-T de Aplicações para IPTV 2012 (IPTV Application Challenge) se encerra nesta semana, dia 15 de agosto de 2012. Já o prazo para a submissão de aplicações se encerra no dia 07 de setembro de 2012.



NCL Eclipse 1.6 disponível

10 de Janeiro de 2012, 21:19, por Desconhecido

Caros membros da Comunidade Ginga,



Concursos de Aplicações Ginga-NCL

22 de Setembro de 2011, 3:22, por Desconhecido

    Gostaríamos de relembra-los de que há dois concursos de aplicações Ginga-NCL com inscrições ainda abertas. O convite é aberto a toda a comunidade de desenvolvedores de aplicações para o Middleware Ginga-NCL, em nível internacional. São os seguintes concursos:



Novas versões: Ginga e Ginga-NCL Virtual Set-top Box (v.0.12.3)

1 de Agosto de 2011, 20:58, por Desconhecido



Algumas Boas Notícias da Comunidade Ginga

28 de Julho de 2011, 21:31, por Desconhecido

Autor: Roberto Azevedo