|
|
@ -14,6 +14,10 @@ RowLayout { |
|
|
|
|
|
|
|
property var _forceTime: new Date() |
|
|
|
|
|
|
|
property bool showHours: true |
|
|
|
property bool showMinutes: true |
|
|
|
property bool showSeconds: false |
|
|
|
|
|
|
|
readonly property bool is24Hours: { |
|
|
|
var fmStr = Qt.locale().timeFormat(Locale.LongFormat); |
|
|
|
var isApPm = false; |
|
|
@ -24,17 +28,17 @@ RowLayout { |
|
|
|
return !isApPm; |
|
|
|
} |
|
|
|
|
|
|
|
readonly property int hours: _hourTumbler.currentIndex + (!is24Hours && _amPmTumbler.currentIndex === 1 ? 12 : 0); |
|
|
|
readonly property int minutes: _minuteTumbler.currentIndex; |
|
|
|
readonly property int hours: showHours ? (_hourTumbler.currentIndex + (!is24Hours && _amPmTumbler.currentIndex === 1 ? 12 : 0)) : 0 |
|
|
|
readonly property int minutes: showMinutes ? _minuteTumbler.currentIndex : 0 |
|
|
|
readonly property int seconds: showSeconds ? _secondsTumbler.currentIndex : 0 |
|
|
|
property bool _skipChange: false |
|
|
|
|
|
|
|
function recalcTime() { |
|
|
|
var hours = _hourTumbler.currentIndex + (!is24Hours && _amPmTumbler.currentIndex === 1 ? 12 : 0); |
|
|
|
var minutes = _minuteTumbler.currentIndex; |
|
|
|
if(_forceTime.getHours() !== hours || |
|
|
|
_forceTime.getMinutes() !== minutes) { |
|
|
|
_forceTime.getMinutes() !== minutes || |
|
|
|
_forceTime.getSeconds() !== seconds) { |
|
|
|
_skipChange = true; |
|
|
|
time = new Date(0, 0, 0, hours, minutes); |
|
|
|
time = new Date(0, 0, 0, hours, minutes, seconds); |
|
|
|
_skipChange = false; |
|
|
|
} |
|
|
|
} |
|
|
@ -48,6 +52,7 @@ RowLayout { |
|
|
|
|
|
|
|
TimeTumbler { |
|
|
|
id: _hourTumbler |
|
|
|
visible: showHours |
|
|
|
model: { |
|
|
|
var model = new Array(is24Hours ? 24 : 12); |
|
|
|
for(var i = 0; i < model.length; i++) |
|
|
@ -63,10 +68,12 @@ RowLayout { |
|
|
|
Label { |
|
|
|
text: qsTr(":") |
|
|
|
Layout.minimumWidth: implicitWidth |
|
|
|
visible: showHours && showMinutes |
|
|
|
} |
|
|
|
|
|
|
|
TimeTumbler { |
|
|
|
id: _minuteTumbler |
|
|
|
visible: showMinutes |
|
|
|
model: { |
|
|
|
var mod = new Array(60) |
|
|
|
for(var i = 0; i < mod.length; i++) { |
|
|
@ -79,9 +86,30 @@ RowLayout { |
|
|
|
onCurrentIndexChanged: Qt.callLater(recalcTime) |
|
|
|
} |
|
|
|
|
|
|
|
Label { |
|
|
|
text: qsTr(":") |
|
|
|
Layout.minimumWidth: implicitWidth |
|
|
|
visible: showSeconds && (showMinutes || showHours) |
|
|
|
} |
|
|
|
|
|
|
|
TimeTumbler { |
|
|
|
id: _secondsTumbler |
|
|
|
visible: showSeconds |
|
|
|
model: { |
|
|
|
var mod = new Array(60) |
|
|
|
for(var i = 0; i < mod.length; i++) { |
|
|
|
var data = i.toString(); |
|
|
|
mod[i] = data.length < 2 ? Qt.locale().zeroDigit + data : data; |
|
|
|
} |
|
|
|
return mod; |
|
|
|
} |
|
|
|
currentIndex: _forceTime.getSeconds() |
|
|
|
onCurrentIndexChanged: Qt.callLater(recalcTime) |
|
|
|
} |
|
|
|
|
|
|
|
TimeTumbler { |
|
|
|
id: _amPmTumbler |
|
|
|
visible: !is24Hours |
|
|
|
visible: !is24Hours && showHours |
|
|
|
model: [ |
|
|
|
Qt.locale().amText, |
|
|
|
Qt.locale().pmText, |
|
|
|