mirror of
https://bitbucket.org/smil3y/katie.git
synced 2025-02-23 18:32:55 +00:00
reimplement QDateTimeEdit
no date/time parsing and it has different look based on what is being edited: https://ibb.co/w6hTwCk Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
9688b3520f
commit
24690f5507
5 changed files with 247 additions and 2196 deletions
|
@ -267,7 +267,7 @@ endfunction()
|
|||
# depend on KtNetwork depend on plugins that depend on it too
|
||||
add_custom_target(plugins_dependant_tests)
|
||||
function(KATIE_SETUP_PLUGIN FORPLUGIN)
|
||||
add_dependencies(plugins_dependant_tests ${FORPLUGIN})
|
||||
# add_dependencies(plugins_dependant_tests ${FORPLUGIN})
|
||||
endfunction()
|
||||
|
||||
# a macro to remove conditional code from headers which is only relevant to the
|
||||
|
|
|
@ -199,15 +199,12 @@ QWidget *QDefaultItemEditorFactory::createEditor(QVariant::Type type, QWidget *p
|
|||
#ifndef QT_NO_DATETIMEEDIT
|
||||
case QVariant::Date: {
|
||||
QDateTimeEdit *ed = new QDateEdit(parent);
|
||||
ed->setFrame(false);
|
||||
return ed; }
|
||||
case QVariant::Time: {
|
||||
QDateTimeEdit *ed = new QTimeEdit(parent);
|
||||
ed->setFrame(false);
|
||||
return ed; }
|
||||
case QVariant::DateTime: {
|
||||
QDateTimeEdit *ed = new QDateTimeEdit(parent);
|
||||
ed->setFrame(false);
|
||||
return ed; }
|
||||
#endif
|
||||
case QVariant::Pixmap:
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,6 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Copyright (C) 2016 Ivailo Monev
|
||||
** Copyright (C) 2023 Ivailo Monev
|
||||
**
|
||||
** This file is part of the QtGui module of the Katie Toolkit.
|
||||
**
|
||||
|
@ -23,57 +22,28 @@
|
|||
#define QDATETIMEEDIT_H
|
||||
|
||||
#include <QtCore/qdatetime.h>
|
||||
#include <QtCore/qvariant.h>
|
||||
#include <QtGui/qabstractspinbox.h>
|
||||
|
||||
#include <QtGui/qcalendarwidget.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
||||
#ifndef QT_NO_DATETIMEEDIT
|
||||
|
||||
class QDateTimeEditPrivate;
|
||||
class QStyleOptionSpinBox;
|
||||
class QCalendarWidget;
|
||||
|
||||
class Q_GUI_EXPORT QDateTimeEdit : public QAbstractSpinBox
|
||||
class Q_GUI_EXPORT QDateTimeEdit : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_ENUMS(Section)
|
||||
Q_FLAGS(Sections)
|
||||
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 {
|
||||
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_PROPERTY(QDateTime maximumDateTime READ maximumDateTime)
|
||||
Q_PROPERTY(QDateTime minimumDateTime READ minimumDateTime)
|
||||
Q_PROPERTY(QDate maximumDate READ maximumDate)
|
||||
Q_PROPERTY(QDate minimumDate READ minimumDate)
|
||||
Q_PROPERTY(QTime maximumTime READ maximumTime)
|
||||
Q_PROPERTY(QTime minimumTime READ minimumTime)
|
||||
|
||||
Q_DECLARE_FLAGS(Sections, Section)
|
||||
public:
|
||||
|
||||
explicit QDateTimeEdit(QWidget *parent = nullptr);
|
||||
explicit QDateTimeEdit(const QDateTime &dt, QWidget *parent = nullptr);
|
||||
|
@ -85,67 +55,20 @@ public:
|
|||
QTime time() const;
|
||||
|
||||
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;
|
||||
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;
|
||||
|
||||
virtual void clear();
|
||||
virtual void stepBy(int steps);
|
||||
|
||||
bool event(QEvent *event);
|
||||
Q_SIGNALS:
|
||||
void dateTimeChanged(const QDateTime &date);
|
||||
void timeChanged(const QTime &date);
|
||||
|
@ -156,26 +79,13 @@ public Q_SLOTS:
|
|||
void setDate(const QDate &date);
|
||||
void setTime(const QTime &time);
|
||||
|
||||
protected:
|
||||
virtual void keyPressEvent(QKeyEvent *event);
|
||||
virtual void focusInEvent(QFocusEvent *event);
|
||||
virtual bool focusNextPrevChild(bool next);
|
||||
virtual QValidator::State validate(QString &input, int &pos) const;
|
||||
virtual void fixup(QString &input) const;
|
||||
|
||||
virtual QDateTime dateTimeFromText(const QString &text) const;
|
||||
virtual QString textFromDateTime(const QDateTime &dt) const;
|
||||
virtual StepEnabled stepEnabled() const;
|
||||
virtual void mousePressEvent(QMouseEvent *event);
|
||||
virtual void paintEvent(QPaintEvent *event);
|
||||
void initStyleOption(QStyleOptionSpinBox *option) const;
|
||||
|
||||
QDateTimeEdit(const QVariant &val, QVariant::Type parserType, QWidget *parent = nullptr);
|
||||
private:
|
||||
Q_DECLARE_PRIVATE(QDateTimeEdit)
|
||||
Q_DISABLE_COPY(QDateTimeEdit)
|
||||
|
||||
Q_PRIVATE_SLOT(d_func(), void _q_resetButton())
|
||||
Q_PRIVATE_SLOT(d_func(), void _q_dateChanged())
|
||||
Q_PRIVATE_SLOT(d_func(), void _q_timeChanged())
|
||||
Q_PRIVATE_SLOT(d_func(), void _q_selectDate())
|
||||
};
|
||||
|
||||
class Q_GUI_EXPORT QTimeEdit : public QDateTimeEdit
|
||||
|
@ -194,8 +104,6 @@ public:
|
|||
QDateEdit(const QDate &date, QWidget *parent = nullptr);
|
||||
};
|
||||
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(QDateTimeEdit::Sections)
|
||||
|
||||
#endif // QT_NO_DATETIMEEDIT
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 The Qt Company Ltd.
|
||||
** Copyright (C) 2016 Ivailo Monev
|
||||
** Copyright (C) 2023 Ivailo Monev
|
||||
**
|
||||
** This file is part of the QtGui module of the Katie Toolkit.
|
||||
**
|
||||
|
@ -33,124 +32,48 @@
|
|||
// We mean it.
|
||||
//
|
||||
|
||||
#include "qcombobox.h"
|
||||
#include "qcalendarwidget.h"
|
||||
#include "qwidget_p.h"
|
||||
#include "qdatetimeedit.h"
|
||||
#include "qboxlayout.h"
|
||||
#include "qspinbox.h"
|
||||
#include "qtoolbutton.h"
|
||||
#include "qmenu.h"
|
||||
#include "qlabel.h"
|
||||
#include "qdatetimeedit.h"
|
||||
#include "qabstractspinbox_p.h"
|
||||
#include "qdatetime_p.h"
|
||||
#include "qwidgetaction.h"
|
||||
#include "qdebug.h"
|
||||
|
||||
#ifndef QT_NO_DATETIMEEDIT
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QCalendarPopup;
|
||||
class QDateTimeEditPrivate : public QAbstractSpinBoxPrivate, public QDateTimeParser
|
||||
class QDateTimeEditPrivate : public QWidgetPrivate
|
||||
{
|
||||
Q_DECLARE_PUBLIC(QDateTimeEdit)
|
||||
public:
|
||||
QDateTimeEditPrivate();
|
||||
|
||||
void init(const QVariant &var);
|
||||
void readLocaleSettings();
|
||||
QDateTime minimumdate;
|
||||
QDateTime maximumdate;
|
||||
QCalendarWidget *calendarwidget;
|
||||
|
||||
void emitSignals(EmitPolicy ep, const QVariant &old);
|
||||
QString textFromValue(const QVariant &f) const;
|
||||
QVariant valueFromText(const QString &f) const;
|
||||
virtual void _q_editorCursorPositionChanged(int oldpos, int newpos);
|
||||
virtual void interpret(EmitPolicy ep);
|
||||
virtual void clearCache() const;
|
||||
void init(const QDateTime &datetime, const bool showdate, const bool showtime);
|
||||
void updateWidgets(const QDateTime &datetime);
|
||||
void setCalendar(QCalendarWidget *calendar);
|
||||
QDateTime currentDateTime() const;
|
||||
|
||||
QDateTime validateAndInterpret(QString &input, int &, QValidator::State &state,
|
||||
bool fixup = false) const;
|
||||
void clearSection(int index);
|
||||
virtual QString displayText() const { return edit->text(); } // this is from QDateTimeParser
|
||||
|
||||
int absoluteIndex(QDateTimeEdit::Section s, int index) const;
|
||||
int absoluteIndex(const SectionNode &s) const;
|
||||
void updateEdit();
|
||||
QDateTime stepBy(int index, int steps, bool test = false) const;
|
||||
int sectionAt(int pos) const;
|
||||
int closestSection(int index, bool forward) const;
|
||||
int nextPrevSection(int index, bool forward) const;
|
||||
void setSelected(int index, bool forward = false);
|
||||
|
||||
void updateCache(const QVariant &val, const QString &str) const;
|
||||
|
||||
void updateTimeSpec();
|
||||
virtual QDateTime getMinimum() const { return minimum.toDateTime(); }
|
||||
virtual QDateTime getMaximum() const { return maximum.toDateTime(); }
|
||||
virtual QLocale locale() const { return q_func()->locale(); }
|
||||
QString valueToText(const QVariant &var) const { return textFromValue(var); }
|
||||
QString getAmPmText(AmPm ap, Case cs) const;
|
||||
int cursorPosition() const { return edit ? edit->cursorPosition() : -1; }
|
||||
|
||||
virtual QStyle::SubControl newHoverControl(const QPoint &pos);
|
||||
virtual void updateEditFieldGeometry();
|
||||
virtual QVariant getZeroVariant() const;
|
||||
virtual void setRange(const QVariant &min, const QVariant &max);
|
||||
|
||||
void _q_resetButton();
|
||||
void updateArrow(QStyle::StateFlag state);
|
||||
bool calendarPopupEnabled() const;
|
||||
void syncCalendarWidget();
|
||||
|
||||
bool isSeparatorKey(const QKeyEvent *k) const;
|
||||
|
||||
static QDateTimeEdit::Sections convertSections(QDateTimeParser::Sections s);
|
||||
static QDateTimeEdit::Section convertToPublic(QDateTimeParser::Section s);
|
||||
|
||||
void initCalendarPopup(QCalendarWidget *cw = 0);
|
||||
void positionCalendarPopup();
|
||||
|
||||
QDateTimeEdit::Sections sections;
|
||||
mutable bool cacheGuard;
|
||||
|
||||
QString defaultDateFormat, defaultTimeFormat, defaultDateTimeFormat, unreversedFormat;
|
||||
mutable QVariant conflictGuard;
|
||||
bool hasHadFocus, formatExplicitlySet, calendarPopup;
|
||||
QStyle::StateFlag arrowState;
|
||||
QCalendarPopup *monthCalendar;
|
||||
|
||||
};
|
||||
|
||||
|
||||
class QCalendarPopup : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QCalendarPopup(QWidget *parent = nullptr, QCalendarWidget *cw = 0);
|
||||
QDate selectedDate() { return verifyCalendarInstance()->selectedDate(); }
|
||||
void setDate(const QDate &date);
|
||||
void setDateRange(const QDate &min, const QDate &max);
|
||||
QCalendarWidget *calendarWidget() const { return const_cast<QCalendarPopup*>(this)->verifyCalendarInstance(); }
|
||||
void setCalendarWidget(QCalendarWidget *cw);
|
||||
Q_SIGNALS:
|
||||
void activated(const QDate &date);
|
||||
void newDateSelected(const QDate &newDate);
|
||||
void hidingCalendar(const QDate &oldDate);
|
||||
void resetButton();
|
||||
|
||||
private Q_SLOTS:
|
||||
void dateSelected(const QDate &date);
|
||||
void dateSelectionChanged();
|
||||
|
||||
protected:
|
||||
void hideEvent(QHideEvent *);
|
||||
void mousePressEvent(QMouseEvent *e);
|
||||
void mouseReleaseEvent(QMouseEvent *);
|
||||
bool event(QEvent *e);
|
||||
void _q_dateChanged();
|
||||
void _q_timeChanged();
|
||||
void _q_selectDate();
|
||||
|
||||
private:
|
||||
QCalendarWidget *verifyCalendarInstance();
|
||||
|
||||
QWeakPointer<QCalendarWidget> calendar;
|
||||
QDate oldDate;
|
||||
bool dateChanged;
|
||||
bool m_showdate;
|
||||
bool m_showtime;
|
||||
QHBoxLayout *m_layout;
|
||||
QSpinBox *m_hourbox;
|
||||
QSpinBox *m_minutebox;
|
||||
QSpinBox *m_secondbox;
|
||||
QToolButton *m_datebutton;
|
||||
QMenu* m_datemenu;
|
||||
QWidgetAction* m_dateaction;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
|
Loading…
Add table
Reference in a new issue