6#include "infinitecalendarviewmodel.h"
8InfiniteCalendarViewModel::InfiniteCalendarViewModel(
QObject *parent)
13void InfiniteCalendarViewModel::classBegin()
18void InfiniteCalendarViewModel::componentComplete()
24void InfiniteCalendarViewModel::setup()
38 firstDay = firstDay.
addDays((-m_datesToAdd * 7) / 2);
40 addWeekDates(
true, firstDay);
45 firstDay = firstDay.
addMonths(-m_datesToAdd / 2);
47 addMonthDates(
true, firstDay);
52 firstDay = firstDay.
addYears(-m_datesToAdd / 2);
54 addYearDates(
true, firstDay);
58 const int firstYear = ((floor(m_currentDate.
date().
year() / 10)) * 10) - 1;
60 firstDay = firstDay.
addYears(((-m_datesToAdd * 12) / 2) + 10);
62 addDecadeDates(
true, firstDay);
76 if (m_scale == MonthScale && role != StartDateRole) {
77 const QDateTime firstDay = m_firstDayOfMonthDates[idx.
row()];
80 case FirstDayOfMonthRole:
82 case SelectedMonthRole:
84 case SelectedYearRole:
95 case SelectedMonthRole:
97 case SelectedYearRole:
105int InfiniteCalendarViewModel::rowCount(
const QModelIndex &parent)
const
108 return m_startDates.length();
114 {StartDateRole, QByteArrayLiteral(
"startDate")},
115 {FirstDayOfMonthRole, QByteArrayLiteral(
"firstDay")},
116 {SelectedMonthRole, QByteArrayLiteral(
"selectedMonth")},
117 {SelectedYearRole, QByteArrayLiteral(
"selectedYear")},
121QDateTime InfiniteCalendarViewModel::currentDate()
const
123 return m_currentDate;
126void InfiniteCalendarViewModel::setCurrentDate(
const QDateTime ¤tDate)
128 m_currentDate = currentDate;
131QDateTime InfiniteCalendarViewModel::minimumDate()
const
133 return m_minimumDate;
136void InfiniteCalendarViewModel::setMinimumDate(
const QDateTime &minimumDate)
138 if (m_minimumDate == minimumDate) {
141 m_minimumDate = minimumDate;
142 Q_EMIT minimumDateChanged();
145QDateTime InfiniteCalendarViewModel::maximumDate()
const
147 return m_maximumDate;
150void InfiniteCalendarViewModel::setMaximumDate(
const QDateTime &maximumDate)
152 if (m_maximumDate == maximumDate) {
155 m_maximumDate = maximumDate;
156 Q_EMIT maximumDateChanged();
159void InfiniteCalendarViewModel::addDates(
bool atEnd,
const QDateTime startFrom)
163 addWeekDates(atEnd, startFrom);
166 addMonthDates(atEnd, startFrom);
169 addYearDates(atEnd, startFrom);
172 addDecadeDates(atEnd, startFrom);
177void InfiniteCalendarViewModel::addWeekDates(
bool atEnd,
const QDateTime &startFrom)
179 const int newRow = atEnd ? rowCount() : 0;
183 for (
int i = 0; i < m_datesToAdd; i++) {
184 QDateTime startDate = startFrom.
isValid() && i == 0 ? startFrom : atEnd ? m_startDates[rowCount() - 1].addDays(7) : m_startDates[0].addDays(-7);
191 m_startDates.append(startDate);
193 m_startDates.insert(0, startDate);
200void InfiniteCalendarViewModel::addMonthDates(
bool atEnd,
const QDateTime &startFrom)
204 const int newRow = atEnd ? rowCount() : 0;
206 for (
int i = 0; i < m_datesToAdd; i++) {
209 if (startFrom.
isValid() && i == 0) {
210 firstDay = startFrom;
212 firstDay = m_firstDayOfMonthDates[
newRow + startDates.
length() - 1].addMonths(1);
214 firstDay = m_firstDayOfMonthDates[0].addMonths(-1);
220 if (startDate >= firstDay) {
221 startDate = startDate.
addDays(-7);
225 if (m_maximumDate.
isValid() && startDate > m_maximumDate) {
228 m_firstDayOfMonthDates.append(firstDay);
229 startDates.
append(startDate);
231 m_firstDayOfMonthDates.insert(0, firstDay);
232 startDates.
insert(0, startDate);
239 m_startDates = m_startDates + startDates;
241 m_startDates = startDates + m_startDates;
247void InfiniteCalendarViewModel::addYearDates(
bool atEnd,
const QDateTime &startFrom)
249 const int newRow = atEnd ? rowCount() : 0;
253 for (
int i = 0; i < m_datesToAdd; i++) {
254 QDateTime startDate = startFrom.
isValid() && i == 0 ? startFrom : atEnd ? m_startDates[rowCount() - 1].addYears(1) : m_startDates[0].addYears(-1);
257 m_startDates.append(startDate);
259 m_startDates.insert(0, startDate);
266void InfiniteCalendarViewModel::addDecadeDates(
bool atEnd,
const QDateTime &startFrom)
268 const int newRow = atEnd ? rowCount() : 0;
272 for (
int i = 0; i < m_datesToAdd; i++) {
273 QDateTime startDate = startFrom.
isValid() && i == 0 ? startFrom : atEnd ? m_startDates[rowCount() - 1].addYears(10) : m_startDates[0].addYears(-10);
276 m_startDates.append(startDate);
278 m_startDates.insert(0, startDate);
285int InfiniteCalendarViewModel::datesToAdd()
const
290void InfiniteCalendarViewModel::setDatesToAdd(
int datesToAdd)
292 m_datesToAdd = datesToAdd;
293 Q_EMIT datesToAddChanged();
296int InfiniteCalendarViewModel::scale()
301void InfiniteCalendarViewModel::setScale(
int scale)
305 m_startDates.clear();
306 m_firstDayOfMonthDates.clear();
314#include "moc_infinitecalendarviewmodel.cpp"
void beginInsertRows(const QModelIndex &parent, int first, int last)
bool hasIndex(int row, int column, const QModelIndex &parent) const const
int dayOfWeek() const const
QDateTime startOfDay() const const
QDateTime addDays(qint64 ndays) const const
QDateTime addMonths(int nmonths) const const
QDateTime addYears(int nyears) const const
bool isValid() const const
void append(QList< T > &&value)
iterator insert(const_iterator before, parameter_type value)
qsizetype length() const const
Qt::DayOfWeek firstDayOfWeek() const const
QObject * parent() const const
QTestData & newRow(const char *dataTag)