-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathCountdownTimer.qml
More file actions
100 lines (81 loc) · 1.93 KB
/
CountdownTimer.qml
File metadata and controls
100 lines (81 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import QtQuick 2.3
Item {
id: countdownTimer;
property alias running: timer.running;
property var expiration: '2015-10-20 13:30:00';
property var expirationDate: new Date(expiration);
property var expirationTime: expirationDate.getTime();
property int hourMS: 60 * 60 * 1000;
property int minuteMS: 60 * 1000;
property string hour: {
return String('00' + timer.hour.toString()).slice(-2);
}
property string minute: {
return String('00' + timer.minute.toString()).slice(-2);
}
property string second: {
return String('00' + timer.second.toString()).slice(-2);
}
property string millisecond: {
return String('000' + timer.millisecond.toString()).slice(-3);
}
signal timeout();
signal lastHour();
Timer {
id: timer;
interval: 1000;
running: false;
repeat: true;
property int hour: 0;
property int minute: 0;
property int second: 0;
property int millisecond: 0;
onTriggered: {
var curDate = new Date();
// Difference
var diffMS = expirationTime - curDate.getTime();
if (diffMS <= 0) {
// Stop to countdown
running = false;
// Timeout
hour = 0;
minute = 0;
second = 0;
millisecond = 0;
timeout();
return;
}
// Hour
var diffHour = Math.floor(diffMS / hourMS);
var _hour = parseInt(diffHour);
if (_hour != hour)
hour = _hour;
diffMS -= diffHour * hourMS;
if (diffHour <= 0) {
// Last hour
lastHour();
}
// Minute
var diffMinute = Math.floor(diffMS / minuteMS);
var _minute = parseInt(diffMinute);
if (_minute != minute)
minute = _minute;
diffMS -= diffMinute * minuteMS;
// Second
var diffSecond = Math.floor(diffMS / 1000);
var _second = parseInt(diffSecond);
if (_second != second)
second = _second;
diffMS -= diffSecond * 1000;
}
}
NumberAnimation {
running: timer.running;
loops: Animation.Infinite;
target: timer;
property: 'millisecond';
duration: 1000;
from: 999;
to: 0;
}
}