1 /*
2     SPDX-FileCopyrightText: 2015-2017 Pavel Mraz
3 
4     SPDX-FileCopyrightText: 2017 Jasem Mutlaq
5 
6     SPDX-License-Identifier: GPL-2.0-or-later
7 */
8 
9 #include "polarishourangle.h"
10 
11 #include "skyobject.h"
12 #include "kstarsdata.h"
13 #include "skymapcomposite.h"
14 
15 #include <QPainter>
16 #include <QPen>
17 
18 float hbase = 24;
19 float vangle = 15;
20 
PolarisHourAngle(QWidget * parent)21 PolarisHourAngle::PolarisHourAngle(QWidget *parent) :
22   QDialog(parent),
23   m_polarisHourAngle(0)
24 {
25   setupUi(this);
26   setFixedHeight(size().height());
27 
28   SkyObject *polaris = KStarsData::Instance()->skyComposite()->findByName(i18nc("star name", "Polaris"));
29   Q_ASSERT_X(polaris != nullptr, "PolarisHourAngle", "Unable to find Polaris!");
30   m_polaris = polaris->clone();
31 
32   m_reticle12.reset(new QPixmap(":/images/reticle12.png"));
33   m_reticle24.reset(new QPixmap(":/images/reticle24.png"));
34 
35   connect(dateTimeEdit, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(onTimeUpdated(QDateTime)));
36   connect(currentTimeB, &QPushButton::clicked, this, [this]() { dateTimeEdit->setDateTime(KStarsData::Instance()->lt()); });
37   connect(twelveHourR, SIGNAL(toggled(bool)), this, SLOT(update()));
38 
39   dateTimeEdit->setDateTime(KStarsData::Instance()->lt());
40 }
41 
paintEvent(QPaintEvent *)42 void PolarisHourAngle::paintEvent(QPaintEvent *)
43 {
44   QPainter p(this);
45   QPointF center = frame->rect().center();
46   double r1 = 175;
47 
48   p.setRenderHint(QPainter::Antialiasing);
49   p.setRenderHint(QPainter::SmoothPixmapTransform);
50 
51   p.drawPixmap(frame->pos(), twelveHourR->isChecked() ? *(m_reticle12.get()) : *(m_reticle24.get()));
52   p.setPen(Qt::yellow);
53   p.setBrush(Qt::white);
54   p.translate(frame->pos());
55 
56 //  double angle = (24.0 - m_polarisHourAngle) * 15.0;
57   double angle = (hbase - m_polarisHourAngle) * vangle;
58   p.save();
59 
60   p.translate(center);
61   p.rotate(angle);
62 
63   QPolygon poly;
64 
65   p.setPen(QPen(Qt::red, 1, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin));
66   p.setBrush(p.pen().color());
67 
68   poly << QPoint(0, r1);
69   poly << QPoint(10, -10);
70   poly << QPoint(5, -14);
71   poly << QPoint(-5, -14);
72   poly << QPoint(-10, -10);
73   poly << QPoint(0, r1);
74 
75   p.drawPolygon(poly);
76 
77   p.restore();
78 }
79 
onTimeUpdated(QDateTime newDateTime)80 void PolarisHourAngle::onTimeUpdated(QDateTime newDateTime)
81 {
82     KStarsDateTime lt(newDateTime);
83     KSNumbers num(lt.djd());
84     m_polaris->updateCoords(&num, false);
85     dms lst = KStarsData::Instance()->geo()->GSTtoLST(lt.gst());
86 /*
87     m_polarisHourAngle = (lst.Degrees() - m_polaris->ra().Degrees())/15.0;
88     while (m_polarisHourAngle > 24)
89         m_polarisHourAngle -= 24;
90     while (m_polarisHourAngle < 0)
91         m_polarisHourAngle += 24;
92 */
93     m_polarisHourAngle = (lst.Degrees() - m_polaris->ra().Degrees())/vangle;
94     while (m_polarisHourAngle > hbase)
95         m_polarisHourAngle -= hbase;
96     while (m_polarisHourAngle < hbase)
97         m_polarisHourAngle += hbase;
98 
99     labelPolarisHA->setText(dms(m_polarisHourAngle*vangle).toHMSString());
100     labelDate->setText(newDateTime.date().toString());
101     labelTime->setText(newDateTime.time().toString());
102 
103     update();
104 }
105