You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeedu/kstars/kstars/tools/modcalcapcoord.cpp

319 lines
7.7 KiB

/***************************************************************************
modcalcapcoord.cpp - description
-------------------
begin : Wed Apr 10 2002
copyright : (C) 2002 by Pablo de Vicente
email : vicente@oan.es
***************************************************************************/
/***************************************************************************
* *
* 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 "modcalcapcoord.h"
#include "modcalcapcoord.moc"
#include "modcalcprec.h"
#include "dms.h"
#include "dmsbox.h"
#include "skypoint.h"
#include "kstars.h"
#include "kstarsdata.h"
#include "kstarsdatetime.h"
#include "libtdeedu/extdate/extdatetimeedit.h"
#include <tqcheckbox.h>
#include <tqradiobutton.h>
#include <tqdatetimeedit.h> //needed for TQTimeEdit
#include <klineedit.h>
#include <tqtextstream.h>
#include <klocale.h>
#include <kfiledialog.h>
#include <kmessagebox.h>
//#include <kapplication.h> ..already included in modcalcapcoord.h
modCalcApCoord::modCalcApCoord(TQWidget *parentSplit, const char *name) : modCalcApCoordDlg(parentSplit,name) {
showCurrentTime();
ra0Box->setDegType(FALSE);
rafBox->setDegType(FALSE);
show();
}
modCalcApCoord::~modCalcApCoord(){
}
SkyPoint modCalcApCoord::getEquCoords (void) {
dms raCoord, decCoord;
raCoord = ra0Box->createDms(FALSE);
decCoord = dec0Box->createDms();
SkyPoint sp = SkyPoint (raCoord, decCoord);
return sp;
}
void modCalcApCoord::showCurrentTime (void)
{
KStars *ks = (KStars*) parent()->parent()->parent();
KStarsDateTime dt = ks->data()->geo()->LTtoUT( KStarsDateTime::tqcurrentDateTime() );
datBox->setDate( dt.date() );
timBox->setTime( dt.time() );
}
KStarsDateTime modCalcApCoord::getDateTime (void)
{
return KStarsDateTime( datBox->date() , timBox->time() );
}
double modCalcApCoord::getEpoch (TQString eName) {
bool ok = false;
double epoch = eName.toDouble(&ok);
if ( ok )
return epoch;
else {
kdDebug() << i18n( "Could not parse epoch string; assuming J2000" ) << endl;
return 2000.0;
}
}
void modCalcApCoord::showEquCoords ( SkyPoint sp ) {
rafBox->show( sp.ra() , FALSE);
decfBox->show( sp.dec() );
}
void modCalcApCoord::slotClearCoords(){
ra0Box->clearFields();
dec0Box->clearFields();
rafBox->clearFields();
decfBox->clearFields();
epoch0Name->setText("");
datBox->setDate(ExtDate::tqcurrentDate());
timBox->setTime(TQTime(0,0,0));
}
void modCalcApCoord::slotComputeCoords(){
long double jd = getDateTime().djd();
KStarsDateTime dt;
dt.setFromEpoch( getEpoch( epoch0Name->text() ) );
long double jd0 = dt.djd();
SkyPoint sp;
sp = getEquCoords();
sp.apparentCoord(jd0, jd);
showEquCoords( sp );
}
void modCalcApCoord::slotUtCheckedBatch(){
if ( utCheckBatch->isChecked() )
utBoxBatch->setEnabled( false );
else {
utBoxBatch->setEnabled( true );
}
}
void modCalcApCoord::slotDateCheckedBatch(){
if ( dateCheckBatch->isChecked() )
dateBoxBatch->setEnabled( false );
else {
dateBoxBatch->setEnabled( true );
}
}
void modCalcApCoord::slotRaCheckedBatch(){
if ( raCheckBatch->isChecked() )
raBoxBatch->setEnabled( false );
else {
raBoxBatch->setEnabled( true );
}
}
void modCalcApCoord::slotDecCheckedBatch(){
if ( decCheckBatch->isChecked() )
decBoxBatch->setEnabled( false );
else {
decBoxBatch->setEnabled( true );
}
}
void modCalcApCoord::slotEpochCheckedBatch(){
if ( epochCheckBatch->isChecked() )
epochBoxBatch->setEnabled( false );
else {
epochBoxBatch->setEnabled( true );
}
}
void modCalcApCoord::slotInputFile() {
TQString inputFileName;
inputFileName = KFileDialog::getOpenFileName( );
InputLineEditBatch->setText( inputFileName );
}
void modCalcApCoord::slotOutputFile() {
TQString outputFileName;
outputFileName = KFileDialog::getSaveFileName( );
OutputLineEditBatch->setText( outputFileName );
}
void modCalcApCoord::slotRunBatch() {
TQString inputFileName;
inputFileName = InputLineEditBatch->text();
// We open the input file and read its content
if ( TQFile::exists(inputFileName) ) {
TQFile f( inputFileName );
if ( !f.open( IO_ReadOnly) ) {
TQString message = i18n( "Could not open file %1.").tqarg( f.name() );
KMessageBox::sorry( 0, message, i18n( "Could Not Open File" ) );
inputFileName = "";
return;
}
// processLines(&f);
TQTextStream istream(&f);
processLines(istream);
// readFile( istream );
f.close();
} else {
TQString message = i18n( "Invalid file: %1" ).tqarg( inputFileName );
KMessageBox::sorry( 0, message, i18n( "Invalid file" ) );
inputFileName = "";
InputLineEditBatch->setText( inputFileName );
return;
}
}
//void modCalcApCoord::processLines( const TQFile * fIn ) {
void modCalcApCoord::processLines( TQTextStream &istream ) {
// we open the output file
// TQTextStream istream(&fIn);
TQString outputFileName;
outputFileName = OutputLineEditBatch->text();
TQFile fOut( outputFileName );
fOut.open(IO_WriteOnly);
TQTextStream ostream(&fOut);
TQString line;
TQString space = " ";
int i = 0;
long double jd, jd0;
SkyPoint sp;
TQTime utB;
ExtDate dtB;
dms raB, decB;
double epoch0B;
while ( ! istream.eof() ) {
line = istream.readLine();
line.stripWhiteSpace();
//Go through the line, looking for parameters
TQStringList fields = TQStringList::split( " ", line );
i = 0;
// Read Ut and write in ostream if corresponds
if(utCheckBatch->isChecked() ) {
utB = TQTime::fromString( fields[i] );
i++;
} else
utB = utBoxBatch->time();
if ( allRadioBatch->isChecked() )
ostream << utB.toString() << space;
else
if(utCheckBatch->isChecked() )
ostream << utB.toString() << space;
// Read date and write in ostream if corresponds
if(dateCheckBatch->isChecked() ) {
dtB = ExtDate::fromString( fields[i] );
i++;
} else
dtB = dateBoxBatch->date();
if ( allRadioBatch->isChecked() )
ostream << dtB.toString().append(space);
else
if(dateCheckBatch->isChecked() )
ostream << dtB.toString().append(space);
// Read RA and write in ostream if corresponds
if(raCheckBatch->isChecked() ) {
raB = dms::fromString( fields[i],FALSE);
i++;
} else
raB = raBoxBatch->createDms(FALSE);
if ( allRadioBatch->isChecked() )
ostream << raB.toHMSString() << space;
else
if(raCheckBatch->isChecked() )
ostream << raB.toHMSString() << space;
// Read DEC and write in ostream if corresponds
if(decCheckBatch->isChecked() ) {
decB = dms::fromString( fields[i], TRUE);
i++;
} else
decB = decBoxBatch->createDms();
if ( allRadioBatch->isChecked() )
ostream << decB.toDMSString() << space;
else
if(decCheckBatch->isChecked() )
ostream << decB.toHMSString() << space;
// Read Epoch and write in ostream if corresponds
if(epochCheckBatch->isChecked() ) {
epoch0B = fields[i].toDouble();
i++;
} else
epoch0B = getEpoch( epochBoxBatch->text() );
if ( allRadioBatch->isChecked() )
ostream << epoch0B;
else
if(decCheckBatch->isChecked() )
ostream << epoch0B;
KStarsDateTime dt;
dt.setFromEpoch( epoch0B );
jd = KStarsDateTime(dtB,utB).djd();
jd0 = dt.djd();
sp = SkyPoint (raB, decB);
sp.apparentCoord(jd0, jd);
ostream << sp.ra()->toHMSString() << sp.dec()->toDMSString() << endl;
}
fOut.close();
}