1 /* vi: set sw=4 ts=4:
2 *
3 * Copyright (C) 2003 - 2012 Christian Hohnstaedt.
4 *
5 * All rights reserved.
6 */
7
8 #include "validity.h"
9
10 #include <QDateTime>
11 #include "lib/asn1time.h"
12 #include "lib/func.h"
13
14
Validity(QWidget * parent)15 Validity::Validity( QWidget* parent )
16 : QDateTimeEdit( parent )
17 {
18 endDate = false;
19 setTimeSpec(Qt::UTC);
20 setNow();
21 hideTime(false);
22 connect(this, SIGNAL(timeChanged(const QTime &)),
23 this, SLOT(setMyTime(const QTime &)));
24 updateFormatString();
25 }
26
~Validity()27 Validity::~Validity()
28 {
29 }
30
getDate() const31 a1time Validity::getDate() const
32 {
33 a1time date(dateTime());
34 QTime time;
35
36 if (midnight) {
37 time = endDate ? QTime(23,59,59) : QTime(0,0,0);
38 date.setTimeSpec(Qt::UTC);
39 } else {
40 time = date.time();
41 time.setHMS(time.hour(), time.minute(), 0);
42 }
43 date.setTime(time);
44 return date;
45 }
46
localTime(int state)47 void Validity::localTime(int state)
48 {
49 if (midnight)
50 return;
51 switch (state) {
52 case Qt::Checked:
53 setTimeSpec(Qt::LocalTime);
54 setDateTime(dateTime().toLocalTime());
55 break;
56 case Qt::Unchecked:
57 setTimeSpec(Qt::UTC);
58 setDateTime(dateTime().toUTC());
59 break;
60 }
61 updateFormatString();
62 setMyTime(time());
63 }
64
hideTimeCheck(int state)65 void Validity::hideTimeCheck(int state)
66 {
67 switch (state) {
68 case Qt::Checked:
69 hideTime(true);
70 break;
71 case Qt::Unchecked:
72 hideTime(false);
73 break;
74 }
75 }
76
hideTime(bool hide)77 void Validity::hideTime(bool hide)
78 {
79 if (hide) {
80 if (!midnight && endDate)
81 setDateTime(dateTime().addDays(-1));
82 midnight = true;
83 } else {
84 if (midnight && endDate)
85 setDateTime(dateTime().addDays(1));
86 midnight = false;
87 setTime(mytime);
88 }
89 updateFormatString();
90 }
91
updateFormatString()92 void Validity::updateFormatString()
93 {
94 QString formatDate = tr("yyyy-MM-dd hh:mm");
95 QString format;
96
97 if (midnight) {
98 if (!endDate)
99 format = QTime(0,0,0).toString(formatDate);
100 else
101 format = QTime(23,59,59).toString(formatDate);
102 } else {
103 format = formatDate;
104 }
105 if (timeSpec() == Qt::UTC || midnight) {
106 format += " 'GMT'";
107 } else {
108 format += QString(" '%1'")
109 .arg(QTime::currentTime().toString("t"));
110 }
111 setDisplayFormat(format);
112 }
113
setDate(const a1time & a)114 void Validity::setDate(const a1time &a)
115 {
116 setDateTime(a);
117 }
118
setDiff(const Validity * start,int number,int range)119 void Validity::setDiff(const Validity *start, int number, int range)
120 {
121 QDateTime dt = start->dateTime();
122
123 switch (range) {
124 case 0: dt = dt.addDays(number); break;
125 case 1: dt = dt.addMonths(number); break;
126 case 2: dt = dt.addYears(number); break;
127 }
128
129 // one day less if we go from 0:00:00 to 23:59:59
130 if (midnight)
131 dt = dt.addDays(-1);
132
133 setDateTime(dt);
134 setMyTime(start->mytime);
135 }
136
setNow()137 void Validity::setNow()
138 {
139 setDateTime(a1time::now());
140 setMyTime(time());
141 }
142
setMyTime(const QTime & time)143 void Validity::setMyTime(const QTime &time)
144 {
145 mytime = time;
146 }
147
148