• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

kstars

  • sources
  • kde-4.12
  • kdeedu
  • kstars
  • kstars
  • tools
modcalcjd.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  modcalcjd.cpp - description
3  -------------------
4  begin : Tue Jan 15 2002
5  copyright : (C) 2002 by Pablo de Vicente
6  email : vicente@oan.es
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "modcalcjd.h"
19 #include "modcalcjd.moc"
20 
21 #include <KGlobal>
22 #include <KLocale>
23 #include <qradiobutton.h>
24 #include <klineedit.h>
25 #include <kmessagebox.h>
26 #include <kdebug.h>
27 
28 #include <QtCore/QTextStream>
29 
30 #include "kstarsdatetime.h"
31 
32 #define MJD0 2400000.5
33 
34 modCalcJD::modCalcJD(QWidget *parentSplit) : QFrame(parentSplit) {
35  setupUi(this);
36 
37  // signals and slots connections
38  connect(NowButton, SIGNAL(clicked()), this, SLOT(showCurrentTime()));
39  connect( DateTimeBox, SIGNAL(dateTimeChanged(const QDateTime&)), this, SLOT(slotUpdateCalendar()) );
40  connect( JDBox, SIGNAL(editingFinished()), this, SLOT(slotUpdateJD()) );
41  connect( ModJDBox, SIGNAL(editingFinished()), this, SLOT(slotUpdateModJD()) );
42  connect( InputFileBatch, SIGNAL(urlSelected(const KUrl&)), this, SLOT(slotCheckFiles()) );
43  connect( OutputFileBatch, SIGNAL(urlSelected(const KUrl&)), this, SLOT(slotCheckFiles()) );
44  connect( RunButtonBatch, SIGNAL(clicked()), this, SLOT(slotRunBatch()) );
45  connect( ViewButtonBatch, SIGNAL(clicked()), this, SLOT(slotViewBatch()) );
46 
47  RunButtonBatch->setEnabled( false );
48  ViewButtonBatch->setEnabled( false );
49 
50  showCurrentTime();
51  slotUpdateCalendar();
52  show();
53 }
54 
55 modCalcJD::~modCalcJD(void)
56 {
57 }
58 
59 void modCalcJD::slotUpdateCalendar()
60 {
61  long double julianDay, modjulianDay;
62 
63  julianDay = KStarsDateTime(DateTimeBox->dateTime()).djd();
64  showJd( julianDay );
65 
66  modjulianDay = julianDay - MJD0;
67  showMjd(modjulianDay);
68 }
69 
70 void modCalcJD::slotUpdateModJD()
71 {
72  long double julianDay, modjulianDay;
73 
74  modjulianDay = KGlobal::locale()->readNumber( ModJDBox->text() );
75  julianDay = MJD0 + modjulianDay;
76  showJd( julianDay );
77  DateTimeBox->setDateTime( KStarsDateTime( julianDay ).dateTime() );
78 }
79 
80 void modCalcJD::slotUpdateJD()
81 {
82  long double julianDay, modjulianDay;
83  julianDay = KGlobal::locale()->readNumber( JDBox->text() );
84  KStarsDateTime dt( julianDay );
85 
86  DateTimeBox->setDateTime( dt.dateTime() );
87 
88  modjulianDay = julianDay - MJD0;
89  showMjd( modjulianDay );
90 }
91 
92 
93 void modCalcJD::showCurrentTime (void)
94 {
95  DateTimeBox->setDateTime( KStarsDateTime::currentDateTime().dateTime() );
96 }
97 
98 void modCalcJD::showJd(long double julianDay)
99 {
100  JDBox->setText(KGlobal::locale()->formatNumber( (double)julianDay, 5 ) );
101 }
102 
103 void modCalcJD::showMjd(long double modjulianDay)
104 {
105  ModJDBox->setText(KGlobal::locale()->formatNumber( (double)modjulianDay, 5 ) );
106 }
107 
108 void modCalcJD::slotCheckFiles() {
109  if ( ! InputFileBatch->lineEdit()->text().isEmpty() && ! OutputFileBatch->lineEdit()->text().isEmpty() ) {
110  RunButtonBatch->setEnabled( true );
111  } else {
112  RunButtonBatch->setEnabled( false );
113  }
114 }
115 
116 void modCalcJD::slotRunBatch() {
117  QString inputFileName = InputFileBatch->url().toLocalFile();
118 
119  if ( QFile::exists(inputFileName) ) {
120  QFile f( inputFileName );
121  if ( !f.open( QIODevice::ReadOnly) ) {
122  QString message = i18n( "Could not open file %1.", f.fileName() );
123  KMessageBox::sorry( 0, message, i18n( "Could Not Open File" ) );
124  return;
125  }
126 
127  QTextStream istream(&f);
128  processLines( istream, InputComboBatch->currentIndex() );
129  ViewButtonBatch->setEnabled( true );
130 
131  f.close();
132  } else {
133  QString message = i18n( "Invalid file: %1", inputFileName );
134  KMessageBox::sorry( 0, message, i18n( "Invalid file" ) );
135  return;
136  }
137 }
138 
139 void modCalcJD::processLines( QTextStream &istream, int inputData ) {
140  QFile fOut( OutputFileBatch->url().toLocalFile() );
141  fOut.open(QIODevice::WriteOnly);
142  QTextStream ostream(&fOut);
143 
144  QString line;
145  long double jd(0);
146  double mjd(0);
147  KStarsDateTime dt;
148 
149  while ( ! istream.atEnd() ) {
150  line = istream.readLine();
151  line = line.trimmed();
152  QStringList data = line.split( ' ', QString::SkipEmptyParts );
153 
154  if ( inputData == 0 ) { //Parse date & time
155  //Is the first field parseable as a date or date&time?
156  if ( data[0].length() > 10 )
157  dt = KStarsDateTime::fromString( data[0] );
158  else
159  dt = KStarsDateTime( QDate::fromString( data[0] ), QTime(0,0,0) );
160 
161  //DEBUG
162  kDebug() << data[0];
163  if ( dt.isValid() ) kDebug() << dt.toString();
164 
165  if ( dt.isValid() ) {
166  //Try to parse the second field as a time
167  if ( data.size() > 1 ) {
168  QString s = data[1];
169  if ( s.length() == 4 ) s = '0'+s;
170  QTime t = QTime::fromString( s );
171  if ( t.isValid() ) dt.setTime( t );
172  }
173 
174  } else { //Did not parse the first field as a date; try it as a time
175  QTime t = QTime::fromString( data[0] );
176  if ( t.isValid() ) {
177  dt.setTime( t );
178  //Now try the second field as a date
179  if ( data.size() > 1 ) {
180  QDate d = QDate::fromString( data[1] );
181  if ( d.isValid() ) dt.setDate( d );
182  else dt.setDate( QDate::currentDate() );
183  }
184  }
185  }
186 
187  if ( dt.isValid() ) {
188  //Compute JD and MJD
189  jd = dt.djd();
190  mjd = jd - MJD0;
191  }
192 
193  } else if ( inputData == 1 ) {//Parse Julian day
194  bool ok(false);
195  jd = data[0].toDouble(&ok);
196  if ( ok ) {
197  dt.setDJD( jd );
198  mjd = jd - MJD0;
199  }
200  } else if ( inputData == 2 ) {//Parse Modified Julian day
201  bool ok(false);
202  mjd = data[0].toDouble(&ok);
203  if ( ok ) {
204  jd = mjd + MJD0;
205  dt.setDJD( jd );
206  }
207  }
208 
209  //Write to output file
210  ostream << KGlobal::locale()->formatDateTime( dt, KLocale::LongDate ) << " "
211  << QString::number( jd, 'f', 2 ) << " "
212  << QString::number( mjd, 'f', 2 ) << endl;
213 
214  }
215 
216  fOut.close();
217 }
218 
219 void modCalcJD::slotViewBatch() {
220  QFile fOut( OutputFileBatch->url().toLocalFile() );
221  fOut.open(QIODevice::ReadOnly);
222  QTextStream istream(&fOut);
223  QStringList text;
224 
225  while ( ! istream.atEnd() )
226  text.append( istream.readLine() );
227 
228  fOut.close();
229 
230  KMessageBox::informationList( 0, i18n("Results of Julian day calculation"), text, OutputFileBatch->url().toLocalFile() );
231 }
KStarsDateTime::fromString
static KStarsDateTime fromString(const QString &s)
Definition: kstarsdatetime.cpp:75
QWidget
KStarsDateTime::setDate
void setDate(const QDate &d)
Assign the Date according to a QDate object.
Definition: kstarsdatetime.cpp:119
KStarsDateTime::setTime
void setTime(const QTime &t)
Assign the Time according to a QTime object.
Definition: kstarsdatetime.cpp:133
NaN::f
const float f
Definition: nan.h:36
MJD0
#define MJD0
Definition: modcalcjd.cpp:32
modCalcJD::~modCalcJD
~modCalcJD()
Definition: modcalcjd.cpp:55
modCalcJD::slotUpdateJD
void slotUpdateJD()
Definition: modcalcjd.cpp:80
KStarsDateTime::currentDateTime
static KStarsDateTime currentDateTime(KDateTime::Spec ts=KDateTime::Spec::ClockTime())
Definition: kstarsdatetime.cpp:67
KStarsDateTime::djd
long double djd() const
Definition: kstarsdatetime.h:145
modCalcJD::slotCheckFiles
void slotCheckFiles()
Definition: modcalcjd.cpp:108
modCalcJD::modCalcJD
modCalcJD(QWidget *p)
Definition: modcalcjd.cpp:34
KStarsDateTime
Extension of KDateTime for KStars KStarsDateTime can represent the date/time as a Julian Day...
Definition: kstarsdatetime.h:45
modCalcJD::slotRunBatch
void slotRunBatch()
Definition: modcalcjd.cpp:116
modCalcJD::slotUpdateCalendar
void slotUpdateCalendar()
Definition: modcalcjd.cpp:59
modCalcJD::showCurrentTime
void showCurrentTime(void)
Definition: modcalcjd.cpp:93
QTextStream
KStarsDateTime::setDJD
void setDJD(long double jd)
Assign the (long double) Julian Day value, which includes the time of day encoded in the fractional p...
Definition: kstarsdatetime.cpp:99
NaN::d
const double d
Definition: nan.h:35
kstarsdatetime.h
modcalcjd.h
QFrame
modCalcJD::slotViewBatch
void slotViewBatch()
Definition: modcalcjd.cpp:219
modCalcJD::slotUpdateModJD
void slotUpdateModJD()
Definition: modcalcjd.cpp:70
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:36:20 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kstars

Skip menu "kstars"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal