<chapter id="dcop">
<title
>Programar com o KStars: A Interface de DCOP</title>
<para
>Um dos objectivos do &kstars; é possibilitar a capacidade de reproduzir comportamentos complicados num programa. Isto permitir-lhe-á criar <quote
>viagens virtuais</quote
> 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;. </para>
<para
>A arquitectura do &kde; fornece a plataforma necessária para as aplicações programáveis com a interface do <abbrev
>DCOP</abbrev
>. O <abbrev
>DCOP</abbrev
> significa <quote
>Desktop Communication Protocol</quote
>; através do <abbrev
>DCOP</abbrev
>, 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. </para>

<sect1 id="dcop-interface">
<title
>Funções DCOP</title>
<para
>A interface de <abbrev
>DCOP</abbrev
> do &kstars; inclui as seguintes funções: <itemizedlist>
<listitem
><para
><function
> lookTowards( const QString direccao )</function
>: 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'). </para
></listitem>

<listitem
><para
><function
> setRaDec( double ar, double dec )</function
>: Aponta o foco da visualização para as coordenadas equatoriais indicadas. </para
></listitem>

<listitem
><para
><function
> setAltAz(double alt, double az)</function
>: Aponta o foco da visualização para as coordenadas horizontais indicadas. </para
></listitem>

<listitem
><para
><function
> zoomIn()</function
>: Aumentar o nível de ampliação do ecrã. </para
></listitem>

<listitem
><para
><function
> zoomOut()</function
>: Diminuir o nível de ampliação do ecrã. </para
></listitem>

<listitem
><para
><function
> defaultZoom()</function
>: Repõe a visualização no nível de Zoom = 3 (o nível por omissão). </para
></listitem>

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

<listitem
><para
><function
> waitFor( double t )</function
>: Pára durante 't' segundos antes de continuar com os comandos subsequentes do programa. </para
></listitem>

<listitem
><para
><function
> waitForKey( const QString t )</function
>: 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 <keycombo action="simul"
>&Ctrl;<keycap
>C</keycap
></keycombo
>); use apenas teclas simples. Você poderá escrever <quote
>space</quote
> para indicar a barra de espaços. </para
></listitem>

<listitem
><para
><function
> setTracking( bool seguir )</function
>: Indica se o modo de seguimento está activo ou não. </para
></listitem>

<listitem
><para
><function
> changeViewOption( const QString opcao, const QString valor )</function
>: Ajusta uma opção de visualização. Existem dezenas de opções disponíveis; basicamente tudo o que você poderá alterar na <guilabel
>Configurar a Janela do &kstars;</guilabel
> 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 <filename
>kstarsrc</filename
>) 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. </para
></listitem>

<listitem
><para
><function
> setGeoLocation( const QString cidade, const QString provincia, const QString pais )</function
>: 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. </para
></listitem>

<listitem
><para
><function
> stop()</function
> [relógio]: Pára o relógio da simulação. </para
></listitem>

<listitem
><para
><function
> start()</function
> [relógio]: Inicia o relógio da simulação. </para
></listitem>

<listitem
><para
><function
> setScale(float esc)</function
> [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. </para
></listitem>
</itemizedlist>
</para>
</sect1>

<sect1 id="dcop-test">
<title
>Testar as Funções do DCOP</title>
<para
>Você poderá tentar as funções de DCOP muito facilmente com o programa <application
>kdcop</application
>. Quando você correr o <application
>kdcop</application
>, 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 <abbrev
>DCOP</abbrev
> estão enumeradas no cabeçalho <quote
>KStarsInterface</quote
>, mas as funções do relógio estão definidas em <quote
>clock</quote
>. 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. </para>
</sect1>

<sect1 id="dcop-script">
<title
>Criar um Programa de DCOP</title>
<para
>As funções do <abbrev
>DCOP</abbrev
> 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. </para>
<para>
<programlisting
>#!/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
##
</programlisting>
</para>
<para
>Grave este programa num ficheiro. O ficheiro poderá ter o nome que você desejar; nós sugerimos algo descritivo do tipo <filename
>seguir_lua.kstars</filename
>. Escreva então o seguinte comando para colocar o programa como executável: <userinput
><command
>chmod</command
> <option
>a+x</option
> <parameter
>seguir_lua.kstars</parameter
> </userinput
>. O programa poderá então ser executado em qualquer altura se escrever <userinput
><command
>./seguir_lua.kstars</command
></userinput
> 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 <command
>dcopstart</command
> num programa para lançar uma nova instância do &kstars;. </para>
<para
>Agora, a explicação do programa. A linha de topo identifica o ficheiro como um programa da linha de comandos <command
>BASH</command
>. As duas linhas seguintes são <firstterm
>comentários</firstterm
> (qualquer linha que comece por <quote
>#</quote
> é 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 <varname
>KSTARS</varname
> identifica o processo do &kstars; actualmente em execução, usando o comando <command
>dcopfind</command
>. O <varname
>PRINCIPAL</varname
> e o <varname
>RELOGIO</varname
> identificam as duas interfaces de <abbrev
>DCOP</abbrev
> associadas ao &kstars;. </para>
<para
>O resto do programa é a lista efectiva de chamadas de <abbrev
>DCOP</abbrev
>. O primeiro comando indica à visualização para usar as coordenadas equatoriais, usando a opção <quote
>UseAltAz</quote
> igual a <quote
>false</quote
> (mais uma vez, você poderá ver uma lista com todas as opções que o <quote
>changeViewOption</quote
> poderá usar se ver o seu ficheiro de configuração <filename
>kstarsrc</filename
>). 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. </para>
<para
>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 <email
>kstars@30doradus.org</email
>; 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 <email
>kstars-devel@lists.sourceforge.net</email
> ou submeta um item de desejo no 'bugzilla'. </para>
</sect1>
</chapter>

