Browse Source

added configurable sections to timeedit

pull/2/head
Skycoder42 7 years ago
parent
commit
a86a15df5f
No known key found for this signature in database GPG Key ID: 8E01AD9EF0578D2B
  1. 2
      examples/mvvmcore/SampleCore/settings.xml
  2. 42
      src/imports/mvvmquick/TimeEdit.qml
  3. 18
      src/mvvmquick/formatters_p.h
  4. 5
      src/mvvmquick/inputviewfactory.cpp

2
examples/mvvmcore/SampleCore/settings.xml

@ -139,7 +139,7 @@
title="Choose a date" title="Choose a date"
default="2018-10-10"> default="2018-10-10">
<Property key="qtmvvm_preview" type="string">Selected date: %1</Property> <Property key="qtmvvm_preview" type="string">Selected date: %1</Property>
<Property key="qtmvvm_dateformat" type="string">dd.MM.yyyy</Property> <Property key="qtmvvm_dateformat" type="string">dd. MMMM yyyy</Property>
</Entry> </Entry>
<Entry key="prop15" <Entry key="prop15"
type="QDateTime" type="QDateTime"

42
src/imports/mvvmquick/TimeEdit.qml

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

18
src/mvvmquick/formatters_p.h

@ -2,6 +2,7 @@
#define QTMVVM_FORMATTERS_P_H #define QTMVVM_FORMATTERS_P_H
#include <QtCore/QCoreApplication> #include <QtCore/QCoreApplication>
#include <QtCore/QDateTime>
#include "inputviewfactory.h" #include "inputviewfactory.h"
@ -36,6 +37,23 @@ public:
} }
}; };
template <typename T>
class DateTimeFormatter : public Formatter
{
public:
QString format(const QString &formatString, const QVariant &value, const QVariantMap &viewProperties) const override {
auto formatType = viewProperties.value(QStringLiteral("qtmvvm_dateformat"));
QString dateStr;
if(formatType.type() == QVariant::Int)
dateStr = value.template value<T>().toString(static_cast<Qt::DateFormat>(formatType.toInt()));
else if(formatType.type() == QVariant::String)
dateStr = value.template value<T>().toString(formatType.toString());
else
dateStr = value.template value<T>().toString(Qt::DefaultLocaleShortDate);
return formatString.arg(dateStr);
}
};
} }
#endif // QTMVVM_FORMATTERS_P_H #endif // QTMVVM_FORMATTERS_P_H

5
src/mvvmquick/inputviewfactory.cpp

@ -131,7 +131,10 @@ InputViewFactoryPrivate::InputViewFactoryPrivate() :
{"range", QStringLiteral("qrc:/qtmvvm/delegates/RangeDelegate.qml")} {"range", QStringLiteral("qrc:/qtmvvm/delegates/RangeDelegate.qml")}
}, },
formatters{ formatters{
{QMetaType::typeName(QMetaType::Int), QSharedPointer<IntFormatter>::create()} {QMetaType::typeName(QMetaType::Int), QSharedPointer<IntFormatter>::create()},
{QMetaType::typeName(QMetaType::QTime), QSharedPointer<DateTimeFormatter<QTime>>::create()},
{QMetaType::typeName(QMetaType::QDate), QSharedPointer<DateTimeFormatter<QDate>>::create()},
{QMetaType::typeName(QMetaType::QDateTime), QSharedPointer<DateTimeFormatter<QDateTime>>::create()}
} }
{ {
auto dblFormatter = QSharedPointer<SimpleFormatter<double>>::create(); auto dblFormatter = QSharedPointer<SimpleFormatter<double>>::create();

Loading…
Cancel
Save