summaryrefslogtreecommitdiffstats
path: root/doc/kstars/dcop.docbook
diff options
context:
space:
mode:
Diffstat (limited to 'doc/kstars/dcop.docbook')
-rw-r--r--doc/kstars/dcop.docbook229
1 files changed, 229 insertions, 0 deletions
diff --git a/doc/kstars/dcop.docbook b/doc/kstars/dcop.docbook
new file mode 100644
index 00000000..b17539bf
--- /dev/null
+++ b/doc/kstars/dcop.docbook
@@ -0,0 +1,229 @@
+<chapter id="dcop">
+<title>Scripting KStars: The DCOP Interface</title>
+<para>
+One of the goals of &kstars; is to provide the ability to playback
+complicated behaviors from a script. This will allow you to
+create <quote>virtual tours</quote> of the heavens, and will enable
+teachers to construct classroom demos to illustrate certain
+astronomical concepts. It is already possible to write such scripts
+for &kstars;, although not all of the desired functions have been
+included. Also, while we will eventually have a GUI-based script
+builder tool, the scripts must currently be written by hand. This
+chapter will explain how to write &kstars; scripts.
+</para>
+<para>
+The &kde; architecture provides the necessary framework for scriptable
+applications via the <abbrev>DCOP</abbrev> interface.
+<abbrev>DCOP</abbrev> stands for <quote>Desktop Communication
+Protocol</quote>; through <abbrev>DCOP</abbrev>, &kde; applications
+can be controlled by other applications, from a terminal prompt, or
+through a text script.
+</para>
+
+<sect1 id="dcop-interface">
+<title>DCOP Functions</title>
+<para>
+The &kstars; <abbrev>DCOP</abbrev> Interface includes the following
+functions:
+
+<itemizedlist>
+<listitem><para><function>
+lookTowards( const QString direction )</function>:
+Point the display focus in a direction specified by the argument.
+This can be the name of any object in the sky, or one of the following
+directional words or abbreviations: zenith (or z), north (n),
+northeast (ne), east (e), southeast (se), south (s), southwest(sw),
+west(w), northwest (nw).
+</para></listitem>
+
+<listitem><para><function>
+setRaDec( double ra, double dec )</function>:
+Point the display focus at the specified equatorial coordinates.
+</para></listitem>
+
+<listitem><para><function>
+setAltAz(double alt, double az)</function>:
+Point the display focus at the specified horizontal coordinates.
+</para></listitem>
+
+<listitem><para><function>
+zoomIn()</function>:
+Increase the display's Zoom level.
+</para></listitem>
+
+<listitem><para><function>
+zoomOut()</function>:
+Decrease the display's Zoom level.
+</para></listitem>
+
+<listitem><para><function>
+defaultZoom()</function>:
+Reset the display to Zoom level = 3 (the default).
+</para></listitem>
+
+<listitem><para><function>
+setLocalTime(int yr, int mth, int day, int hr, int min, int sec)</function>:
+Set the simulation clock to the specified date and time.
+</para></listitem>
+
+<listitem><para><function>
+waitFor( double t )</function>:
+Pause for t seconds before continuing with subsequent script commands.
+</para></listitem>
+
+<listitem><para><function>
+waitForKey( const QString k )</function>:
+Halt the script execution until the user presses the specified key.
+At this point, you cannot specify combination keystrokes (such as
+<keycombo action="simul">&Ctrl;<keycap>C</keycap></keycombo>); just use
+simple keys. You can type <quote>space</quote> to indicate the
+spacebar.
+</para></listitem>
+
+<listitem><para><function>
+setTracking( bool track )</function>:
+Toggle whether tracking mode is engaged.
+</para></listitem>
+
+<listitem><para><function>
+changeViewOption( const QString option, const QString value )</function>:
+Adjust a view option. There are dozens and dozens of options available;
+basically everything you can change in the <guilabel>Configure &kstars;
+Window</guilabel> can be changed here as well. The first argument is
+the name of the option (the names are taken from the
+<filename>kstarsrc</filename> configuration file), and the second
+argument is the desired value. The argument parser is designed to be
+robust, so if you accidentally send it bad data it should fail
+gracefully.
+</para></listitem>
+
+<listitem><para><function>
+setGeoLocation( const QString city, const QString province,
+const QString country )</function>:
+Change the observing location to the specified city. If no city matching
+the argument strings is found, then nothing happens.
+</para></listitem>
+
+<listitem><para><function>
+stop()</function> [clock]:
+Halt the simulation clock.
+</para></listitem>
+
+<listitem><para><function>
+start()</function> [clock]:
+Start the simulation clock.
+</para></listitem>
+
+<listitem><para><function>
+setScale(float s)</function> [clock]:
+Set the rate of the simulation clock. s=1.0 corresponds to real time;
+2.0 is twice as fast as real-time, etc.
+</para></listitem>
+</itemizedlist>
+</para>
+</sect1>
+
+<sect1 id="dcop-test">
+<title>Testing the DCOP Functions</title>
+<para>
+You can try out the DCOP functions very easily using the
+<application>kdcop</application> program. When you run
+<application>kdcop</application>, you will see a tree-list of all
+running programs; if &kstars; is running it will be listed. Most of
+the <abbrev>DCOP</abbrev> functions are listed under the
+<quote>KStarsInterface</quote> heading, but the clock functions are
+listed under <quote>clock</quote>. Double-click on any function to
+execute it. If the function requires arguments, a window will open
+in which you can input the values.
+</para>
+</sect1>
+
+<sect1 id="dcop-script">
+<title>Writing a DCOP Script</title>
+<para>
+<abbrev>DCOP</abbrev> functions can also be called from the UNIX
+command line, and these can be encapsulated in a script. We will
+create an example script that switches to Equatorial coordinates,
+points the display at the Moon, zooms in a bit, and accelerates
+the clock to 1 hour per second. After tracking the Moon
+for 20 seconds, the clock is paused and the display zooms out.
+You can use this script as a template for making new scripts.
+I will list the entire script first, and then explain its various
+parts.
+</para>
+<para>
+<programlisting>
+#!/bin/bash
+#KStars script: Track the Moon!
+#
+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>
+Save this script to a file. The filename can be anything you like; I
+suggest something descriptive like
+<filename>trackmoon.kstars</filename>. Then type the following command
+to make the script executable:
+<userinput><command>chmod</command> <option>a+x</option>
+<parameter>trackmoon.kstars</parameter>
+</userinput>. The script can then be executed at any time by typing
+<userinput><command>./trackmoon.kstars</command></userinput> in the
+folder which contains the script. Note that the script will only
+work if an instance of &kstars; is already running. You can use the
+<command>dcopstart</command> command in a script to launch a new instance
+&kstars;.
+</para>
+<para>
+Now to the explanation of the script. The top line identifies the file
+as a <command>BASH</command> shell script. The following two lines
+are <firstterm>comments</firstterm> (any line beginning with
+<quote>#</quote> is a comment, and is ignored by the shell). The next
+three lines define some convenience variables that will be used later.
+The <varname>KSTARS</varname> variable identifies the currently-running
+&kstars; process, using the <command>dcopfind</command> command.
+<varname>MAIN</varname> and <varname>CLOCK</varname> identify the
+two <abbrev>DCOP</abbrev> interfaces associated with &kstars;.
+</para>
+<para>
+The remainder of the script is the actual list of <abbrev>DCOP</abbrev>
+calls. The first command sets the display to use Equatorial
+coordinates by setting the <quote>UseAltAz</quote> option to
+<quote>false</quote> (again, you can see a list of all options that
+<quote>changeViewOption</quote> can use by examining your
+<filename>kstarsrc</filename> configuration file). The next command
+centers the display on the Moon, and automatically engages tracking.
+We then set the default zoom level, and then zoom in five times.
+Next, the clock's timescale is set to 1 hour per second (3600 seconds
+is one hour), and the clock is started (in case it was not already
+running). The next line pauses the script for 20 seconds while we
+track the Moon as it moves across the sky. Finally, we stop the clock
+and reset the zoom level to its default setting.
+</para>
+<para>
+We hope you enjoy the scripting abilities of KStars. If you create an
+interesting script, please email it to
+<email>kstars@30doradus.org</email>; we would like to see what you have done,
+and may post some scripts on our webpage. Also, if you have any
+ideas for how to improve scripting (or any part of &kstars;), let us
+know at <email>kstars-devel@lists.sourceforge.net</email> or submit a
+wishlist item to bugzilla.
+</para>
+</sect1>
+</chapter>
+