1 /*
2     SPDX-FileCopyrightText: 2001 Jason Harris <jharris@30doradus.org>
3 
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "timedialog.h"
8 
9 #include "geolocation.h"
10 #include "kstarsdata.h"
11 #include "kstarsdatetime.h"
12 #include "simclock.h"
13 
14 #include <KLocalizedString>
15 #include <KDatePicker>
16 
17 #include <QFrame>
18 #include <QHBoxLayout>
19 #include <QKeyEvent>
20 #include <QPushButton>
21 #include <QTimeEdit>
22 #include <QVBoxLayout>
23 
TimeDialog(const KStarsDateTime & now,GeoLocation * _geo,QWidget * parent,bool UTCFrame)24 TimeDialog::TimeDialog(const KStarsDateTime &now, GeoLocation *_geo, QWidget *parent, bool UTCFrame)
25     : QDialog(parent), geo(_geo)
26 {
27 #ifdef Q_OS_OSX
28     setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint);
29 #endif
30     UTCNow = UTCFrame;
31 
32     QFrame *page = new QFrame(this);
33 
34     QVBoxLayout *mainLayout = new QVBoxLayout;
35     mainLayout->addWidget(page);
36     setLayout(mainLayout);
37 
38     if (UTCNow)
39         setWindowTitle(i18nc("@title:window set clock to a new time", "Set UTC Time"));
40     else
41         setWindowTitle(i18nc("@title:window set clock to a new time", "Set Time"));
42 
43     QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
44     mainLayout->addWidget(buttonBox);
45     connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
46     connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
47 
48     vlay = new QVBoxLayout(page);
49     vlay->setContentsMargins(2, 2, 2, 2);
50     vlay->setSpacing(2);
51     hlay = new QHBoxLayout(); //this layout will be added to the VLayout
52     hlay->setSpacing(2);
53 
54     dPicker   = new KDatePicker(now.date(), page);
55     tEdit     = new QTimeEdit(now.time(), page);
56     NowButton = new QPushButton(page);
57     NowButton->setObjectName("NowButton");
58     NowButton->setText(UTCNow ? i18n("UTC Now") : i18n("Now"));
59 
60     vlay->addWidget(dPicker, 0);
61     vlay->addLayout(hlay, 0);
62 
63     hlay->addWidget(tEdit);
64     hlay->addWidget(NowButton);
65 
66     vlay->activate();
67 
68     QObject::connect(NowButton, SIGNAL(clicked()), this, SLOT(setNow()));
69 }
70 
71 //Add handler for Escape key to close window
72 //Use keyReleaseEvent because keyPressEvents are already consumed
73 //by the KDatePicker.
keyReleaseEvent(QKeyEvent * kev)74 void TimeDialog::keyReleaseEvent(QKeyEvent *kev)
75 {
76     switch (kev->key())
77     {
78         case Qt::Key_Escape:
79         {
80             close();
81             break;
82         }
83 
84         default:
85         {
86             kev->ignore();
87             break;
88         }
89     }
90 }
91 
setNow(void)92 void TimeDialog::setNow(void)
93 {
94     KStarsDateTime dt(KStarsDateTime::currentDateTimeUtc());
95     if (!UTCNow)
96         dt = geo->UTtoLT(dt);
97 
98     dPicker->setDate(dt.date());
99     tEdit->setTime(dt.time());
100 }
101 
selectedTime(void)102 QTime TimeDialog::selectedTime(void)
103 {
104     return tEdit->time();
105 }
106 
selectedDate(void)107 QDate TimeDialog::selectedDate(void)
108 {
109     return dPicker->date();
110 }
111 
selectedDateTime(void)112 KStarsDateTime TimeDialog::selectedDateTime(void)
113 {
114     return KStarsDateTime(selectedDate(), selectedTime());
115 }
116