<chapter id="dcop">
<title
>Fer scripts amb KStars: La interfície per a DCOP</title>
<para
>Un dels objectius de &kstars; és el proveir la capacitat dels comportaments complicats des d'un script. Això us permetrà crear <quote
>viatges virtuals</quote
> entre el cel i li permetrà als profesors construir presentacions educatives per a il·lustrar certs conceptes astronòmics. Ja és possible escriure dits scripts per a &kstars;, tot i que encara no s'han inclòs totes les funcions desitjades. També, mentre que tinguem una eina basa en IGU per a construir els scripts, aquests s'hauran d'escriure eventualment a mà. Aquest capitol explicarà com escriure scripts &kstars;. </para>
<para
>L'arquitectura &kde; proveeix l'entorn necessari per a scripts d'aplicacions mitjançant la interfície <abbrev
>DCOP</abbrev
>. Aquesta és el pedestal per al <quote
>protocol de comunicació a l'escriptori (Desktop Communication Protocol)</quote
>, les aplicacions &kde; poden ser controlades per d'altres aplicacions, des d'un indicatiu de terminal o a través d'un script de text. </para>

<sect1 id="dcop-interface">
<title
>Funcions DCOP</title>
<para
>La interfície <abbrev
>DCOP</abbrev
> de &kstars; inclou les següents funcions: <itemizedlist>
<listitem
><para
><function
> lookTowards( const QString direcció )</function
>: Apunta la vista del focus en una direcció especificada per l'argument. Aquest pot ser el nom d'un objecte en el cel o una de les següents paraules (o abreviacions) direccionals: zenith (z), north (n), northeast (ne), east (e), southeast (se), south (s), southwest(sw), west(w), northwest (nw). </para
></listitem>

<listitem
><para
><function
> setRaDec( double ar, double dec )</function
>: Apunta la vista del focus cap a les coordenades equatorials especificades. </para
></listitem>

<listitem
><para
><function
> setAltAz(double alt, double az)</function
>: Apunta la vista del focus cap a les coordenades horitzontals especificades. </para
></listitem>

<listitem
><para
><function
> zoomIn()</function
>: Incrementa el nivell d'apropament de la vista. </para
></listitem>

<listitem
><para
><function
> zoomOut()</function
>: Decrementa el nivell d'apropament de la vista. </para
></listitem>

<listitem
><para
><function
> defaultZoom()</function
>: Reinicia la vista al nivell = 3 d'apropament (per omissió). </para
></listitem>

<listitem
><para
><function
> setLocalTime(int any, int mes, int dia, int hora, int minut, int segon)</function
>: Estableix el rellotge de simulació a la data i hora especificades. </para
></listitem>

<listitem
><para
><function
> waitFor( double t )</function
>: Pausa durant t segons abans de continuar amb els subsegüents comandaments a l'script. </para
></listitem>

<listitem
><para
><function
> waitForKey( const QString k )</function
>: Atura l'execució de l'script fins que l'usuari premi la tecla especificada. En aquest punt, no podreu especificar uns combinació de tecles (tals com <keycombo action="simul"
>&Ctrl;<keycap
>C</keycap
></keycombo
>); sinó emprar tecles simples. Podeu escriure <quote
>space</quote
> per a indicar la barra d'espai. </para
></listitem>

<listitem
><para
><function
> setTracking( bool track )</function
>: Permet decidir si el mode de seguiment està en marxa. </para
></listitem>

<listitem
><para
><function
> changeViewOption( const QString opció, const QString valor )</function
>: Ajusta una opció de la vista. Hi ha dotzenes i dotzenes d'opcions disponibles; bàsicament tot el que podeu canviar en la finestra <guilabel
>Opcions de la vista</guilabel
> també es poden canviar aquí. El primer argument és el nom de l'opció (els noms es prenen del fitxer de configuració <filename
>kstarsrc</filename
>) i el segon argument és el valor desitjat. L'analitzador d'arguments està dissenyat per a ser robust, de manera que si accidentament li envieu dades errònees ell fallarà amb gràcia. </para
></listitem>

<listitem
><para
><function
> setGeoLocation( const QString ciutat, const QString provincia, const QString ciutat )</function
>: Canvia la localització d'observació a la ciutat especificada. Si no es troba cap ciutat que hi cassi, llavores no succeirà res. </para
></listitem>

<listitem
><para
><function
> stop()</function
> {rellotge]: Atura el rellotge de simulació. </para
></listitem>

<listitem
><para
><function
> start()</function
> [rellotge]: Engega el rellotge de simulació. </para
></listitem>

<listitem
><para
><function
> setScale(float s)</function
> [rellotge]: Estableix el flux del rellotge de simulació. s=1.0 es correspon a temps real; 2.0 és dues vegades el temps real, etc. </para
></listitem>
</itemizedlist>
</para>
</sect1>

<sect1 id="dcop-test">
<title
>Provar les funcions DCOP</title>
<para
>Podeu provar les funcions DCOP molt fàcilment emprant el programa <application
>kdcop</application
>. Quan executeu <application
>kdcop</application
>,veureu una llista en arbre de tots els programes en execució; si &kstars; s'està executant serà llistat. La majoria de les funcions <abbrev
>DCOP</abbrev
> són llistades sota la capçalera <quote
>KStarsInterface</quote
>, però les funcions del rellotge són llistades sota <quote
>clock</quote
>. Doble-clic sobre qualsevol funció per a executar-la. Si la funció requereix arguments, s'obrirà una finestra en la qual podreu entrar dits valors. </para>
</sect1>

