diff options
author | Alexander V. Wolf <alex.v.wolf@gmail.com> | 2022-03-14 23:02:42 +0700 |
---|---|---|
committer | Alexander V. Wolf <alex.v.wolf@gmail.com> | 2022-03-14 23:02:42 +0700 |
commit | 7b6a3bfac96613ec899a62d2d394e15cbc8c37bd (patch) | |
tree | 115140dba208758ae2f945efaca56eb2ee9ab15d | |
parent | 5b2bee8ca7c5c480eeb75f4fba06d23b21d8de3a (diff) |
Visual fix for AstroCalc/Positions tool
-rw-r--r-- | src/gui/AstroCalcDialog.cpp | 40 | ||||
-rw-r--r-- | src/gui/AstroCalcDialog.hpp | 11 |
2 files changed, 47 insertions, 4 deletions
diff --git a/src/gui/AstroCalcDialog.cpp b/src/gui/AstroCalcDialog.cpp index 6d9f70aae3..9bb1abebee 100644 --- a/src/gui/AstroCalcDialog.cpp +++ b/src/gui/AstroCalcDialog.cpp @@ -321,6 +321,7 @@ void AstroCalcDialog::createDialogContent() connect(dsoMgr, SIGNAL(maxSizeLimitChanged(double)), this, SLOT(currentCelestialPositions())); connect(ui->hecPositionsTreeWidget, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(selectCurrentHECPosition(QModelIndex))); + connect(ui->hecPositionsTreeWidget, SIGNAL(clicked(QModelIndex)), this, SLOT(markCurrentHECPosition(QModelIndex))); connect(ui->hecPositionsUpdateButton, SIGNAL(clicked()), this, SLOT(currentHECPositions())); connect(ui->hecPositionsSaveButton, SIGNAL(clicked()), this, SLOT(saveHECPositions())); connect(ui->tabWidgetPositions, SIGNAL(currentChanged(int)), this, SLOT(changePositionsTab(int))); @@ -1599,15 +1600,14 @@ void AstroCalcDialog::fillHECPositionTable(QString objectName, QString latitude, void AstroCalcDialog::currentHECPositions() { QPair<QString, QString> coordStrings; + hecObjects.clear(); initListHECPositions(); const bool withDecimalDegree = StelApp::getInstance().getFlagShowDecimalDegrees(); double distance, longitude, latitude, dl; Vec3d pos; bool sign; - QScatterSeries *seriesPlanets = new QScatterSeries(); - QScatterSeries *seriesSun = new QScatterSeries(); - seriesSun->append(0., -1.5); + HECPosition object; const double JD = core->getJD(); ui->hecPositionsTimeLabel->setText(q_("Positions on %1").arg(QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD), localeMgr->getPrintableTimeLocal(JD)))); @@ -1633,7 +1633,10 @@ void AstroCalcDialog::currentHECPositions() } fillHECPositionTable(planet->getNameI18n(), coordStrings.first, coordStrings.second, distance); - seriesPlanets->append(360.-dl, log(distance)); + object.objectName = planet->getNameI18n(); + object.x = 360.-dl; + object.y = log(distance); + hecObjects.append(object); } } @@ -1641,11 +1644,29 @@ void AstroCalcDialog::currentHECPositions() // sort-by-distance ui->hecPositionsTreeWidget->sortItems(HECColumnDistance, Qt::AscendingOrder); + drawHECGraph(); +} + +void AstroCalcDialog::drawHECGraph(QString selectedObject) +{ + QScatterSeries *seriesPlanets = new QScatterSeries(); + QScatterSeries *seriesSelectedPlanet = new QScatterSeries(); + QScatterSeries *seriesSun = new QScatterSeries(); + seriesSun->append(0., -1.5); + + for (const auto& planet : qAsConst(hecObjects)) + { + seriesPlanets->append(planet.x, planet.y); + if (!selectedObject.isEmpty() && planet.objectName==selectedObject) + seriesSelectedPlanet->append(planet.x, planet.y); + } + QColor axisColor(Qt::lightGray); QColor labelColor(Qt::white); QPolarChart *chart = new QPolarChart(); chart->addSeries(seriesPlanets); + chart->addSeries(seriesSelectedPlanet); chart->addSeries(seriesSun); chart->legend()->hide(); chart->setMargins(QMargins(0, 0, 0, 0)); @@ -1695,6 +1716,12 @@ void AstroCalcDialog::currentHECPositions() seriesPlanets->setColor(Qt::cyan); seriesPlanets->setBorderColor(Qt::transparent); + seriesSelectedPlanet->attachAxis(angularAxis); + seriesSelectedPlanet->attachAxis(radialAxis); + seriesSelectedPlanet->setMarkerSize(7); + seriesSelectedPlanet->setColor(Qt::green); + seriesSelectedPlanet->setBorderColor(Qt::transparent); + seriesSun->attachAxis(angularAxis); seriesSun->attachAxis(radialAxis); seriesSun->setMarkerSize(9); @@ -1812,6 +1839,11 @@ void AstroCalcDialog::selectCurrentHECPosition(const QModelIndex& modelIndex) } } +void AstroCalcDialog::markCurrentHECPosition(const QModelIndex& modelIndex) +{ + drawHECGraph(modelIndex.sibling(modelIndex.row(), HECColumnName).data().toString()); +} + void AstroCalcDialog::selectCurrentEphemeride(const QModelIndex& modelIndex) { // Find the object diff --git a/src/gui/AstroCalcDialog.hpp b/src/gui/AstroCalcDialog.hpp index da1b051d3c..5098e6969d 100644 --- a/src/gui/AstroCalcDialog.hpp +++ b/src/gui/AstroCalcDialog.hpp @@ -58,6 +58,14 @@ struct Ephemeris }; Q_DECLARE_METATYPE(Ephemeris) +struct HECPosition +{ + QString objectName; + double x; + double y; +}; +Q_DECLARE_METATYPE(HECPosition) + class AstroCalcDialog : public StelDialog { Q_OBJECT @@ -242,8 +250,10 @@ private slots: void selectCurrentCelestialPosition(const QModelIndex &modelIndex); void currentHECPositions(); + void drawHECGraph(QString selectedObject = ""); void saveHECPositions(); void selectCurrentHECPosition(const QModelIndex &modelIndex); + void markCurrentHECPosition(const QModelIndex &modelIndex); void saveCelestialPositionsMagnitudeLimit(double mag); void saveCelestialPositionsHorizontalCoordinatesFlag(bool b); @@ -400,6 +410,7 @@ private: QTimer *currentTimeLine; QHash<QString,int> wutCategories; QPair<double, double> getLunarEclipseXY() const; + QList<HECPosition> hecObjects; void saveTableAsCSV(const QString& fileName, QTreeWidget* tWidget, QStringList& headers); void saveTableAsBookmarks(const QString& fileName, QTreeWidget* tWidget); |