Ir para o conteúdo

 Voltar a Linguagem Lua
Tela cheia

Comunicação NCL/Lua

19 de Abril de 2011, 11:45 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 148 vezes

Olá, estou começando a estudar a integração entre NCL e Lua e estou tendo dificuldades. A aplicação é simples mas estou tendo problemas (eu acho) com a classe Key. A aplicação exibe 3 menus na lateral esquerda da aplicação. Através do focusIndex eu navego por eles. O primeiro e o segundo menus ao dar um OK é startado imagens. O terceiro menu ao dar um start eu inicio o meu arquivo lua. Esse arquivo lua imprime na tela um texto: "O que achou da nossa aplicação ?" e dois retangulos verde e vermelho. Até ai nada d+. O problema é que quero implementar também nesse arquivo lua a possibilidade deu pressionar a tecla verde e vermelha do controle remoto (simulando meio que uma enquete) e iniciar um texto dependendo da escolha do usuário. Estou utilizando a classe Key mas não está funcionando. Abaixo coloco o código do meu arquivo Lua e as partes que interessam do NCL. Se alguém puder ajudar.

Obrigado ! 

 

--lua.lua

-- Função que escreve um texto na tela

   function escreveTexto(texto)

     canvas:attrColor("WHITE")

     canvas:attrFont("vera", 24)

     canvas:drawText(450,300,texto)

     canvas:flush()

   end

-- Função que desenha os botoes verde e vermelho na tela

   function desenhaBotaoVerde()

     canvas:attrColor(0,255,0,150)

     canvas:drawRect("fill",480,350,70,70)

     canvas:attrColor("WHITE")

     canvas:drawText(500,420,"SIM")

     canvas:flush()

   end

 

   function desenhaBotaoVermelho()

     canvas:attrColor(255,0,0,150)

     canvas:drawRect("fill",630,350,70,70)

     canvas:attrColor("WHITE")

     canvas:drawText(650,420,"NAO")

     canvas:flush()

   end

 

-- Utilizando a classe NCL

function handlerEscreve(evt)

  if evt.class =='ncl' and

      evt.type=='presentation' and

      evt.action=='start' then

        local fundo = canvas:new ('media/fundoPrincipal.png')

        canvas:compose (0,0,fundo)

        escreveTexto("O que voce achou da aplicação ?")

        desenhaBotaoVerde()

        desenhaBotaoVermelho()

    end

end

event.register(handlerEscreve)


function handlerTecla(event)

        -- apenas eventos de tecla me interessam: Utilizando a Classe Key

        if event.class == 'key' and

           event.type == 'press'

        then

                -- textos para teclas verde e vermelha

                if event.key == 'GREEN' then

                        canvas:attrColor("WHITE")

                        canvas:attrFont("vera",24)

                        canvas:drawText(450,400,"Que bom que gostou da nossa aplicação!")

                        canvas:flush()


                elseif event.key == 'RED' then

                        canvas:attrColor("WHITE")

                        canvas:attrFont("vera",24)

                        canvas:drawText(450,400,"Você não gostou da aplicação !! ")

                        canvas:flush()

   end
 end
end

event.register(handlerTecla)

 

-- main.ncl

...

<media descriptor="dlua" src="lua.lua" id="mdLua"/>

 <media type="application/x-ginga-settings" id="nodeSettings">

        <property name="service.currentKeyMaster" value="mdLua"/>

</media>

...

<link xconnector="connBase#onKeySelectionStartNStopN" id="inicioInfoLua">

<bind role="onSelection" component="menuLua">

<bindParam name="keyCode" value="VK_ENTER"/>

</bind>

<bind role="start" component="mdLua"/>

<bind role="stop" component="mdFundo1"/>

<bind role="stop" component="mdFundo2"/>

<bind role="stop" component="mdFundo3"/>

</link>

 

Autor: Fernando Dias Stulback


