summaryrefslogtreecommitdiffstats
path: root/kstars/kstars/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kstars/kstars/main.cpp')
-rw-r--r--kstars/kstars/main.cpp191
1 files changed, 191 insertions, 0 deletions
diff --git a/kstars/kstars/main.cpp b/kstars/kstars/main.cpp
new file mode 100644
index 00000000..d3ddbfe2
--- /dev/null
+++ b/kstars/kstars/main.cpp
@@ -0,0 +1,191 @@
+/***************************************************************************
+ main.cpp - K Desktop Planetarium
+ -------------------
+ begin : Mon Feb 5 01:11:45 PST 2001
+ copyright : (C) 2001 by Jason Harris
+ email : jharris@30doradus.org
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include <kcmdlineargs.h>
+#include <kaboutdata.h>
+#include <dcopclient.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include "kstars.h"
+#include "kstarsdata.h"
+#include "kstarsdatetime.h"
+#include "skymap.h"
+#include "simclock.h"
+#include "ksnumbers.h"
+#include "Options.h"
+
+#define KSTARS_VERSION "1.2.9"
+
+static const char description[] =
+ I18N_NOOP("Desktop Planetarium");
+static const char notice[] =
+ I18N_NOOP("Some images in KStars are for non-commercial use only. See README.images.");
+
+
+static KCmdLineOptions options[] =
+{
+ { "!dump", I18N_NOOP( "Dump sky image to file" ), 0 },
+ { "script ", I18N_NOOP( "Script to execute" ), 0 },
+ { "width ", I18N_NOOP( "Width of sky image" ), "640" },
+ { "height ", I18N_NOOP( "Height of sky image" ), "480" },
+ { "filename ", I18N_NOOP( "Filename for sky image" ), "kstars.png" },
+ { "date ", I18N_NOOP( "Date and time" ), "" },
+ { "!paused", I18N_NOOP( "Start with clock paused" ), 0 },
+ KCmdLineLastOption
+};
+
+int main(int argc, char *argv[])
+{
+ KAboutData aboutData( "kstars", I18N_NOOP("KStars"),
+ KSTARS_VERSION, description, KAboutData::License_GPL,
+ I18N_NOOP("(c) 2001-2003, The KStars Team"), notice, "http://edu.kde.org/kstars");
+ aboutData.addAuthor("Jason Harris",0, "jharris@30doradus.org", "http://www.30doradus.org");
+ aboutData.addAuthor("Heiko Evermann",0, "heiko@evermann.de", "http://www.evermann.de");
+ aboutData.addAuthor("Thomas Kabelmann", 0, "tk78@gmx.de", 0);
+ aboutData.addAuthor("Pablo de Vicente", 0, "pvicentea@wanadoo.es", 0);
+ aboutData.addAuthor("Jasem Mutlaq", 0, "mutlaqja@ikarustech.com", 0 );
+ aboutData.addAuthor("Carsten Niehaus", 0, "cniehaus@gmx.de", 0);
+ aboutData.addAuthor("Mark Hollomon", 0, "mhh@mindspring.com", 0);
+ KCmdLineArgs::init( argc, argv, &aboutData );
+ KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+ KApplication a;
+
+ if ( args->isSet( "dump" ) ) {
+ kdDebug() << i18n( "Dumping sky image" ) << endl;
+
+ //parse filename and image format
+ const char* format = "PNG";
+ QString fname = args->getOption( "filename" );
+ QString ext = fname.mid( fname.findRev(".")+1 );
+ if ( ext.lower() == "png" ) { format = "PNG"; }
+ else if ( ext.lower() == "jpg" || ext.lower() == "jpeg" ) { format = "JPG"; }
+ else if ( ext.lower() == "gif" ) { format = "GIF"; }
+ else if ( ext.lower() == "pnm" ) { format = "PNM"; }
+ else if ( ext.lower() == "bmp" ) { format = "BMP"; }
+ else { kdWarning() << i18n( "Could not parse image format of %1; assuming PNG." ).arg( fname ) << endl; }
+
+ //parse width and height
+ bool ok(false);
+ int w(0), h(0);
+ w = args->getOption( "width" ).toInt( &ok );
+ if ( ok ) h = args->getOption( "height" ).toInt( &ok );
+ if ( !ok ) {
+ kdWarning() << "Unable to parse arguments: " << endl;
+ kdWarning() << "Width: " << args->getOption( "width" )
+ << " Height: " << args->getOption( "height" ) << endl;
+ return 1;
+ }
+
+ KStarsData *dat = new KStarsData();
+ QObject::connect( dat, SIGNAL( progressText(QString) ), dat, SLOT( slotConsoleMessage(QString) ) );
+ dat->initialize();
+ while (!dat->startupComplete) { kapp->processEvents(50); }
+
+ //Set Geographic Location
+ dat->setLocationFromOptions();
+
+ //Set color scheme
+ dat->colorScheme()->loadFromConfig( kapp->config() );
+
+ //set clock now that we have a location:
+ //Check to see if user provided a date/time string. If not, use current CPU time
+ QString datestring = args->getOption( "date" );
+ KStarsDateTime kdt;
+ if ( ! datestring.isEmpty() ) {
+ if ( datestring.contains( "-" ) ) { //assume ISODate format
+ if ( datestring.contains( ":" ) ) { //also includes time
+ kdt = KStarsDateTime::fromString( datestring, Qt::ISODate );
+ } else { //string probably contains date only
+ kdt.setDate( ExtDate::fromString( datestring, Qt::ISODate ) );
+ kdt.setTime( QTime( 0, 0, 0 ) );
+ }
+ } else { //assume Text format for date string
+ kdt = dat->geo()->LTtoUT( KStarsDateTime::fromString( datestring, Qt::TextDate ) );
+ }
+
+ if ( ! kdt.isValid() ) {
+ kdWarning() << i18n( "Could not parse Date/Time string: " ) << datestring << endl;
+ kdWarning() << i18n( "Valid date formats: " ) << endl;
+ kdWarning() << " 1950-02-25 ; 1950-02-25 05:30:00" << endl;
+ kdWarning() << " Feb 25 1950 ; Feb 25 1950 05:30:00" << endl;
+ kdWarning() << " 25 Feb 1950 ; 25 Feb 1950 05:30:00" << endl;
+ kdWarning() << i18n( "Using CPU date/time instead." ) << endl;
+
+ kdt = dat->geo()->LTtoUT( KStarsDateTime::currentDateTime() );
+ }
+ } else {
+ kdt = dat->geo()->LTtoUT( KStarsDateTime::currentDateTime() );
+ }
+ dat->clock()->setUTC( kdt );
+
+ KSNumbers num( dat->ut().djd() );
+ dat->initGuides(&num);
+
+ SkyMap *map = new SkyMap( dat );
+ map->resize( w, h );
+ QPixmap sky( w, h );
+
+ map->setDestination( new SkyPoint( Options::focusRA(), Options::focusDec() ) );
+ map->destination()->EquatorialToHorizontal( dat->lst(), dat->geo()->lat() );
+ map->setFocus( map->destination() );
+ map->focus()->EquatorialToHorizontal( dat->lst(), dat->geo()->lat() );
+
+ //Execute the specified script
+ QString scriptfile = args->getOption( "script" );
+ if ( ! scriptfile.isEmpty() ) {
+ if ( dat->executeScript( scriptfile, map ) ) {
+ std::cout << i18n( "Script executed." ).utf8() << std::endl;
+ } else {
+ kdWarning() << i18n( "Could not execute script." ) << endl;
+ }
+ }
+
+ dat->setFullTimeUpdate();
+ dat->updateTime(dat->geo(), map );
+
+ kapp->processEvents(100000);
+ map->setMapGeometry();
+ map->exportSkyImage( &sky );
+ kapp->processEvents(100000);
+
+ if ( ! sky.save( fname, format ) ) kdWarning() << i18n( "Unable to save image: %1 " ).arg( fname ) << endl;
+ else kdDebug() << i18n( "Saved to file: %1" ).arg( fname ) << endl;
+
+ delete map;
+ delete dat;
+ return 0;
+ }
+
+ //start up normally in GUI mode
+
+ //Try to parse the given date string
+ QString datestring = args->getOption( "date" );
+
+ if ( ! datestring.isEmpty() && ! KStarsDateTime::fromString( datestring ).isValid() ) {
+ kdWarning() << i18n("Specified date (%1) is invalid. Will use current CPU date instead." ).arg( datestring ) << endl;
+ datestring = "";
+ }
+
+ new KStars( true, ! args->isSet( "paused" ), datestring );
+ args->clear();
+ QObject::connect(kapp, SIGNAL(lastWindowClosed()), kapp, SLOT(quit()));
+ return a.exec();
+
+}