summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander V. Wolf <aw@altspu.ru>2023-10-31 13:42:16 +0700
committerAlexander V. Wolf <alex.v.wolf@gmail.com>2024-02-25 14:20:24 +0700
commit280634dcc5861effe2c5c1e5d5dbf45d7a2a254c (patch)
treee1987452dbbde194743cf891a186660806e03e21
parentff75e873ee4e98198db97a9857b5df6a9dc5ecd6 (diff)
Re-implement AstroCalc/Almanac/Specific Time toolastrocalc/almanac
-rw-r--r--data/gui/normalStyle.css9
-rw-r--r--po/stellarium/POTFILES.in2
-rw-r--r--src/CMakeLists.txt7
-rw-r--r--src/core/modules/SpecificTimeMgr.cpp64
-rw-r--r--src/core/modules/SpecificTimeMgr.hpp1
-rw-r--r--src/gui/AstroCalcAlmanacWidget.cpp398
-rw-r--r--src/gui/AstroCalcAlmanacWidget.hpp54
-rw-r--r--src/gui/AstroCalcDialog.cpp22
-rw-r--r--src/gui/AstroCalcDialog.hpp2
-rw-r--r--src/gui/astroCalcAlmanacWidget.ui1085
-rw-r--r--src/gui/astroCalcDialog.ui31
11 files changed, 1649 insertions, 26 deletions
diff --git a/data/gui/normalStyle.css b/data/gui/normalStyle.css
index 4aca1d5e7c..ba5b1a27d5 100644
--- a/data/gui/normalStyle.css
+++ b/data/gui/normalStyle.css
@@ -1181,3 +1181,12 @@ QMessageBox {
QColorDialog {
background-color: rgb(143, 143, 143);
}
+
+/*************************************************************************
+ * AstroCalcAlmanacWidget
+ *************************************************************************/
+
+AstroCalcAlmanacWidget QFrame[frameShape="4"], /* QFrame::HLine == 0x0004 */
+AstroCalcAlmanacWidget QFrame[frameShape="5"] { /* QFrame::VLine == 0x0005 */
+ border: 1px solid rgb(238, 238, 238);
+}
diff --git a/po/stellarium/POTFILES.in b/po/stellarium/POTFILES.in
index bce6e937a6..2d80f1487e 100644
--- a/po/stellarium/POTFILES.in
+++ b/po/stellarium/POTFILES.in
@@ -57,6 +57,7 @@ src/gui/AstroCalcDialog.cpp
src/gui/AstroCalcChart.cpp
src/gui/AstroCalcExtraEphemerisDialog.cpp
src/gui/AstroCalcCustomStepsDialog.cpp
+src/gui/AstroCalcAlmanacWidget.cpp
src/gui/ObsListDialog.cpp
src/gui/ConfigureDSOColorsDialog.cpp
src/gui/ConfigureOrbitColorsDialog.cpp
@@ -86,6 +87,7 @@ src/ui_scriptConsole.h
src/ui_astroCalcDialog.h
src/ui_astroCalcExtraEphemerisDialog.h
src/ui_astroCalcCustomStepsDialog.h
+src/ui_astroCalcAlmanacWidget.h
src/ui_obsListDialog.h
src/ui_dsoColorsDialog.h
src/ui_orbitColorsDialog.h
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c86b71c3c6..6db2047a73 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -350,12 +350,14 @@ IF(STELLARIUM_GUI_MODE STREQUAL "Standard")
gui/ConfigureScreenshotsDialog.cpp
gui/AstroCalcDialog.hpp
gui/AstroCalcDialog.cpp
+ gui/AstroCalcChart.hpp
+ gui/AstroCalcChart.cpp
gui/AstroCalcExtraEphemerisDialog.hpp
gui/AstroCalcExtraEphemerisDialog.cpp
gui/AstroCalcCustomStepsDialog.hpp
gui/AstroCalcCustomStepsDialog.cpp
- gui/AstroCalcChart.hpp
- gui/AstroCalcChart.cpp
+ gui/AstroCalcAlmanacWidget.hpp
+ gui/AstroCalcAlmanacWidget.cpp
gui/ObsListDialog.hpp
gui/ObsListDialog.cpp
gui/StelDialog.hpp
@@ -392,6 +394,7 @@ IF(STELLARIUM_GUI_MODE STREQUAL "Standard")
gui/astroCalcDialog.ui
gui/astroCalcExtraEphemerisDialog.ui
gui/astroCalcCustomStepsDialog.ui
+ gui/astroCalcAlmanacWidget.ui
gui/obsListDialog.ui
gui/addRemoveLandscapesDialog.ui
gui/dsoColorsDialog.ui
diff --git a/src/core/modules/SpecificTimeMgr.cpp b/src/core/modules/SpecificTimeMgr.cpp
index f597bb5378..1a9300e19a 100644
--- a/src/core/modules/SpecificTimeMgr.cpp
+++ b/src/core/modules/SpecificTimeMgr.cpp
@@ -518,120 +518,136 @@ double SpecificTimeMgr::getSolstice(int year, SpecificTimeMgr::Solstice solstice
void SpecificTimeMgr::currentMarchEquinox()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getEquinox(year, Equinox::March);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
}
void SpecificTimeMgr::nextMarchEquinox()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getEquinox(year + 1, Equinox::March);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
+
+ emit eventYearChanged();
}
void SpecificTimeMgr::previousMarchEquinox()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getEquinox(year - 1, Equinox::March);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
+
+ emit eventYearChanged();
}
void SpecificTimeMgr::currentSeptemberEquinox()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getEquinox(year, Equinox::September);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
}
void SpecificTimeMgr::nextSeptemberEquinox()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getEquinox(year + 1, Equinox::September);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
+
+ emit eventYearChanged();
}
void SpecificTimeMgr::previousSeptemberEquinox()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getEquinox(year - 1, Equinox::September);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
+
+ emit eventYearChanged();
}
void SpecificTimeMgr::currentJuneSolstice()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getSolstice(year, Solstice::June);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
}
void SpecificTimeMgr::nextJuneSolstice()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getSolstice(year + 1, Solstice::June);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
+
+ emit eventYearChanged();
}
void SpecificTimeMgr::previousJuneSolstice()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getSolstice(year - 1, Solstice::June);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
+
+ emit eventYearChanged();
}
void SpecificTimeMgr::currentDecemberSolstice()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getSolstice(year, Solstice::December);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
}
void SpecificTimeMgr::nextDecemberSolstice()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getSolstice(year + 1, Solstice::December);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
+
+ emit eventYearChanged();
}
void SpecificTimeMgr::previousDecemberSolstice()
{
- double JD = core->getJDE();
+ double JD = core->getJD();
int year, month, day;
StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
double estime = getSolstice(year - 1, Solstice::December);
if (estime>0.)
- core->setJDE(estime);
+ core->setJD(estime);
+
+ emit eventYearChanged();
}
diff --git a/src/core/modules/SpecificTimeMgr.hpp b/src/core/modules/SpecificTimeMgr.hpp
index 0d8b462048..70322a7443 100644
--- a/src/core/modules/SpecificTimeMgr.hpp
+++ b/src/core/modules/SpecificTimeMgr.hpp
@@ -171,6 +171,7 @@ public slots:
signals:
//! Signal that the configurable twilight altitude for the sun has changed.
void twilightAltitudeChanged(double alt);
+ void eventYearChanged();
private:
QSettings* conf;
diff --git a/src/gui/AstroCalcAlmanacWidget.cpp b/src/gui/AstroCalcAlmanacWidget.cpp
new file mode 100644
index 0000000000..8272f52a82
--- /dev/null
+++ b/src/gui/AstroCalcAlmanacWidget.cpp
@@ -0,0 +1,398 @@
+/*
+ * Stellarium
+ * Copyright (C) 2023 Alexander Wolf
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA.
+ */
+
+#include "AstroCalcAlmanacWidget.hpp"
+#include "StelApp.hpp"
+#include "StelCore.hpp"
+#include "StelModuleMgr.hpp"
+#include "StelUtils.hpp"
+#include "SpecificTimeMgr.hpp"
+#include "StelLocaleMgr.hpp"
+#include "SolarSystem.hpp"
+
+#include <QPushButton>
+#include <QToolTip>
+#include <QSettings>
+
+AstroCalcAlmanacWidget::AstroCalcAlmanacWidget(QWidget* parent)
+ : QWidget(parent)
+ , sunriseJD(0.)
+ , sunsetJD(0.)
+ , moonriseJD(0.)
+ , moonsetJD(0.)
+ , civilDawnJD(0.)
+ , civilDuskJD(0.)
+ , nauticalDawnJD(0.)
+ , nauticalDuskJD(0.)
+ , astronomicalDawnJD(0.)
+ , astronomicalDuskJD(0.)
+ , ui(new Ui_astroCalcAlmanacWidget)
+{
+}
+
+void AstroCalcAlmanacWidget::setup()
+{
+ ui->setupUi(this);
+ connect(&StelApp::getInstance(), &StelApp::languageChanged, this, &AstroCalcAlmanacWidget::retranslate);
+
+ core = StelApp::getInstance().getCore();
+ specMgr = GETSTELMODULE(SpecificTimeMgr);
+ localeMgr = &StelApp::getInstance().getLocaleMgr();
+
+ populateData();
+
+ connect(core, &StelCore::locationChanged, this, [=](const StelLocation&){ populateData(); });
+ connect(core, &StelCore::currentTimeZoneChanged, this, [=](const QString&){ setSeasonTimes(); setTodayTimes(); });
+ // update the data when "Now" button is pressed or date is changed
+ connect(core, &StelCore::dateChanged, this, [=](){ setSeasonTimes(); setTodayTimes(); });
+ connect(specMgr, SIGNAL(eventYearChanged()), this, SLOT(setSeasonTimes()));
+ connect(specMgr, SIGNAL(eventYearChanged()), this, SLOT(setTodayTimes()));
+
+ connect(ui->buttonMarchEquinoxCurrent, &QPushButton::clicked, this, [=](){specMgr->currentMarchEquinox();});
+ connect(ui->buttonMarchEquinoxNext, &QPushButton::clicked, this, [=](){specMgr->nextMarchEquinox();});
+ connect(ui->buttonMarchEquinoxPrevious, &QPushButton::clicked, this, [=](){specMgr->previousMarchEquinox();});
+
+ connect(ui->buttonSeptemberEquinoxCurrent, &QPushButton::clicked, this, [=](){specMgr->currentSeptemberEquinox();});
+ connect(ui->buttonSeptemberEquinoxNext, &QPushButton::clicked, this, [=](){specMgr->nextSeptemberEquinox();});
+ connect(ui->buttonSeptemberEquinoxPrevious, &QPushButton::clicked, this, [=](){specMgr->previousSeptemberEquinox();});
+
+ connect(ui->buttonJuneSolsticeCurrent, &QPushButton::clicked, this, [=](){specMgr->currentJuneSolstice();});
+ connect(ui->buttonJuneSolsticeNext, &QPushButton::clicked, this, [=](){specMgr->nextJuneSolstice();});
+ connect(ui->buttonJuneSolsticePrevious, &QPushButton::clicked, this, [=](){specMgr->previousJuneSolstice();});
+
+ connect(ui->buttonDecemberSolsticeCurrent, &QPushButton::clicked, this, [=](){specMgr->currentDecemberSolstice();});
+ connect(ui->buttonDecemberSolsticeNext, &QPushButton::clicked, this, [=](){specMgr->nextDecemberSolstice();});
+ connect(ui->buttonDecemberSolsticePrevious, &QPushButton::clicked, this, [=](){specMgr->previousDecemberSolstice();});
+
+ // handling special days
+ connect(ui->buttonMarchEquinoxCurrent, &QPushButton::clicked, this, [=](){setTodayTimes();});
+ connect(ui->buttonSeptemberEquinoxCurrent, &QPushButton::clicked, this, [=](){setTodayTimes();});
+ connect(ui->buttonJuneSolsticeCurrent, &QPushButton::clicked, this, [=](){setTodayTimes();});
+ connect(ui->buttonDecemberSolsticeCurrent, &QPushButton::clicked, this, [=](){setTodayTimes();});
+
+ // handling special times
+ connect(ui->buttonSunrise, &QPushButton::clicked, this, [=](){core->setJD(sunriseJD);});
+ connect(ui->buttonSunset, &QPushButton::clicked, this, [=](){core->setJD(sunsetJD);});
+ connect(ui->buttonMoonrise, &QPushButton::clicked, this, [=](){core->setJD(moonriseJD);});
+ connect(ui->buttonMoonset, &QPushButton::clicked, this, [=](){core->setJD(moonsetJD);});
+ connect(ui->buttonCivilDawn, &QPushButton::clicked, this, [=](){core->setJD(civilDawnJD);});
+ connect(ui->buttonCivilDusk, &QPushButton::clicked, this, [=](){core->setJD(civilDuskJD);});
+ connect(ui->buttonNauticalDawn, &QPushButton::clicked, this, [=](){core->setJD(nauticalDawnJD);});
+ connect(ui->buttonNauticalDusk, &QPushButton::clicked, this, [=](){core->setJD(nauticalDuskJD);});
+ connect(ui->buttonAstronomicalDawn, &QPushButton::clicked, this, [=](){core->setJD(astronomicalDawnJD);});
+ connect(ui->buttonAstronomicalDusk, &QPushButton::clicked, this, [=](){core->setJD(astronomicalDuskJD);});
+
+ QSize button = QSize(24, 24);
+ ui->buttonMarchEquinoxCurrent->setFixedSize(button);
+ ui->buttonMarchEquinoxNext->setFixedSize(button);
+ ui->buttonMarchEquinoxPrevious->setFixedSize(button);
+ ui->buttonJuneSolsticeCurrent->setFixedSize(button);
+ ui->buttonJuneSolsticeNext->setFixedSize(button);
+ ui->buttonJuneSolsticePrevious->setFixedSize(button);
+ ui->buttonSeptemberEquinoxCurrent->setFixedSize(button);
+ ui->buttonSeptemberEquinoxNext->setFixedSize(button);
+ ui->buttonSeptemberEquinoxPrevious->setFixedSize(button);
+ ui->buttonDecemberSolsticeCurrent->setFixedSize(button);
+ ui->buttonDecemberSolsticeNext->setFixedSize(button);
+ ui->buttonDecemberSolsticePrevious->setFixedSize(button);
+ ui->buttonCivilDawn->setFixedSize(button);
+ ui->buttonCivilDusk->setFixedSize(button);
+ ui->buttonNauticalDawn->setFixedSize(button);
+ ui->buttonNauticalDusk->setFixedSize(button);
+ ui->buttonAstronomicalDawn->setFixedSize(button);
+ ui->buttonAstronomicalDusk->setFixedSize(button);
+ ui->buttonSunrise->setFixedSize(button);
+ ui->buttonSunset->setFixedSize(button);
+ ui->buttonMoonrise->setFixedSize(button);
+ ui->buttonMoonset->setFixedSize(button);
+}
+
+void AstroCalcAlmanacWidget::retranslate()
+{
+ ui->retranslateUi(this);
+ populateData();
+}
+
+void AstroCalcAlmanacWidget::populateData()
+{
+ // Set season labels
+ setSeasonLabels();
+ // Compute equinoxes/solstices and fill the time
+ setSeasonTimes();
+ // Compute today events
+ setTodayTimes();
+}
+
+void AstroCalcAlmanacWidget::setSeasonLabels()
+{
+ const float latitide = StelApp::getInstance().getCore()->getCurrentLocation().getLatitude();
+ if (latitide >= 0.f)
+ {
+ // Northern Hemisphere
+ // TRANSLATORS: The name of season
+ ui->labelMarchEquinox->setText(qc_("Spring","season"));
+ // TRANSLATORS: The name of season
+ ui->labelJuneSolstice->setText(qc_("Summer","season"));
+ // TRANSLATORS: The name of season
+ ui->labelSeptemberEquinox->setText(qc_("Fall","season"));
+ // TRANSLATORS: The name of season
+ ui->labelDecemberSolstice->setText(qc_("Winter","season"));
+ }
+ else
+ {
+ // Southern Hemisphere
+ // TRANSLATORS: The name of season
+ ui->labelMarchEquinox->setText(qc_("Fall","season"));
+ // TRANSLATORS: The name of season
+ ui->labelJuneSolstice->setText(qc_("Winter","season"));
+ // TRANSLATORS: The name of season
+ ui->labelSeptemberEquinox->setText(qc_("Spring","season"));
+ // TRANSLATORS: The name of season
+ ui->labelDecemberSolstice->setText(qc_("Summer","season"));
+ }
+}
+
+QString AstroCalcAlmanacWidget::getFormattedDateTime(const double JD, const double utcShift)
+{
+ int year, month, day;
+ StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
+ return QString("%1 %2 %3").arg(QString::number(day), localeMgr->longGenitiveMonthName(month), StelUtils::hoursToHmsStr(StelUtils::getHoursFromJulianDay(JD+utcShift), true));
+}
+
+void AstroCalcAlmanacWidget::setSeasonTimes()
+{
+ const double utcShift = core->getUTCOffset(core->getJD()) / 24.; // Fix DST shift...
+ const double JD = core->getJD() + utcShift;
+ int year, month, day;
+ double jdFirstDay, jdLastDay;
+ StelUtils::getDateFromJulianDay(JD, &year, &month, &day);
+ StelUtils::getJDFromDate(&jdFirstDay, year, 1, 1, 0, 0, 0);
+ StelUtils::getJDFromDate(&jdLastDay, year, 12, 31, 24, 0, 0);
+ const double marchEquinox = specMgr->getEquinox(year, SpecificTimeMgr::Equinox::March);
+ const double septemberEquinox = specMgr->getEquinox(year, SpecificTimeMgr::Equinox::September);
+ const double juneSolstice = specMgr->getSolstice(year, SpecificTimeMgr::Solstice::June);
+ const double decemberSolstice = specMgr->getSolstice(year, SpecificTimeMgr::Solstice::December);
+ QString days = qc_("days", "duration");
+ int jdDepth = 5;
+ int daysDepth = 2;
+
+ // Current year
+ ui->labelCurrentYear->setText(QString::number(year));
+ ui->labelYearDuration->setText(QString("(%1 %2)").arg(QString::number(jdLastDay-jdFirstDay), days));
+ // Spring/Fall
+ ui->labelMarchEquinoxJD->setText(QString::number(marchEquinox, 'f', jdDepth));
+ ui->labelMarchEquinoxLT->setText(getFormattedDateTime(marchEquinox, utcShift));
+ ui->labelMarchEquinoxDuration->setText(QString("%1 %2").arg(QString::number(juneSolstice-marchEquinox, 'f', daysDepth), days));
+ // Summer/Winter
+ ui->labelJuneSolsticeJD->setText(QString::number(juneSolstice, 'f', jdDepth));
+ ui->labelJuneSolsticeLT->setText(getFormattedDateTime(juneSolstice, utcShift));
+ ui->labelJuneSolsticeDuration->setText(QString("%1 %2").arg(QString::number(septemberEquinox-juneSolstice, 'f', daysDepth), days));
+ // Fall/Spring
+ ui->labelSeptemberEquinoxJD->setText(QString::number(septemberEquinox, 'f', jdDepth));
+ ui->labelSeptemberEquinoxLT->setText(getFormattedDateTime(septemberEquinox, utcShift));
+ ui->labelSeptemberEquinoxDuration->setText(QString("%1 %2").arg(QString::number(decemberSolstice-septemberEquinox, 'f', daysDepth), days));
+ // Winter/Summer
+ ui->labelDecemberSolsticeJD->setText(QString::number(decemberSolstice, 'f', jdDepth));
+ ui->labelDecemberSolsticeLT->setText(getFormattedDateTime(decemberSolstice, utcShift));
+ const double duration = (marchEquinox-jdFirstDay) + (jdLastDay-decemberSolstice);
+ ui->labelDecemberSolsticeDuration->setText(QString("%1 %2").arg(QString::number(duration, 'f', daysDepth), days));
+}
+
+void AstroCalcAlmanacWidget::setTodayTimes()
+{
+ if (core->getCurrentPlanet()!=GETSTELMODULE(SolarSystem)->getEarth())
+ return;
+
+ const double JD = core->getJD();
+ const double utcShift = core->getUTCOffset(JD) / 24.; // Fix DST shift...
+ PlanetP sun = GETSTELMODULE(SolarSystem)->getSun();
+ double duration, duration1, duration2;
+ bool astronomicalTwilightBtn, nauticalTwilightBtn, civilTwilightBtn, sunBtn;
+ QString moonrise, moonset, sunrise, sunset, civilTwilightBegin, civilTwilightEnd, nauticalTwilightBegin,
+ nauticalTwilightEnd, astronomicalTwilightBegin, astronomicalTwilightEnd, dayDuration, nightDuration,
+ civilTwilightDuration, nauticalTwilightDuration, astronomicalTwilightDuration, dash = QChar(0x2014);
+
+ // Moon
+ Vec4d moon = GETSTELMODULE(SolarSystem)->getMoon()->getRTSTime(core, 0.);
+ if (moon[3]==30 || moon[3]<0 || moon[3]>50) // no moonrise on current date
+ {
+ moonrise = dash;
+ ui->buttonMoonrise->setEnabled(false);
+ }
+ else
+ {
+ moonriseJD = moon[0];
+ moonrise = StelUtils::hoursToHmsStr(StelUtils::getHoursFromJulianDay(moonriseJD+utcShift), true);
+ ui->buttonMoonrise->setEnabled(true);
+ }
+
+ if (moon[3]==40 || moon[3]<0 || moon[3]>50) // no moonset on current date
+ {
+ moonset = dash;
+ ui->buttonMoonset->setEnabled(false);
+ }
+ else
+ {
+ moonsetJD = moon[2];
+ moonset = StelUtils::hoursToHmsStr(StelUtils::getHoursFromJulianDay(moonsetJD+utcShift), true);
+ ui->buttonMoonset->setEnabled(true);
+ }
+
+ // Sun
+ Vec4d day = sun->getRTSTime(core, 0.);
+ if (day[3]==0.)
+ {
+ sunriseJD = day[0];
+ sunsetJD = day[2];
+ sunrise = StelUtils::hoursToHmsStr(StelUtils::getHoursFromJulianDay(sunriseJD+utcShift), true);
+ sunset = StelUtils::hoursToHmsStr(StelUtils::getHoursFromJulianDay(sunsetJD+utcShift), true);
+ duration = qAbs(day[2]-day[0])*24.;
+ sunBtn = true;
+ }
+ else
+ {
+ sunrise = sunset = dash;
+ // polar day/night
+ duration = (day[3]>99.) ? 24. : 0.;
+ sunBtn = false;
+ }
+ dayDuration = StelUtils::hoursToHmsStr(duration, true);
+
+ // twilights
+ Vec4d civilTwilight = sun->getRTSTime(core, -6.);
+ Vec4d nauticalTwilight = sun->getRTSTime(core, -12.);
+ Vec4d astronomicalTwilight = sun->getRTSTime(core, -18.);
+ // tooltips
+ // TRANSLATORS: full phrase is "The Sun is XX° below the horizon"
+ QString belowHorizon = q_("The Sun is %1 below the horizon");
+ ui->labelCivilTwilight->setToolTip(belowHorizon.arg("6°"));
+ ui->labelNauticalTwilight->setToolTip(belowHorizon.arg("12°"));
+ ui->labelAstronomicalTwilight->setToolTip(belowHorizon.arg("18°"));
+ ui->labelDayDuration->setToolTip(q_("The duration of daytime"));
+ ui->labelNightDuration->setToolTip(q_("The duration of the astronomical night"));
+ QString twilights = q_("The duration of morning and evening twilights");
+ ui->labelCivilTwilightDuration->setToolTip(twilights);
+ ui->labelNauticalTwilightDuration->setToolTip(twilights);
+ ui->labelAstronomicalTwilightDuration->setToolTip(twilights);
+
+ if (astronomicalTwilight[3]==0.)
+ {
+ astronomicalDawnJD = astronomicalTwilight[0];
+ astronomicalDuskJD = astronomicalTwilight[2];
+ astronomicalTwilightBegin = StelUtils::hoursToHmsStr(StelUtils::getHoursFromJulianDay(astronomicalDawnJD+utcShift), true);
+ astronomicalTwilightEnd = StelUtils::hoursToHmsStr(StelUtils::getHoursFromJulianDay(astronomicalDuskJD+utcShift), true);
+ duration1 = (nauticalTwilight[2]-astronomicalTwilight[2])*24.;
+ if (duration1 > 0.)
+ duration1 -= 24.;
+ duration2 = (astronomicalTwilight[0]-nauticalTwilight[0])*24.;
+ if (duration2 > 0.)
+ duration2 -= 24.;
+ duration = qAbs(duration1) + qAbs(duration2);
+ nightDuration = StelUtils::hoursToHmsStr(24.0 - qAbs(astronomicalTwilight[2]-astronomicalTwilight[0])*24., true);
+ astronomicalTwilightBtn = true;
+ }
+ else
+ {
+ astronomicalTwilightBegin = astronomicalTwilightEnd = dash;
+ duration = 0.;
+ // polar night/day
+ if (day[3]<-99.)
+ nightDuration = StelUtils::hoursToHmsStr(24., true);
+ else
+ nightDuration = StelUtils::hoursToHmsStr(duration, true);
+ astronomicalTwilightBtn = false;
+ }
+ astronomicalTwilightDuration = StelUtils::hoursToHmsStr(duration, true);
+
+ if (nauticalTwilight[3]==0.)
+ {
+ nauticalDawnJD = nauticalTwilight[0];
+ nauticalDuskJD = nauticalTwilight[2];
+ nauticalTwilightBegin = StelUtils::hoursToHmsStr(StelUtils::getHoursFromJulianDay(nauticalDawnJD+utcShift), true);
+ nauticalTwilightEnd = StelUtils::hoursToHmsStr(StelUtils::getHoursFromJulianDay(nauticalDuskJD+utcShift), true);
+ duration1 = (civilTwilight[2]-nauticalTwilight[2])*24.;
+ if (duration1 > 0.)
+ duration1 -= 24.;
+ duration2 = (nauticalTwilight[0]-civilTwilight[0])*24.;
+ if (duration2 > 0.)
+ duration2 -= 24.;
+ duration = qAbs(duration1) + qAbs(duration2);
+ nauticalTwilightBtn = true;
+ }
+ else
+ {
+ nauticalTwilightBegin = nauticalTwilightEnd = dash;
+ duration = 0.;
+ nauticalTwilightBtn = false;
+ }
+ nauticalTwilightDuration = StelUtils::hoursToHmsStr(duration, true);
+
+ if (civilTwilight[3]==0.)
+ {
+ civilDawnJD = civilTwilight[0];
+ civilDuskJD = civilTwilight[2];
+ civilTwilightBegin = StelUtils::hoursToHmsStr(StelUtils::getHoursFromJulianDay(civilDawnJD+utcShift), true);
+ civilTwilightEnd = StelUtils::hoursToHmsStr(StelUtils::getHoursFromJulianDay(civilDuskJD+utcShift), true);
+ duration1 = (day[2]-civilTwilight[2])*24.;
+ if (duration1 > 0.)
+ duration1 -= 24.;
+ duration2 = (civilTwilight[0]-day[0])*24.;
+ if (duration2 > 0.)
+ duration2 -= 24.;
+ duration = qAbs(duration1) + qAbs(duration2);
+ civilTwilightBtn = true;
+ }
+ else
+ {
+ civilTwilightBegin = civilTwilightEnd = dash;
+ duration = 0.;
+ civilTwilightBtn = false;
+ }
+ civilTwilightDuration = StelUtils::hoursToHmsStr(duration, true);
+
+ // fill the data
+ ui->labelToday->setText(QString("%1 (%2)").arg(q_("Today"), localeMgr->getPrintableDateLocal(JD)));
+
+ ui->labelDayDuration->setText(dayDuration);
+ ui->labelCivilTwilightBegin->setText(civilTwilightBegin);
+ ui->labelCivilTwilightEnd->setText(civilTwilightEnd);
+ ui->labelCivilTwilightDuration->setText(civilTwilightDuration);
+ ui->labelNauticalTwilightBegin->setText(nauticalTwilightBegin);
+ ui->labelNauticalTwilightEnd->setText(nauticalTwilightEnd);
+ ui->labelNauticalTwilightDuration->setText(nauticalTwilightDuration);
+ ui->labelAstronomicalTwilightBegin->setText(astronomicalTwilightBegin);
+ ui->labelAstronomicalTwilightEnd->setText(astronomicalTwilightEnd);
+ ui->labelAstronomicalTwilightDuration->setText(astronomicalTwilightDuration);
+ ui->labelNightDuration->setText(nightDuration);
+
+ ui->labelSunrise->setText(sunrise);
+ ui->labelSunset->setText(sunset);
+ ui->labelMoonRise->setText(moonrise);
+ ui->labelMoonSet->setText(moonset);
+
+ // buttons
+ ui->buttonSunrise->setEnabled(sunBtn);
+ ui->buttonSunset->setEnabled(sunBtn);
+ ui->buttonAstronomicalDawn->setEnabled(astronomicalTwilightBtn);
+ ui->buttonAstronomicalDusk->setEnabled(astronomicalTwilightBtn);
+ ui->buttonNauticalDawn->setEnabled(nauticalTwilightBtn);
+ ui->buttonNauticalDusk->setEnabled(nauticalTwilightBtn);
+ ui->buttonCivilDawn->setEnabled(civilTwilightBtn);
+ ui->buttonCivilDusk->setEnabled(civilTwilightBtn);
+}
diff --git a/src/gui/AstroCalcAlmanacWidget.hpp b/src/gui/AstroCalcAlmanacWidget.hpp
new file mode 100644
index 0000000000..bf232f4fc8
--- /dev/null
+++ b/src/gui/AstroCalcAlmanacWidget.hpp
@@ -0,0 +1,54 @@
+/*
+ * Stellarium
+ * Copyright (C) 2023 Alexander Wolf
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA.
+ */
+
+#ifndef ASTROCALC_ALMANAC_WIDGET
+#define ASTROCALC_ALMANAC_WIDGET
+
+#include <memory>
+#include <QWidget>
+#include "ui_astroCalcAlmanacWidget.h"
+
+class AstroCalcAlmanacWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ AstroCalcAlmanacWidget(QWidget* parent = nullptr);
+ void setup();
+ void retranslate();
+
+private slots:
+ void setSeasonLabels();
+ void setSeasonTimes();
+ void setTodayTimes();
+
+private:
+ class StelCore* core;
+ class SpecificTimeMgr* specMgr;
+ class StelLocaleMgr* localeMgr;
+
+ double sunriseJD, sunsetJD, moonriseJD, moonsetJD, civilDawnJD, civilDuskJD, nauticalDawnJD, nauticalDuskJD, astronomicalDawnJD, astronomicalDuskJD;
+
+ void populateData();
+ // method to get a formatted string for date and time of equinox/solstice
+ QString getFormattedDateTime(const double JD, const double utcShift);
+
+ std::unique_ptr<Ui_astroCalcAlmanacWidget> ui;
+};
+
+#endif
diff --git a/src/gui/AstroCalcDialog.cpp b/src/gui/AstroCalcDialog.cpp
index da873fc771..4e84c5a6bc 100644
--- a/src/gui/AstroCalcDialog.cpp
+++ b/src/gui/AstroCalcDialog.cpp
@@ -202,6 +202,9 @@ void AstroCalcDialog::retranslate()
// by causing the list items to be laid out again.
updateTabBarListWidgetWidth();
populateToolTips();
+ // Almanac
+ ui->astroCalcAlmanac->retranslate();
+
}
}
@@ -583,6 +586,11 @@ void AstroCalcDialog::createDialogContent()
connect(ui->pushButtonExtraEphemerisDialog, SIGNAL(clicked()), this, SLOT(showExtraEphemerisDialog()));
connect(ui->pushButtonCustomStepsDialog, SIGNAL(clicked()), this, SLOT(showCustomStepsDialog()));
+ // Tab: Almanac
+ ui->astroCalcAlmanac->setup();
+ connect(core, SIGNAL(locationChanged(StelLocation)), this, SLOT(updateAlmanacWidgetVisibility()));
+ updateAlmanacWidgetVisibility();
+
updateTabBarListWidgetWidth();
ui->celestialPositionsUpdateButton->setShortcut(QKeySequence("Shift+F10"));
@@ -605,6 +613,20 @@ void AstroCalcDialog::createDialogContent()
connect(ui->exportPCPushButton, &QPushButton::clicked, this, [=]{ saveGraph(ui->pcChartView); });
}
+void AstroCalcDialog::updateAlmanacWidgetVisibility()
+{
+ const int almanacTabIndex = 8;
+ const bool onEarth = core->getCurrentPlanet()==solarSystem->getEarth();
+
+ // hide Almanac tab or not
+ ui->stackListWidget->item(almanacTabIndex)->setHidden(!onEarth);
+ ui->astroCalcAlmanac->setVisible(onEarth);
+
+ // move to first tab if Alamac was visible when user are moved to non-terrestial location
+ if (!onEarth && ui->stackListWidget->currentRow()==almanacTabIndex)
+ ui->stackListWidget->setCurrentRow(0);
+}
+
void AstroCalcDialog::populateToolTips()
{
QString validDates = QString("%1 1582/10/15 - 9999/12/31").arg(q_("Gregorian dates. Valid range:"));
diff --git a/src/gui/AstroCalcDialog.hpp b/src/gui/AstroCalcDialog.hpp
index b56d720b5f..d229932a62 100644
--- a/src/gui/AstroCalcDialog.hpp
+++ b/src/gui/AstroCalcDialog.hpp
@@ -438,6 +438,8 @@ private slots:
void showExtraEphemerisDialog();
void showCustomStepsDialog();
+ void updateAlmanacWidgetVisibility();
+
void saveGraph(QChartView *graph);
private:
diff --git a/src/gui/astroCalcAlmanacWidget.ui b/src/gui/astroCalcAlmanacWidget.ui
new file mode 100644
index 0000000000..a5fdb49615
--- /dev/null
+++ b/src/gui/astroCalcAlmanacWidget.ui
@@ -0,0 +1,1085 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>astroCalcAlmanacWidget</class>
+ <widget class="QWidget" name="astroCalcAlmanacWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>623</width>
+ <height>305</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="windowTitle">
+ <string notr="true">Form</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="tabPosition">
+ <enum>QTabWidget::South</enum>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="tabSpecificTime">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <attribute name="title">
+ <string>Specific Time</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayoutSpecificTime">
+ <item row="2" column="8">
+ <widget class="QLabel" name="labelCivilTwilightBegin">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="7" colspan="6">
+ <widget class="Line" name="line_5">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>1</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>1</height>
+ </size>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="7" colspan="5">
+ <widget class="QLabel" name="labelNight">
+ <property name="font">
+ <font>
+ <italic>true</italic>
+ </font>
+ </property>
+ <property name="text">
+ <string>Astronomical Night</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="1">
+ <widget class="QLabel" name="labelJD2">
+ <property name="text">
+ <string>Julian Day</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="8">
+ <widget class="QLabel" name="labelNauticalTwilightBegin">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="9">
+ <widget class="QPushButton" name="buttonAstronomicalDawn">
+ <property name="toolTip">
+ <string>Morning astronomical twilight</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="1">
+ <widget class="QLabel" name="labelDuration2">
+ <property name="text">
+ <string>Duration</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="7" colspan="6">
+ <widget class="QLabel" name="labelToday">
+ <property name="font">
+ <font>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Today</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="3">
+ <widget class="QLabel" name="labelMarchEquinoxDuration"/>
+ </item>
+ <item row="8" column="11">
+ <widget class="QPushButton" name="buttonMoonset">
+ <property name="toolTip">
+ <string>Today's moonset</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="12">
+ <widget class="QLabel" name="labelDurationColumn2">
+ <property name="text">
+ <string>Duration</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="4" rowspan="4">
+ <widget class="Line" name="line_3">
+ <property name="minimumSize">
+ <size>
+ <width>1</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="3">
+ <layout class="QHBoxLayout" name="SeptemberEquinoxLayout">
+ <item>
+ <widget class="QLabel" name="labelSeptemberEquinox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string comment="season">Fall</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonSeptemberEquinoxPrevious">
+ <property name="toolTip">
+ <string>Previous September Equinox</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/btTimeRewind-off.png</normaloff>
+ <disabledoff>:/graphicGui/btTimeRewind-off.png</disabledoff>:/graphicGui/btTimeRewind-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonSeptemberEquinoxCurrent">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Current September Equinox</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonSeptemberEquinoxNext">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Next September Equinox</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/btTimeForward-off.png</normaloff>
+ <disabledoff>:/graphicGui/btTimeForward-off.png</disabledoff>:/graphicGui/btTimeForward-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="4" column="8">
+ <widget class="QLabel" name="labelAstronomicalTwilightBegin">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="3">
+ <widget class="QLabel" name="labelMarchEquinoxLT"/>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="labelLT1">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Local Time</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="12">
+ <widget class="QLabel" name="labelNauticalTwilightDuration">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="5">
+ <widget class="QLabel" name="labelJuneSolsticeLT"/>
+ </item>
+ <item row="2" column="7">
+ <widget class="QLabel" name="labelCivilTwilight">
+ <property name="text">
+ <string comment="twilight">Civil</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="6" rowspan="10">
+ <widget class="Line" name="lineDelimiterSections">
+ <property name="minimumSize">
+ <size>
+ <width>1</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="10" colspan="2">
+ <widget class="QLabel" name="labelDusk">
+ <property name="text">
+ <string>Dusk</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="5">
+ <widget class="QLabel" name="labelJuneSolsticeDuration"/>
+ </item>
+ <item row="1" column="8" colspan="2">
+ <widget class="QLabel" name="labelDawn">
+ <property name="text">
+ <string>Dawn</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="7">
+ <widget class="QLabel" name="labelTwilight">
+ <property name="text">
+ <string>Twilight</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="9">
+ <widget class="QPushButton" name="buttonNauticalDawn">
+ <property name="toolTip">
+ <string>Morning nautical twilight</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="1">
+ <widget class="QLabel" name="labelLT2">
+ <property name="text">
+ <string>Local Time</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="3">
+ <widget class="QLabel" name="labelSeptemberEquinoxLT"/>
+ </item>
+ <item row="2" column="9">
+ <widget class="QPushButton" name="buttonCivilDawn">
+ <property name="toolTip">
+ <string>Morning civil twilight</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="3">
+ <layout class="QHBoxLayout" name="MarchEquinoxLayout">
+ <item>
+ <widget class="QLabel" name="labelMarchEquinox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string comment="season">Spring</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonMarchEquinoxPrevious">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Previous March Equinox</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/btTimeRewind-off.png</normaloff>
+ <disabledoff>:/graphicGui/btTimeRewind-off.png</disabledoff>:/graphicGui/btTimeRewind-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonMarchEquinoxCurrent">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Current March Equinox</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonMarchEquinoxNext">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Next March Equinox</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/btTimeForward-off.png</normaloff>
+ <disabledoff>:/graphicGui/btTimeForward-off.png</disabledoff>:/graphicGui/btTimeForward-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="5">
+ <layout class="QHBoxLayout" name="JuneSolsticeLayout">
+ <item>
+ <widget class="QLabel" name="labelJuneSolstice">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string comment="season">Summer</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonJuneSolsticePrevious">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Previous June Solstice</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/btTimeRewind-off.png</normaloff>
+ <disabledoff>:/graphicGui/btTimeRewind-off.png</disabledoff>:/graphicGui/btTimeRewind-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonJuneSolsticeCurrent">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Current June Solstice</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonJuneSolsticeNext">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Next June Solstice</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/btTimeForward-off.png</normaloff>
+ <disabledoff>:/graphicGui/btTimeForward-off.png</disabledoff>:/graphicGui/btTimeForward-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="10">
+ <widget class="QLabel" name="labelCivilTwilightEnd">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="11">
+ <widget class="QPushButton" name="buttonNauticalDusk">
+ <property name="toolTip">
+ <string>Evening nautical twilight</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="12">
+ <widget class="QLabel" name="labelDayDuration">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="5">
+ <widget class="QLabel" name="labelDecemberSolsticeDuration"/>
+ </item>
+ <item row="3" column="7">
+ <widget class="QLabel" name="labelNauticalTwilight">
+ <property name="text">
+ <string comment="twilight">Nautical</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="5">
+ <widget class="QLabel" name="labelDecemberSolsticeJD"/>
+ </item>
+ <item row="4" column="1">
+ <widget class="QLabel" name="labelDuration1">
+ <property name="text">
+ <string>Duration</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="3" colspan="3">
+ <widget class="Line" name="line">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>1</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>1</height>
+ </size>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="12">
+ <widget class="QLabel" name="labelDurationColumn1">
+ <property name="text">
+ <string>Duration</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="7">
+ <widget class="QLabel" name="labelMoon">
+ <property name="text">
+ <string>Moon</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="8" colspan="2">
+ <widget class="QLabel" name="labelRise">
+ <property name="text">
+ <string>Rise</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="9" column="12">
+ <widget class="QLabel" name="labelNightDuration">
+ <property name="font">
+ <font>
+ <italic>true</italic>
+ </font>
+ </property>
+ <property name="toolTip">
+ <string/>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <layout class="QHBoxLayout" name="YearLayout">
+ <item>
+ <widget class="QLabel" name="labelYear">
+ <property name="text">
+ <string>Year</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="labelCurrentYear">
+ <property name="font">
+ <font>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="labelYearDuration">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="7" column="7">
+ <widget class="QLabel" name="labelSun">
+ <property name="text">
+ <string>Sun</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="5">
+ <layout class="QHBoxLayout" name="DecemberSolsticeLayout">
+ <item>
+ <widget class="QLabel" name="labelDecemberSolstice">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string comment="season">Winter</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonDecemberSolsticePrevious">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Previous December Solstice</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/btTimeRewind-off.png</normaloff>
+ <disabledoff>:/graphicGui/btTimeRewind-off.png</disabledoff>:/graphicGui/btTimeRewind-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonDecemberSolsticeCurrent">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Current December Solstice</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="buttonDecemberSolsticeNext">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="toolTip">
+ <string>Next December Solstice</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/btTimeForward-off.png</normaloff>
+ <disabledoff>:/graphicGui/btTimeForward-off.png</disabledoff>:/graphicGui/btTimeForward-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="3" column="3">
+ <widget class="QLabel" name="labelMarchEquinoxJD"/>
+ </item>
+ <item row="9" column="3">
+ <widget class="QLabel" name="labelSeptemberEquinoxDuration"/>
+ </item>
+ <item row="4" column="7">
+ <widget class="QLabel" name="labelAstronomicalTwilight">
+ <property name="text">
+ <string comment="twilight">Astronomical</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="9">
+ <widget class="QPushButton" name="buttonMoonrise">
+ <property name="toolTip">
+ <string>Today's moonrise</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="labelJD1">
+ <property name="text">
+ <string>Julian Day</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="10">
+ <widget class="QLabel" name="labelNauticalTwilightEnd">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="12">
+ <widget class="QLabel" name="labelAstronomicalTwilightDuration">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="5">
+ <widget class="QLabel" name="labelDecemberSolsticeLT"/>
+ </item>
+ <item row="0" column="1" colspan="5">
+ <widget class="QLabel" name="labelSeasons">
+ <property name="font">
+ <font>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Seasons</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="11">
+ <widget class="QPushButton" name="buttonAstronomicalDusk">
+ <property name="toolTip">
+ <string>Evening astronomical twilight</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="4" rowspan="4">
+ <widget class="Line" name="line_2">
+ <property name="minimumSize">
+ <size>
+ <width>1</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="3">
+ <widget class="QLabel" name="labelSeptemberEquinoxJD"/>
+ </item>
+ <item row="7" column="11">
+ <widget class="QPushButton" name="buttonSunset">
+ <property name="toolTip">
+ <string>Today's sunset</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="8">
+ <widget class="QLabel" name="labelMoonRise">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="9">
+ <widget class="QPushButton" name="buttonSunrise">
+ <property name="toolTip">
+ <string>Today's sunrise</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="8" column="10">
+ <widget class="QLabel" name="labelMoonSet">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="10">
+ <widget class="QLabel" name="labelSunset">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="5">
+ <widget class="QLabel" name="labelJuneSolsticeJD"/>
+ </item>
+ <item row="1" column="2" rowspan="9">
+ <widget class="Line" name="line_4">
+ <property name="minimumSize">
+ <size>
+ <width>1</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>1</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="12">
+ <widget class="QLabel" name="labelCivilTwilightDuration">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="10" colspan="2">
+ <widget class="QLabel" name="labelSet">
+ <property name="text">
+ <string>Set</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="11">
+ <widget class="QPushButton" name="buttonCivilDusk">
+ <property name="toolTip">
+ <string>Evening civil twilight</string>
+ </property>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../../data/gui/guiRes.qrc">
+ <normaloff>:/graphicGui/bbtTime-off.png</normaloff>
+ <disabledoff>:/graphicGui/bbtTime-off.png</disabledoff>:/graphicGui/bbtTime-off.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="10">
+ <widget class="QLabel" name="labelAstronomicalTwilightEnd">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="8">
+ <widget class="QLabel" name="labelSunrise">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="10" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="tab_2">
+ <attribute name="title">
+ <string>Tab 2</string>
+ </attribute>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="../../data/gui/guiRes.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gui/astroCalcDialog.ui b/src/gui/astroCalcDialog.ui
index 7a5fc45e80..fa07e186ea 100644
--- a/src/gui/astroCalcDialog.ui
+++ b/src/gui/astroCalcDialog.ui
@@ -192,6 +192,17 @@
</iconset>
</property>
</item>
+ <item>
+ <property name="text">
+ <string>Almanac</string>
+ </property>
+ <property name="icon">
+ <iconset>
+ <normalon>:/graphicGui/tabSSO.png</normalon>
+ <selectedon>:/graphicGui/tabSSO-selected.png</selectedon>
+ </iconset>
+ </property>
+ </item>
</widget>
</item>
<item row="1" column="0">
@@ -2867,6 +2878,20 @@
</item>
</layout>
</widget>
+ <widget class="QWidget" name="stackedWidgetPage9">
+ <layout class="QGridLayout" name="gridLayout_27">
+ <item row="0" column="0">
+ <widget class="AstroCalcAlmanacWidget" name="astroCalcAlmanac" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
</layout>
@@ -2896,6 +2921,12 @@
<extends>QGraphicsView</extends>
<header>QtCharts/qchartview.h</header>
</customwidget>
+ <customwidget>
+ <class>AstroCalcAlmanacWidget</class>
+ <extends>QWidget</extends>
+ <header>AstroCalcAlmanacWidget.hpp</header>
+ <container>1</container>
+ </customwidget>
</customwidgets>
<resources>
<include location="../../data/gui/guiRes.qrc"/>