diff --git a/src/declarativeimports/calendar/daysmodel.h b/src/declarativeimports/calendar/daysmodel.h --- a/src/declarativeimports/calendar/daysmodel.h +++ b/src/declarativeimports/calendar/daysmodel.h @@ -37,6 +37,8 @@ isCurrent = Qt::UserRole + 1, //containsHolidayItems, containsEventItems, + containsMajorEventItems, + containsMinorEventItems, //containsTodoItems, //containsJournalItems, dayNumber, @@ -69,6 +71,8 @@ private: QModelIndex indexForDate(const QDate &date); + bool hasMajorEventAtDate(const QDate &date) const; + bool hasMinorEventAtDate(const QDate &date) const; EventPluginsManager *m_pluginsManager = nullptr; QList *m_data = nullptr; diff --git a/src/declarativeimports/calendar/daysmodel.cpp b/src/declarativeimports/calendar/daysmodel.cpp --- a/src/declarativeimports/calendar/daysmodel.cpp +++ b/src/declarativeimports/calendar/daysmodel.cpp @@ -72,6 +72,10 @@ return currentData.isCurrent; case containsEventItems: return m_eventsData.contains(currentDate); + case containsMajorEventItems: + return hasMajorEventAtDate(currentDate); + case containsMinorEventItems: + return hasMinorEventAtDate(currentDate); case dayNumber: return currentData.dayNumber; case monthNumber: @@ -112,8 +116,9 @@ m_agendaNeedsUpdate = true; } - // only the containsEventItems role may have changed - emit dataChanged(index(0, 0), index(m_data->count() - 1, 0), {containsEventItems}); + // only the containsEventItems roles may have changed + emit dataChanged(index(0, 0), index(m_data->count() - 1, 0), + {containsEventItems, containsMajorEventItems, containsMinorEventItems}); Q_EMIT agendaUpdated(QDate::currentDate()); } @@ -138,7 +143,8 @@ Q_FOREACH (const QDate date, updatesList) { const QModelIndex changedIndex = indexForDate(date); if (changedIndex.isValid()) { - Q_EMIT dataChanged(changedIndex, changedIndex, {containsEventItems}); + Q_EMIT dataChanged(changedIndex, changedIndex, + {containsEventItems, containsMajorEventItems, containsMinorEventItems}); } Q_EMIT agendaUpdated(date); } @@ -164,7 +170,8 @@ Q_FOREACH (const QDate date, updatesList) { const QModelIndex changedIndex = indexForDate(date); if (changedIndex.isValid()) { - Q_EMIT dataChanged(changedIndex, changedIndex, {containsEventItems}); + Q_EMIT dataChanged(changedIndex, changedIndex, + {containsEventItems, containsMajorEventItems, containsMinorEventItems}); } Q_EMIT agendaUpdated(date); } @@ -210,6 +217,30 @@ return createIndex(daysTo, 0); } +bool DaysModel::hasMajorEventAtDate(const QDate &date) const +{ + auto it = m_eventsData.find(date); + while (it != m_eventsData.end() && it.key() == date) { + if (!it.value().isMinor()) { + return true; + } + ++it; + } + return false; +} + +bool DaysModel::hasMinorEventAtDate(const QDate &date) const +{ + auto it = m_eventsData.find(date); + while (it != m_eventsData.end() && it.key() == date) { + if (it.value().isMinor()) { + return true; + } + ++it; + } + return false; +} + void DaysModel::setPluginsManager(QObject *manager) { EventPluginsManager *m = qobject_cast(manager); @@ -242,6 +273,8 @@ return { {isCurrent, "isCurrent"}, {containsEventItems, "containsEventItems"}, + {containsMajorEventItems, "containsMajorEventItems"}, + {containsMinorEventItems, "containsMinorEventItems"}, {dayNumber, "dayNumber"}, {monthNumber, "monthNumber"}, {yearNumber, "yearNumber"} diff --git a/src/declarativeimports/calendar/qml/DayDelegate.qml b/src/declarativeimports/calendar/qml/DayDelegate.qml --- a/src/declarativeimports/calendar/qml/DayDelegate.qml +++ b/src/declarativeimports/calendar/qml/DayDelegate.qml @@ -102,7 +102,7 @@ } Loader { - active: model.containsEventItems !== undefined && model.containsEventItems + active: model.containsMajorEventItems !== undefined && model.containsMajorEventItems anchors.bottom: parent.bottom anchors.right: parent.right height: parent.height / 3