Ir para o conteúdo

 Voltar a Ginga-NCL Vi...
Tela cheia

Passando o controle de volta ao formatador

21 de Julho de 2011, 19:24 , por Desconhecido - | 1 Pessoa seguindo este artigo.
Visualizado 45 vezes
Olá a todos,

Eu estou passando pelo seguinte problema, eu passei o controle das teclas a um nó lua (por meio da atribuição do seu id a propriedade "service.currentKeyMaster") e depois eu quero passar o controle de volta ao formatador NCL.

Em teoria bastaria teclar "backspace", para simular o efeito da tecla "BACK", que retornaria o controle ao formatador, mas para mim isso não funcionou. O nó lua perde o controle das teclas (e o terminal exibe a mensagem "PresentationContext::setPropertyValue propName = 'service.currentKeyMaster' propValue = ''"), mas o foco não volta a funcionar (nem ao se clicar "backspace" repetidas vezes), e ao se clicar "enter" o nó lua volta a receber eventos de tecla normalmente.

Como o meu código é muito grande eu criei um exemplo menor a fim de reproduzir o bug e postar aqui em busca de auxilio, no entanto, para minha surpresa, o exemplo que eu fiz não apresenta o mesmo comportamento, quando eu teclo "backspace" ele mostra a seguinte mensagem:

FormatterFocusManager::setFocus index 'ixBotao1' is not in focus Table.
PresentationContext::setPropertyValue propName = 'service.currentFocus' propValue = 'ixBotao1'

Isso não faz o nó lua perder o controle e retornar o mesmo ao formatador, mas ao se dar um segundo "backspace" a mensagem abaixo:

PresentationContext::setPropertyValue propName = 'service.currentKeyMaster' propValue = ''

Aparece no terminal, e aí sim o foco volta a funcionar e o controle das teclas é do formatador. Eu sinceramente não sei o que a minha aplicação maior tem de diferente desse exemplo que possa influenciar o comportamento dessa maneira, ambas passam o foco da mesma maneira ao nó lua (através de um link onSelectionSet), possuem regiões de tamanho zero, e etc.

Tentei ainda duas outras formas de passar o controle de volta ao formatador, e as adicionei ao exemplo, nos botões "RED" e "GREEN".

O primeiro simplesmente tenta definir o "service.currentKeyMaster" como uma string vazia, o resultado é que o controle das teclas aparentemente acaba no limbo, apesar de aparecer uma mensagem idêntica a de quando é teclada pela segunda vez a tecla "backspace", as teclas não tem mais nenhum efeito sobre a aplicação.
O segundo é um pouco mais elaborado, ele passa o controle das teclas para um outro nó lua, sem utilidade prática nenhuma, e mata esse nó, na tentativa de fazer valer o que a especificação diz na descrição da propriedade "service.currentKeyMaster", "Identificador (id) do elemento <media> que detém o controle  das chaves de navegação; se o elemento não estiver sendo apresentado ou não estiver pausado, o controle é do formatador".

Agora estou sinceramente sem saber o que fazer, estou mandando o exemplo que eu fiz, porém o problema que eu quero resolver está na aplicação real, a qual é muito grande (mais de mil linhas de código NCL e seis mil de código lua) para postar no fórum, se algum de vocês puder me aconselhar ao que fazer para conseguir reportar o bug nessa situação, ou possuir um exemplo menor que apresente o mesmo comportamento que eu descrevi para a aplicação maior eu agradeceria muito.

Saudações,
Henrique Becke

Autor: Henrique Becker


