<chapter id="dcop">
<title
>Att styra Kstars: DCOP-gränssnittet</title>
<para
>Ett av målen med &kstars; är att förbättra möjligheten att spela upp komplicerade beteenden från ett skript. Det gör det möjligt att skapa <quote
>virtuella turer</quote
> av himlarna, och gör det möjligt för lärare att skapa klassrumsdemonstrationer för att åskådliggöra vissa astronomiska företeelser. Det är redan nu möjligt att skriva sådana skript i &kstars;, även om inte alla önskade funktioner är inkluderade. Det kommer också så småningom finnas ett grafikbaserat skriptbyggarverktyg, men för närvarande måste skripten skrivas för hand. Det här kapitlet förklarar hur &kstars;-skripts skrivs. </para>
<para
>&kde;:s arkitektur tillhandahåller det nödvändiga ramverket för att skapa program som kan hanteras via skript, med <abbrev
>DCOP</abbrev
>-gränssnittet. <abbrev
>DCOP</abbrev
> betyder <quote
>Desktop Communication Protocol</quote
> (Protokoll för skrivbordskommunikation). Med <abbrev
>DCOP</abbrev
> kan &kde;-program styras av andra program, från ett terminalfönster eller via ett textbaserat skript. </para>

<sect1 id="dcop-interface">
<title
>DCOP-funktioner</title>
<para
>&kstars; <abbrev
>DCOP</abbrev
>-gränssnitt omfattar följande funktioner: <itemizedlist>
<listitem
><para
><function
> lookTowards( const QString riktning )</function
>: Peka skärmens fokus i en riktning som anges av argumentet. Det här kan vara namnet på vilket objekt som helst på himlen, eller något av följande riktningsord eller förkortningar: zenith (eller z, för zenit), north (n, för norr), northeast (ne, för nordöst), east (e, för öst), southeast (se, för sydöst), south (s, för söder), southwest (sw, för sydväst), west (w, för väster), northwest (nw, för nordväst). </para
></listitem>

<listitem
><para
><function
> setRaDec( double ra, double dek )</function
>: Peka skärmens fokus på de angivna ekvatoriella koordinaterna. </para
></listitem>

<listitem
><para
><function
> setAltAz(double alt, double az)</function
>: Peka skärmens fokus på de angivna horisontella koordinaterna. </para
></listitem>

<listitem
><para
><function
> zoomIn()</function
>: Öka skärmens zoomnivå. </para
></listitem>

<listitem
><para
><function
> zoomOut()</function
>: Minska skärmens zoomnivå. </para
></listitem>

<listitem
><para
><function
> defaultZoom()</function
>: Återställ skärmen till zoomnivå = 3 (normalvärdet). </para
></listitem>

<listitem
><para
><function
> setLocalTime(int år, int månad, int dag, int timme, int minut, int sekund)</function
>: Ställ in simuleringsklockan till det angivna datumet och den angivna tiden. </para
></listitem>

<listitem
><para
><function
> waitFor( double t )</function
>: Gör paus under t sekunder innan följande skriptkommandon behandlas. </para
></listitem>

<listitem
><para
><function
> waitForKey( const QString k )</function
>: Stanna körning av skriptet till användaren trycker på den angivna tangenten. För närvarande kan du inte ange tangentkombinationer (som <keycombo action="simul"
>&Ctrl;<keycap
>C</keycap
></keycombo
>). Använd bara enkla tangenter. Du kan skriva <quote
>space</quote
> för att ange mellanslag. </para
></listitem>

<listitem
><para
><function
> setTracking( bool följ )</function
>: Välj om följningsläge är aktivt eller inte. </para
></listitem>

<listitem
><para
><function
> changeViewOption( const QString alternativ, const QString värde )</function
>: Ändra ett visningsalternativ. Det finns många dussin alternativ tillgängliga. I stort sett allting som du kan ändra i fönstret <guilabel
>Anpassa &kstars;</guilabel
> kan också ändras här. Det första argumentet är alternativets namn (namnen kommer från inställningsfilen <filename
>kstarsrc</filename
>), och det andra argumentet är önskat värde. Argumenttolken är konstruerad för att vara robust, så om du av misstag skickar in felaktig data bör den misslyckas utan allvarliga konsekvenser. </para
></listitem>

<listitem
><para
><function
> setGeoLocation( const QString stad, const QString område, const QString land )</function
>: Ändra observationsplats till den angivna staden. Om ingen stad passar ihop med argumentsträngarna, händer ingenting. </para
></listitem>

<listitem
><para
><function
> stop()</function
> [clock]: Stanna simulatorns klocka. </para
></listitem>

