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