# Programar com o KStars: A Interface de DCOP

Um dos objectivos do &kstars; é possibilitar a capacidade de reproduzir comportamentos complicados num programa. Isto permitir-lhe-á criar viagens virtuais aos céus, e permitirá aos professores construírem demonstrações para aulas de modo a ilustrar certos conceitos astronómicos. Já é possível criar esses programas ('scripts') para o &kstars;, ainda que nem todas as funções desejadas tenham sido incluídas. Também, embora tenhamos eventualmente um construtor de 'scripts' gráfico, os programas poderão precisar de ser feitos à mão. Este capítulo irá explicar como criar esses 'scripts' do &kstars;.

A arquitectura do &kde; fornece a plataforma necessária para as aplicações programáveis com a interface do DCOP. O DCOP significa Desktop Communication Protocol; através do DCOP, as aplicações do &kde; poderão ser controladas por outras aplicações, a partir de uma linha de comandos de terminal ou através de um ficheiro de texto.

## Funções DCOP

A interface de DCOP do &kstars; inclui as seguintes funções:

- `lookTowards( const QString direccao )`: Aponta o foco da visualização para uma direcção indicada pelo argumento. Este poderá ser o nome de qualquer objecto no céu ou uma das palavras de direcção: 'zenith' - zénite (ou 'z'), 'north' - norte ('n'), 'northeast' - nordeste (ne), 'east' - este ('e'), 'southeast' - sueste ('se'), 'south' - sul ('s'), 'southwest' - sudoeste ('sw'), 'west' - oeste ('w'), 'northwest' - noroeste ('nw').

- `setRaDec( double ar, double dec )`: Aponta o foco da visualização para as coordenadas equatoriais indicadas.

- `setAltAz(double alt, double az)`: Aponta o foco da visualização para as coordenadas horizontais indicadas.

- `zoomIn()`: Aumentar o nível de ampliação do ecrã.

- `zoomOut()`: Diminuir o nível de ampliação do ecrã.

- `defaultZoom()`: Repõe a visualização no nível de Zoom = 3 (o nível por omissão).

- `setLocalTime(int ano, int mes, int dia, int hr, int min, int seg)`: Configura o relógio da simulação para a data e hora indicadas.

- `waitFor( double t )`: Pára durante 't' segundos antes de continuar com os comandos subsequentes do programa.

- `waitForKey( const QString t )`: Pára a execução do programa até que o utilizador carregue na tecla indicada. Nesta altura, você não poderá indicar combinações de teclas (como o &Ctrl;C); use apenas teclas simples. Você poderá escrever space para indicar a barra de espaços.

- `setTracking( bool seguir )`: Indica se o modo de seguimento está activo ou não.

- `changeViewOption( const QString opcao, const QString valor )`: Ajusta uma opção de visualização. Existem dezenas de opções disponíveis; basicamente tudo o que você poderá alterar na Configurar a Janela do &kstars; poderá também aqui ser alterado. O primeiro argumento é o nome da opção (os nomes são extraídos a partir do ficheiro de configuração `kstarsrc`) e o segundo argumento é o valor desejado. O processador dos argumentos está desenhado para ser robusto, por isso se você lhe passar dados inválidos, ele irá falhar de forma ordeira.

- `setGeoLocation( const QString cidade, const QString provincia, const QString pais )`: Muda a localização de observação para a cidade indicada. Se não existir nenhuma cidade que corresponda ao texto dos argumentos, então não acontecerá nada.

- `stop()` [relógio]: Pára o relógio da simulação.

- `start()` [relógio]: Inicia o relógio da simulação.

- `setScale(float esc)` [relógio]: Configura a taxa do relógio de simulação. O esc=1,0 significa tempo-real; o 2,0 é duas vezes mais rápido que o tempo-real, etc.

## Testar as Funções do DCOP

Você poderá tentar as funções de DCOP muito facilmente com o programa kdcop. Quando você correr o kdcop, irá ver uma árvore com todos os programas em execução; se o &kstars; estiver a correr, ele aparecerá na lista. A maioria das funções do DCOP estão enumeradas no cabeçalho KStarsInterface, mas as funções do relógio estão definidas em clock. Se fizer duplo-click numa função qualquer, irá executá-la. Se a função precisar de argumentos, irá aparecer uma janela na qual poderá introduzir os valores.

