240 lines
8.5 KiB
C++
240 lines
8.5 KiB
C++
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2016 The Qt Company Ltd.
|
|
** Contact: https://www.qt.io/licensing/
|
|
**
|
|
** This file is part of the QtWidgets module of the Qt Toolkit.
|
|
**
|
|
** $QT_BEGIN_LICENSE:LGPL$
|
|
** Commercial License Usage
|
|
** Licensees holding valid commercial Qt licenses may use this file in
|
|
** accordance with the commercial license agreement provided with the
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
** a written agreement between you and The Qt Company. For licensing terms
|
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
** information use the contact form at https://www.qt.io/contact-us.
|
|
**
|
|
** GNU Lesser General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
|
** General Public License version 3 as published by the Free Software
|
|
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
|
** packaging of this file. Please review the following information to
|
|
** ensure the GNU Lesser General Public License version 3 requirements
|
|
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
|
**
|
|
** GNU General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU
|
|
** General Public License version 2.0 or (at your option) the GNU General
|
|
** Public license version 3 or any later version approved by the KDE Free
|
|
** Qt Foundation. The licenses are as published by the Free Software
|
|
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
|
** included in the packaging of this file. Please review the following
|
|
** information to ensure the GNU General Public License requirements will
|
|
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
|
** https://www.gnu.org/licenses/gpl-3.0.html.
|
|
**
|
|
** $QT_END_LICENSE$
|
|
**
|
|
****************************************************************************/
|
|
|
|
#ifndef QDATETIMEEDIT_H
|
|
#define QDATETIMEEDIT_H
|
|
|
|
#include <QtWidgets/qtwidgetsglobal.h>
|
|
#include <QtCore/qdatetime.h>
|
|
#include <QtCore/qcalendar.h>
|
|
#include <QtCore/qvariant.h>
|
|
#include <QtWidgets/qabstractspinbox.h>
|
|
|
|
QT_REQUIRE_CONFIG(datetimeedit);
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
|
|
class QDateTimeEditPrivate;
|
|
class QStyleOptionSpinBox;
|
|
class QCalendarWidget;
|
|
|
|
class Q_WIDGETS_EXPORT QDateTimeEdit : public QAbstractSpinBox
|
|
{
|
|
Q_OBJECT
|
|
|
|
Q_PROPERTY(QDateTime dateTime READ dateTime WRITE setDateTime NOTIFY dateTimeChanged USER true)
|
|
Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY dateChanged)
|
|
Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY timeChanged)
|
|
Q_PROPERTY(QDateTime maximumDateTime READ maximumDateTime WRITE setMaximumDateTime RESET clearMaximumDateTime)
|
|
Q_PROPERTY(QDateTime minimumDateTime READ minimumDateTime WRITE setMinimumDateTime RESET clearMinimumDateTime)
|
|
Q_PROPERTY(QDate maximumDate READ maximumDate WRITE setMaximumDate RESET clearMaximumDate)
|
|
Q_PROPERTY(QDate minimumDate READ minimumDate WRITE setMinimumDate RESET clearMinimumDate)
|
|
Q_PROPERTY(QTime maximumTime READ maximumTime WRITE setMaximumTime RESET clearMaximumTime)
|
|
Q_PROPERTY(QTime minimumTime READ minimumTime WRITE setMinimumTime RESET clearMinimumTime)
|
|
Q_PROPERTY(Section currentSection READ currentSection WRITE setCurrentSection)
|
|
Q_PROPERTY(Sections displayedSections READ displayedSections)
|
|
Q_PROPERTY(QString displayFormat READ displayFormat WRITE setDisplayFormat)
|
|
Q_PROPERTY(bool calendarPopup READ calendarPopup WRITE setCalendarPopup)
|
|
Q_PROPERTY(int currentSectionIndex READ currentSectionIndex WRITE setCurrentSectionIndex)
|
|
Q_PROPERTY(int sectionCount READ sectionCount)
|
|
Q_PROPERTY(Qt::TimeSpec timeSpec READ timeSpec WRITE setTimeSpec)
|
|
public:
|
|
enum Section { // a sub-type of QDateTimeParser's like-named enum.
|
|
NoSection = 0x0000,
|
|
AmPmSection = 0x0001,
|
|
MSecSection = 0x0002,
|
|
SecondSection = 0x0004,
|
|
MinuteSection = 0x0008,
|
|
HourSection = 0x0010,
|
|
DaySection = 0x0100,
|
|
MonthSection = 0x0200,
|
|
YearSection = 0x0400,
|
|
TimeSections_Mask = AmPmSection|MSecSection|SecondSection|MinuteSection|HourSection,
|
|
DateSections_Mask = DaySection|MonthSection|YearSection
|
|
};
|
|
Q_ENUM(Section)
|
|
|
|
Q_DECLARE_FLAGS(Sections, Section)
|
|
Q_FLAG(Sections)
|
|
|
|
explicit QDateTimeEdit(QWidget *parent = nullptr);
|
|
explicit QDateTimeEdit(const QDateTime &dt, QWidget *parent = nullptr);
|
|
explicit QDateTimeEdit(const QDate &d, QWidget *parent = nullptr);
|
|
explicit QDateTimeEdit(const QTime &t, QWidget *parent = nullptr);
|
|
~QDateTimeEdit();
|
|
|
|
QDateTime dateTime() const;
|
|
QDate date() const;
|
|
QTime time() const;
|
|
|
|
QCalendar calendar() const;
|
|
void setCalendar(QCalendar calendar);
|
|
|
|
QDateTime minimumDateTime() const;
|
|
void clearMinimumDateTime();
|
|
void setMinimumDateTime(const QDateTime &dt);
|
|
|
|
QDateTime maximumDateTime() const;
|
|
void clearMaximumDateTime();
|
|
void setMaximumDateTime(const QDateTime &dt);
|
|
|
|
void setDateTimeRange(const QDateTime &min, const QDateTime &max);
|
|
|
|
QDate minimumDate() const;
|
|
void setMinimumDate(const QDate &min);
|
|
void clearMinimumDate();
|
|
|
|
QDate maximumDate() const;
|
|
void setMaximumDate(const QDate &max);
|
|
void clearMaximumDate();
|
|
|
|
void setDateRange(const QDate &min, const QDate &max);
|
|
|
|
QTime minimumTime() const;
|
|
void setMinimumTime(const QTime &min);
|
|
void clearMinimumTime();
|
|
|
|
QTime maximumTime() const;
|
|
void setMaximumTime(const QTime &max);
|
|
void clearMaximumTime();
|
|
|
|
void setTimeRange(const QTime &min, const QTime &max);
|
|
|
|
Sections displayedSections() const;
|
|
Section currentSection() const;
|
|
Section sectionAt(int index) const;
|
|
void setCurrentSection(Section section);
|
|
|
|
int currentSectionIndex() const;
|
|
void setCurrentSectionIndex(int index);
|
|
|
|
QCalendarWidget *calendarWidget() const;
|
|
void setCalendarWidget(QCalendarWidget *calendarWidget);
|
|
|
|
int sectionCount() const;
|
|
|
|
void setSelectedSection(Section section);
|
|
|
|
QString sectionText(Section section) const;
|
|
|
|
QString displayFormat() const;
|
|
void setDisplayFormat(const QString &format);
|
|
|
|
bool calendarPopup() const;
|
|
void setCalendarPopup(bool enable);
|
|
|
|
Qt::TimeSpec timeSpec() const;
|
|
void setTimeSpec(Qt::TimeSpec spec);
|
|
|
|
QSize sizeHint() const override;
|
|
|
|
void clear() override;
|
|
void stepBy(int steps) override;
|
|
|
|
bool event(QEvent *event) override;
|
|
Q_SIGNALS:
|
|
void dateTimeChanged(const QDateTime &dateTime);
|
|
void timeChanged(const QTime &time);
|
|
void dateChanged(const QDate &date);
|
|
|
|
public Q_SLOTS:
|
|
void setDateTime(const QDateTime &dateTime);
|
|
void setDate(const QDate &date);
|
|
void setTime(const QTime &time);
|
|
|
|
protected:
|
|
void keyPressEvent(QKeyEvent *event) override;
|
|
#if QT_CONFIG(wheelevent)
|
|
void wheelEvent(QWheelEvent *event) override;
|
|
#endif
|
|
void focusInEvent(QFocusEvent *event) override;
|
|
bool focusNextPrevChild(bool next) override;
|
|
QValidator::State validate(QString &input, int &pos) const override;
|
|
void fixup(QString &input) const override;
|
|
|
|
virtual QDateTime dateTimeFromText(const QString &text) const;
|
|
virtual QString textFromDateTime(const QDateTime &dt) const;
|
|
StepEnabled stepEnabled() const override;
|
|
void mousePressEvent(QMouseEvent *event) override;
|
|
void paintEvent(QPaintEvent *event) override;
|
|
void initStyleOption(QStyleOptionSpinBox *option) const;
|
|
|
|
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
|
QDateTimeEdit(const QVariant &val, QVariant::Type parserType, QWidget *parent = nullptr);
|
|
#endif
|
|
QDateTimeEdit(const QVariant &val, QMetaType::Type parserType, QWidget *parent = nullptr);
|
|
private:
|
|
Q_DECLARE_PRIVATE(QDateTimeEdit)
|
|
Q_DISABLE_COPY(QDateTimeEdit)
|
|
|
|
Q_PRIVATE_SLOT(d_func(), void _q_resetButton())
|
|
};
|
|
|
|
class Q_WIDGETS_EXPORT QTimeEdit : public QDateTimeEdit
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY userTimeChanged USER true)
|
|
public:
|
|
explicit QTimeEdit(QWidget *parent = nullptr);
|
|
explicit QTimeEdit(const QTime &time, QWidget *parent = nullptr);
|
|
~QTimeEdit();
|
|
|
|
Q_SIGNALS:
|
|
void userTimeChanged(const QTime &time);
|
|
};
|
|
|
|
class Q_WIDGETS_EXPORT QDateEdit : public QDateTimeEdit
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY userDateChanged USER true)
|
|
public:
|
|
explicit QDateEdit(QWidget *parent = nullptr);
|
|
explicit QDateEdit(const QDate &date, QWidget *parent = nullptr);
|
|
~QDateEdit();
|
|
|
|
Q_SIGNALS:
|
|
void userDateChanged(const QDate &date);
|
|
};
|
|
|
|
Q_DECLARE_OPERATORS_FOR_FLAGS(QDateTimeEdit::Sections)
|
|
|
|
QT_END_NAMESPACE
|
|
|
|
#endif // QDATETIMEEDIT_H
|