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