1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-11-07 03:22:33 +01:00
ScreenPlay/Content/widget_analog_clock/Clock.qml

132 lines
3.3 KiB
QML
Raw Normal View History

2023-02-18 14:30:06 +01:00
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
Item {
2023-06-11 10:07:39 +02:00
id: clock
2023-02-18 14:30:06 +01:00
width: {
if (ListView.view && ListView.view.width >= 200)
return ListView.view.width / Math.floor(ListView.view.width / 200.0);
else
return 200;
}
height: {
if (ListView.view && ListView.view.height >= 240)
return ListView.view.height;
else
return 240;
}
property alias city: cityLabel.text
property int hours
property int minutes
property int seconds
property real shift
property bool night: false
property bool internationalTime: true //Unset for local time
function timeChanged() {
var date = new Date;
2023-06-11 10:07:39 +02:00
hours = internationalTime ? date.getUTCHours() + Math.floor(clock.shift) : date.getHours();
night = (hours < 7 || hours > 19);
minutes = internationalTime ? date.getUTCMinutes() + ((clock.shift % 1) * 60) : date.getMinutes();
2023-02-18 14:30:06 +01:00
seconds = date.getUTCSeconds();
}
Timer {
2023-06-11 10:07:39 +02:00
interval: 100
running: true
repeat: true
2023-02-18 14:30:06 +01:00
onTriggered: clock.timeChanged()
}
Item {
anchors.centerIn: parent
2023-06-11 10:07:39 +02:00
width: 200
height: 240
2023-02-18 14:30:06 +01:00
Rectangle {
width: 200
height: width
color: clock.night ? "black" : "gray"
radius: width
}
Image {
2023-06-11 10:07:39 +02:00
x: 92.5
y: 27
2023-02-18 14:30:06 +01:00
source: "hour.png"
transform: Rotation {
id: hourRotation
2023-06-11 10:07:39 +02:00
origin.x: 7.5
origin.y: 73
2023-02-18 14:30:06 +01:00
angle: (clock.hours * 30) + (clock.minutes * 0.5)
2023-06-11 10:07:39 +02:00
Behavior on angle {
SpringAnimation {
spring: 2
damping: 0.2
modulus: 360
}
2023-02-18 14:30:06 +01:00
}
}
}
Image {
2023-06-11 10:07:39 +02:00
x: 93.5
y: 17
2023-02-18 14:30:06 +01:00
source: "minute.png"
transform: Rotation {
id: minuteRotation
2023-06-11 10:07:39 +02:00
origin.x: 6.5
origin.y: 83
2023-02-18 14:30:06 +01:00
angle: clock.minutes * 6
2023-06-11 10:07:39 +02:00
Behavior on angle {
SpringAnimation {
spring: 2
damping: 0.2
modulus: 360
}
2023-02-18 14:30:06 +01:00
}
}
}
Image {
2023-06-11 10:07:39 +02:00
x: 97.5
y: 20
2023-02-18 14:30:06 +01:00
source: "second.png"
transform: Rotation {
id: secondRotation
2023-06-11 10:07:39 +02:00
origin.x: 2.5
origin.y: 80
2023-02-18 14:30:06 +01:00
angle: clock.seconds * 6
2023-06-11 10:07:39 +02:00
Behavior on angle {
SpringAnimation {
spring: 2
damping: 0.2
modulus: 360
}
2023-02-18 14:30:06 +01:00
}
}
}
Image {
2023-06-11 10:07:39 +02:00
anchors.centerIn: background
source: "center.png"
2023-02-18 14:30:06 +01:00
}
Text {
id: cityLabel
2023-06-11 10:07:39 +02:00
y: 210
anchors.horizontalCenter: parent.horizontalCenter
2023-02-18 14:30:06 +01:00
color: "white"
font.family: "Helvetica"
2023-06-11 10:07:39 +02:00
font.bold: true
font.pixelSize: 16
style: Text.Raised
styleColor: "black"
2023-02-18 14:30:06 +01:00
}
}
}