1212 comentários

  • 84aac44002c016c696e0c7280d016860?only path=false&size=50&d=404Ricardo Rios(usuário não autenticado)
    19 de Abril de 2011, 15:44

     

    Olá Fernando,Mande a aplicação NCL para que eu possa executá-la e verificar melhor o que está ocorrendo. Abs,Ricardo Rios 

    • 7e4727b90e8330d12f11c9d04fe85f63?only path=false&size=50&d=404Fernando Dias Stulback(usuário não autenticado)
      19 de Abril de 2011, 16:50

       

      <?xml version="1.0" encoding="ISO-8859-1"?><ncl xsi:schemaLocation="http://www.ncl.org.br/NCL3.0/EDTVProfile www.​ncl.​org.​br/N​CL3.​0/pr​ofil​es/N​CL30​EDTV​.xsd​" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile" id="newDocument1"><head><connectorBase><importBase documentURI="composerConnectorBase.conn" alias="connBase"/></connectorBase><regionBase><region width="100.0%" height="100.0%" id="rgTV"> <region width="100.0%" height="100.0%" id="rgFundoPrincipal"/><region width="100.0%" height="100.0%" id="rgFundoMenuUm"/><region width="100.0%" height="100.0%" id="rgFundoMenuDois"/><region width="100.0%" height="100.0%" id="rgLua"/><region zIndex="3" left="5.0%" top="40.0%" width="30.0%" height="10.0%" id="rgMenuUm"/><region zIndex="3" left="5.0%" top="51.0%" width="30.0%" height="10.0%" id="rgMenuDois"/><region zIndex="3" left="5.0%" top="62.0%" width="30.0%" height="10.0%" id="rgMenuTres"/><region left="70.0%" top="5.0%" width="335" height="48" id="rgBotaoInterativo"/></region></regionBase><descriptorBase><descriptor region="rgFundoPrincipal" id="dFundoPrincipal"/><descriptor region="rgFundoMenuUm" id="dFundoMenuUm"/><descriptor region="rgFundoMenuDois" id="dFundoMenuDois"/><descriptor region="rgLua" id="dLua"/><descriptor region="rgBotaoInterativo" id="dBotaoInterativo"/><descriptor region="rgMenuUm" id="dMenuUm" focusIndex="1" moveDown="2" focusBorderColor="RED"/><descriptor region="rgMenuDois" id="dMenuDois" focusIndex="2" moveUp="1" moveDown="3" focusBorderColor="RED"/><descriptor region="rgMenuTres" id="dMenuTres" focusIndex="3" moveUp="2" focusBorderColor="RED"/></descriptorBase></head><body><port component="mdBotaoInterativo" id="port_mdBotaoInterativo"/><media descriptor="dFundoPrincipal" src="media/fundoPrincipal.png" type="image/png" id="mdFundoPrincipal"/><media descriptor="dFundoMenuUm" src="media/fundos/fundoMenuUm.png" type="image/png" id="mdFundoMenuUm"/><media descriptor="dFundoMenuDois" src="media/fundos/fundoMenuDois.png" type="image/png" id="mdFundoMenuDois"/><media descriptor="dLua" src="lua.lua" id="mdLua"/><media descriptor="dBotaoInterativo" src="media/botaoInterativo.png" type="image/png" id="mdBotaoInterativo"/><media descriptor="dMenuUm" src="media/menu/menuUm.png" type="image/png" id="mdMenuUm"/><media descriptor="dMenuDois" src="media/menu/menuDois.png" type="image/png" id="mdMenuDois"/><media descriptor="dMenuTres" src="media/menu/menuTres.png" type="image/png" id="mdMenuTres"/><media type="application/x-ginga-settings" id="nodeSettings">        <property name="service.currentKeyMaster" value="mdLua"/></media><link xconnector="connBase#onKeySelectionStartNStopN" id="inicioInteratividade"><bind role="onSelection" component="mdBotaoInterativo"><bindParam name="keyCode" value="RED"/></bind><bind role="start" component="mdFundoPrincipal"/><bind role="start" component="mdMenuUm"/><bind role="start" component="mdMenuDois"/><bind role="start" component="mdMenuTres"/><bind role="stop" component="mdBotaoInterativo"/></link><link xconnector="connBase#onKeySelectionStartNStopN" id="inicioInfoMenuUm"><bind role="onSelection" component="mdMenuUm"><bindParam name="keyCode" value="VK_ENTER"/></bind><bind role="start" component="mdFundoMenuUm"/><bind role="stop" component="mdFundoPrincipal"/><bind role="stop" component="mdFundoMenuDois"/><bind role="stop" component="mdLua"/></link><link xconnector="connBase#onKeySelectionStartNStopN" id="inicioInfoMenuDois"><bind role="onSelection" component="mdMenuDois"><bindParam name="keyCode" value="VK_ENTER"/></bind><bind role="start" component="mdFundoMenuDois"/><bind role="stop" component="mdFundoPrincipal"/><bind role="stop" component="mdFundoMenuUm"/><bind role="stop" component="mdLua"/></link><link xconnector="connBase#onKeySelectionStartNStopN" id="inicioInfoLua"><bind role="onSelection" component="mdMenuTres"><bindParam name="keyCode" value="VK_ENTER"/></bind><bind role="start" component="mdLua"/><bind role="stop" component="mdFundoPrincipal"/><bind role="stop" component="mdFundoMenuUm"/><bind role="stop" component="mdFundoDois"/></link>

      • 7e4727b90e8330d12f11c9d04fe85f63?only path=false&size=50&d=404Fernando Dias Stulback(usuário não autenticado)
        19 de Abril de 2011, 17:07

         

        Veja os anexos para entender melhor.

        • 7e4727b90e8330d12f11c9d04fe85f63?only path=false&size=50&d=404Fernando Dias Stulback(usuário não autenticado)
          19 de Abril de 2011, 17:09

           

          l.

          • 7e4727b90e8330d12f11c9d04fe85f63?only path=false&size=50&d=404Fernando Dias Stulback(usuário não autenticado)
            19 de Abril de 2011, 17:20

             

            as  Ao pressionar o menu tres, o arquivo Lua será inicializado ! 

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

               

              Fernando,

              Alguns comentários sobre o código que voce mandou:

              1 - Quando a seleção é feita com o botão ENTER, a sua condição não precisa de key. No connector, você pode colocar <simpleCondition role="onSelection"/>, e no bind <bind role="onSelection" component="mdMenuUm"/>. Caso você quisesse passar o keyCode, o valor da tecla é "ENTER", e não "VK_ENTER"

              2 - Para o objeto NCLua receber os eventos de tecla, você deve realizar uma ação de set no "service.currentKeyMaster". O valor do service.currentKeyMaster deve ser igual ao atributo "id" do nó Lua.  Por exemplo...

              <link xconnector="onSelectionSet">

                  <bind role="onSelection" component="mdMenuUm"/>

                  <bind role="set" component="nodeSettings" interface="service.currentKeyMaster"

                      <bindParam name="val" value="idLua"/>

                  </bind>

              </link>

              Só alertando que, toda vez que você muda o foco para uma mídia, o controle de teclas, especificado pelo service.currentKeyMaster, é alterado para esta mídia com foco.

              • 84aac44002c016c696e0c7280d016860?only path=false&size=50&d=404Ricardo Rios(usuário não autenticado)
                20 de Abril de 2011, 19:03

                 

                Olá Fernando,

                 

                Completando a resposta de José Geraldo... Eu fiz algumas alterações no seu código para refletir o comportamento que você deseja. Segue o código alterado juntamente com os conectores.

                Abs,

                Ricardo

                • 84aac44002c016c696e0c7280d016860?only path=false&size=50&d=404Ricardo Rios(usuário não autenticado)
                  20 de Abril de 2011, 19:05

                   

                  Segue o arquivo.

                   

                • 84aac44002c016c696e0c7280d016860?only path=false&size=50&d=404Ricardo Rios(usuário não autenticado)
                  20 de Abril de 2011, 19:08

                   

                  Conectores:

                  <causalConnector id="onSelectionStopStartSet">
                                  <connectorParam name="vNewValue" />
                                  <simpleCondition role="onSelection" />
                          <compoundAction operator="par">
                                          <simpleAction role="stop" max="unbounded" qualifier="seq"/>
                              <simpleAction role="start" max="unbounded" qualifier="seq"/>
                                          <simpleAction role="set" value="$vNewValue" max="unbounded" />
                          </compoundAction>
                              </causalConnector>

                              <causalConnector id="onKeySelectionStartNStopN">
                                  <connectorParam name="keyCode"/>
                                  <simpleCondition role="onSelection" key="$keyCode" max="unbounded" qualifier="or"/>
                                  <compoundAction operator="seq">
                                      <simpleAction role="start" max="unbounded" qualifier="seq"/>
                                      <simpleAction role="stop" max="unbounded" qualifier="seq"/>
                                  </compoundAction>
                              </causalConnector>

                   

                  Links:

                   <link xconnector="connBase#onKeySelectionStartNStopN" id="inicioInteratividade">
                              <bind role="onSelection" component="mdBotaoInterativo">
                                  <bindParam name="keyCode" value="RED"/>
                              </bind>
                              <bind role="start" component="mdFundoPrincipal"/>
                              <bind role="start" component="mdMenuUm"/>
                              <bind role="start" component="mdMenuDois"/>
                              <bind role="start" component="mdMenuTres"/>
                              <bind role="stop" component="mdBotaoInterativo"/>
                          </link>

                          <link xconnector="connBase#onSelectionStopStartSet" id="inicioInfoMenuUm">
                              <bind role="onSelection" component="mdMenuUm"/>
                              <bind role="stop" component="mdFundoPrincipal"/>
                              <bind role="stop" component="mdFundoMenuDois"/>
                              <bind role="start" component="mdFundoMenuUm"/>
                              <bind role="start" component="mdLua" />
                              <bind role="set" component="nodeSettings" interface="service.currentKeyMaster">
                                  <bindParam name="vNewValue" value="mdLua" />
                              </bind>
                          </link>

                  • 7e4727b90e8330d12f11c9d04fe85f63?only path=false&size=50&d=404Fernando Dias Stulback(usuário não autenticado)
                    25 de Abril de 2011, 10:57

                     

                    Obrigado pelas dicas !Implementei a dicas de vocês e a aplicação funcionou normalmente. Só mais uma coisa, como faço para tirar o foco da mídia .lua  e continuar navegando no menu ?Tentei tirar o foco da mídia .lua implementando um link que dá um stop na mídia lua e um start nos demais componentes mas não funcionou.Abaixo coloco o código das partes mais relevantes para quem se interessar. Obrigado !-- main.ncl <causalConnector id="onSelectionStopStartSet"> <simpleCondition role="onSelection"/> <connectorParam name="vNewVaue"/> <compoundAction operator="seq"> <simpleAction role="stop" max="unbounded" qualifier="par"/> <simpleAction role="start" max="unbounded" qualifier="par"/> <simpleAction role="set" value="$vNewValue" max="unbounded"/> </compoundAction></causalConnector>  <causalConnector id="onKeySelectionStartNStopN">                 <connectorParam name="keyCode"/>                 <simpleCondition role="onSelection" key="$keyCode" max="unbounded" qualifier="or"/>                 <compoundAction operator="seq">                     <simpleAction role="start" max="unbounded" qualifier="seq"/>                     <simpleAction role="stop" max="unbounded" qualifier="seq"/>                 </compoundAction>             </causalConnector> . ..<descriptor region="rgLua" id="dLua" focusIndex="luaIdx"/>... ...<media descriptor="dLua" src="lua.lua" id="mdLua"/> <media type="application/x-ginga-settings" id="nodeSettings">        <property name="service.currentKeyMaster" value="luaIdx"/></media>  ... <link xconnector="onSelectionStopStartSet" id="inicioMidiaLua"><bind role="onSelection" component="mdMenuTres"/><bind role="stop" component="mdFundoPrincipal"/><bind role="stop" component="mdFundoDois"/><bind role="stop" component="mdFundoTres"/><bind role="start" component="mdLua"/><bind role="set" component="nodeSettings" interface="service.currentKeyMaster"><bindParam name="vNewValue" value="mdLua"/></bind></link> -- o link abaixo implementei para dar um stop no nó lua caso o usuário queira ainda continuar navegando nos outros menus. Porém não funcionou. Não consigo tirar o foco da mídia mdLua. <link xconnector="connBase#onSelectionStartNStopN" id="voltaMenu"><bind role="onSelection" component="mdLua"/><bind role="stop" component="mdLua"/><bind role="start" component="mdFundoPrincipal"/><bind role="start" component="mdMenuUm"/><bind role="start" component="mdMenuDois"/></link>  -- lua.lua   -- Escrever um texto na tela      function escreveTexto(texto)     canvas:attrColor("WHITE")     canvas:attrFont("vera", 24)     canvas:drawText(450,300,texto)     canvas:flush()   end   -- Desenhando os botoes verde e vermelho na tela  function desenhaBotaoVerde()     canvas:attrColor(0,255,0,150)     canvas:drawRect("fill",480,350,70,70)     canvas:attrColor("WHITE")     canvas:drawText(500,420,"SIM")      canvas:flush()   end   function desenhaBotaoVermelho()     canvas:attrColor(255,0,0,150)     canvas:drawRect("fill",630,350,70,70)     canvas:attrColor("WHITE")     canvas:drawText(650,420,"NAO")      canvas:flush()   end-- Utilizando a classe NCLfunction handlerEscreve(evt)    if evt.class =='ncl' and       evt.type=='presentation' and       evt.action=='start' then local fundo = canvas:new ('media/fundoPrincipal.png')   canvas:compose (0,0,fundo)        escreveTexto("Voce gostou da nossa aplicação ?")   desenhaBotaoVerde()   desenhaBotaoVermelho()    end      -- apenas eventos de tecla me interessam: Utilizando a Classe Key        if evt.class == 'key' and           evt.type == 'press'        then                -- textos para teclas verde e vermelha                if evt.key == 'GREEN' then                        canvas:attrColor("WHITE")                        canvas:attrFont("vera",24)                        canvas:drawText(250,500,"Que bom que gostou da nossa apicação!")                        canvas:flush()                elseif evt.key == 'RED' then                        canvas:attrColor("WHITE")                        canvas:attrFont("vera",24)                        canvas:drawText(250,500,"Você não gostou da nossa aplicação!")                        canvas:flush()                event.post {                             class = 'ncl',                             type = 'presentation',                             --label = 'fim',                             action = 'start'                            }                end        endend 

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

                       

                      Quando você para o nó NCLua, se você quer que outra mídia tenha foco tem que configurar o valor da propriedade service.currentFocus do nó settings para o focusIndex da mídia. Poderia colocar um bind nesse link onde tem o stop do lua. Por exemplo:

                       <bind role="set" component="nodeSettings" interface="service.currentFocus">

                          <bindParam name="vNewValue" value="mdMenuUmIndex"/>

                      </bind>

                       

                      Lembre-se de declarar a propriedade service.currentFocus no nó settings.

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