8 changed files with 160 additions and 17 deletions
			
			
		@ -0,0 +1,99 @@ | 
				
			|||
import QtQuick 2.10 | 
				
			|||
import QtQuick.Controls 2.3 | 
				
			|||
import QtQuick.Layouts 1.3 | 
				
			|||
 | 
				
			|||
RowLayout { | 
				
			|||
	id: _edit | 
				
			|||
	spacing: 0 | 
				
			|||
 | 
				
			|||
	property date time: new Date() | 
				
			|||
	onTimeChanged: { | 
				
			|||
		if(!_skipChange) | 
				
			|||
			_forceTime = time | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	property var _forceTime: new Date() | 
				
			|||
 | 
				
			|||
	readonly property bool is24Hours: { | 
				
			|||
		var fmStr = Qt.locale().timeFormat(Locale.LongFormat); | 
				
			|||
		var isApPm = false; | 
				
			|||
		["A", "AP", "a", "ap"].forEach(function(text){ | 
				
			|||
			if(fmStr.indexOf(text) !== -1) | 
				
			|||
				isApPm = true; | 
				
			|||
		}); | 
				
			|||
		return !isApPm; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	readonly property int hours: _hourTumbler.currentIndex + (!is24Hours && _amPmTumbler.currentIndex === 1 ? 12 : 0); | 
				
			|||
	readonly property int minutes: _minuteTumbler.currentIndex; | 
				
			|||
	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) { | 
				
			|||
			_skipChange = true; | 
				
			|||
			time = new Date(0, 0, 0, hours, minutes); | 
				
			|||
			_skipChange = false; | 
				
			|||
		} | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	Item { | 
				
			|||
		id: _spacer1 | 
				
			|||
		Layout.fillHeight: true | 
				
			|||
		Layout.fillWidth: true | 
				
			|||
		Layout.preferredWidth: 0 | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	Tumbler { | 
				
			|||
		id: _hourTumbler | 
				
			|||
		model: { | 
				
			|||
			var model = new Array(is24Hours ? 24 : 12); | 
				
			|||
			for(var i = 0; i < model.length; i++) | 
				
			|||
				model[i] = i.toString(); | 
				
			|||
			if(!is24Hours) | 
				
			|||
				model[0] = 12; | 
				
			|||
			return model; | 
				
			|||
		} | 
				
			|||
		currentIndex: is24Hours ? _forceTime.getHours() : (_forceTime.getHours() % 12) | 
				
			|||
		onCurrentIndexChanged: Qt.callLater(recalcTime) | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	Label { | 
				
			|||
		text: qsTr(":") | 
				
			|||
		Layout.minimumWidth: implicitWidth | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	Tumbler { | 
				
			|||
		id: _minuteTumbler | 
				
			|||
		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.getMinutes() | 
				
			|||
		onCurrentIndexChanged: Qt.callLater(recalcTime) | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	Tumbler { | 
				
			|||
		id: _amPmTumbler | 
				
			|||
		visible: !is24Hours | 
				
			|||
		model: [ | 
				
			|||
			Qt.locale().amText, | 
				
			|||
			Qt.locale().pmText, | 
				
			|||
		] | 
				
			|||
		currentIndex: _forceTime.getHours() >= 12 ? 1 : 0 | 
				
			|||
		onCurrentIndexChanged: Qt.callLater(recalcTime) | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	Item { | 
				
			|||
		id: _spacer2 | 
				
			|||
		Layout.fillHeight: true | 
				
			|||
		Layout.fillWidth: true | 
				
			|||
		Layout.preferredWidth: 0 | 
				
			|||
	} | 
				
			|||
} | 
				
			|||
@ -0,0 +1,19 @@ | 
				
			|||
import QtQuick 2.10 | 
				
			|||
import QtQuick.Controls 2.3 | 
				
			|||
import QtQuick.Layouts 1.3 | 
				
			|||
import de.skycoder42.QtMvvm.Quick 1.1 as QtMvvm | 
				
			|||
 | 
				
			|||
QtMvvm.TimeEdit { | 
				
			|||
	id: _edit | 
				
			|||
 | 
				
			|||
	property var inputValue: new Date() | 
				
			|||
 | 
				
			|||
	onInputValueChanged: { | 
				
			|||
		var realTime = typeof inputValue == "string" ? new Date("2000-01-01T" + inputValue) : inputValue | 
				
			|||
		if(realTime.getHours() !== time.getHours() || | 
				
			|||
		   realTime.getMinutes() !== time.getMinutes()) { | 
				
			|||
			time = realTime | 
				
			|||
		} | 
				
			|||
	} | 
				
			|||
	onTimeChanged: inputValue = time | 
				
			|||
} | 
				
			|||
					Loading…
					
					
				
		Reference in new issue