<sect1 id="dcop-script">
<title
>Escriure un script DCOP</title>
<para
>Les funcions <abbrev
>DCOP</abbrev
> també es poden cridar des de la línia de comandaments de UNIX i aquestes es poden encapsular en un script. Ara crearem un script d'exemple que canvii a coordenades equatorials, apunti la vista cap a la Lluna, apropi una mica i que acceleri el rellotge a 1 hora per segon. Després de seguir la Lluna durant 20 segons, s'aturarà breument el rellotge i la vista s'allunyarà altra vegada. Podreu usar aquest script com a plantilla per a fer-ne de nous. Primer llistaré l'script sencer per a després explicar-ne les diverses parts. </para>
<para>
<programlisting
>#!/bin/bash
# Script de KStars: Seguir a la Lluna!
#
KSTARS=`dcopfind -a 'kstars*'`
MAIN=KStarsInterface
CLOCK=clock#1
dcop $KSTARS $MAIN  changeViewOption UseAltAz false
dcop $KSTARS $MAIN  lookTowards Moon
dcop $KSTARS $MAIN  defaultZoom
dcop $KSTARS $MAIN  zoomIn
dcop $KSTARS $MAIN  zoomIn
dcop $KSTARS $MAIN  zoomIn
dcop $KSTARS $MAIN  zoomIn
dcop $KSTARS $MAIN  zoomIn
dcop $KSTARS $CLOCK setScale 3600.
dcop $KSTARS $CLOCK start
dcop $KSTARS $MAIN  waitFor  20.
dcop $KSTARS $CLOCK stop
dcop $KSTARS $MAIN  defaultZoom
##
</programlisting>
</para>
<para
>Desar aquest script a un fitxer. El nom de fitxer pot ser qualsevol cosa al vostre gust, suggereixo quelcom descriptiu com <filename
>seguimentlluna.kstars</filename
>. Llavores escriviu el comandament per a tornar executable a l'script: <userinput
><command
>chmod</command
> <option
>a+x</option
> <parameter
>seguimentlluna.kstars</parameter
></userinput
>. Ara, es podrà executar l'script en qualsevol moment escrivint <userinput
><command
>./trackmoon.kstars</command
></userinput
> a la carpeta que contingui l'script. Tingueu present que aquest tan sols funcionarà si ja s'està executant una instància de &kstars;. Tot i que no exclusivament, en el cas de no ser així podreu emprar el comandament <command
>dcopstart</command
> en un script per a iniciar una nova instància de &kstars;. </para>
<para
>Tot seguit ve la explicació de l'script. La primera línia identifica el fitxer com a un script de <command
>BASH</command
>. Les dues línies següents són <firstterm
>comentaris</firstterm
> (qualsevol línia que comenci per <quote
>#</quote
> és un comentari i aquesta serà ignorada per l'intèrpret de comandaments). Les tres línies següents defineixen algunes variables de la conveniència que siguin emprades més endavant. La variable <varname
>KSTARS</varname
> identifica al procés de &kstars; que s'està executant actualment, usant el comandament <command
>dcopfind</command
>. <varname
>MAIN</varname
> i <varname
>CLOCK</varname
> a dues interfícies <abbrev
>DCOP</abbrev
> associades amb &kstars;. </para>
<para
>La resta de l'script és la llista real de les crides <abbrev
>DCOP</abbrev
>. Els primer joc de comandaments estableix la vista a emprar el sistema de coordenades equatorials establint l'opció <quote
>UseAltAz</quote
> a <quote
>false</quote
> (altra vegada, podreu veure una llista de totes les opcions que <abbrev
>changeViewOption</abbrev
> pot usar examinant el vostre fitxer de configuració <filename
>kstarsrc</filename
>). El següent comandament centra la vista a la Lluna i en comença automàticament el seguiment. Llavores establim el nivell d'apropament per omissió i després apropem cinc vegades. Llavores, s'estableix el calendari del rellotge a 1 hora per segon (3.600 segons són una hora) i s'inicia el rellotge (en el cas de que no estigués ja funcionant). A la següent línia s'atura breument l'script durant 20 segons mentre que seguim la Lluna durant el seu moviment a través del cel. Finalment, parem el rellotge i reajustem el nivell d'apropament al seu valor per omissió. </para>
<para
>Esperem que gaudiu de les capacitats d'escriure scripts de KStars. Si en creeu algun d'interessant, si us plau, envieu-lo per correu electrònic a <email
>kstars@30doradus.org</email
>; voldríem veure el que heu fet i poder afegir alguns scripts a la nostra pàgina web. També, si teniu qualsevol idea per a millorar aquesta qüestió (o qualsevol part de &kstars;), feu-nos-ho saber en <email
>kstars-devel@lists.sourceforge.net</email
> o informant d'un error «wihslist» al bugzilla. </para>
</sect1>
</chapter>

