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