• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepimlibs API Reference
  • KDE Home
  • Contact Us
 

akonadi

  • sources
  • kde-4.14
  • kdepimlibs
  • akonadi
  • calendar
calendarmodel.cpp
1 /*
2  Copyright (c) 2008 Bruno Virlet <bvirlet@kdemail.net>
3  2009 KDAB; Author: Frank Osterfeld <osterfeld@kde.org>
4 
5  This library is free software; you can redistribute it and/or modify it
6  under the terms of the GNU Library General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or (at your
8  option) any later version.
9 
10  This library is distributed in the hope that it will be useful, but WITHOUT
11  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13  License for more details.
14 
15  You should have received a copy of the GNU Library General Public License
16  along with this library; see the file COPYING.LIB. If not, write to the
17  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18  02110-1301, USA.
19 */
20 
21 #include "calendarmodel_p.h"
22 
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>
28 
29 #include <KLocalizedString>
30 #include <KIconLoader>
31 
32 #include <QPixmap>
33 
34 using namespace Akonadi;
35 
36 static KCalCore::Incidence::Ptr incidence(const Akonadi::Item &item)
37 {
38  return
39  item.hasPayload<KCalCore::Incidence::Ptr>() ?
40  item.payload<KCalCore::Incidence::Ptr>() :
41  KCalCore::Incidence::Ptr();
42 }
43 
44 static KCalCore::Todo::Ptr todo(const Akonadi::Item &item)
45 {
46  return
47  item.hasPayload<KCalCore::Todo::Ptr>() ?
48  item.payload<KCalCore::Todo::Ptr>() :
49  KCalCore::Todo::Ptr();
50 }
51 
52 class CalendarModel::Private
53 {
54 public:
55  Private()
56  {
57  }
58 
59  QWeakPointer<CalendarModel> m_weakPointer;
60 };
61 
62 CalendarModel::CalendarModel(Akonadi::ChangeRecorder *monitor)
63  : EntityTreeModel(monitor),
64  d(new Private())
65 {
66  monitor->itemFetchScope().fetchAllAttributes(true);
67 }
68 
69 CalendarModel::Ptr CalendarModel::create(ChangeRecorder *monitor)
70 {
71  CalendarModel *model = new CalendarModel(monitor);
72  CalendarModel::Ptr modelPtr = CalendarModel::Ptr(model);
73  model->setWeakPointer(modelPtr.toWeakRef());
74  return modelPtr;
75 }
76 
77 CalendarModel::~CalendarModel()
78 {
79  delete d;
80 }
81 
82 QWeakPointer<CalendarModel> CalendarModel::weakPointer() const
83 {
84  return d->m_weakPointer;
85 }
86 
87 void CalendarModel::setWeakPointer(const QWeakPointer<CalendarModel> &weakPointer)
88 {
89  d->m_weakPointer = weakPointer;
90 }
91 
92 QVariant CalendarModel::entityData(const Akonadi::Item &item, int column, int role) const
93 {
94  const KCalCore::Incidence::Ptr inc = incidence(item);
95  if (!inc) {
96  return QVariant();
97  }
98 
99  switch (role) {
100  case Qt::DecorationRole:
101  if (column != Summary) {
102  return QVariant();
103  }
104  if (inc->type() == KCalCore::IncidenceBase::TypeTodo) {
105  return SmallIcon(QLatin1String("view-pim-tasks"));
106  }
107  if (inc->type() == KCalCore::IncidenceBase::TypeJournal) {
108  return SmallIcon(QLatin1String("view-pim-journal"));
109  }
110  if (inc->type() == KCalCore::IncidenceBase::TypeEvent) {
111  return SmallIcon(QLatin1String("view-calendar"));
112  }
113  return SmallIcon(QLatin1String("network-wired"));
114 
115  case Qt::DisplayRole:
116  switch (column) {
117  case Summary:
118  return inc->summary();
119 
120  case DateTimeStart:
121  return inc->dtStart().toString();
122 
123  case DateTimeEnd:
124  return inc->dateTime(KCalCore::Incidence::RoleEndTimeZone).toString();
125 
126  case DateTimeDue:
127  if (KCalCore::Todo::Ptr t = todo(item)) {
128  return t->dtDue().toString();
129  } else {
130  return QVariant();
131  }
132 
133  case Priority:
134  if (KCalCore::Todo::Ptr t = todo(item)) {
135  return t->priority();
136  } else {
137  return QVariant();
138  }
139 
140  case PercentComplete:
141  if (KCalCore::Todo::Ptr t = todo(item)) {
142  return t->percentComplete();
143  } else {
144  return QVariant();
145  }
146 
147  case Type:
148  return inc->typeStr();
149  default:
150  break;
151  }
152 
153  case SortRole:
154  switch (column) {
155  case Summary:
156  return inc->summary();
157 
158  case DateTimeStart:
159  return inc->dtStart().toUtc().dateTime();
160 
161  case DateTimeEnd:
162  return inc->dateTime(KCalCore::Incidence::RoleEndTimeZone).toUtc().dateTime();
163 
164  case DateTimeDue:
165  if (KCalCore::Todo::Ptr t = todo(item)) {
166  return t->dtDue().toUtc().dateTime();
167  } else {
168  return QVariant();
169  }
170 
171  case Priority:
172  if (KCalCore::Todo::Ptr t = todo(item)) {
173  return t->priority();
174  } else {
175  return QVariant();
176  }
177 
178  case PercentComplete:
179  if (KCalCore::Todo::Ptr t = todo(item)) {
180  return t->percentComplete();
181  } else {
182  return QVariant();
183  }
184 
185  case Type:
186  return inc->type();
187 
188  default:
189  break;
190  }
191 
192  return QVariant();
193 
194  case RecursRole:
195  return inc->recurs();
196 
197  default:
198  return QVariant();
199  }
200 
201  return QVariant();
202 }
203 
204 QVariant CalendarModel::entityData(const Akonadi::Collection &collection,
205  int column, int role) const
206 {
207  return EntityTreeModel::entityData(collection, column, role);
208 }
209 
210 int CalendarModel::entityColumnCount(EntityTreeModel::HeaderGroup headerSet) const
211 {
212  if (headerSet == EntityTreeModel::ItemListHeaders) {
213  return ItemColumnCount;
214  } else {
215  return CollectionColumnCount;
216  }
217 }
218 
219 QVariant CalendarModel::entityHeaderData(int section, Qt::Orientation orientation,
220  int role, EntityTreeModel::HeaderGroup headerSet) const
221 {
222  if (role != Qt::DisplayRole || orientation != Qt::Horizontal) {
223  return QVariant();
224  }
225 
226  if (headerSet == EntityTreeModel::ItemListHeaders) {
227  switch (section) {
228  case Summary:
229  return i18nc("@title:column calendar event summary", "Summary");
230  case DateTimeStart:
231  return i18nc("@title:column calendar event start date and time", "Start Date and Time");
232  case DateTimeEnd:
233  return i18nc("@title:column calendar event end date and time", "End Date and Time");
234  case Type:
235  return i18nc("@title:column calendar event type", "Type");
236  case DateTimeDue:
237  return i18nc("@title:column todo item due date and time", "Due Date and Time");
238  case Priority:
239  return i18nc("@title:column todo item priority", "Priority");
240  case PercentComplete:
241  return i18nc("@title:column todo item completion in percent", "Complete");
242  default:
243  return QVariant();
244  }
245  }
246 
247  if (headerSet == EntityTreeModel::CollectionTreeHeaders) {
248  switch (section) {
249  case CollectionTitle:
250  return i18nc("@title:column calendar title", "Calendar");
251  default:
252  return QVariant();
253  }
254  }
255  return QVariant();
256 }
257 
Akonadi::ItemFetchScope::fetchAllAttributes
void fetchAllAttributes(bool fetch=true)
Sets whether all available attributes should be fetched.
Definition: itemfetchscope.cpp:94
Akonadi::EntityTreeModel::entityData
virtual QVariant entityData(const Item &item, int column, int role=Qt::DisplayRole) const
Provided for convenience of subclasses.
Definition: entitytreemodel.cpp:173
Akonadi::Collection
Represents a collection of PIM items.
Definition: collection.h:75
Akonadi::EntityTreeModel::CollectionTreeHeaders
Header information for a collection-only tree.
Definition: entitytreemodel.h:385
Akonadi::EntityTreeModel::HeaderGroup
HeaderGroup
Describes what header information the model shall return.
Definition: entitytreemodel.h:383
Akonadi::Monitor::itemFetchScope
ItemFetchScope & itemFetchScope()
Returns the item fetch scope.
Definition: monitor.cpp:237
QSharedPointer
Akonadi::EntityTreeModel::ItemListHeaders
Header information for a list of items.
Definition: entitytreemodel.h:386
QSharedPointer::toWeakRef
QWeakPointer< T > toWeakRef() const
QLatin1String
Akonadi::EntityTreeModel
A model for collections and items together.
Definition: entitytreemodel.h:318
QWeakPointer< CalendarModel >
Akonadi::ChangeRecorder
Records and replays change notification.
Definition: changerecorder.h:47
QVariant
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:38:02 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

akonadi

Skip menu "akonadi"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • Modules
  • Related Pages

kdepimlibs API Reference

Skip menu "kdepimlibs API Reference"
  • akonadi
  •   contact
  •   kmime
  •   socialutils
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal