Ir para o conteúdo

 Voltar a Linguagem NCL
Tela cheia

teclas de setas como start para eventos

7 de Fevereiro de 2008, 12:32 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 33 vezes

Gostaria de implementar um código que ao usuário teclar para direita uma mídia seja abortada e outra apareça.

Autor: Paulo J S Júnior


2121 comentários

  • 754d4402e67aee0305d1a29003710c1c?only path=false&size=50&d=404andrey silva souza(usuário não autenticado)
    7 de Fevereiro de 2008, 13:49

     

    Haile Paulo!

     Isso é muito simples, dê uma estudada no tutorial
     e verifique o exemplo 12 no link a seguir: www.​ncl.​org.​br/e​xemp​los/​inde​x_30​.htm​l

    Abrax 

    • 71736c43a3f94f87cecff68af9d24e0b?only path=false&size=50&d=404Paulo J S Júnior(usuário não autenticado)
      7 de Fevereiro de 2008, 14:14

       

      Não é isto. Gostaria sem precisar do enter. Por exemplo, rolagem de midias horizontalmente. Se você tem 8 mídias e somente pode mostrar 4, caso tecle a seta para direita na quarta mídia, deverão aparecer as mídias 5, 6, 7 e 8.

      ok????

      • 754d4402e67aee0305d1a29003710c1c?only path=false&size=50&d=404andrey silva souza(usuário não autenticado)
        7 de Fevereiro de 2008, 16:15

         

        Use o CURSOR_RIGHT,  e crie um "link" para a  quarta mídia, nela haverá tags "bind"  com role "stop" para as midias antigas e com "start" para as midias 5, 6, 7 e 8

         

        Qualquer coisa retorne...Vlw 

        • 71736c43a3f94f87cecff68af9d24e0b?only path=false&size=50&d=404Paulo J S Júnior(usuário não autenticado)
          7 de Fevereiro de 2008, 17:02

           

          Fiz isto mas quando tecla-se seta para direita em qualquer mídia de foco ai muda, o que não poderia acontecer. Gostaria que acontecesse apenas quando a seta fosse clicada quando na mídia 4.

          <link id="Voltar_agenda" xconnector="connectors#onSelectionAbortStart">
                   <bind component="opcao04_agenda" role="onSelection">
                   <bindParam name="keyCode" value="CURSOR_RIGHT"/>
            </bind>
                   <bind component="opcao01_agenda" role="abort"/>
                   <bind component="opcao02_agenda" role="abort"/>
                   <bind component="opcao03_agenda" role="abort"/>
                   <bind component="opcao04_agenda" role="abort"/>
                   <bind component="opcao06_agenda" role="start"/>
                   <bind component="opcao07_agenda" role="start"/>
                   <bind component="opcao08_agenda" role="start"/>
                   <bind component="opcao05_agenda" role="start"/>
                </link>

          • 71736c43a3f94f87cecff68af9d24e0b?only path=false&size=50&d=404Paulo J S Júnior(usuário não autenticado)
            8 de Fevereiro de 2008, 22:29

             

            Gostaria de uma solução.

            • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
              9 de Fevereiro de 2008, 11:39

               

              Paulo,

              Se entendi bem, o Andrey já o respondeu. Acontece que usando a sugestão dele, você não deve usar o controle de foco da linguagem, ou seja, deve retirar o atributo focusIndex desses botões que vai mostrar.

              É isso ou quer algo mais sofisticado?

              Carlos

              • 71736c43a3f94f87cecff68af9d24e0b?only path=false&size=50&d=404Paulo J S Júnior(usuário não autenticado)
                11 de Fevereiro de 2008, 8:28

                 

                Obridadíssimo Carlos. Já fiz isto mas preciso do focus pois o usuário navegaria horizontalmente. A Seta quando chaga no limite, serviria para mudança de página. Fiz com a seta para baixo e mudou de página mas o ideal é que continuasse mudando de mídia, e quando chagasse  na ultima mídia mudaria de página.

                • 2133593267bb9e231f3ef646fd94a27d?only path=false&size=50&d=404Romualdo Monteiro R. Costa(usuário não autenticado)
                  11 de Fevereiro de 2008, 18:18

                   

                  Desculpe mas acho que não entendi o problema.

                  Vc tentou colocar o focusIndex em todas as figuras com o atributo moveRight para os respectivos focusIndex (com exceção da figura 4 no seu exemplo)? E na figura4 vc colocou um link com um conector como apresentado? Acho que essa solução funcionaria no seu problema.

                  Romualdo. 

                  • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
                    13 de Fevereiro de 2008, 14:47

                     

                    Paulo,

                    Ando com muito interesse em compilar uma espécie de guia de boas práticas de programação em NCL. Em especial, a preparação de menus em NCL é algo que requer um capítulo a parte.

                    Seu exemplo é uma ótima ilustração. Há muitas formas diferentes de modelar uma solução para o que quer, mas é interessante obter uma forma elegante.

                    Confirme se a idéia é essa:

                    - Há, digamos, um menu com 7 botões;
                    - Apenas 4 botões são visíveis (lado a lado horizontalmente). O telespectador pode navegar por esses quatro botões - assim você precisa de um esquema de foco entre eles;
                    - Quando o foco está no botão mais à esquerda, e o telespectador aperta a tecla para esquerda, os botões visíveis se deslocam para a direita, fazendo surgir um novo mais à esquerda;
                    - Idem para a direita.

                    É isso? Peço confirmação porque pretendo fazer uma NCL para isso e postar.

                    Carlos

                    • 71736c43a3f94f87cecff68af9d24e0b?only path=false&size=50&d=404Paulo J S Júnior(usuário não autenticado)
                      14 de Fevereiro de 2008, 12:18

                       

                      Grande Carlos. Exatamente. Se já tiver uma solução me manda. Abraço.

                      • 71736c43a3f94f87cecff68af9d24e0b?only path=false&size=50&d=404Paulo J S Júnior(usuário não autenticado)
                        28 de Fevereiro de 2008, 9:03

                         

                        Carlos. Será que você tem um tempinho para me mandar  aquele nobre exemplo. Abraços e obrigado pela atenção.

                        • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
                          28 de Fevereiro de 2008, 15:10

                           

                          Oi Paulo,

                          Tudo bom?

                          Não tenho um exemplo pronto. Estive tentando conseguir tempo para bolar uma modelagem interessante para ele, mas ultimamente os dias têm sido complicados. Estou lidando com várias outras tarefas que urgem.

                          Qual seu grau de urgência? Pergunto porque presumo que poderia postar de que forma implementaria para você fazer o NCL propriamente dito. Talvez essa seja uma solução mais confortável e realista para eu lidar dada a falta de tempo. Te ajudaria?

                          Nesse caso, você postaria o NCL e eu apoiaria em corrigi-lo ou ajudá-lo em qualquer coisa que tenha dúvida em fazê-lo.

                          Carlos

                          • 71736c43a3f94f87cecff68af9d24e0b?only path=false&size=50&d=404Paulo J S Júnior(usuário não autenticado)
                            29 de Fevereiro de 2008, 12:15

                             

                            oK. Vai o código.

                            <?xml version="1.0" encoding="ISO-8859-1"?>

                            <ncl id="BB_Menu" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
                            <head>
                                  <regionBase>
                                <region id="rgAPLICATIVO" left="0px" top="0px" width="640px" height="480px" zIndex="1">
                                           
                                        <region id="regionD" left="0%" top="50%" width="97%" height="37%" zIndex="3">
                                            <region id="regionD1" left="5%" top="15%" width="94%" height="84%" zIndex="4"/>
                                           
                                        <region id="regionD2" left="6%"  top="14%" width="23%" height="81%" zIndex="8"/>
                                            <region id="regionD3" left="29%" top="14%" width="23%" height="81%" zIndex="8"/>
                                            <region id="regionD4" left="52%" top="14%" width="23%" height="81%" zIndex="8"/>
                                            <region id="regionD5" left="75%" top="14%" width="23%" height="81%" zIndex="8"/>               

                                        <region id="regionD6" left="6%"  top="14%" width="23%" height="81%" zIndex="7"/>
                                            <region id="regionD7" left="29%" top="14%" width="23%" height="81%" zIndex="7"/>
                                            <region id="regionD8" left="52%" top="14%" width="23%" height="81%" zIndex="7"/>
                                            <region id="regionD9" left="75%" top="14%" width="23%" height="81%" zIndex="7"/>               

                                        <region id="regionD10" left="6%"  top="14%" width="23%" height="81%" zIndex="6"/>
                                            <region id="regionD11" left="29%" top="14%" width="23%" height="81%" zIndex="6"/>
                                            <region id="regionD12" left="52%" top="14%" width="23%" height="81%" zIndex="6"/>
                                            <region id="regionD13" left="75%" top="14%" width="23%" height="81%" zIndex="6"/>               

                                        <region id="regionD15" left="7%"  top="14%" width="24%" height="81%" zIndex="6"/>
                                        <region id="regionD16" left="32%" top="14%" width="67%" height="81%" zIndex="6"/>

                                    </region>

                                </region>
                                  </regionBase>
                                  <descriptorBase>
                                     <descriptor id="dscptD2" region="regionD2" focusIndex="1" moveLeft="4" moveRight="2" focusBorderWidth="-5" focusBorderColor="aqua">
                                    <descriptorParam name="transparency" value="1"/>
                                    <descriptorParam name="border" value="none" />
                                 </descriptor>
                                     <descriptor id="dscptD3" region="regionD3" focusIndex="2" moveLeft="1" moveRight="3" focusBorderWidth="-5" focusBorderColor="yellow">
                                    <descriptorParam name="transparency" value="1"/>
                                    <descriptorParam name="border" value="none" />
                                 </descriptor>
                                     <descriptor id="dscptD4" region="regionD4" focusIndex="3" moveLeft="2" moveRight="4" focusBorderWidth="-5" focusBorderColor="aqua">
                                    <descriptorParam name="transparency" value="1"/>
                                    <descriptorParam name="border" value="none" />
                                 </descriptor>
                                     <descriptor id="dscptD5" region="regionD5" focusIndex="4" moveLeft="3" moveRight="1" focusBorderWidth="-5" focusBorderColor="yellow">
                                    <descriptorParam name="transparency" value="1"/>
                                    <descriptorParam name="border" value="none" />
                                 </descriptor>
                                  </descriptorBase>

                                  <connectorBase>
                                <causalConnector id="onSelectionAbortStart">
                                        <connectorParam name="keyCode"/>
                                      <simpleCondition role="onSelection" key="$keyCode" />
                                        <compoundAction operator="seq">
                                           <simpleAction role="abort" max="unbounded" qualifier="par"/>
                                       <simpleAction role="start" max="unbounded" qualifier="par"/>
                                        </compoundAction>
                                     </causalConnector>
                                  </connectorBase>
                            </head>

                               <body>

                                <port id="pInicio13" component="opcao01_agenda" />
                                <port id="pInicio14" component="opcao02_agenda" />
                                <port id="pInicio15" component="opcao03_agenda" />
                                <port id="pInicio16" component="opcao04_agenda" />

                                     <media type="text/html"  id="opcao01_agenda"   src="textos/jan2008.html" descriptor="dscptD2" />       
                                     <media type="text/html"  id="opcao02_agenda"   src="textos/fev2008.html" descriptor="dscptD3" />   
                                     <media type="text/html"  id="opcao03_agenda"   src="textos/mar2008.html" descriptor="dscptD4" />   
                                     <media type="text/html"  id="opcao04_agenda"   src="textos/abr2008.html" descriptor="dscptD5" />   
                                     <media type="text/html"  id="opcao05_agenda"   src="textos/mai2008.html" descriptor="dscptD2" />       
                                     <media type="text/html"  id="opcao06_agenda"   src="textos/jun2008.html" descriptor="dscptD3" />   
                                     <media type="text/html"  id="opcao07_agenda"   src="textos/jul2008.html" descriptor="dscptD4" />   
                                     <media type="text/html"  id="opcao08_agenda"   src="textos/ago2008.html" descriptor="dscptD5" />   
                                     <media type="text/html"  id="opcao09_agenda"   src="textos/set2008.html" descriptor="dscptD2" />       
                                     <media type="text/html"  id="opcao010_agenda"   src="textos/out2008.html" descriptor="dscptD3" />   
                                     <media type="text/html"  id="opcao011_agenda"   src="textos/nov2008.html" descriptor="dscptD4" />   
                                     <media type="text/html"  id="opcao012_agenda"   src="textos/dez2008.html" descriptor="dscptD5" />   

                                  <link id="Voltar_agenda1" xconnector="onSelectionAbortStart">
                                     <bind component="opcao04_agenda" role="onSelection">
                                     <bindParam name="keyCode" value="CURSOR_RIGHT"/>
                                 </bind>
                                     <bind component="opcao01_agenda" role="abort"/>
                                     <bind component="opcao02_agenda" role="abort"/>
                                     <bind component="opcao03_agenda" role="abort"/>
                                     <bind component="opcao04_agenda" role="abort"/>
                                     <bind component="opcao05_agenda" role="start"/>
                                     <bind component="opcao06_agenda" role="start"/>
                                     <bind component="opcao07_agenda" role="start"/>
                                     <bind component="opcao08_agenda" role="start"/>
                                  </link>

                                  <link id="Voltar_agenda5" xconnector="onSelectionAbortStart">
                                     <bind component="opcao08_agenda" role="onSelection">
                                     <bindParam name="keyCode" value="CURSOR_RIGHT"/>
                                 </bind>
                                     <bind component="opcao05_agenda" role="abort"/>
                                     <bind component="opcao06_agenda" role="abort"/>
                                     <bind component="opcao07_agenda" role="abort"/>
                                     <bind component="opcao08_agenda" role="abort"/>
                                     <bind component="opcao09_agenda" role="start"/>
                                     <bind component="opcao010_agenda" role="start"/>
                                     <bind component="opcao011_agenda" role="start"/>
                                     <bind component="opcao012_agenda" role="start"/>
                                  </link>

                                  <link id="Voltar_agenda9" xconnector="onSelectionAbortStart">
                                     <bind component="opcao09_agenda" role="onSelection">
                                     <bindParam name="keyCode" value="CURSOR_LEFT"/>
                                 </bind>
                                     <bind component="opcao05_agenda" role="abort"/>
                                     <bind component="opcao06_agenda" role="abort"/>
                                     <bind component="opcao07_agenda" role="abort"/>
                                     <bind component="opcao08_agenda" role="abort"/>
                                     <bind component="opcao01_agenda" role="start"/>
                                     <bind component="opcao02_agenda" role="start"/>
                                     <bind component="opcao03_agenda" role="start"/>
                                     <bind component="opcao04_agenda" role="start"/>
                                  </link>

                                  <link id="Voltar_agenda13" xconnector="onSelectionAbortStart">
                                     <bind component="opcao05_agenda" role="onSelection">
                                     <bindParam name="keyCode" value="CURSOR_LEFT"/>
                                 </bind>
                                     <bind component="opcao09_agenda" role="abort"/>
                                     <bind component="opcao10_agenda" role="abort"/>
                                     <bind component="opcao11_agenda" role="abort"/>
                                     <bind component="opcao12_agenda" role="abort"/>
                                     <bind component="opcao05_agenda" role="start"/>
                                     <bind component="opcao06_agenda" role="start"/>
                                     <bind component="opcao07_agenda" role="start"/>
                                     <bind component="opcao08_agenda" role="start"/>
                                  </link>

                               </body>

                            </ncl>

                            • 71736c43a3f94f87cecff68af9d24e0b?only path=false&size=50&d=404Paulo J S Júnior(usuário não autenticado)
                              3 de Março de 2008, 8:50

                               

                              menus é uma demanda inevitável.

                              • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
                                3 de Março de 2008, 18:27

                                 

                                Oi Paulo,

                                Quero começar dizendo que ajudar no seu caso é muito mais fácil porque sua pergunta foi associada com um exemplo e tudo mais para me guiar a como ajudá-lo melhor.

                                Provavelmente sua dúvida vai ajudar muitos outros membros da comunidade. Está de parabéns! Particularmente estou muito satisfeito em ajudá-lo.

                                Concordo plenamente com você com relação a menus. Acho que há várias tarefas que vão aparecer repetidas vezes no desenvolvimento de aplicativos para TV digital que precisam ser feitas uma vez e utilizadas recorrentemente, muito parecido com a idéia de padrão de projeto que se tem hoje em OO.

                                O uso extensivo de contextos ajuda muito a encapsular e estruturar. No seu caso, por exemplo, convém fazer isso com os menus. Para mim, há pelo menos dois cuidados importantes ao criar menus:

                                1) É sempre importante que os botões de um menu estejam em regiões dentro de uma região maior, para que só precise alterar essa região para que todos mudem de lugar (como vc fez com a region de id "regionD");

                                2) As mídias dos botões devem estar em um contexto para que possa atuar sobre o contexto e não sobre as mídias independentemente. Isso diminui muito o código e facilita manutenção.

                                Minha sugestão de como faria o seu exemplo é essa:

                                <?xml version="1.0" encoding="ISO-8859-1"?>

                                <ncl id="BB_Menu" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
                                <head>
                                      <regionBase>
                                        <region id="rgAPLICATIVO" left="0px" top="0px" width="640px" height="480px" zIndex="1">
                                               
                                            <region id="regionD" left="0%" top="50%" width="97%" height="37%" zIndex="3">
                                               
                                                <region id="regionD2" left="6%"  top="14%" width="23%" height="81%" zIndex="8"/>
                                                <region id="regionD3" left="29%" top="14%" width="23%" height="81%" zIndex="8"/>
                                                <region id="regionD4" left="52%" top="14%" width="23%" height="81%" zIndex="8"/>
                                                <region id="regionD5" left="75%" top="14%" width="23%" height="81%" zIndex="8"/>               

                                        </region>

                                    </region>
                                      </regionBase>
                                      <descriptorBase>
                                         <descriptor id="dscptD2" region="regionD2" focusIndex="1" moveLeft="4" moveRight="2" focusBorderWidth="-5"

                                focusBorderColor="aqua">
                                        <descriptorParam name="transparency" value="1"/>
                                        <descriptorParam name="border" value="none" />
                                     </descriptor>
                                         <descriptor id="dscptD3" region="regionD3" focusIndex="2" moveLeft="1" moveRight="3" focusBorderWidth="-5"

                                focusBorderColor="yellow">
                                        <descriptorParam name="transparency" value="1"/>
                                        <descriptorParam name="border" value="none" />
                                     </descriptor>
                                         <descriptor id="dscptD4" region="regionD4" focusIndex="3" moveLeft="2" moveRight="4" focusBorderWidth="-5"

                                focusBorderColor="aqua">
                                        <descriptorParam name="transparency" value="1"/>
                                        <descriptorParam name="border" value="none" />
                                     </descriptor>
                                         <descriptor id="dscptD5" region="regionD5" focusIndex="4" moveLeft="3" moveRight="1" focusBorderWidth="-5"

                                focusBorderColor="yellow">
                                        <descriptorParam name="transparency" value="1"/>
                                        <descriptorParam name="border" value="none" />
                                     </descriptor>
                                      </descriptorBase>

                                      <connectorBase>
                                         <causalConnector id="onKeySelectionAbort">
                                            <connectorParam name="keyCode"/>
                                            <simpleCondition role="onSelection" key="$keyCode" />
                                            <simpleAction role="abort" max="unbounded" qualifier="par"/>
                                         </causalConnector>

                                         <causalConnector id="onAbortAbortStart">
                                            <simpleCondition role="onAbort"/>
                                            <compoundAction operator="seq"/>
                                               <simpleAction role="abort" max="unbounded" qualifier="par"/>
                                               <simpleAction role="start" max="unbounded" qualifier="par"/>
                                            </compoundAction>
                                         </causalConnector>

                                      </connectorBase>
                                </head>

                                <body>
                                    <port id="pStartDocument" component="submenu1" />

                                    <context id="submenu1">
                                         <port id="sub1op1" component="opcao01_agenda"/>
                                         <port id="sub1op2" component="opcao02_agenda"/>
                                         <port id="sub1op3" component="opcao03_agenda"/>
                                         <port id="sub1op4" component="opcao04_agenda"/>
                                         <media type="text/html"  id="opcao01_agenda"   src="textos/jan2008.html" descriptor="dscptD2" />       
                                         <media type="text/html"  id="opcao02_agenda"   src="textos/fev2008.html" descriptor="dscptD3" />   
                                         <media type="text/html"  id="opcao03_agenda"   src="textos/mar2008.html" descriptor="dscptD4" />   
                                         <media type="text/html"  id="opcao04_agenda"   src="textos/abr2008.html" descriptor="dscptD5" />

                                         <link id="RIGHT_agenda1" xconnector="onKeySelectionAbort">
                                            <bind component="opcao04_agenda" role="onSelection">
                                               <bindParam name="keyCode" value="CURSOR_RIGHT"/>
                                            </bind>
                                            <bind component="opcao04_agenda" role="abort"/>
                                         </link>

                                    </context>

                                    <context id="submenu2">
                                         <port id="sub2op1" component="opcao05_agenda"/>
                                         <port id="sub2op2" component="opcao06_agenda"/>
                                         <port id="sub2op3" component="opcao07_agenda"/>
                                         <port id="sub2op4" component="opcao08_agenda"/>
                                         <media type="text/html"  id="opcao05_agenda"   src="textos/mai2008.html" descriptor="dscptD2" />       
                                         <media type="text/html"  id="opcao06_agenda"   src="textos/jun2008.html" descriptor="dscptD3" />   
                                         <media type="text/html"  id="opcao07_agenda"   src="textos/jul2008.html" descriptor="dscptD4" />   
                                         <media type="text/html"  id="opcao08_agenda"   src="textos/ago2008.html" descriptor="dscptD5" />   

                                         <link id="LEFT_agenda2" xconnector="onKeySelectionAbort">
                                            <bind component="opcao05_agenda" role="onSelection">
                                               <bindParam name="keyCode" value="CURSOR_LEFT"/>
                                            </bind>
                                            <bind component="opcao05_agenda" role="abort"/>
                                         </link>

                                         <link id="RIGHT_agenda2" xconnector="onKeySelectionAbort">
                                            <bind component="opcao08_agenda" role="onSelection">
                                               <bindParam name="keyCode" value="CURSOR_RIGHT"/>
                                            </bind>
                                            <bind component="opcao08_agenda" role="abort"/>
                                         </link>

                                    </context>

                                    <context id="submenu3">
                                         <port id="sub3op1" component="opcao09_agenda"/>
                                         <port id="sub3op2" component="opcao10_agenda"/>
                                         <port id="sub3op3" component="opcao11_agenda"/>
                                         <port id="sub3op4" component="opcao12_agenda"/>
                                         <media type="text/html"  id="opcao09_agenda"   src="textos/set2008.html" descriptor="dscptD2" />       
                                         <media type="text/html"  id="opcao010_agenda"   src="textos/out2008.html" descriptor="dscptD3" />   
                                         <media type="text/html"  id="opcao011_agenda"   src="textos/nov2008.html" descriptor="dscptD4" />   
                                         <media type="text/html"  id="opcao012_agenda"   src="textos/dez2008.html" descriptor="dscptD5" />

                                         <link id="LEFT_agenda3" xconnector="onKeySelectionAbort">
                                            <bind component="opcao09_agenda" role="onSelection">
                                               <bindParam name="keyCode" value="CURSOR_LEFT"/>
                                            </bind>
                                            <bind component="opcao09_agenda" role="abort"/>
                                         </link>

                                    </context>

                                    <link id="agenda1_para_agenda2" xconnector="onAbortAbortStart">
                                         <bind component="submenu1" interface="sub1op4" role="onAbort"/>
                                         <bind component="submenu1" role="abort"/>
                                         <bind component="submenu2" role="abort"/>
                                    </link>

                                    <link id="agenda2_para_agenda1" xconnector="onAbortAbortStart">
                                         <bind component="submenu2" interface="sub2op1" role="onAbort"/>
                                         <bind component="submenu2" role="abort"/>
                                         <bind component="submenu1" role="abort"/>
                                    </link>

                                    <link id="agenda2_para_agenda3" xconnector="onAbortAbortStart">
                                         <bind component="submenu2" interface="sub2op4" role="onAbort"/>
                                         <bind component="submenu2" role="abort"/>
                                         <bind component="submenu3" role="abort"/>
                                    </link>

                                    <link id="agenda3_para_agenda2" xconnector="onAbortAbortStart">
                                         <bind component="submenu3" interface="sub3op1" role="onAbort"/>
                                         <bind component="submenu3" role="abort"/>
                                         <bind component="submenu2" role="abort"/>
                                    </link>
                                </body>

                                </ncl>

                                 

                                === Explicação geral ===

                                Organizei seus três blocos de botões em três contextos: submenu1, submenu2 e submenu3. Dentro de cada submenu, capturo o deslocamento de um submenu para outro (LEFT ou RIGHT) parando apenas o respectivo botão (o primeiro ou o quarto). Isso é importante para eu saber no submenu2 quando devo migrar para o submenu1 ou submenu3.

                                Foi no contexto externo que coloquei o elo que pára cada submenu e alterna para o vizinho. Utilizei o onAbort e não stop porque havia feito isso no exemplo inicial. Nesse caso, faz mais sentido utilizar o stop já que não há laços de repetição e aparentemente nada que justifique o uso de abort.

                                Carlos

                                • 71736c43a3f94f87cecff68af9d24e0b?only path=false&size=50&d=404Paulo J S Júnior(usuário não autenticado)
                                  4 de Março de 2008, 9:13

                                   

                                  Carlos, muito obrigado pela força.

                                  Tive que excluir este bloco abaixo para rodar max quando teclo o botão para direita em qualuer lugar no contexto do submenu1 ele aborta.

                                           <causalConnector id="onAbortAbortStart">
                                              <simpleCondition role="onAbort"/>
                                              <compoundAction operator="seq"/>
                                                 <simpleAction role="abort" max="unbounded" qualifier="par"/>
                                                 <simpleAction role="start" max="unbounded" qualifier="par"/>
                                              </compoundAction>
                                           </causalConnector>

                                  mas com isto a lógica não funcionará. Estava acontecendo isto no exemplo que postei.

                                  Atenciosamente, Paulo.

                                  • 71736c43a3f94f87cecff68af9d24e0b?only path=false&size=50&d=404Paulo J S Júnior(usuário não autenticado)
                                    5 de Março de 2008, 10:51

                                     

                                    Bom Dia, Carlos. Resultado continua o mesmo.

                                    • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
                                      5 de Março de 2008, 14:46

                                       

                                      "Tive que excluir este bloco abaixo para rodar max quando teclo o botão para direita em qualuer lugar no contexto do submenu1 ele aborta."

                                      Desculpe, mas não consegui entender seu problema! Mas fiz o exemplo postando direto aqui no fórum, sem testar já que estou sem suas mídias. É provável que ele tenha algum erro.

                                      Como disse no final do post passado, não há razão para estar usando o abort. Mude para stop que seus problemas devem terminar (e que tal postar a versão final para fechar a trilha?).

                                      Capturar o onAbort em um conector não é uma boa prática. Melhor não vir a fazer isso.

                                      • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
                                        5 de Março de 2008, 14:57

                                         

                                        ACHO que entendi seu problema. Há um erro claro no meu post com os elos!

                                        Como disse antes, fiquei impossibilitado de testar antes do post.

                                        É que estou dando abort nos dois contextos. O certo nos elos do body é:

                                        * Link "agenda1_para_agenda2": é para fazer bind de submenu2 para start, assim:

                                        <bind component="submenu2" role="start">

                                        * O mesmo vale os demais elos do body, onde acidentalmente estou fazendo abort nos dois contextos quando o segundo sempre é para dar start.

                                        Confirme se está tudo ok?

                                        Carlos

                                        • 71736c43a3f94f87cecff68af9d24e0b?only path=false&size=50&d=404Paulo J S Júnior(usuário não autenticado)
                                          5 de Março de 2008, 16:32

                                           

                                          Carlos, esquecí de te dizer que também modifiquei isto  mas o problema é mesmo que antes, ou seja, quando tecla-se seta p direita em qualquer midia todas as midias são trocadas. Somente deve mudar quando o foco chegar na ultima imagem à direta e também quando teclar p direita.

                                          • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
                                            5 de Março de 2008, 17:09

                                             

                                            Oi Paulo,

                                            Agora entendi! Ei ... essa foi você que me induziu a errar! :)

                                            Na verdade o que você quer é que o CURSOR_RIGHT só tenha efeito se o botão com foco seja aquele com focusIndex 4. Da mesma forma, o CURSOR_LEFT só deve ter efeito se o botão com foco for aquele com o focusIndex 1.

                                            Os passos para fazer isso:

                                            1) Crie um nó settings com a propriedade currentFocus. Essa propriedade sempre indica qual elemento está com foco no momento;

                                            DICA: você pode usar esse recurso para atribuir o foco ao elemento que você deseja num programa NCL.

                                            2) Ao invés de usar o conector onKeySelectionAbort do exemplo acima, vai precisar de mais um assessment para testar TAMBÉM se o valor do currentFocus é 1 (para CURSOR_LEFT) ou 4 (para CURSOR_RIGHT).

                                            O conector ficaria assim (usando a nomenclatura do Composer):

                                            <causalConnector id="onKeySelectionAttNodeTestAbort">
                                                 <connectorParam name="value"/>
                                                 <connectorParam name="keyCode"/>

                                                 <compoundCondition operator="and">
                                                      <simpleCondition role="onSelection" key="$keyCode"/>
                                                      <assessmentStatement comparator="eq">
                                                         <attributeAssessment role="attNodeTest" eventType="attribution" attributeType="nodeProperty"/>
                                                         <valueAssessment value="$value"/>
                                                      </assessmentStatement>
                                                  </compoundCondition>

                                                  <simpleAction role="abort" max="unbounded" qualifier="par"/>
                                            </causalConnector>

                                            (Editei direto aqui, avise-me se algum erro de sintaxe).

                                            3) Precisa mudar os elos dentro dos contextos com os submenus e adicionar mais um teste para o currentFocus.

                                            Exemplo: supondo que seu nó de mídia (<media>) do tipo settings tiver o id "mySettings" (e tenha a propriedade currentFocus). O elo do contexto "submenu1" teria mais um bind assim:

                                            <link xconnector="onKeySelectionAttNodeTestAbort">
                                            (...)
                                                <bind role="attNodeTest" component="mySettings" interface="currentFocus">
                                                      <bindParam name="value" value="4"/>
                                                </bind>
                                            </link>

                                            Poderia postar o resultado final?
                                            Carlos

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