File indexing completed on 2024-04-21 03:44:49

0001 /*
0002     SPDX-FileCopyrightText: 2007 Jason Harris <kstars@30doradus.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "eqplotwidget.h"
0008 
0009 #include "kstarsdatetime.h"
0010 #include "modcalcvizequinox.h"
0011 
0012 #include <KLocalizedString>
0013 
0014 #include <QPainter>
0015 
0016 eqPlotWidget::eqPlotWidget(QWidget *parent) : KPlotWidget(parent)
0017 {
0018 }
0019 
0020 //Draw rotated labels and month names on top axis
0021 void eqPlotWidget::paintEvent(QPaintEvent *e)
0022 {
0023     KPlotWidget::paintEvent(e);
0024 
0025     QPainter p;
0026     p.begin(this);
0027 
0028     modCalcEquinox *mc = (modCalcEquinox *)(parent()->parent()->parent()->parent());
0029     KStarsDateTime dt(QDate(mc->Year->value(), 1, 1), QTime(0, 0, 0));
0030     long double jd0 = dt.djd(); //save JD on Jan 1st
0031 
0032     QPointF pSpring = mapToWidget(QPointF(mc->dSpring.djd() - jd0 - 4, -28.0));
0033     QPointF pSummer = mapToWidget(QPointF(mc->dSummer.djd() - jd0 - 4, -28.0));
0034     QPointF pAutumn = mapToWidget(QPointF(mc->dAutumn.djd() - jd0 - 4, -28.0));
0035     QPointF pWinter = mapToWidget(QPointF(mc->dWinter.djd() - jd0 - 4, -28.0));
0036 
0037     p.setPen(Qt::yellow);
0038     QFont f = p.font();
0039     f.setPointSize(f.pointSize() - 2);
0040     p.setFont(f);
0041 
0042     p.save();
0043     p.translate(leftPadding() + pSpring.x(), topPadding() + pSpring.y());
0044     p.rotate(-90);
0045     p.drawText(0, 0, i18n("Vernal equinox:"));
0046     p.drawText(0, 14, QLocale().toString(mc->dSpring, QLocale::LongFormat));
0047     p.restore();
0048 
0049     p.save();
0050     p.translate(leftPadding() + pSummer.x(), topPadding() + pSummer.y());
0051     p.rotate(-90);
0052     p.drawText(0, 0, i18n("Summer solstice:"));
0053     p.drawText(0, 14, QLocale().toString(mc->dSummer, QLocale::LongFormat));
0054     p.restore();
0055 
0056     p.save();
0057     p.translate(leftPadding() + pAutumn.x(), topPadding() + pAutumn.y());
0058     p.rotate(-90);
0059     p.drawText(0, 0, i18n("Autumnal equinox:"));
0060     p.drawText(0, 14, QLocale().toString(mc->dAutumn, QLocale::LongFormat));
0061     p.restore();
0062 
0063     p.save();
0064     p.translate(leftPadding() + pWinter.x(), topPadding() + pWinter.y());
0065     p.rotate(-90);
0066     p.drawText(0, 0, i18n("Winter solstice:"));
0067     p.drawText(0, 14, QLocale().toString(mc->dWinter, QLocale::LongFormat));
0068     p.restore();
0069 
0070     //Draw month labels along top axis
0071     p.setPen(Qt::white);
0072     p.save();
0073     p.translate(leftPadding(), topPadding());
0074     double y = mc->Plot->dataRect().bottom() + 1.5;
0075     for (int i = 0; i < 12; i++)
0076     {
0077         QPoint c;
0078         if (i < 11)
0079         {
0080             c = mc->Plot->mapToWidget(QPointF(0.5 * (mc->dmonth(i) + mc->dmonth(i + 1)), y)).toPoint();
0081         }
0082         else
0083         {
0084             c = mc->Plot->mapToWidget(QPointF(0.5 * (mc->dmonth(i) + mc->Plot->dataRect().right()), y)).toPoint();
0085         }
0086         QRect r(-16, -8, 32, 16);
0087         r.moveCenter(c);
0088         QLocale locale;
0089         p.drawText(r, Qt::AlignCenter, locale.monthName(i + 1, QLocale::ShortFormat));
0090     }
0091     p.restore();
0092     p.end();
0093 }