Welcome to NCL Composer’s documentation!¶
Prefácio¶

Este manual tem o objetivo de agrupar todas as informações sobre o {nclcomposer} de forma detalhada.
Público alvo¶
Este manual é destinado a qualquer pessoa que deseja aprender a desenvolver aplicações para o middleware de TV Digital [Ginga-NCL](http://www.ginga.org.br), independente de sua experiência em [NCL (Nested Context Language)](http://www.ncl.org.br).
Requisitos¶
O único requisito que se espera do leitor são conhecimentos básicos de informática.
Para tirar total proveito deste manual você precisará também de um computador com:
- Sistema operacional Linux, Windows ou MAC OS X.
- Versão mais atual do {nclcomposer} (disponível em <http://composer.telemidia.puc-rio.br>) instalada e os plug-ins padrões habilitados.
Introdução¶
O que é NCL ?¶
Criada no [Laboratório TeleMídia](http://www.telemidia.puc-rio.br) da [PUC-Rio](http://www.puc-rio.br), a linguagem [NCL (Nested Context Language)](http://www.ncl.org.br) é uma linguagem declarativa para autoria de documentos hipermídia baseados no modelo conceitual NCM - Nested Context Model. NCL define como objetos de mídia são estruturados e relacionados, no tempo e espaço.
O que é o NCL Composer?¶
O [NCL Composer](http://composer.telemidia.puc-rio.br) é uma ferramenta de autoria que visa facilitar o desenvolvimento de aplicações multimídia interativas usando [NCL (Nested Context Language)](http://www.ncl.org.br). Para isso, ele utiliza-se de várias abstrações gráficas (visões) que permitem ao autor focar em apenas um determinado aspecto, durante cada fase distinta da autoria.
Com isso, o NCL Composer permite que usuários não-programadores possam criar aplicações multimídia interativas. Além disso, o NCL Composer também pode ajudar no ensino/aprendizado dos principais conceitos da linguagem NCL e do modelo NCM.
Principais recursos do NCL Composer¶
- Edição gráfica de documentos NCL
- Edição textual de documentos NCL
- Integração com ferramentas de execução
- Multiplataforma (Linux, Windows e MacOS)
Além disso, o NCL Composer foi desenvolvido com o objetivo de ser facilmente extensível. Novas funcionalidades podem ser facilmente adicionadas por meio de plugins.
Instalando o NCL Composer¶
Windows¶
Para instalar o NCL Composer em ambiente Windows:
- Baixe a versão mais atual do NCL Composer para Windows em: <http://composer.telemidia.puc-rio.br/en/download>
- O arquivo deve ter o nome na forma nclcomposer-installer-X.X.X.exe, onde X.X.X deve conter a versão do NCL Composer. Execute esse arquivo.
- Caso você tenha alguma versão anterior instalada, o instalador irá perguntar se deseja desinstalá-la antes de prosseguir.
- Caso contrário, a seguinte tela será exibida:
- Clique no botão I Agree para aceitar a licença do NCL Composer.
- Após aceitar a licença do software, será possível escolher quais plugins serão instalados na sua máquina, por meio da tela (em caso de dúvida não altere):
- Clique no botão Next, e será possível escolher o local onde o NCL Composer será instalado:
- Por fim, o NCL Composer será instalado, e a seguinte tela exibida:
- Caso não tenha ocorrido nenhum problema, feche o instalador. Será possível executar o NCL Composer através do menu Iniciar->TeleMídia->NCL Composer.
Linux (Ubuntu/Debian)¶
Para instalar o NCL Composer em ambiente Linux (Ubuntu/Debian):
- Baixe a versão mais atual do NCL Composer para Linux (Ubuntu/Debian) em: <http://composer.telemidia.puc-rio.br/en/download>
- O arquivo deve ter o nome na forma nclcomposer_X.X.X_i386.deb, onde X.X.X deve conter a versão do NCL Composer. Para instalar o arquivo que foi baixado, execute o seguinte comando na linha de comando:
$ dpkg -i nclcomposer-X.X.X.deb
- Caso a instalação ocorra sem problemas, é possível acessar o NCL Composer através do menu de aplicações, ou por meio do comando:
$ nclcomposer
MacOS¶
Para instalar o NCL Composer em ambiente MacOS:
- Baixe a versão mais atual do NCL Composer para MacOS em: <http://composer.telemidia.puc-rio.br/en/download>
- O arquivo deve ter o nome na forma nclcomposer-X.X.X-YYYYMMDD.dmg, onde X.X.X deve conter a versão do NCL Composer e YYYYMMDD a data do lançamento.
Note
O release do NCL Composer para MacOS é realizado através de um arquivo [DMG](https://pt.wikipedia.org/wiki/.dmg). O arquivo DMG é uma imagem de disco, que se assemelha a um arquivo compactado (ZIP ou RAR). Dessa forma, para instalar a aplicação é necessário extraí-la de dentro do aquivo DMG.
- Para instalar (extrair) o NCL Composer, clique duas vezes no arquivo DMG baixado. Assim, uma janela será exibida contendo a aplicação do NCL Composer. Clique e arraste a aplicação do NCL Composer para dentro da pasta de aplicações do sistema (normalmente /Applications/).
- Pronto!
Note
Este processo é semelhante para qualquer arquivo DMG. Caso queira assitir um vídeo explicativo, acesse o [Doutor Apple](https://www.youtube.com/watch?v=gNqDTE7Vvwc).
Executando o NCL Composer¶
As duas formas mais comuns de iniciar o NCL Composer são clicando no ícone do NCL Composer (por exemplo, na Área de Trabalho ou no Menu Iniciar) ou através de uma linha de comando.
Plataformas conhecidas¶
As plataformas nas quais é sabido que o NCL Composer funciona são: “GNU/Linux”, “Apple Mac OS”, e “Microsoft Windows”.
Línguas¶
Atualmente o NCL Composer está disponível em três línguas: Inglês, Português e Espanhol. É possível alterar a língua corrente em Edit->Preferences->General.
Conceitos Básicos¶
A linguagem NCL—e, consequentemente, o NCL Composer—baseiam-se no modelo NCM (Nested Context Model) para modelar aplicações multimídia interativas. Esta seção discute os principais conceitos do NCM e da NCL, os quais são úteis para utilizar o NCL Composer de forma eficiente.
NCM¶
Nós e elos¶
No NCM, aplicações multimídia são modeladas por meio de nós (nodes) e elos (links) (Figura 1).
Os nós de mídia representam os objetos de mídias da aplicação (vídeos, imagens, textos etc.), enquanto os elos representam relacionamentos entres esses nós. Exemplos de relacionamentos entre os nós são os relacionamentos causais (por exemplo, no NCM é possível criar um elo entre dois nós, informando que quando a apresentação de um nó começar, a apresentação de outro nó também deve ser iniciada).

Além dos nós de mídias, o NCM também permite agrupar nós e links em nós de composição (ou contextos), que permitem agrupar logicamente os nós e elos de uma aplicação. Contextos podem também agrupar outros contextos, recursivamente (veja figura abaixo).

Modelar uma aplicação multimídia no NCM então é definir quais os objetos de mídia fazem parte da aplicação (através dos nós de mídia), como eles estão estruturados (definindo-se nós de contextos) e quando esses objetos de mídia serão apresentados (o que é realizado por meio da definição de elos entre os nós de mídia).
Propriedades, regiões e descritores¶
Objetos de mídia podem conter um conjunto de propriedades. Propriedades definem várias características dos objetos de mídia, como, por exemplo, o seu posicionamento (propriedades top e left), a sua dimensão (propriedades width e height), a sua transparência (propriedade transparency) etc. Para uma lista completa das propriedades suportadas pela NCL é possível consultar o [NCL Handbook](http://handbook.ncl.org.br/doku.php?id=property#predefined-properties). Propriedades também podem ser modificadas dinamicamente durante a exibição do objeto de mídia.
As propriedades de um objeto de mídia são definidas no próprio objeto de mídia. Porém, a NCL também define dois outros elementos que possibilitam reusar um conjunto de propriedades em mais de um objeto de mídia, são eles: a: descritores e regiões.
Um descritor é usado para agrupar um conjunto qualquer de propriedades e, assim, é possível compartilhá-las por mais de uma mídia. Por exemplo, se duas mídia tocam na mesma região da tela e com a mesma transparência, podemos criar um descritor meudescritor que agrupa essas propriedades. Em vez de definí-las novamente para cada um dos objetos de mídia, cada objeto de mídia pode apenas referenciar este descritor.
Uma região permite agrupar o conjunto de propriedades espaciais de um objeto de mídia. Além disso, por meio de regiões também é mais fácil definir
Portas e âncoras¶
Conectores¶
O software NCL Composer¶
O NCL Composer é uma feramenta de autoria para aplicações multimídia baseada no NCM. Por meio do NCL Composer é possível criar uma aplicação multimídia através de diversas visões sobre um documento NCL. Cada visão traz alguma representação diferente do documento NCL que permite visualizar/editar algumas características específicas.
Atualmente, as principais visões do NCL Composer são: Visão Estrutural, Visão de Leiaute, Visão de Outline, Visão Proprieades, Visão de Regras, Visão de Validação e Visão de Execução.
Exemplo 01: Reproduzindo um objeto de mídia¶
Objetivo¶
Neste primeiro exemplo, o objetivo é apenas exibir um objeto de mídia, em tela cheia.
Para isso, iremos:
- Criar um novo projeto;
- Adicionar o objeto de mídia (no exemplo, usaremos um vídeo) na aplicação;
- Informar que esse objeto será iniciado quando a aplicação começar, e
- Determinar a região da tela onde esse objeto de mídia será exibido.
Passo 0: Criando um novo projeto¶
Para criarmos o nosso exemplo, o primeiro passo é criarmos um novo projeto.
Ao abrir o NCL Composer, a seguinte tela de boas-vindas é apresentada:

Tela de boas-vindas do NCL Composer.
Nessa tela, é possível criar um novo projeto por meio do menu File->New Project, por meio do botão New Project no canto esquerdo inferior da tela de boas-vindas, ou simplesmente pressionando Ctrl+N.
Feito isso, a seguinte janela será exibida:
Atribua um nome para o projeto que você está criando (aqui atribuímos o nome exemplo-01), selecione o diretório onde deseja salvá-lo e deixe as opções Copy and Import the default Connector Base (Copie e importe a base de conectores padrão) e Add a default region to the project (adicione uma região padrão ao projeto) selecionadas.
Note
Nas próximas seções serão discutidos em detalhes o que são os conectores e bases de conectores. Por enquanto, apenas deixe esta opção marcada, pois ela será útil para os próximos exemplos.
Por fim, pressione o botão Finish, e o seu novo projeto será criado e aberto.
A animação a seguir exemplifica a criação de um projeto.

Criando um novo projeto.
Ao criar o novo projeto, o NCL Composer irá automaticamente abrí-lo, onde teremos acesso às visões: Visão Estrutural, Visão de Leiaute, Visão de Outline, Visão Proprieades, Visão de Regras, Visão de Validação e Visão de Execução.
Passo 1: Adicionando um objeto de mídia (O que?)¶
Com o nosso projeto criado e aberto, podemos começar a desenvolver a nossa aplicação. Como primeiro passo, temos que adicionar o objeto de mídia da nossa aplicação (neste primeiro exemplo, teremos apenas um objeto de mídia, um vídeo).
Para inserir os objetos de mídia (áudio, vídeo, imagens etc.) em nossa aplicação, a forma mais simples é apenas arrastá-los do seu gerenciador de arquivos para dentro da Visão Estrutural do NCL Composer.

Arraste o objeto de mídia do seu gerenciador de arquivos para a Visão Estrutural do NCL Composer para inserí-lo como objetos de mídia da aplicação
Note
Outra forma de inserir um objeto de mídia, na Visão Estrutural é clicar com o botão direito sobre o corpo do documento e selecionar o menu Insert -> Media. Neste caso, é importante não esquecer de definir o caminho para o objeto de mídia, o que poder ser realizado selecionando o objeto que você acabou de editar e alterando o valor do atributo src (ou na Visão de Propriedades ou na Visão Textual).
A animação a seguir, exemplica como podemos adicionar um novo objeto de mídia, arrastando a partir do gerenciador de arquivos.

Passo 2: Informando o objeto de mídia que serão inicialmente exibidos (Quando?)¶
Para informar que o objeto de mídia que acabamos de inserir deve iniciar quanto a nossa aplicação iniciar, é suficiente criarmos uma porta no corpo do documento, mapeando-a para o objeto de mídia. As portas de um contexto (inclusive do corpo do documento, que nada mais é do que o contexto inicial do documento) definem quais os objetos daquele contexto serão iniciados quando aquele contexto for iniciado.
Para inserirmos uma porta no corpo do documento pela Visão Estrutural é suficiente clicarmos com o botão direito sobre o corpo e selecionarmos o menu Insert->Port.

Para mapearmos a porta que acabamos de criar para o objeto de mídia, podemos selecionar a ferramenta Link na barra de tarefas e clicar sobre a porta e, mantendo o botão do mouse pressionado, arrastar o ponteiro até o objeto de mídia.
Note
Outra forma de ativar a ferramenta Link é segurando a tecla SHIFT enquanto faz-se o mesmo procedimento acima.

Mapeando porta para objeto de mídia.
Com isso, já definimos que nossa aplicação é constituída apenas de um objeto de mídia e que quando a aplicação começar, esse objeto de mídia será executado.
A animação a seguir exemplica como criar e mapear uma porta no corpo do documento.

Mapeando porta para objeto de mídia.
Passo 3: Definindo a região onde o objeto de mídia será apresentado (Onde?)¶
Para finalizar este primeiro exemplo só falta agora definirmos onde (em que região da tela) o objeto de mídia da nossa aplicação será exibido.
Como ao criarmos o nosso projeto, deixamos a opção “Add a default region to the project” selecionada, ao criarmos o projeto já criamos também uma região que ocupa toda a tela.
Para associarmos a mídia que adicionamos no nosso projeto à essa região, basta arrastamos essa mídia (por exemplo, a partir da visão de outline) para a região na visão de leiaute. Veja a animação a seguir:

Associando uma media à uma região.
Ao fazermos isso, o NCL Composer irá nos perguntar se queremos “copiar os dados da região” para a mídia ou se queremos criar um descritor. Um descritor serve para podermos reusar as mesmas propriedades em mais de uma mídia. Exemplos destas propriedade são o posicionamento e a largura e a altura do objeto de mídia. Na grande maioria das vezes (inclusive aqui) iremos querer criar um descritor.
Passo 4: Executando o exemplo¶
Feito isso, o nosso primeiro exemplo já está completo.
Para executá-lo, basta executar o projeto no botão “Run NCL Project”  na Run view.

Executando a aplicação.
Exemplo 02: Reproduzindo um vídeo e uma imagem¶
Objetivo¶
O objetivo deste exemplo é apresentar um vídeo e uma imagem na tela.
Para isso, iremos:
- Adicionar os dois objetos de mídia (um vídeo e uma imagem) na nossa aplicação;
- Criar duas regiões (uma para cada objeto) e associá-las aos objetos de mídia; e
- Informar que os dois objetos devem ser apresentados quando a aplicação começar.
Passo 1: Adicionando os objetos de mídia (O que?)¶
Neste exemplo, queremos uma aplicação com dois objetos de mídia (um vídeo e uma imagem). Para inserí-los no seu projeto, basta arrastar as duas mídias do seu gerenciador de arquivos para a Visão Estrutural do NCL Composer.
Note
Caso precise de mais informações sobre como criar um novo projeto veja o [Passo 0 do Exemplo 01](01.hello_world).

Passo 2: Onde os objetos de mídia serão apresentados¶
Agora iremos definir onde os objetos de mídia serão apresentados. Para isso iremos criar regiões na tela, por meio da Visão de Leiaute e associar os objetos de mídia à essas regiões.
Criando as regiões¶
Como podemos perceber ao acessar a Visão de Leiaute, por padrão, o NCL Composer já cria uma região region0 que ocupa toda a tela. Iremos reusar essa região para o vídeo (queremos que ele ocupe toda a tela) e iremos criar uma nova região para a imagem. Para isso, podemos clicar com o botão direito do mouse na região existente e acessar a opção Add region do menu contextual. Uma nova região será criada, e podemos agora redimensioná-la e posicioná-la da forma que nos convier.

Associando os objetos de mídia às regiões¶
Depois de criarmos as regiões, agora devemos associar cada um dos objetos de mídia (o vídeo e a imagem) a cada uma das suas regiões. Para isso, basta arrastar o objeto de mídia a partir da Visão de Outline para a sua respectiva região na Visão de Leiaute.

Passo 3: Quando os objetos de mídia serão apresentados¶
Como os dois objetos de mídia iniciarão no começo da aplicação, uma forma simples de definir esse comportamento é criando-se uma porta para cada um desses objetos.

Diferente de objetos de mídia de vídeo e áudio, objetos de mídia estáticos—como, por exemplo, imagens—não possuem duração implícíta. Neste caso, caso iniciemos sua execução ela sendo apresentada indefinidamente. Para definirmos a duração de uma mídia (por exemplo, uma imagem) de forma explícita podemos o atributo explicitDur no descritor associado à esta mídia (veja a animação abaixo, onde definimos que a imagem irá durar 5s).

Passo 4: Executando o exemplo¶
Feito isso, o nosso exemplo já está completo e podemos executá-lo na Visão de Execução.

Exemplo 03: Iniciando e terminando dois objetos de mídia simultaneamente¶
Objetivo¶
O objetivo deste exemplo é iniciar e terminar dois objetos de mídia simultaneamente.
Para isso, iremos:
- Adicionar os dois objetos de mídia que fazem parte da aplicação (um vídeo e uma imagem);
- Criar duas regiões, uma para o vídeo e uma para a imagem, e associar os respectivos objetos de mídia à suas regiões;
- Informar que o vídeo começará a ser apresentado no início da aplicação; e
- Criar dois elos:
- Um informando que a imagem iniciará sua apresentação quando o vídeo começar a ser executado; e
- Outro informando que a imagem irá terminar a sua execução quando o vídeo terminar a sua execução.
Passo 1: Adicionando os objetos de mídia (O que?)¶
Da mesma forma que no exemplo anterior iremos arrastar os dois objetos de mídia que ainda fazem parte da nossa aplicação (um vídeo e uma imagem) para a Visão Estrutural.

Arrastando um vídeo e uma imagem para a Visão Estrutural.
Passo 2: Onde os objetos de mídia serão apresentados (Onde?)¶
Agora iremos definir onde os objetos de mídia serão apresentados. Para isso, iremos criar regiões na tela por meio da Visão de Leiaute e associar os objetos de mídia à essas regiões.
Criando as regiões¶
Como podemos perceber ao acessar a Visão de Leiaute, por padrão, o NCL Composer já cria uma região region0 que ocupa toda a tela. Iremos reusar essa região para o vídeo (queremos que ele ocupe toda a tela) e iremos criar uma nova região para a imagem. Para isso, podemos clicar com o botão direito do mouse na região existente e acessar a opção Add region do menu contextual. Uma nova região será criada, e podemos agora redimensioná-la e posicioná-la da forma que nos convier.

Arraste um vídeo e uma imagem para a Visão Estrutural.
Associando os objetos de mídia às regiões¶
Depois de criarmos as regiões, agora devemos associar cada um dos objetos de mídia (o vídeo e a imagem) a cada uma das suas regiões. Para isso, basta arrastar o objeto de mídia a partir da Visão de Outline para a sua respectiva região na Visão de Leiaute.

Passo 4: Quando os objetos de mídia serão apresentados: Links (Quando?)¶
Para informar quando os objetos de mídia serão executados iremos:
- Criar uma porta para o vídeo, informando que ele deve ser apresentado quando a aplicação iniciar sua execução; e
- Criar dois elos sincronizando a imagem com o video acima. O primeiro elo irá informar que a apresentação da imagem deve começar quando a apresentação do vídeo começar, e o segundo elo irá informar que a apresentação da imagem deve terminar quando a apresentação do vídeo terminar.
Informando o objeto que será inicialmente apresentado¶
Para criarmos uma porta para o vídeo principal podemos, na Visão Estrutural, selecionar o body e pressionar o botão Insert port na barra de ferramentas. Feito isso, teremos uma nova porta no body.
Para associarmos essa porta ao vídeo de nossa aplicação podemos selecionar a ferramenta de link na barra de ferramentas e clicar com o botão esquerdo do mouse e (ainda segurando o botão) arrastar o ponteiro para o vídeo.
Com isso, já definimos que quando a aplicação iniciar o vídeo iniciará a sua apresentação.

Sincronizando o início e o fim do vídeo com o início e fim da imagem¶
Para sincronizarmos a apresentação do vídeo com a apresentação da imagem, iremos usar elos. Para criarmos um elo entre dois objetos de mídia na Visão Estrutural podemos:
- selecionar a ferramenta de link na barra de ferramentes; e, depois
- clicar com o botão direito do mouse sobre o primeiro objeto de mídia (no caso do nosso exemplo, o vídeo), mantendo o botão do mouse pressionado, arrastar o ponteiro até o segundo objeto (no nosso exemplo, a imagem).
Com isso, iremos criar um elo no qual o primeiro objeto clicado participará como parte da condição, e a ação será executada sobre o segundo objeto (para o qual arrastamos o elo).
Logo após criarmos um elo com o procedimento acima, uma nova janela irá abrir, na qual poderemos detalhar as informações desse elo. Em especial, devemos escolher qual o tipo de elo que estamos criando (ou seja, qual o conector daquele elo) e quais as ações e condições dos objetos que selecionamos. Geralmente, só modificamos as ações ou condições quando o elo que estamos criando possuir mais de uma condição ou mais de uma ação.
Note
Alguns tipos de elo também podem receber parâmetros (e.g. um parâmetro delay que informa com quanto tempo depois de a condição satisfeita as ação deve ser executada). E também podemos definir os valores desses parâmetros na janela de criação de elos.
No caso do nosso exemplo, iremos escolher o tipo do primeiro elo onBeginStart (ou ao começar “isto”, inicie “aquilo”), informando que quando o primeiro objeto selecionado (o vídeo) começar a sua apresentação, queremos que o segundo objeto (a imagem) também comece a sua apresentação.
Para o segundo elo, iremos escolher o tipo onEndStop (ou ao terminar “isto”, termine aquilo). Dessa forma, iremos informar que o final do vídeo deve também disparar a finalização da imagem.

Passo 5: Executando o exemplo¶
Pronto! O nosso Exemplo 03 está pronto. Para testá-lo basta executá-lo na Visão de Execução. O resultado deve ser o início do vídeo e da imagem no início da aplicação e os dois devem continuar apresentando até o final do vídeo, quando os dois devem ser finalizados, e a aplicação termina a sua execução.
Passo 0: Salvar como…¶
Para reusarmos o que já foi feito no exemplo anterior, vamos abrí-lo e criar um novo projeto baseado nele, por meio do menu File->Save as….

Como mudar o tema do NCL Composer¶
