File indexing completed on 2024-04-21 14:46:58

0001 /*
0002     SPDX-FileCopyrightText: 2015-2017 Pavel Mraz
0003 
0004     SPDX-FileCopyrightText: 2017 Jasem Mutlaq
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #include "polarishourangle.h"
0010 
0011 #include "skyobject.h"
0012 #include "kstarsdata.h"
0013 #include "skymapcomposite.h"
0014 
0015 #include <QPainter>
0016 #include <QPen>
0017 
0018 float hbase = 24;
0019 float vangle = 15;
0020 
0021 PolarisHourAngle::PolarisHourAngle(QWidget *parent) :
0022   QDialog(parent),
0023   m_polarisHourAngle(0)
0024 {
0025   setupUi(this);
0026   setFixedHeight(size().height());
0027 
0028   SkyObject *polaris = KStarsData::Instance()->skyComposite()->findByName(i18nc("star name", "Polaris"));
0029   Q_ASSERT_X(polaris != nullptr, "PolarisHourAngle", "Unable to find Polaris!");
0030   m_polaris = polaris->clone();
0031 
0032   m_reticle12.reset(new QPixmap(":/images/reticle12.png"));
0033   m_reticle24.reset(new QPixmap(":/images/reticle24.png"));
0034 
0035   connect(dateTimeEdit, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(onTimeUpdated(QDateTime)));
0036   connect(currentTimeB, &QPushButton::clicked, this, [this]() { dateTimeEdit->setDateTime(KStarsData::Instance()->lt()); });
0037   connect(twelveHourR, SIGNAL(toggled(bool)), this, SLOT(update()));
0038 
0039   dateTimeEdit->setDateTime(KStarsData::Instance()->lt());
0040 }
0041 
0042 void PolarisHourAngle::paintEvent(QPaintEvent *)
0043 {
0044   QPainter p(this);
0045   QPointF center = frame->rect().center();
0046   double r1 = 175;
0047 
0048   p.setRenderHint(QPainter::Antialiasing);
0049   p.setRenderHint(QPainter::SmoothPixmapTransform);
0050 
0051   p.drawPixmap(frame->pos(), twelveHourR->isChecked() ? *(m_reticle12.get()) : *(m_reticle24.get()));
0052   p.setPen(Qt::yellow);
0053   p.setBrush(Qt::white);
0054   p.translate(frame->pos());
0055 
0056 //  double angle = (24.0 - m_polarisHourAngle) * 15.0;
0057   double angle = (hbase - m_polarisHourAngle) * vangle;
0058   p.save();
0059 
0060   p.translate(center);
0061   p.rotate(angle);
0062 
0063   QPolygon poly;
0064 
0065   p.setPen(QPen(Qt::red, 1, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin));
0066   p.setBrush(p.pen().color());
0067 
0068   poly << QPoint(0, r1);
0069   poly << QPoint(10, -10);
0070   poly << QPoint(5, -14);
0071   poly << QPoint(-5, -14);
0072   poly << QPoint(-10, -10);
0073   poly << QPoint(0, r1);
0074 
0075   p.drawPolygon(poly);
0076 
0077   p.restore();
0078 }
0079 
0080 void PolarisHourAngle::onTimeUpdated(QDateTime newDateTime)
0081 {
0082     KStarsDateTime lt(newDateTime);
0083     KSNumbers num(lt.djd());
0084     m_polaris->updateCoords(&num, false);
0085     dms lst = KStarsData::Instance()->geo()->GSTtoLST(lt.gst());
0086 /*
0087     m_polarisHourAngle = (lst.Degrees() - m_polaris->ra().Degrees())/15.0;
0088     while (m_polarisHourAngle > 24)
0089         m_polarisHourAngle -= 24;
0090     while (m_polarisHourAngle < 0)
0091         m_polarisHourAngle += 24;
0092 */
0093     m_polarisHourAngle = (lst.Degrees() - m_polaris->ra().Degrees())/vangle;
0094     while (m_polarisHourAngle > hbase)
0095         m_polarisHourAngle -= hbase;
0096     while (m_polarisHourAngle < hbase)
0097         m_polarisHourAngle += hbase;
0098 
0099     labelPolarisHA->setText(dms(m_polarisHourAngle*vangle).toHMSString());
0100     labelDate->setText(newDateTime.date().toString());
0101     labelTime->setText(newDateTime.time().toString());
0102 
0103     update();
0104 }