21 #include "calendarmodel_p.h"
23 #include <akonadi/changerecorder.h>
24 #include <akonadi/itemfetchscope.h>
25 #include <kcalcore/event.h>
26 #include <kcalcore/todo.h>
27 #include <kcalcore/journal.h>
30 #include <KIconLoader>
35 using namespace Akonadi;
37 static KCalCore::Incidence::Ptr incidence(
const Akonadi::Item &item )
41 item.
payload<KCalCore::Incidence::Ptr>() :
42 KCalCore::Incidence::Ptr();
45 static KCalCore::Event::Ptr event(
const Akonadi::Item &item )
49 item.
payload<KCalCore::Event::Ptr>() :
50 KCalCore::Event::Ptr();
57 item.
payload<KCalCore::Todo::Ptr>() :
58 KCalCore::Todo::Ptr();
61 static KCalCore::Journal::Ptr journal(
const Akonadi::Item &item )
65 item.
payload<KCalCore::Journal::Ptr>() :
66 KCalCore::Journal::Ptr();
69 class CalendarModel::Private
72 explicit Private( CalendarModel *qq )
78 CalendarModel *
const q;
83 d( new Private( this ) )
88 CalendarModel::~CalendarModel()
93 static KDateTime primaryDateForIncidence(
const Akonadi::Item &item )
95 if (
const KCalCore::Todo::Ptr t = todo( item ) ) {
96 return t->hasDueDate() ? t->dtDue() : KDateTime();
99 if (
const KCalCore::Event::Ptr e = event( item ) ) {
100 return ( !e->recurs() && !e->isMultiDay() ) ? e->dtStart() : KDateTime();
103 if (
const KCalCore::Journal::Ptr j = journal( item ) ) {
110 QVariant CalendarModel::entityData(
const Akonadi::Item &item,
int column,
int role )
const
112 const KCalCore::Incidence::Ptr inc = incidence( item );
118 case Qt::DecorationRole:
119 if ( column != Summary ) {
122 if ( inc->type() == KCalCore::IncidenceBase::TypeTodo ) {
123 return SmallIcon( QLatin1String(
"view-pim-tasks" ) );
125 if ( inc->type() == KCalCore::IncidenceBase::TypeJournal ) {
126 return SmallIcon( QLatin1String(
"view-pim-journal" ) );
128 if ( inc->type() == KCalCore::IncidenceBase::TypeEvent ) {
129 return SmallIcon( QLatin1String(
"view-calendar" ) );
131 return SmallIcon( QLatin1String(
"network-wired" ) );
133 case Qt::DisplayRole:
136 return inc->summary();
139 return inc->dtStart().toString();
142 return inc->dateTime( KCalCore::Incidence::RoleEndTimeZone ).toString();
145 if ( KCalCore::Todo::Ptr t = todo( item ) ) {
146 return t->dtDue().toString();
152 if ( KCalCore::Todo::Ptr t = todo( item ) ) {
153 return t->priority();
158 case PercentComplete:
159 if ( KCalCore::Todo::Ptr t = todo( item ) ) {
160 return t->percentComplete();
166 return primaryDateForIncidence( item ).toString();
178 return inc->summary();
181 return inc->dtStart().toUtc().dateTime();
184 return inc->dateTime( KCalCore::Incidence::RoleEndTimeZone ).toUtc().dateTime();
187 if ( KCalCore::Todo::Ptr t = todo( item ) ) {
188 return t->dtDue().toUtc().dateTime();
194 return primaryDateForIncidence( item ).toUtc().dateTime();
197 if ( KCalCore::Todo::Ptr t = todo( item ) ) {
198 return t->priority();
203 case PercentComplete:
204 if ( KCalCore::Todo::Ptr t = todo( item ) ) {
205 return t->percentComplete();
220 return inc->recurs();
230 int column,
int role )
const
238 return ItemColumnCount;
240 return CollectionColumnCount;
244 QVariant CalendarModel::entityHeaderData(
int section, Qt::Orientation orientation,
247 if ( role != Qt::DisplayRole || orientation != Qt::Horizontal ) {
254 return i18nc(
"@title:column calendar event summary",
"Summary" );
256 return i18nc(
"@title:column calendar event start date and time",
"Start Date and Time" );
258 return i18nc(
"@title:column calendar event end date and time",
"End Date and Time" );
260 return i18nc(
"@title:column calendar event type",
"Type" );
262 return i18nc(
"@title:column todo item due date and time",
"Due Date and Time" );
264 return i18nc(
"@title:column todo item priority",
"Priority" );
265 case PercentComplete:
266 return i18nc(
"@title:column todo item completion in percent",
"Complete" );
274 case CollectionTitle:
275 return i18nc(
"@title:column calendar title",
"Calendar" );