66 comentários

  • A687fdf6ce6756b24515f09e00e106ce?only path=false&size=50&d=404José Geraldo de Sousa Junior(usuário não autenticado)
    21 de Julho de 2011, 20:30

     

    Oi Henrique,

    Nas versões anteriores do Ginga, a mídia recebia o controle da tecla somente através da atribuição de seu focusIndex ao service.currentKeyMaster. Depois, mudou-se do focusIndex para o id da mídia. Por isso, para manter a compatibilidade com aplicações mais antigas, as mídias cujo descritor possui um focusIndex recebiam o valor do focusIndex, e não do id.

    Se o nó lua tiver focusIndex, tente tirar o focusIndex dele, até porque, se o valor da região é zero como você disse, ele não precisa de focusIndex.

    Observação: Quando você pressionar "backspace", o valor de service.currentKeyMaster fica vazio mesmo, e isso representa internamente pro formatador que ele está com o controle das teclas.

    • A687fdf6ce6756b24515f09e00e106ce?only path=false&size=50&d=404José Geraldo de Sousa Junior(usuário não autenticado)
      21 de Julho de 2011, 20:33

       

      Só lembrando que, a partir da próxima versão do código do Ginga que será lançada, o service.currentKeyMaster só vai receber id's de mídia.

    • 776d10825e8d996379fd747860491cc6?only path=false&size=50&d=404Henrique Becker(usuário não autenticado)
      22 de Julho de 2011, 17:24

       

      Olá Geraldo,

      Muito obrigado pela sua resposta, solucionou meu problema (ou pelo menos parte dele), e agora surge mais uma questão relativa a isso: há uma maneira do lua retornar o controle do foco ao formatador? Ao invés de depender que o usuário clique o botão "BACK".

      Há situações em que eu quero que o usuário selecione uma mídia, o controle vá para o lua e ele seja usado para interpretar os comandos do usuário e ao final do processo o lua libere o controle para o formatador sem que o usuário tenha de saber que precisa pressionar "BACK".

      Saudações,
      Henrique Becker

      • 5df5d8eeb3770422cc9c42a466faee62?only path=false&size=50&d=404Roberto Azevedo(usuário não autenticado)
        25 de Julho de 2011, 10:38

         

        Oi Henrique,

        você pode fazer isso alterando o valor da propriedade service.currentKeyMaster (por exemplo, por meio de um link) de um nó do tipo application/x-ginga-settings.

        Por exemplo, se eu tenho uma media cujo identificador é idMedia, basta eu atribuir o valor "idMedia" para a propriedade service.currentKeyMaster que esse objeto passará a controlar as teclas.

      • A687fdf6ce6756b24515f09e00e106ce?only path=false&size=50&d=404José Geraldo de Sousa Junior(usuário não autenticado)
        25 de Julho de 2011, 11:16

         

        Oi Henrique,

        Para o controle de teclas voltar pro formatador, acho que só pressionando a tecla "back" mesmo, até porque não tem como atribuir a service.currentKeyMaster o formatador, pois essa variável recebe id's de objetos de mídia.

        Eu tenho uma sugestão. Você poderia utilizar um outro nó NCLua que só fizesse o controle das teclas. Por exemplo, vamos supor que o id desse novo NCLua seja lkeyhandler. Você disse que gostaria que ao final do processo o lua liberasse o controle para o formatador sem pressionar "back", então você poderia utilizar um link com um comportamento mais ou menos de "ao Fim do processo set service.currentKeyMaster = "lkeyhandler". Esse "lkeyhandler" teria o tratamento de teclas a ser feito após o processo do primeiro NCLua ser concluído.

        • 776d10825e8d996379fd747860491cc6?only path=false&size=50&d=404Henrique Becker(usuário não autenticado)
          27 de Julho de 2011, 14:23

           

          Olá Geraldo,

          É que eu dei uma espiada no código fonte do Ginga-NCL e há um "if" promissor na parte de gerência do foco (linha 362, do arquivo "gingancl-cpp/trunk/src/focus/FormatterFocusManager.cpp", dentro da função "FormatterFocusManager::setKeyMaster", link direto aqui "http://svn.softwarepublico.gov.br/trac/ginga/browser/gingancl-cpp/trunk/src/focus/FormatterFocusManager.cpp") que checa se a string com o id da mídia é uma string vazia, me pareceu que pudesse retornar o controle de volta ao formatador, embora, como eu não estou habituado com o código, não sou capaz de dizer com 100% de certeza o que o código dentro do "if" faça.

          Eu não entendi a sua sugestão. Em que ponto eu conseguiria retornar o controle ao formatador, sem o uso do "BACK", após tê-lo passado a um nó Lua (no seu exemplo)?

          Uma coisa que eu havia pensado era passar o keyMaster para outro nó lua e depois pará-lo, a fim de que o controle voltasse ao formatador, mas essa tentativa não obteve os resultados desejados como eu disse na minha primeira mensagem, em teoria pela especificação isso teria de funcionar, ou não?

          Saudações,
          Henrique Becker

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