## Criar um Programa de DCOP

As funções do DCOP também podem ser invocadas a partir da linha de comandos do UNIX e estas poderão ser encapsuladas num programa. Iremos criar um programa de exemplo que muda para coordenadas equatoriais, aponta a visualização para a Lua, amplia um pouco e acelera o relógio para uma hora por segundo. Depois de seguir a Lua durante 20 segundos, o relógio é posto em pausa e a visualização reduz a ampliação. Você poderá usar este programa como um modelo para criar novos programas. Tentaremos listar o programa inteiro primeiro e depois explicar as suas várias componentes.

    #!/bin/bash
    #Programa do KStars: Seguir a Lua!
    #
    KSTARS=`dcopfind -a 'kstars*'`
    PRINCIPAL=KStarsInterface
    RELOGIO=relógio#1
    dcop $KSTARS $PRINCIPAL  changeViewOption UseAltAz false
    dcop $KSTARS $PRINCIPAL  lookTowards Moon
    dcop $KSTARS $PRINCIPAL  defaultZoom
    dcop $KSTARS $PRINCIPAL  zoomIn
    dcop $KSTARS $PRINCIPAL  zoomIn
    dcop $KSTARS $PRINCIPAL  zoomIn
    dcop $KSTARS $PRINCIPAL  zoomIn
    dcop $KSTARS $PRINCIPAL  zoomIn
    dcop $KSTARS $RELOGIO setScale 3600.
    dcop $KSTARS $RELOGIO start
    dcop $KSTARS $PRINCIPAL  waitFor  20.
    dcop $KSTARS $RELOGIO stop
    dcop $KSTARS $PRINCIPAL  defaultZoom
    ##

Grave este programa num ficheiro. O ficheiro poderá ter o nome que você desejar; nós sugerimos algo descritivo do tipo `seguir_lua.kstars`. Escreva então o seguinte comando para colocar o programa como executável: ``chmod` `a+x` `seguir_lua.kstars`` . O programa poderá então ser executado em qualquer altura se escrever ``./seguir_lua.kstars`` na pasta que contém o programa. Tenha em atenção que o programa só irá funcionar se você tiver uma instância do &kstars; já em execução. Você poderá usar o comando `dcopstart` num programa para lançar uma nova instância do &kstars;.

Agora, a explicação do programa. A linha de topo identifica o ficheiro como um programa da linha de comandos `BASH`. As duas linhas seguintes são comentários (qualquer linha que comece por # é um comentário e é ignorado pela linha de comandos). As três linhas seguintes definem algumas variáveis de conveniência que serão usadas posteriormente. A variável `KSTARS` identifica o processo do &kstars; actualmente em execução, usando o comando `dcopfind`. O `PRINCIPAL` e o `RELOGIO` identificam as duas interfaces de DCOP associadas ao &kstars;.

O resto do programa é a lista efectiva de chamadas de DCOP. O primeiro comando indica à visualização para usar as coordenadas equatoriais, usando a opção UseAltAz igual a false (mais uma vez, você poderá ver uma lista com todas as opções que o changeViewOption poderá usar se ver o seu ficheiro de configuração `kstarsrc`). O próximo comando centra a visualização na Lua, activando automaticamente o seu seguimento. É então definido o nível de zoom por omissão, seguido então de uma ampliação para 5x. De seguida, a a escala temporal do relógio é configurada para 1 hora por segundo (3 600 segundos é uma hora), dando início depois ao relógio (se não estiver já a correr). A próxima linha interrompe o programa durante 20 segundos, enquanto a Lua é seguida à medida que se mexe no céu. Finalmente, o relógio é parado e o nível de ampliação é reposto no seu valor original.

Esperamos que você goste das capacidades de programação do KStars. Se você criar um programa interessante, por favor envie-nos por e-mail para kstars@30doradus.org; nós gostaríamos de ver o que você fez e poder publicar alguns programas na nossa página Web. Também, se você tiver algumas ideias sobre como melhorar a programação (ou qualquer parte do &kstars;), por favor comunique-nos isso em kstars-devel@lists.sourceforge.net ou submeta um item de desejo no 'bugzilla'.