[Kstars-devel] KDE/kdeedu/kstars/kstars/tools
Akarsh Simha
akarshsimha at gmail.com
Sat Jul 12 21:37:34 CEST 2008
SVN commit 831466 by asimha:
Double clicking on a list item in the conjunction tool will take you
right to the conjunction. (geographical location, time, and object)
CCMAIL: kstars-devel at kde.org
M +35 -9 conjunctions.cpp
M +3 -0 conjunctions.h
--- trunk/KDE/kdeedu/kstars/kstars/tools/conjunctions.cpp #831465:831466
@@ -44,8 +44,10 @@
#include "finddialog.h"
#include "kscomet.h"
#include "ksasteroid.h"
+#include "skymap.h"
+#include "infoboxes.h"
-ConjunctionsTool::ConjunctionsTool(QWidget *parentSplit)
+ConjunctionsTool::ConjunctionsTool(QWidget *parentSplit)
: QFrame(parentSplit), Object1( 0 ), Object2( 0 ) {
setupUi(this);
@@ -62,13 +64,13 @@
KStarsData *kd = KStarsData::Instance();
KStarsDateTime dtStart ( KStarsDateTime::currentDateTime() );
KStarsDateTime dtStop ( dtStart.djd() + 365.24 ); // TODO: Refine
-
+
startDate -> setDateTime( dtStart.dateTime() );
stopDate -> setDateTime( dtStop.dateTime() );
-
+
geoPlace = kd -> geo();
LocationButton -> setText( geoPlace -> fullName() );
-
+
pNames[KSPlanetBase::MERCURY] = i18n("Mercury");
pNames[KSPlanetBase::VENUS] = i18n("Venus");
pNames[KSPlanetBase::MARS] = i18n("Mars");
@@ -89,6 +91,8 @@
connect(LocationButton, SIGNAL(clicked()), this, SLOT(slotLocation()));
connect(Obj1FindButton, SIGNAL(clicked()), this, SLOT(slotFindObject()));
connect(ComputeButton, SIGNAL(clicked()), this, SLOT(slotCompute()));
+ connect( OutputView, SIGNAL( itemDoubleClicked( QListWidgetItem * ) ), this, SLOT( slotGoto() ) );
+
show();
}
@@ -99,6 +103,23 @@
delete Object2;
}
+void ConjunctionsTool::slotGoto() {
+ int index = OutputView->currentRow();
+ long double jd = outputJDList.value( index );
+ KStarsDateTime dt;
+ KStars *ks= (KStars *) topLevelWidget()->parent();
+ KStarsData *data = KStarsData::Instance();
+ SkyMap *map = ks->map();
+
+ data->setLocation( *geoPlace );
+ ks->infoBoxes()->geoChanged( geoPlace );
+ dt.setDJD( jd );
+ data->changeDateTime( dt );
+ map->setClickedObject( data->skyComposite()->findByName( Object1->name() ) ); // This is required, because the Object1 we have is a copy
+ map->setClickedPoint( map->clickedObject() );
+ map->slotCenter();
+}
+
void ConjunctionsTool::slotFindObject() {
FindDialog fd( (KStars*) topLevelWidget()->parent() );
if ( fd.exec() == QDialog::Accepted ) {
@@ -142,7 +163,7 @@
void ConjunctionsTool::slotLocation()
{
LocationDialog ld( (KStars*) topLevelWidget()->parent() );
-
+
if ( ld.exec() == QDialog::Accepted ) {
geoPlace = ld.selectedCity();
LocationButton -> setText( geoPlace -> fullName() );
@@ -159,7 +180,7 @@
dms maxSeparation(1.0); // TODO: Make maxSeparation user-specifiable
// TODO: Get geoPlace from user.
// dms LST( geoPlace->GSTtoLST( dt.gst() ) );
-
+
if( !Object1 ) {
// TODO: Display some error message
KMessageBox::sorry( 0, i18n("Please select an object to check conjunctions with, by clicking on the \'Find Object\' button.") );
@@ -171,11 +192,12 @@
KSConjunct ksc;
ComputeStack->setCurrentIndex( 1 );
connect( &ksc, SIGNAL(madeProgress(int)), this, SLOT(showProgress(int)) );
-
- showConjunctions(ksc.findClosestApproach(*Object1, *Object2, startJD, stopJD, maxSeparation));
+
+ showConjunctions( ksc.findClosestApproach(*Object1, *Object2, startJD, stopJD, maxSeparation) );
+
ComputeStack->setCurrentIndex( 0 );
QApplication::restoreOverrideCursor();
-
+
delete Object2;
Object2 = NULL;
@@ -189,12 +211,16 @@
KStarsDateTime dt;
QMap<long double, dms>::Iterator it;
+ int i;
OutputView->clear();
+ outputJDList.clear();
+ i = 0;
for(it = conjunctionlist.begin(); it != conjunctionlist.end(); ++it) {
dt.setDJD( it.key() );
OutputView -> addItem( i18n("Conjunction on %1 UT: Separation is %2", dt.toString("%a, %d %b %Y %H:%M"), it.data().toDMSString()) );
+ outputJDList.insert( i, it.key() );
}
}
--- trunk/KDE/kdeedu/kstars/kstars/tools/conjunctions.h #831465:831466
@@ -34,6 +34,7 @@
class GeoLocation;
class KSPlanetBase;
class dms;
+class QListWidgetItem;
/**
*@short Predicts conjunctions using KSConjunct in the background
@@ -53,12 +54,14 @@
void slotCompute();
void showProgress(int);
void slotFindObject();
+ void slotGoto();
private:
SkyObject *Object1;
KSPlanetBase *Object2; // Second object is always a planet.
QHash<int, QString> pNames; // To store the names of Planets vs. values expected by KSPlanetBase::createPlanet()
+ QMap<int, long double> outputJDList; // To store Julian Days corresponding to the row index in the output list widget
void showConjunctions(QMap<long double, dms> conjunctionlist);
More information about the Kstars-devel
mailing list