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.
224 lines
6.1 KiB
224 lines
6.1 KiB
/***************************************************************************
|
|
modcalcequinox.cpp - description
|
|
-------------------
|
|
begin : dom apr 18 2002
|
|
copyright : (C) 2004 by Pablo de Vicente
|
|
email : p.devicentea@wanadoo.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 "modcalcequinox.h"
|
|
|
|
#include "modcalcequinox.moc"
|
|
#include "dms.h"
|
|
#include "dmsbox.h"
|
|
#include "kstars.h"
|
|
#include "kstarsdata.h"
|
|
#include "kstarsdatetime.h"
|
|
#include "kssun.h"
|
|
#include "libtdeedu/extdate/extdatetimeedit.h"
|
|
|
|
#include <tqcombobox.h>
|
|
#include <tqstring.h>
|
|
#include <tqtextstream.h>
|
|
#include <tdefiledialog.h>
|
|
#include <tdemessagebox.h>
|
|
#include <tqcheckbox.h>
|
|
#include <tqradiobutton.h>
|
|
|
|
modCalcEquinox::modCalcEquinox(TQWidget *parentSplit, const char *name)
|
|
: modCalcEquinoxDlg (parentSplit,name) {
|
|
showCurrentYear();
|
|
show();
|
|
}
|
|
|
|
modCalcEquinox::~modCalcEquinox(){
|
|
}
|
|
|
|
int modCalcEquinox::getYear (TQString eName)
|
|
{
|
|
bool ok = FALSE;
|
|
int equinoxYear = eName.toInt(&ok);
|
|
if ( ok )
|
|
return equinoxYear;
|
|
else {
|
|
kdDebug() << i18n( "Could not parse epoch string; assuming J2000" ) << endl;
|
|
return 2000;
|
|
}
|
|
}
|
|
|
|
void modCalcEquinox::showCurrentYear (void)
|
|
{
|
|
KStarsDateTime dt( KStarsDateTime::currentDateTime() );
|
|
yearEdit->setText( TQString( "%1").arg( dt.date().year() ) );
|
|
}
|
|
|
|
void modCalcEquinox::slotComputeEquinoxesAndSolstices (void)
|
|
{
|
|
long double julianDay = 0., jdf = 0.;
|
|
float deltaJd;
|
|
KStarsData *kd = (KStarsData*) parent()->parent()->parent();
|
|
KSSun *Sun = new KSSun(kd);
|
|
int year0 = getYear( yearEdit->text() );
|
|
|
|
if (equinoxSolsticesComboBox->currentItem() == 0 ) {
|
|
julianDay = Sun->springEquinox(year0);
|
|
jdf = Sun->summerSolstice(year0);
|
|
}
|
|
else if(equinoxSolsticesComboBox->currentItem() == 1) {
|
|
julianDay = Sun->summerSolstice(year0);
|
|
jdf = Sun->autumnEquinox(year0);
|
|
}
|
|
else if (equinoxSolsticesComboBox->currentItem() == 2 ) {
|
|
julianDay = Sun->autumnEquinox(year0);
|
|
jdf = Sun->winterSolstice(year0);
|
|
}
|
|
else if(equinoxSolsticesComboBox->currentItem() == 3) {
|
|
julianDay = Sun->winterSolstice(year0);
|
|
jdf = Sun->springEquinox(year0+1);
|
|
}
|
|
|
|
deltaJd = (float) (jdf - julianDay);
|
|
showStartDateTime(julianDay);
|
|
showSeasonDuration(deltaJd);
|
|
|
|
}
|
|
|
|
void modCalcEquinox::slotClear(void){
|
|
yearEdit->setText("");
|
|
seasonDuration->setText("");
|
|
}
|
|
|
|
void modCalcEquinox::showStartDateTime(long double jd)
|
|
{
|
|
KStarsDateTime dt( jd );
|
|
startDateTimeEquinox->setDateTime( dt );
|
|
}
|
|
|
|
void modCalcEquinox::showSeasonDuration(float deltaJd)
|
|
{
|
|
seasonDuration->setText( TQString( "%1").arg( deltaJd ) );
|
|
}
|
|
|
|
void modCalcEquinox::slotYearCheckedBatch(){
|
|
if ( yearCheckBatch->isChecked() )
|
|
yearCheckBatch->setEnabled( false );
|
|
else {
|
|
yearCheckBatch->setEnabled( true );
|
|
}
|
|
}
|
|
|
|
void modCalcEquinox::slotInputFile() {
|
|
TQString inputFileName;
|
|
inputFileName = KFileDialog::getOpenFileName( );
|
|
InputLineEditBatch->setText( inputFileName );
|
|
}
|
|
|
|
void modCalcEquinox::slotOutputFile() {
|
|
TQString outputFileName;
|
|
outputFileName = KFileDialog::getSaveFileName( );
|
|
OutputLineEditBatch->setText( outputFileName );
|
|
}
|
|
|
|
void modCalcEquinox::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.").arg( 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" ).arg( inputFileName );
|
|
KMessageBox::sorry( 0, message, i18n( "Invalid file" ) );
|
|
inputFileName = "";
|
|
InputLineEditBatch->setText( inputFileName );
|
|
return;
|
|
}
|
|
}
|
|
|
|
void modCalcEquinox::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 yearB;
|
|
int i = 0;
|
|
long double jdsp = 0., jdsu = 0., jdau = 0., jdwin = 0., jdsp1 = 0.;
|
|
KStarsData *kd = (KStarsData*) parent()->parent()->parent();
|
|
KSSun *Sun = new KSSun(kd);
|
|
|
|
while ( ! istream.eof() ) {
|
|
line = istream.readLine();
|
|
line.stripWhiteSpace();
|
|
|
|
//Go through the line, looking for parameters
|
|
|
|
TQStringList fields = TQStringList::split( " ", line );
|
|
|
|
i = 0;
|
|
|
|
// Read year and write in ostream if corresponds
|
|
|
|
if(yearCheckBatch->isChecked() ) {
|
|
yearB = fields[i].toInt();
|
|
i++;
|
|
} else
|
|
yearB = yearEditBatch->text().toInt();
|
|
|
|
if ( allRadioBatch->isChecked() )
|
|
ostream << yearB << space;
|
|
else
|
|
if(yearCheckBatch->isChecked() )
|
|
ostream << yearB << space;
|
|
|
|
jdsp = Sun->springEquinox(yearB);
|
|
jdsu = Sun->summerSolstice(yearB);
|
|
jdau = Sun->autumnEquinox(yearB);
|
|
jdwin = Sun->winterSolstice(yearB);
|
|
jdsp1 = Sun->springEquinox(yearB+1);
|
|
|
|
KStarsDateTime dts( jdsp );
|
|
KStarsDateTime dtu( jdsu );
|
|
KStarsDateTime dta( jdau );
|
|
KStarsDateTime dtw( jdwin );
|
|
|
|
ostream << dts.toString(Qt::ISODate) << space << (float)(jdsu - jdsp) << space
|
|
<< dtu.toString(Qt::ISODate) << space << (float)(jdau - jdsu) << space
|
|
<< dta.toString(Qt::ISODate) << space << (float)(jdwin - jdau) << space
|
|
<< dtw.toString(Qt::ISODate) << space << (float)(jdsp1 - jdwin) << endl;
|
|
}
|
|
|
|
|
|
fOut.close();
|
|
}
|