Add maintainer information to Debian control.
[jaffas-playground:bedside.git] / qml / Bedside / Clock.qml
1 import QtQuick 1.1
2
3 /**
4  * Show an LED clock.
5  *
6  * @author Copyright (c) Andrew Flegg 2011. Released under the Artistic Licence.
7  */
8 Rectangle {
9     id: clock
10     property bool active: true
11
12     anchors.fill: parent
13     color: "black"
14
15     Item {
16         id: values
17
18         property int    block_width: 204
19         property double separator_width: 37
20         property double padding_fraction: 0.5 - (4.0 * block_width + separator_width) / (854.0 * 2)
21         property double scale: parent.width / (separator_width + (4.0 + 2 * padding_fraction) * block_width)
22         property double digit_width: block_width * scale
23     }
24
25
26     LED {
27         id: digit1
28         x: values.padding_fraction * values.block_width * scale
29     }
30
31     LED {
32         id: digit2
33         x: digit1.x + digit1.width
34     }
35
36     LED {
37         id: separator
38         width: values.separator_width * values.scale
39         value: 'sep'
40         x: digit2.x + digit2.width
41     }
42
43     LED {
44         id: digit3
45         x: separator.x + separator.width
46     }
47
48     LED {
49         id: digit4
50         x: digit3.x + digit3.width
51     }
52
53     LED {
54         id: ampmIndicator
55         value: 'am'
56         x: digit3.x + digit3.width + (ledWidth/2)
57         y: 0 - digit3.ledHeight / 2 - ledHeight / 2
58         visible: ampm
59     }
60
61     Rectangle {
62         id: dimmingRectangle
63         anchors.fill: parent
64         color: "black"
65         opacity: 0
66
67         states {
68             State {
69                 name: "dim"
70                 when: applicationData.dimmed
71                 PropertyChanges { target: dimmingRectangle; opacity: 0.66 }
72             }
73         }
74     }
75
76     function redraw() {
77         var time = new Date()
78         var hours   = time.getHours()
79         var minutes = time.getMinutes()
80
81         ampmIndicator.value = (ampm && hours >= 12) ? 'pm': 'am'
82         if (ampm && hours > 12)
83             hours -= 12
84         
85         digit1.value = (!ampm || hours >= 10) ? Math.floor(hours / 10) : 'blank'
86         digit2.value = hours % 10
87         digit3.value = Math.floor(minutes / 10)
88         digit4.value = minutes % 10
89
90         timer.interval = (60 - new Date().getSeconds()) * 1000
91     }
92
93     Component.onCompleted: redraw()
94     onActiveChanged: if (active) redraw()
95
96     Timer {
97         id: timer
98         interval: 60000
99         repeat: true
100         onTriggered : clock.redraw()
101         running: clock.active
102     }
103 }