moved kdeaccessibility kdeaddons kdeadmin kdeartwork kdebindings kdeedu kdegames...
[kdeedu.git] / kstars / kstars / tools / modcalcdaylength.cpp
blob9a31dfe2a8a1513c69fc48a3ce1da35e4cf00968
1 /***************************************************************************
2 modcalcdaylength.cpp - description
3 -------------------
4 begin : wed jun 12 2002
5 copyright : (C) 2002 by Pablo de Vicente
6 email : vicente@oan.es
7 ***************************************************************************/
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 ***************************************************************************/
18 #include "modcalcdaylength.h"
19 #include "modcalcprec.h"
20 #include "dms.h"
21 #include "dmsbox.h"
22 #include "skyobject.h"
23 #include "geolocation.h"
24 #include "kstars.h"
25 #include "timebox.h"
26 #include "kssun.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) {
34 showCurrentDate();
35 initGeo();
36 show();
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
50 geoPlace = ks->geo();
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){
86 QTime dL(0,0,0);
87 int dds = riseQTime.secsTo(setQTime);
88 QTime dLength = dL.addSecs( dds );
90 return dLength;
93 void modCalcDayLength::slotComputePosTime()
95 long double jd0 = getDateTime().djd();
96 getGeoLocation();
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) );
145 delete num;
148 #include "modcalcdaylength.moc"