1 /***************************************************************************
2 modcalcdaylength.cpp - description
4 begin : wed jun 12 2002
5 copyright : (C) 2002 by Pablo de Vicente
7 ***************************************************************************/
9 /***************************************************************************
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. *
16 ***************************************************************************/
18 #include "modcalcdaylength.h"
19 #include "modcalcprec.h"
22 #include "skyobject.h"
23 #include "geolocation.h"
27 #include "ksnumbers.h"
28 #include "kstarsdatetime.h"
29 #include "libkdeedu/extdate/extdatetimeedit.h"
31 #include <kapplication.h>
33 modCalcDayLength::modCalcDayLength(QWidget
*parentSplit
, const char *name
) : modCalcDayLengthDlg(parentSplit
,name
) {
39 modCalcDayLength::~modCalcDayLength() {}
41 void modCalcDayLength::showCurrentDate (void)
43 KStarsDateTime
dt( KStarsDateTime::currentDateTime() );
44 datBox
->setDate( dt
.date() );
47 void modCalcDayLength::initGeo(void)
49 KStars
*ks
= (KStars
*) parent()->parent()->parent(); // QSplitter->AstroCalc->KStars
51 longBox
->show( geoPlace
->lng() );
52 latBox
->show( geoPlace
->lat() );
55 void modCalcDayLength::getGeoLocation (void)
57 geoPlace
->setLong( longBox
->createDms() );
58 geoPlace
->setLat( latBox
->createDms() );
59 geoPlace
->setHeight( 0.0);
62 KStarsDateTime
modCalcDayLength::getDateTime (void)
64 return KStarsDateTime( datBox
->date() , QTime(8,0,0) );
67 void modCalcDayLength::slotClearCoords(){
69 azSetBox
->clearFields();
70 azRiseBox
->clearFields();
71 elTransitBox
->clearFields();
73 // reset to current date
74 datBox
->setDate(ExtDate::currentDate());
76 // reset times to 00:00:00
77 setTimeBox
->clearFields();
78 riseTimeBox
->clearFields();
79 transitTimeBox
->clearFields();
81 // dayLBox->setTime(time);
82 dayLBox
->clearFields();
85 QTime
modCalcDayLength::lengthOfDay(QTime setQTime
, QTime riseQTime
){
87 int dds
= riseQTime
.secsTo(setQTime
);
88 QTime dLength
= dL
.addSecs( dds
);
93 void modCalcDayLength::slotComputePosTime()
95 long double jd0
= getDateTime().djd();
98 KSNumbers
* num
= new KSNumbers(jd0
);
99 KSSun
*Sun
= new KSSun(((KStars
*) parent()->parent()->parent())->data());
100 Sun
->findPosition(num
);
102 QTime setQtime
= Sun
->riseSetTime( jd0
, geoPlace
, false );
103 QTime riseQtime
= Sun
->riseSetTime( jd0
, geoPlace
, true );
104 QTime transitQtime
= Sun
->transitTime(jd0
, geoPlace
);
106 dms setAz
= Sun
->riseSetTimeAz(jd0
, geoPlace
, false);
107 dms riseAz
= Sun
->riseSetTimeAz(jd0
, geoPlace
, true);
108 dms transAlt
= Sun
->transitAltitude(jd0
, geoPlace
);
110 if (setQtime
.isValid() ) {
111 azSetBox
->show( setAz
);
112 elTransitBox
->show( transAlt
);
113 azRiseBox
->show( riseAz
);
115 setTimeBox
->showTime( setQtime
);
116 riseTimeBox
->showTime( riseQtime
);
117 transitTimeBox
->showTime( transitQtime
);
119 QTime dayLQtime
= lengthOfDay (setQtime
,riseQtime
);
121 dayLBox
->showTime( dayLQtime
);
122 } else if (transAlt
.Degrees() > 0. ) {
123 azSetBox
->setDMS(i18n("Circumpolar"));
124 elTransitBox
->show( transAlt
);
125 azRiseBox
->setDMS(i18n("Circumpolar"));
127 setTimeBox
->showTime( setQtime
);
128 riseTimeBox
->showTime( riseQtime
);
129 transitTimeBox
->showTime( transitQtime
);
131 dayLBox
->setEntry("24:00:00");
133 } else if (transAlt
.Degrees() < 0. ) {
134 azSetBox
->setDMS("does not rise");
135 elTransitBox
->setDMS("does not rise");
136 azRiseBox
->setDMS("does not rise");
138 setTimeBox
->clearFields();
139 riseTimeBox
->clearFields();
140 transitTimeBox
->clearFields();
142 dayLBox
->showTime( QTime(0,0,0) );
148 #include "modcalcdaylength.moc"