<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>