<listitem
><para
><function
> start()</function
> [clock]: Starta simulatorns klocka. </para
></listitem>

<listitem
><para
><function
> setScale(float s)</function
> [clock]: Ställ in hastigheten hos simuleringsklockan. s = 1,0 motsvarar realtid, 2,0 är dubbelt så snabbt som realtid, etc. </para
></listitem>
</itemizedlist>
</para>
</sect1>

<sect1 id="dcop-test">
<title
>Att prova DCOP-funktionerna</title>
<para
>Det är mycket enkelt att prova DCOP-funktionerna, med programmet <application
>kdcop</application
>. När du kör <application
>kdcop</application
>, ser du en trädlista med alla program som kör. Om &kstars; kör visas det. De flesta <abbrev
>DCOP</abbrev
>-funktionerna visas under rubriken <quote
>KStarsInterface</quote
>, men klockfunktionerna visas under <quote
>clock</quote
>. Dubbelklicka på en funktion för att köra den. Om funktionen kräver argument, visas ett fönster där du kan skriva in dem. </para>
</sect1>

<sect1 id="dcop-script">
<title
>Att skriva ett DCOP-skript</title>
<para
><abbrev
>DCOP</abbrev
>-funktioner kan också anropas från UNIX kommandorad, och dessa kan infogas i ett skript. Vi skapar ett exempelskript som byter till ekvatoriella koordinater, pekar skärmen på månen, zoomar in lite grand och accelererar klockan till 1 timme per sekund. Efter att ha följt månen 20 sekunder, så stannas klockan och skärmen zoomar ut. Du kan använda det här skriptet som en mall för att skapa nya skript. Hela skriptet visas först, och därefter förklaras dess olika delar. </para>
<para>
<programlisting
>#!/bin/bash
#KStars skript: Följ månen!
#
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
>Spara skriptet i en fil. Filnamnet kan vara vad som helst. Det är lämpligt med något beskrivande, som <filename
>följmånen.kstars</filename
>. Skriv sedan in följande kommando för att göra skriptet körbart: <userinput
><command
>chmod</command
> <option
>a+x</option
> <parameter
>följmånen.kstars</parameter
> </userinput
>. Skriptet kan nu köras när som helst, genom att skriva <userinput
><command
>./följmånen.kstars</command
></userinput
> i katalogen där skriptet finns. Observera att skriptet bara fungerar om en instans av &kstars; redan kör. Du kan använda kommandot <command
>dcopstart</command
> i ett skript för att starta en ny instans av &kstars;. </para>
<para
>Nu till förklaringen av skriptet. Den översta raden identifierar filen som ett <command
>BASH</command
>-skalskript. Följande två rader är <firstterm
>kommentarer</firstterm
> (alla rader som börjar med <quote
>#</quote
> är kommentarer, och ignoreras av skalet). Följande tre rader definierar några bekvämlighetsvariabler som används senare. Variabeln <varname
>KSTARS</varname
> identifierar &kstars;-processen som för närvarande kör, med kommandot <command
>dcopfind</command
>. <varname
>MAIN</varname
> och <varname
>CLOCK</varname
> identifierar de två <abbrev
>DCOP</abbrev
>-gränssnitt som hör ihop med &kstars;. </para>
<para
>Resten av skriptet är själva listan med <abbrev
>DCOP</abbrev
>-anrop. Det första kommandot ställer in skärmen att använda ekvatoriella koordinater genom att ändra alternativet <quote
>UseAltAz</quote
> till <quote
>false</quote
> (du kan alltså hitta en lista med alla alternativ som <quote
>changeViewOption</quote
> kan använda genom att titta i inställningsfilen <filename
>kstarsrc</filename
>). Nästa kommando centrerar skärmen på månen, och startar automatiskt följning. Därefter ställer vi in normal zoomnivå, och zoomar sedan in fem gånger. Sedan ställs klockans tidsskala in till 1 timme per sekund (3600 sekunder är en timme), och klockan startas (om den inte redan var igång). Nästa rad gör paus under 20 sekunder, medan vi följer månen när den rör sig på himlen. Till slut stannar vi klockan, och återställer zoomnivån till normalvärdet. </para>
<para
>Vi hoppas att du trivs med Kstars skriptmöjligheter. Om du skapar ett intressant skript, skicka gärna in det med e-post till <email
>kstars@30doradus.org</email
>. Vi vill se vad du har gjort, och kanske publicerar några skript på vår webbsida. Om du dessutom har några idéer om hur hantering av skript kan förbättras (eller någon annan del av &kstars;), tala om det för oss på <email
>kstars-devel@lists.sourceforge.net</email
> eller skicka in ett förbättringsförslag med Bugzilla. </para>
</sect1>
</chapter>

