QDateTimeParser: new Section mask values simplify code.
Various |s of existing section flags were used repeatedly; naming these masks makes the relevant code easier to read. In QDateTimeEdit, add a comment to make clear that its Section enum is based on QDTP's. Change-Id: Ifd8364cd396a6d0d5ed7ae7dc4d31690f77edd30 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This commit is contained in:
parent
c671e66802
commit
fd5720af2c
@ -159,7 +159,7 @@ bool QDateTimeParser::setDigit(QDateTime &v, int index, int newVal) const
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(node.type & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong))) {
|
if (!(node.type & DaySectionMask)) {
|
||||||
if (day < cachedDay)
|
if (day < cachedDay)
|
||||||
day = cachedDay;
|
day = cachedDay;
|
||||||
const int max = QDate(year, month, 1).daysInMonth();
|
const int max = QDate(year, month, 1).daysInMonth();
|
||||||
@ -625,6 +625,10 @@ int QDateTimeParser::sectionMaxSize(Section s, int count) const
|
|||||||
case Internal:
|
case Internal:
|
||||||
case TimeSectionMask:
|
case TimeSectionMask:
|
||||||
case DateSectionMask:
|
case DateSectionMask:
|
||||||
|
case HourSectionMask:
|
||||||
|
case YearSectionMask:
|
||||||
|
case DayOfWeekSectionMask:
|
||||||
|
case DaySectionMask:
|
||||||
qWarning("QDateTimeParser::sectionMaxSize: Invalid section %s",
|
qWarning("QDateTimeParser::sectionMaxSize: Invalid section %s",
|
||||||
SectionNode::name(s).toLatin1().constData());
|
SectionNode::name(s).toLatin1().constData());
|
||||||
|
|
||||||
@ -993,12 +997,11 @@ QDateTimeParser::StateNode QDateTimeParser::parse(QString &input, int &cursorPos
|
|||||||
|
|
||||||
const QDate date(year, month, day);
|
const QDate date(year, month, day);
|
||||||
const int diff = dayofweek - date.dayOfWeek();
|
const int diff = dayofweek - date.dayOfWeek();
|
||||||
if (diff != 0 && state == Acceptable
|
if (diff != 0 && state == Acceptable && isSet & DayOfWeekSectionMask) {
|
||||||
&& isSet & (DayOfWeekSectionShort | DayOfWeekSectionLong)) {
|
|
||||||
if (isSet & DaySection)
|
if (isSet & DaySection)
|
||||||
conflicts = true;
|
conflicts = true;
|
||||||
const SectionNode &sn = sectionNode(currentSectionIndex);
|
const SectionNode &sn = sectionNode(currentSectionIndex);
|
||||||
if (sn.type & (DayOfWeekSectionShort|DayOfWeekSectionLong) || currentSectionIndex == -1) {
|
if (sn.type & DayOfWeekSectionMask || currentSectionIndex == -1) {
|
||||||
// dayofweek should be preferred
|
// dayofweek should be preferred
|
||||||
day += diff;
|
day += diff;
|
||||||
if (day <= 0) {
|
if (day <= 0) {
|
||||||
@ -1010,8 +1013,9 @@ QDateTimeParser::StateNode QDateTimeParser::parse(QString &input, int &cursorPos
|
|||||||
<< diff << QDate(year, month, day).dayOfWeek();
|
<< diff << QDate(year, month, day).dayOfWeek();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool needfixday = false;
|
bool needfixday = false;
|
||||||
if (sectionType(currentSectionIndex) & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong)) {
|
if (sectionType(currentSectionIndex) & DaySectionMask) {
|
||||||
cachedDay = day;
|
cachedDay = day;
|
||||||
} else if (cachedDay > day) {
|
} else if (cachedDay > day) {
|
||||||
day = cachedDay;
|
day = cachedDay;
|
||||||
@ -1039,7 +1043,7 @@ QDateTimeParser::StateNode QDateTimeParser::parse(QString &input, int &cursorPos
|
|||||||
const SectionNode sn = sectionNode(i);
|
const SectionNode sn = sectionNode(i);
|
||||||
if (sn.type & DaySection) {
|
if (sn.type & DaySection) {
|
||||||
input.replace(sectionPos(sn), sectionSize(i), loc.toString(day));
|
input.replace(sectionPos(sn), sectionSize(i), loc.toString(day));
|
||||||
} else if (sn.type & (DayOfWeekSectionShort | DayOfWeekSectionLong)) {
|
} else if (sn.type & DayOfWeekSectionMask) {
|
||||||
const int dayOfWeek = QDate(year, month, day).dayOfWeek();
|
const int dayOfWeek = QDate(year, month, day).dayOfWeek();
|
||||||
const QLocale::FormatType dayFormat =
|
const QLocale::FormatType dayFormat =
|
||||||
(sn.type == DayOfWeekSectionShort
|
(sn.type == DayOfWeekSectionShort
|
||||||
@ -1296,7 +1300,7 @@ int QDateTimeParser::findDay(const QString &str1, int startDay, int sectionIndex
|
|||||||
int bestCount = 0;
|
int bestCount = 0;
|
||||||
if (!str1.isEmpty()) {
|
if (!str1.isEmpty()) {
|
||||||
const SectionNode &sn = sectionNode(sectionIndex);
|
const SectionNode &sn = sectionNode(sectionIndex);
|
||||||
if (!(sn.type & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong))) {
|
if (!(sn.type & DaySectionMask)) {
|
||||||
qWarning("QDateTimeParser::findDay Internal error");
|
qWarning("QDateTimeParser::findDay Internal error");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -114,14 +114,20 @@ public:
|
|||||||
MinuteSection = 0x00008,
|
MinuteSection = 0x00008,
|
||||||
Hour12Section = 0x00010,
|
Hour12Section = 0x00010,
|
||||||
Hour24Section = 0x00020,
|
Hour24Section = 0x00020,
|
||||||
TimeSectionMask = (AmPmSection|MSecSection|SecondSection|MinuteSection|Hour12Section|Hour24Section),
|
HourSectionMask = (Hour12Section | Hour24Section),
|
||||||
|
TimeSectionMask = (MSecSection | SecondSection | MinuteSection |
|
||||||
|
HourSectionMask | AmPmSection),
|
||||||
|
|
||||||
DaySection = 0x00100,
|
DaySection = 0x00100,
|
||||||
MonthSection = 0x00200,
|
MonthSection = 0x00200,
|
||||||
YearSection = 0x00400,
|
YearSection = 0x00400,
|
||||||
YearSection2Digits = 0x00800,
|
YearSection2Digits = 0x00800,
|
||||||
|
YearSectionMask = YearSection | YearSection2Digits,
|
||||||
DayOfWeekSectionShort = 0x01000,
|
DayOfWeekSectionShort = 0x01000,
|
||||||
DayOfWeekSectionLong = 0x02000,
|
DayOfWeekSectionLong = 0x02000,
|
||||||
DateSectionMask = (DaySection|MonthSection|YearSection|YearSection2Digits|DayOfWeekSectionShort|DayOfWeekSectionLong),
|
DayOfWeekSectionMask = DayOfWeekSectionShort | DayOfWeekSectionLong,
|
||||||
|
DaySectionMask = DaySection | DayOfWeekSectionMask,
|
||||||
|
DateSectionMask = DaySectionMask | MonthSection | YearSectionMask,
|
||||||
|
|
||||||
Internal = 0x10000,
|
Internal = 0x10000,
|
||||||
FirstSection = 0x20000 | Internal,
|
FirstSection = 0x20000 | Internal,
|
||||||
@ -132,7 +138,7 @@ public:
|
|||||||
FirstSectionIndex = -2,
|
FirstSectionIndex = -2,
|
||||||
LastSectionIndex = -3,
|
LastSectionIndex = -3,
|
||||||
CalendarPopupIndex = -4
|
CalendarPopupIndex = -4
|
||||||
}; // duplicated from qdatetimeedit.h
|
}; // extending qdatetimeedit.h's equivalent
|
||||||
Q_DECLARE_FLAGS(Sections, Section)
|
Q_DECLARE_FLAGS(Sections, Section)
|
||||||
|
|
||||||
struct Q_CORE_EXPORT SectionNode {
|
struct Q_CORE_EXPORT SectionNode {
|
||||||
|
@ -2047,7 +2047,7 @@ QDateTime QDateTimeEditPrivate::stepBy(int sectionIndex, int steps, bool test) c
|
|||||||
// doesn't mean that we hit the floor in the other
|
// doesn't mean that we hit the floor in the other
|
||||||
if (steps > 0) {
|
if (steps > 0) {
|
||||||
setDigit(v, sectionIndex, min);
|
setDigit(v, sectionIndex, min);
|
||||||
if (!(sn.type & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong)) && sections & DateSectionMask) {
|
if (!(sn.type & DaySectionMask) && sections & DateSectionMask) {
|
||||||
const int daysInMonth = v.date().daysInMonth();
|
const int daysInMonth = v.date().daysInMonth();
|
||||||
if (v.date().day() < oldDay && v.date().day() < daysInMonth) {
|
if (v.date().day() < oldDay && v.date().day() < daysInMonth) {
|
||||||
const int adds = qMin(oldDay, daysInMonth);
|
const int adds = qMin(oldDay, daysInMonth);
|
||||||
@ -2062,7 +2062,7 @@ QDateTime QDateTimeEditPrivate::stepBy(int sectionIndex, int steps, bool test) c
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
setDigit(v, sectionIndex, max);
|
setDigit(v, sectionIndex, max);
|
||||||
if (!(sn.type & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong)) && sections & DateSectionMask) {
|
if (!(sn.type & DaySectionMask) && sections & DateSectionMask) {
|
||||||
const int daysInMonth = v.date().daysInMonth();
|
const int daysInMonth = v.date().daysInMonth();
|
||||||
if (v.date().day() < oldDay && v.date().day() < daysInMonth) {
|
if (v.date().day() < oldDay && v.date().day() < daysInMonth) {
|
||||||
const int adds = qMin(oldDay, daysInMonth);
|
const int adds = qMin(oldDay, daysInMonth);
|
||||||
@ -2080,7 +2080,7 @@ QDateTime QDateTimeEditPrivate::stepBy(int sectionIndex, int steps, bool test) c
|
|||||||
setDigit(v, sectionIndex, (steps > 0 ? localmax : localmin));
|
setDigit(v, sectionIndex, (steps > 0 ? localmax : localmin));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!test && oldDay != v.date().day() && !(sn.type & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong))) {
|
if (!test && oldDay != v.date().day() && !(sn.type & DaySectionMask)) {
|
||||||
// this should not happen when called from stepEnabled
|
// this should not happen when called from stepEnabled
|
||||||
cachedDay = qMax<int>(oldDay, cachedDay);
|
cachedDay = qMax<int>(oldDay, cachedDay);
|
||||||
}
|
}
|
||||||
@ -2272,15 +2272,15 @@ QDateTimeEdit::Sections QDateTimeEditPrivate::convertSections(QDateTimeParser::S
|
|||||||
ret |= QDateTimeEdit::SecondSection;
|
ret |= QDateTimeEdit::SecondSection;
|
||||||
if (s & QDateTimeParser::MinuteSection)
|
if (s & QDateTimeParser::MinuteSection)
|
||||||
ret |= QDateTimeEdit::MinuteSection;
|
ret |= QDateTimeEdit::MinuteSection;
|
||||||
if (s & (QDateTimeParser::Hour24Section|QDateTimeParser::Hour12Section))
|
if (s & (QDateTimeParser::HourSectionMask))
|
||||||
ret |= QDateTimeEdit::HourSection;
|
ret |= QDateTimeEdit::HourSection;
|
||||||
if (s & QDateTimeParser::AmPmSection)
|
if (s & QDateTimeParser::AmPmSection)
|
||||||
ret |= QDateTimeEdit::AmPmSection;
|
ret |= QDateTimeEdit::AmPmSection;
|
||||||
if (s & (QDateTimeParser::DaySection|QDateTimeParser::DayOfWeekSectionShort|QDateTimeParser::DayOfWeekSectionLong))
|
if (s & (QDateTimeParser::DaySectionMask))
|
||||||
ret |= QDateTimeEdit::DaySection;
|
ret |= QDateTimeEdit::DaySection;
|
||||||
if (s & QDateTimeParser::MonthSection)
|
if (s & QDateTimeParser::MonthSection)
|
||||||
ret |= QDateTimeEdit::MonthSection;
|
ret |= QDateTimeEdit::MonthSection;
|
||||||
if (s & (QDateTimeParser::YearSection|QDateTimeParser::YearSection2Digits))
|
if (s & (QDateTimeParser::YearSectionMask))
|
||||||
ret |= QDateTimeEdit::YearSection;
|
ret |= QDateTimeEdit::YearSection;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -69,7 +69,7 @@ class Q_WIDGETS_EXPORT QDateTimeEdit : public QAbstractSpinBox
|
|||||||
Q_PROPERTY(int sectionCount READ sectionCount)
|
Q_PROPERTY(int sectionCount READ sectionCount)
|
||||||
Q_PROPERTY(Qt::TimeSpec timeSpec READ timeSpec WRITE setTimeSpec)
|
Q_PROPERTY(Qt::TimeSpec timeSpec READ timeSpec WRITE setTimeSpec)
|
||||||
public:
|
public:
|
||||||
enum Section {
|
enum Section { // a sub-type of QDateTimeParser's like-named enum.
|
||||||
NoSection = 0x0000,
|
NoSection = 0x0000,
|
||||||
AmPmSection = 0x0001,
|
AmPmSection = 0x0001,
|
||||||
MSecSection = 0x0002,
|
MSecSection = 0x0002,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user