QmlMaterial 0.1.0
Loading...
Searching...
No Matches
date_validator.hpp
1#pragma once
2
3#include <QDateTime>
4#include <QValidator>
5#include <QtQml/qqmlregistration.h>
6#include <optional>
7#include "qml_material/export.hpp"
8
9namespace qml_material
10{
11class QML_MATERIAL_API DateValidator : public QValidator {
12 Q_OBJECT
13 QML_ELEMENT
14 Q_PROPERTY(QLocale locale READ locale WRITE setLocale NOTIFY localeChanged FINAL)
15 Q_PROPERTY(
16 QString dateFormat READ dateFormat WRITE setDateFormat NOTIFY dateFormatChanged FINAL)
17 Q_PROPERTY(QDateTime minDate READ minDate WRITE setMinDate NOTIFY minDateChanged FINAL)
18 Q_PROPERTY(QString inputFormat READ inputFormat NOTIFY inputFormatChanged FINAL)
19 Q_PROPERTY(QDateTime maxDate READ maxDate WRITE setMaxDate NOTIFY maxDateChanged FINAL)
20public:
21 explicit DateValidator(QObject* parent = nullptr);
22 QString inputFormat() const;
23 void setLocale(const QLocale&);
24 QString dateFormat() const { return m_format; }
25 void setDateFormat(const QString&);
26 QDateTime minDate() const { return m_min; }
27 void setMinDate(const QDateTime&);
28 QDateTime maxDate() const { return m_max; }
29 void setMaxDate(const QDateTime&);
30 State validate(QString&, int&) const override;
31 Q_INVOKABLE QDateTime parse(const QString&) const;
32 Q_INVOKABLE QString formatDate(const QDateTime&) const;
33 Q_INVOKABLE bool sameDay(const QDateTime&, const QDateTime&) const;
34 Q_INVOKABLE bool monthEnabled(int year, int month, const QDateTime& minimum,
35 const QDateTime& maximum) const;
36 Q_INVOKABLE bool dateEnabled(const QDateTime&, const QDateTime& minimum,
37 const QDateTime& maximum) const;
38 Q_INVOKABLE bool rangeValid(const QDateTime& start, const QDateTime& end,
39 const QDateTime& minimum, const QDateTime& maximum) const;
40 Q_INVOKABLE bool insideRange(const QDateTime& date, const QDateTime& start,
41 const QDateTime& end) const;
42 Q_SIGNAL void localeChanged();
43 Q_SIGNAL void dateFormatChanged();
44 Q_SIGNAL void inputFormatChanged();
45 Q_SIGNAL void minDateChanged();
46 Q_SIGNAL void maxDateChanged();
47
48private:
49 QString m_format = QStringLiteral("yyyy-MM-dd");
50 QDateTime m_min, m_max;
51 mutable std::optional<QString> m_cachedText;
52 mutable QDateTime m_cachedDate;
53};
54} // namespace qml_material