21 #include <QStackedWidget>
22 #include <QTreeWidget>
23 #include <QTreeWidgetItem>
26 #include <ktextedit.h>
49 "<H2>KStars Astrocalculator</H2>"
51 "The KStars Astrocalculator contains several <B>modules</b> "
52 "which perform a variety of astronomy-related calculations. "
53 "The modules are organized into several categories: "
55 "<LI><B>Time calculators: </B>"
56 "Convert between time systems, and predict the timing of celestial events</LI>"
57 "<LI><B>Coordinate converters: </B>"
58 "Convert between various coordinate systems</LI>"
59 "<LI><B>Solar system: </B>"
60 "Predict the position of any planet, from a given location on Earth at a given time</LI>"
66 "Section which includes algorithms for computing time ephemeris"
68 "<B>Julian Day:</B> Julian Day/Calendar conversion"
70 "<B>Sidereal Time:</B> Sidereal/Universal time conversion"
72 "<B>Almanac:</B> Rise/Set/Transit timing and position data "
73 "for the Sun and Moon"
75 "<B>Equinoxes & Solstices:</B> Equinoxes, Solstices and duration of the "
79 QString messageCoord =
81 "Section with algorithms for the conversion of "
82 "different astronomical systems of coordinates"
84 "<B>Galactic:</B> Galactic/Equatorial coordinates conversion"
86 "<B>Apparent:</B> Computation of current equatorial coordinates"
89 "<B>Ecliptic:</B> Ecliptic/Equatorial coordinates conversion"
91 "<B>Horizontal:</B> Computation of azimuth and elevation for a "
92 "given source, time, and location on the Earth"
94 "<B>Angular Distance:</B> Computation of angular distance between "
95 "two objects whose positions are given in equatorial coordinates"
97 "<B>Geodetic Coords:</B> Geodetic/XYZ coordinate conversion"
99 "<B>LSR Velocity:</B> Computation of the heliocentric, geocentric "
100 "and topocentric radial velocity of a source from its LSR velocity"
103 QString messageSolar =
105 "Section with algorithms regarding information "
106 "on solar system bodies coordinates and times"
108 "<B>Planets Coords:</B> Coordinates for the planets, moon and sun "
109 "at a given time and from a given position on Earth "
113 QSplitter* split =
new QSplitter (
this );
114 setMainWidget(split);
115 setCaption( i18n(
"Calculator") );
116 setButtons( KDialog::Close );
119 navigationPanel =
new QTreeWidget(split);
120 navigationPanel->setColumnCount(1);
121 navigationPanel->setHeaderLabels( QStringList(i18n(
"Calculator modules")) );
122 navigationPanel->setSortingEnabled(
false );
125 navigationPanel->setMinimumWidth( 200 );
127 acStack =
new QStackedWidget( split );
129 splashScreen =
new KTextEdit( message, acStack );
130 splashScreen->setReadOnly(
true );
134 splashScreen->setMinimumSize(640, 550);
135 acStack->addWidget( splashScreen );
139 QIcon jdIcon = QIcon (
"jd.png");
140 QIcon geodIcon = QIcon (
"geodetic.png");
141 QIcon solarIcon = QIcon (
"geodetic.png");
143 QIcon timeIcon = QIcon (
"sunclock.png");
147 QTreeWidgetItem * timeItem = addTreeTopItem(navigationPanel, i18n(
"Time Calculators"), messageTime);
148 timeItem->setIcon(0,timeIcon);
150 addTreeItem<modCalcJD> (timeItem, i18n(
"Julian Day"))->setIcon(0,jdIcon);
151 addTreeItem<modCalcSidTime> (timeItem, i18n(
"Sidereal Time"));
152 addTreeItem<modCalcDayLength>(timeItem, i18n(
"Almanac"));
153 addTreeItem<modCalcEquinox> (timeItem, i18n(
"Equinoxes & Solstices"));
157 QTreeWidgetItem * coordItem = addTreeTopItem(navigationPanel, i18n(
"Coordinate Converters"), messageCoord);
158 addTreeItem<modCalcGalCoord> (coordItem, i18n(
"Equatorial/Galactic"));
159 addTreeItem<modCalcApCoord> (coordItem, i18n(
"Apparent Coordinates"));
160 addTreeItem<modCalcAltAz> (coordItem, i18n(
"Horizontal Coordinates"));
161 addTreeItem<modCalcEclCoords>(coordItem, i18n(
"Ecliptic Coordinates"));
162 addTreeItem<modCalcAngDist> (coordItem, i18n(
"Angular Distance"));
163 addTreeItem<modCalcGeodCoord>(coordItem, i18n(
"Geodetic Coordinates"));
164 addTreeItem<modCalcVlsr> (coordItem, i18n(
"LSR Velocity"));
167 QTreeWidgetItem * solarItem = addTreeTopItem(navigationPanel, i18n(
"Solar System"), messageSolar);
168 solarItem->setIcon(0,solarIcon);
169 addTreeItem<modCalcPlanets> (solarItem, i18n(
"Planets Coordinates"));
170 addTreeItem<ConjunctionsTool>(solarItem, i18n(
"Conjunctions"));
172 acStack->setCurrentWidget( splashScreen );
173 connect(navigationPanel, SIGNAL(itemClicked(QTreeWidgetItem *,
int)),
178 QWidget* AstroCalc::addToStack()
180 T* t =
new T( acStack );
181 acStack->addWidget(t);
186 QTreeWidgetItem* AstroCalc::addTreeItem(QTreeWidgetItem* parent, QString title)
188 QTreeWidgetItem* item =
new QTreeWidgetItem(parent, QStringList(title));
189 dispatchTable.insert(item,
190 WidgetThunk(
this, &AstroCalc::addToStack<T>));
194 QTreeWidgetItem* AstroCalc::addTreeTopItem(QTreeWidget* parent, QString title, QString html)
196 QTreeWidgetItem* item =
new QTreeWidgetItem(parent, QStringList(title));
197 htmlTable.insert(item, html);
208 QMap<QTreeWidgetItem*, QString>::iterator iterHTML = htmlTable.find(item);
209 if( iterHTML != htmlTable.end() ) {
210 splashScreen->setHtml(*iterHTML);
211 acStack->setCurrentWidget(splashScreen);
215 QMap<QTreeWidgetItem*, WidgetThunk>::iterator iter = dispatchTable.find(item);
216 if( iter != dispatchTable.end() ) {
217 acStack->setCurrentWidget( iter->eval() );
223 return QSize(640,430);
226 QWidget* AstroCalc::WidgetThunk::eval()
230 widget = (calc->*func)();
235 #include "astrocalc.moc"
void slotItemSelection(QTreeWidgetItem *it)
Display calculator module or help text based on item selected.
AstroCalc(QWidget *parent=0)