# Att styra Kstars: DCOP-gränssnittet

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 virtuella turer 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.

&kde;:s arkitektur tillhandahåller det nödvändiga ramverket för att skapa program som kan hanteras via skript, med DCOP-gränssnittet. DCOP betyder Desktop Communication Protocol (Protokoll för skrivbordskommunikation). Med DCOP kan &kde;-program styras av andra program, från ett terminalfönster eller via ett textbaserat skript.

## DCOP-funktioner

&kstars; DCOP-gränssnitt omfattar följande funktioner:

- `lookTowards( const QString riktning )`: 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).

- `setRaDec( double ra, double dek )`: Peka skärmens fokus på de angivna ekvatoriella koordinaterna.

- `setAltAz(double alt, double az)`: Peka skärmens fokus på de angivna horisontella koordinaterna.

- `zoomIn()`: Öka skärmens zoomnivå.

- `zoomOut()`: Minska skärmens zoomnivå.

- `defaultZoom()`: Återställ skärmen till zoomnivå = 3 (normalvärdet).

- `setLocalTime(int år, int månad, int dag, int timme, int minut, int sekund)`: Ställ in simuleringsklockan till det angivna datumet och den angivna tiden.

- `waitFor( double t )`: Gör paus under t sekunder innan följande skriptkommandon behandlas.

- `waitForKey( const QString k )`: Stanna körning av skriptet till användaren trycker på den angivna tangenten. För närvarande kan du inte ange tangentkombinationer (som &Ctrl;C). Använd bara enkla tangenter. Du kan skriva space för att ange mellanslag.

- `setTracking( bool följ )`: Välj om följningsläge är aktivt eller inte.

- `changeViewOption( const QString alternativ, const QString värde )`: Ändra ett visningsalternativ. Det finns många dussin alternativ tillgängliga. I stort sett allting som du kan ändra i fönstret Anpassa &kstars; kan också ändras här. Det första argumentet är alternativets namn (namnen kommer från inställningsfilen `kstarsrc`), 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.

- `setGeoLocation( const QString stad, const QString område, const QString land )`: Ändra observationsplats till den angivna staden. Om ingen stad passar ihop med argumentsträngarna, händer ingenting.

- `stop()` [clock]: Stanna simulatorns klocka.

- `start()` [clock]: Starta simulatorns klocka.

- `setScale(float s)` [clock]: Ställ in hastigheten hos simuleringsklockan. s = 1,0 motsvarar realtid, 2,0 är dubbelt så snabbt som realtid, etc.

## Att prova DCOP-funktionerna

Det är mycket enkelt att prova DCOP-funktionerna, med programmet kdcop. När du kör kdcop, ser du en trädlista med alla program som kör. Om &kstars; kör visas det. De flesta DCOP-funktionerna visas under rubriken KStarsInterface, men klockfunktionerna visas under clock. 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.

## Att skriva ett DCOP-skript

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

    #!/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
    ##

Spara skriptet i en fil. Filnamnet kan vara vad som helst. Det är lämpligt med något beskrivande, som `följmånen.kstars`. Skriv sedan in följande kommando för att göra skriptet körbart: ``chmod` `a+x` `följmånen.kstars`` . Skriptet kan nu köras när som helst, genom att skriva ``./följmånen.kstars`` i katalogen där skriptet finns. Observera att skriptet bara fungerar om en instans av &kstars; redan kör. Du kan använda kommandot `dcopstart` i ett skript för att starta en ny instans av &kstars;.

Nu till förklaringen av skriptet. Den översta raden identifierar filen som ett `BASH`-skalskript. Följande två rader är kommentarer (alla rader som börjar med # är kommentarer, och ignoreras av skalet). Följande tre rader definierar några bekvämlighetsvariabler som används senare. Variabeln `KSTARS` identifierar &kstars;-processen som för närvarande kör, med kommandot `dcopfind`. `MAIN` och `CLOCK` identifierar de två DCOP-gränssnitt som hör ihop med &kstars;.

Resten av skriptet är själva listan med DCOP-anrop. Det första kommandot ställer in skärmen att använda ekvatoriella koordinater genom att ändra alternativet UseAltAz till false (du kan alltså hitta en lista med alla alternativ som changeViewOption kan använda genom att titta i inställningsfilen `kstarsrc`). 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.

Vi hoppas att du trivs med Kstars skriptmöjligheter. Om du skapar ett intressant skript, skicka gärna in det med e-post till kstars@30doradus.org. 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å kstars-devel@lists.sourceforge.net eller skicka in ett förbättringsförslag med Bugzilla.