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

KAlarm Library

  • kalarmcal
alarmtext.cpp
1 /*
2  * alarmtext.cpp - text/email alarm text conversion
3  * This file is part of kalarmcal library, which provides access to KAlarm
4  * calendar data.
5  * Copyright © 2004,2005,2007-2013 by David Jarvie <djarvie@kde.org>
6  *
7  * This library is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU Library General Public License as published
9  * by the Free Software Foundation; either version 2 of the License, or (at
10  * your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
15  * License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB. If not, write to the
19  * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20  * MA 02110-1301, USA.
21  */
22 
23 #include "alarmtext.h"
24 
25 #include "kaevent.h"
26 
27 #ifdef KALARMCAL_USE_KRESOURCES
28 #include <kcal/todo.h>
29 #endif
30 #include <klocale.h>
31 #include <klocalizedstring.h>
32 #include <kglobal.h>
33 #include <QStringList>
34 
35 namespace KAlarmCal
36 {
37 
38 class AlarmText::Private
39 {
40  public:
41  enum Type { None, Email, Script, Todo };
42  QString displayText() const;
43  void clear();
44  static void initialise();
45  static void setUpTranslations();
46  static int emailHeaderCount(const QStringList&);
47  static QString todoTitle(const QString& text);
48 
49  static QString mFromPrefix; // translated header prefixes
50  static QString mToPrefix;
51  static QString mCcPrefix;
52  static QString mDatePrefix;
53  static QString mSubjectPrefix;
54  static QString mTitlePrefix;
55  static QString mLocnPrefix;
56  static QString mDuePrefix;
57  static QString mFromPrefixEn; // untranslated header prefixes
58  static QString mToPrefixEn;
59  static QString mCcPrefixEn;
60  static QString mDatePrefixEn;
61  static QString mSubjectPrefixEn;
62  static bool mInitialised;
63 
64  QString mBody, mFrom, mTo, mCc, mTime, mSubject;
65  unsigned long mKMailSerialNum; // if email, message's KMail serial number, else 0
66  Type mType;
67  bool mIsEmail;
68 };
69 
70 QString AlarmText::Private::mFromPrefix;
71 QString AlarmText::Private::mToPrefix;
72 QString AlarmText::Private::mCcPrefix;
73 QString AlarmText::Private::mDatePrefix;
74 QString AlarmText::Private::mSubjectPrefix;
75 QString AlarmText::Private::mTitlePrefix;
76 QString AlarmText::Private::mLocnPrefix;
77 QString AlarmText::Private::mDuePrefix;
78 QString AlarmText::Private::mFromPrefixEn;
79 QString AlarmText::Private::mToPrefixEn;
80 QString AlarmText::Private::mCcPrefixEn;
81 QString AlarmText::Private::mDatePrefixEn;
82 QString AlarmText::Private::mSubjectPrefixEn;
83 bool AlarmText::Private::mInitialised = false;
84 
85 void AlarmText::Private::initialise()
86 {
87  if (!mInitialised)
88  {
89  mInitialised = true;
90  mFromPrefixEn = QLatin1String("From:");
91  mToPrefixEn = QLatin1String("To:");
92  mCcPrefixEn = QLatin1String("Cc:");
93  mDatePrefixEn = QLatin1String("Date:");
94  mSubjectPrefixEn = QLatin1String("Subject:");
95  }
96 }
97 
98 AlarmText::AlarmText(const QString& text)
99  : d(new Private)
100 {
101  Private::initialise();
102  setText(text);
103 }
104 
105 AlarmText::AlarmText(const AlarmText& other)
106  : d(new Private(*other.d))
107 {
108 }
109 
110 AlarmText::~AlarmText()
111 {
112  delete d;
113 }
114 
115 AlarmText& AlarmText::operator=(const AlarmText& other)
116 {
117  if (&other != this)
118  *d = *other.d;
119  return *this;
120 }
121 
122 void AlarmText::setText(const QString& text)
123 {
124  d->clear();
125  d->mBody = text;
126  if (text.startsWith(QLatin1String("#!")))
127  d->mType = Private::Script;
128 }
129 
130 void AlarmText::setScript(const QString& text)
131 {
132  setText(text);
133  d->mType = Private::Script;
134 }
135 
136 void AlarmText::setEmail(const QString& to, const QString& from, const QString& cc, const QString& time,
137  const QString& subject, const QString& body, unsigned long kmailSerialNumber)
138 {
139  d->clear();
140  d->mType = Private::Email;
141  d->mTo = to;
142  d->mFrom = from;
143  d->mCc = cc;
144  d->mTime = time;
145  d->mSubject = subject;
146  d->mBody = body;
147  d->mKMailSerialNum = kmailSerialNumber;
148 }
149 
150 #ifndef KALARMCAL_USE_KRESOURCES
151 void AlarmText::setTodo(const KCalCore::Todo::Ptr& todo)
152 #else
153 void AlarmText::setTodo(const KCal::Todo* todo)
154 #endif
155 {
156  d->clear();
157  d->mType = Private::Todo;
158  d->mSubject = todo->summary();
159  d->mBody = todo->description();
160  d->mTo = todo->location();
161  if (todo->hasDueDate())
162  {
163  KDateTime due = todo->dtDue(false); // fetch the next due date
164  if (todo->hasStartDate() && todo->dtStart() != due)
165  {
166  d->mTime = todo->allDay() ? KGlobal::locale()->formatDate(due.date(), KLocale::ShortDate)
167  : KGlobal::locale()->formatDateTime(due.dateTime());
168  }
169  }
170 }
171 
172 /******************************************************************************
173 * Return the text for a text message alarm, in display format.
174 */
175 QString AlarmText::displayText() const
176 {
177  return d->displayText();
178 }
179 
180 QString AlarmText::Private::displayText() const
181 {
182  QString text;
183  switch (mType)
184  {
185  case Email:
186  // Format the email into a text alarm
187  setUpTranslations();
188  text = mFromPrefix + QLatin1Char('\t') + mFrom + QLatin1Char('\n');
189  text += mToPrefix + QLatin1Char('\t') + mTo + QLatin1Char('\n');
190  if (!mCc.isEmpty())
191  text += mCcPrefix + QLatin1Char('\t') + mCc + QLatin1Char('\n');
192  if (!mTime.isEmpty())
193  text += mDatePrefix + QLatin1Char('\t') + mTime + QLatin1Char('\n');
194  text += mSubjectPrefix + QLatin1Char('\t') + mSubject;
195  if (!mBody.isEmpty())
196  {
197  text += QLatin1String("\n\n");
198  text += mBody;
199  }
200  break;
201  case Todo:
202  // Format the todo into a text alarm
203  setUpTranslations();
204  if (!mSubject.isEmpty())
205  text = mTitlePrefix + QLatin1Char('\t') + mSubject + QLatin1Char('\n');
206  if (!mTo.isEmpty())
207  text += mLocnPrefix + QLatin1Char('\t') + mTo + QLatin1Char('\n');
208  if (!mTime.isEmpty())
209  text += mDuePrefix + QLatin1Char('\t') + mTime + QLatin1Char('\n');
210  if (!mBody.isEmpty())
211  {
212  if (!text.isEmpty())
213  text += QLatin1Char('\n');
214  text += mBody;
215  }
216  break;
217  default:
218  break;
219  }
220  return !text.isEmpty() ? text : mBody;
221 }
222 
223 QString AlarmText::to() const
224 {
225  return (d->mType == Private::Email) ? d->mTo : QString();
226 }
227 
228 QString AlarmText::from() const
229 {
230  return (d->mType == Private::Email) ? d->mFrom : QString();
231 }
232 
233 QString AlarmText::cc() const
234 {
235  return (d->mType == Private::Email) ? d->mCc : QString();
236 }
237 
238 QString AlarmText::time() const
239 {
240  return (d->mType == Private::Email) ? d->mTime : QString();
241 }
242 
243 QString AlarmText::subject() const
244 {
245  return (d->mType == Private::Email) ? d->mSubject : QString();
246 }
247 
248 QString AlarmText::body() const
249 {
250  return (d->mType == Private::Email) ? d->mBody : QString();
251 }
252 
253 QString AlarmText::summary() const
254 {
255  return (d->mType == Private::Todo) ? d->mSubject : QString();
256 }
257 
258 QString AlarmText::location() const
259 {
260  return (d->mType == Private::Todo) ? d->mTo : QString();
261 }
262 
263 QString AlarmText::due() const
264 {
265  return (d->mType == Private::Todo) ? d->mTime : QString();
266 }
267 
268 QString AlarmText::description() const
269 {
270  return (d->mType == Private::Todo) ? d->mBody : QString();
271 }
272 
273 /******************************************************************************
274 * Return whether there is any text.
275 */
276 bool AlarmText::isEmpty() const
277 {
278  if (!d->mBody.isEmpty())
279  return false;
280  if (d->mType != Private::Email)
281  return true;
282  return d->mFrom.isEmpty() && d->mTo.isEmpty() && d->mCc.isEmpty() && d->mTime.isEmpty() && d->mSubject.isEmpty();
283 }
284 
285 bool AlarmText::isEmail() const
286 {
287  return d->mType == Private::Email;
288 }
289 
290 bool AlarmText::isScript() const
291 {
292  return d->mType == Private::Script;
293 }
294 
295 bool AlarmText::isTodo() const
296 {
297  return d->mType == Private::Todo;
298 }
299 
300 unsigned long AlarmText::kmailSerialNumber() const
301 {
302  return d->mKMailSerialNum;
303 }
304 
305 /******************************************************************************
306 * Return the alarm summary text for either single line or tooltip display.
307 * The maximum number of line returned is determined by 'maxLines'.
308 * If 'truncated' is non-null, it will be set true if the text returned has been
309 * truncated, other than to strip a trailing newline.
310 */
311 QString AlarmText::summary(const KAEvent& event, int maxLines, bool* truncated)
312 {
313  static const QRegExp localfile(QLatin1String("^file:/+"));
314  QString text;
315  switch (event.actionSubType())
316  {
317  case KAEvent::AUDIO:
318  text = event.audioFile();
319  if (localfile.indexIn(text) >= 0)
320  text = text.mid(localfile.matchedLength() - 1);
321  break;
322  case KAEvent::EMAIL:
323  text = event.emailSubject();
324  break;
325  case KAEvent::COMMAND:
326  text = event.cleanText();
327  if (localfile.indexIn(text) >= 0)
328  text = text.mid(localfile.matchedLength() - 1);
329  break;
330  case KAEvent::FILE:
331  text = event.cleanText();
332  break;
333  case KAEvent::MESSAGE:
334  {
335  text = event.cleanText();
336  // If the message is the text of an email, return its headers or just subject line
337  QString subject = emailHeaders(text, (maxLines <= 1));
338  if (!subject.isNull())
339  {
340  if (truncated)
341  *truncated = true;
342  return subject;
343  }
344  if (maxLines == 1)
345  {
346  // If the message is the text of a todo, return either the
347  // title/description or the whole text.
348  subject = Private::todoTitle(text);
349  if (!subject.isEmpty())
350  {
351  if (truncated)
352  *truncated = true;
353  return subject;
354  }
355  }
356  break;
357  }
358  }
359  if (truncated)
360  *truncated = false;
361  if (text.count(QLatin1Char('\n')) < maxLines)
362  return text;
363  int newline = -1;
364  for (int i = 0; i < maxLines; ++i)
365  {
366  newline = text.indexOf(QLatin1Char('\n'), newline + 1);
367  if (newline < 0)
368  return text; // not truncated after all !?!
369  }
370  if (newline == static_cast<int>(text.length()) - 1)
371  return text.left(newline); // text ends in newline
372  if (truncated)
373  *truncated = true;
374  return text.left(newline + (maxLines <= 1 ? 0 : 1)) + QLatin1String("...");
375 }
376 
377 /******************************************************************************
378 * Check whether a text is an email.
379 */
380 bool AlarmText::checkIfEmail(const QString& text)
381 {
382  QStringList lines = text.split(QLatin1Char('\n'), QString::SkipEmptyParts);
383  return Private::emailHeaderCount(lines);
384 }
385 
386 /******************************************************************************
387 * Check whether a text is an email, and if so return its headers or optionally
388 * only its subject line.
389 * Reply = headers/subject line, or QString() if not the text of an email.
390 */
391 QString AlarmText::emailHeaders(const QString& text, bool subjectOnly)
392 {
393  const QStringList lines = text.split(QLatin1Char('\n'), QString::SkipEmptyParts);
394  int n = Private::emailHeaderCount(lines);
395  if (!n)
396  return QString();
397  if (subjectOnly)
398  return lines[n-1].mid(Private::mSubjectPrefix.length()).trimmed();
399  QString h = lines[0];
400  for (int i = 1; i < n; ++i)
401  {
402  h += QLatin1Char('\n');
403  h += lines[i];
404  }
405  return h;
406 }
407 
408 /******************************************************************************
409 * Translate an alarm calendar text to a display text.
410 * Translation is needed for email texts, since the alarm calendar stores
411 * untranslated email prefixes.
412 * 'email' is set to indicate whether it is an email text.
413 */
414 QString AlarmText::fromCalendarText(const QString& text, bool& email)
415 {
416  Private::initialise();
417  const QStringList lines = text.split(QLatin1Char('\n'), QString::SkipEmptyParts);
418  int maxn = lines.count();
419  if (maxn >= 4
420  && lines[0].startsWith(Private::mFromPrefixEn)
421  && lines[1].startsWith(Private::mToPrefixEn))
422  {
423  int n = 2;
424  if (lines[2].startsWith(Private::mCcPrefixEn))
425  ++n;
426  if (maxn > n + 1
427  && lines[n].startsWith(Private::mDatePrefixEn)
428  && lines[n+1].startsWith(Private::mSubjectPrefixEn))
429  {
430  Private::setUpTranslations();
431  QString dispText;
432  dispText = Private::mFromPrefix + lines[0].mid(Private::mFromPrefixEn.length()) + QLatin1Char('\n');
433  dispText += Private::mToPrefix + lines[1].mid(Private::mToPrefixEn.length()) + QLatin1Char('\n');
434  if (n == 3)
435  dispText += Private::mCcPrefix + lines[2].mid(Private::mCcPrefixEn.length()) + QLatin1Char('\n');
436  dispText += Private::mDatePrefix + lines[n].mid(Private::mDatePrefixEn.length()) + QLatin1Char('\n');
437  dispText += Private::mSubjectPrefix + lines[n+1].mid(Private::mSubjectPrefixEn.length());
438  int i = text.indexOf(Private::mSubjectPrefixEn);
439  i = text.indexOf(QLatin1Char('\n'), i);
440  if (i > 0)
441  dispText += text.mid(i);
442  email = true;
443  return dispText;
444  }
445  }
446  email = false;
447  return text;
448 }
449 
450 /******************************************************************************
451 * Return the text for a text message alarm, in alarm calendar format.
452 * (The prefix strings are untranslated in the calendar.)
453 */
454 QString AlarmText::toCalendarText(const QString& text)
455 {
456  Private::setUpTranslations();
457  const QStringList lines = text.split(QLatin1Char('\n'), QString::SkipEmptyParts);
458  int maxn = lines.count();
459  if (maxn >= 4
460  && lines[0].startsWith(Private::mFromPrefix)
461  && lines[1].startsWith(Private::mToPrefix))
462  {
463  int n = 2;
464  if (lines[2].startsWith(Private::mCcPrefix))
465  ++n;
466  if (maxn > n + 1
467  && lines[n].startsWith(Private::mDatePrefix)
468  && lines[n+1].startsWith(Private::mSubjectPrefix))
469  {
470  // Format the email into a text alarm
471  QString calText;
472  calText = Private::mFromPrefixEn + lines[0].mid(Private::mFromPrefix.length()) + QLatin1Char('\n');
473  calText += Private::mToPrefixEn + lines[1].mid(Private::mToPrefix.length()) + QLatin1Char('\n');
474  if (n == 3)
475  calText += Private::mCcPrefixEn + lines[2].mid(Private::mCcPrefix.length()) + QLatin1Char('\n');
476  calText += Private::mDatePrefixEn + lines[n].mid(Private::mDatePrefix.length()) + QLatin1Char('\n');
477  calText += Private::mSubjectPrefixEn + lines[n+1].mid(Private::mSubjectPrefix.length());
478  int i = text.indexOf(Private::mSubjectPrefix);
479  i = text.indexOf(QLatin1Char('\n'), i);
480  if (i > 0)
481  calText += text.mid(i);
482  return calText;
483  }
484  }
485  return text;
486 }
487 
488 void AlarmText::Private::clear()
489 {
490  mType = None;
491  mBody.clear();
492  mTo.clear();
493  mFrom.clear();
494  mCc.clear();
495  mTime.clear();
496  mSubject.clear();
497  mKMailSerialNum = 0;
498 }
499 
500 /******************************************************************************
501 * Set up messages used by executeDropEvent() and emailHeaders().
502 */
503 void AlarmText::Private::setUpTranslations()
504 {
505  initialise();
506  if (mFromPrefix.isNull())
507  {
508  mFromPrefix = i18nc("@info/plain 'From' email address", "From:");
509  mToPrefix = i18nc("@info/plain Email addressee", "To:");
510  mCcPrefix = i18nc("@info/plain Copy-to in email headers", "Cc:");
511  mDatePrefix = i18nc("@info/plain", "Date:");
512  mSubjectPrefix = i18nc("@info/plain Email subject", "Subject:");
513  // Todo prefixes
514  mTitlePrefix = i18nc("@info/plain Todo calendar item's title field", "To-do:");
515  mLocnPrefix = i18nc("@info/plain Todo calendar item's location field", "Location:");
516  mDuePrefix = i18nc("@info/plain Todo calendar item's due date/time", "Due:");
517  }
518 }
519 
520 /******************************************************************************
521 * Check whether a text is an email.
522 * Reply = number of email header lines, or 0 if not an email.
523 */
524 int AlarmText::Private::emailHeaderCount(const QStringList& lines)
525 {
526  setUpTranslations();
527  int maxn = lines.count();
528  if (maxn >= 4
529  && lines[0].startsWith(mFromPrefix)
530  && lines[1].startsWith(mToPrefix))
531  {
532  int n = 2;
533  if (lines[2].startsWith(mCcPrefix))
534  ++n;
535  if (maxn > n + 1
536  && lines[n].startsWith(mDatePrefix)
537  && lines[n+1].startsWith(mSubjectPrefix))
538  return n+2;
539  }
540  return 0;
541 }
542 
543 /******************************************************************************
544 * Return the Todo title line, if the text is for a Todo.
545 */
546 QString AlarmText::Private::todoTitle(const QString& text)
547 {
548  setUpTranslations();
549  const QStringList lines = text.split(QLatin1Char('\n'), QString::SkipEmptyParts);
550  int n;
551  for (n = 0; n < lines.count() && lines[n].contains(QLatin1Char('\t')); ++n) ;
552  if (!n || n > 3)
553  return QString();
554  QString title;
555  int i = 0;
556  if (lines[i].startsWith(mTitlePrefix + QLatin1Char('\t')))
557  {
558  title = lines[i].mid(mTitlePrefix.length()).trimmed();
559  ++i;
560  }
561  if (i < n && lines[i].startsWith(mLocnPrefix + QLatin1Char('\t')))
562  ++i;
563  if (i < n && lines[i].startsWith(mDuePrefix + QLatin1Char('\t')))
564  ++i;
565  if (i == n)
566  {
567  // It's a Todo text
568  if (!title.isEmpty())
569  return title;
570  if (n < lines.count())
571  return lines[n];
572  }
573  return QString();
574 }
575 
576 } // namespace KAlarmCal
577 
578 // vim: et sw=4:
KAlarmCal::AlarmText::summary
QString summary() const
Return the summary text for a todo.
Definition: alarmtext.cpp:253
KAlarmCal::AlarmText::cc
QString cc() const
Return the 'Cc' header parameter for an email alarm.
Definition: alarmtext.cpp:233
KAlarmCal::AlarmText::displayText
QString displayText() const
Return the text for a text message alarm, in display format.
Definition: alarmtext.cpp:175
KAlarmCal::AlarmText::fromCalendarText
static QString fromCalendarText(const QString &text, bool &email)
Translate an alarm calendar text to a display text.
Definition: alarmtext.cpp:414
KAlarmCal::AlarmText::isEmpty
bool isEmpty() const
Return whether there is any text.
Definition: alarmtext.cpp:276
KAlarmCal::AlarmText::subject
QString subject() const
Return the 'Subject' header parameter for an email alarm.
Definition: alarmtext.cpp:243
KAlarmCal::KAEvent::COMMAND
execute a command
Definition: kaevent.h:260
KAlarmCal::AlarmText::location
QString location() const
Return the location text for a todo.
Definition: alarmtext.cpp:258
KAlarmCal::AlarmText::time
QString time() const
Return the 'Date' header parameter for an email alarm.
Definition: alarmtext.cpp:238
KAlarmCal::AlarmText::description
QString description() const
Return the description text for a todo.
Definition: alarmtext.cpp:268
KAlarmCal::CalEvent::Type
Type
The category of an event, indicated by the middle part of its UID.
Definition: kacalendar.h:155
KAlarmCal::AlarmText::emailHeaders
static QString emailHeaders(const QString &text, bool subjectOnly)
Check whether a text is an email (with at least To and From headers), and if so return its headers or...
Definition: alarmtext.cpp:391
KAlarmCal::AlarmText::isTodo
bool isTodo() const
Return whether the instance contains the text of a todo.
Definition: alarmtext.cpp:295
KAlarmCal::AlarmText::toCalendarText
static QString toCalendarText(const QString &text)
Return the text for an alarm message text, in alarm calendar format.
Definition: alarmtext.cpp:454
KAlarmCal::AlarmText::kmailSerialNumber
unsigned long kmailSerialNumber() const
Return the kmail serial number of an email.
Definition: alarmtext.cpp:300
KAlarmCal::AlarmText::isScript
bool isScript() const
Return whether the instance contains the text of a script.
Definition: alarmtext.cpp:290
KAlarmCal::KAEvent::AUDIO
play an audio file
Definition: kaevent.h:262
KAlarmCal::AlarmText::due
QString due() const
Return the due date text for a todo.
Definition: alarmtext.cpp:263
KAlarmCal::AlarmText::setEmail
void setEmail(const QString &to, const QString &from, const QString &cc, const QString &time, const QString &subject, const QString &body, unsigned long kmailSerialNumber=0)
Set the instance contents to be an email.
Definition: alarmtext.cpp:136
KAlarmCal::AlarmText::from
QString from() const
Return the 'From' header parameter for an email alarm.
Definition: alarmtext.cpp:228
KAlarmCal::AlarmText
Parses email, todo and script alarm texts.
Definition: alarmtext.h:55
KAlarmCal::KAEvent::FILE
display the contents of a file
Definition: kaevent.h:259
KAlarmCal::KAEvent::EMAIL
send an email
Definition: kaevent.h:261
KAlarmCal::AlarmText::setScript
void setScript(const QString &text)
Set the instance contents to be a script.
Definition: alarmtext.cpp:130
KAlarmCal::KAEvent
KAEvent represents a KAlarm event.
Definition: kaevent.h:210
KAlarmCal::AlarmText::setTodo
void setTodo(const KCalCore::Todo::Ptr &todo)
Set the instance contents to be a todo.
Definition: alarmtext.cpp:151
KAlarmCal::KAEvent::actionSubType
SubAction actionSubType() const
Return the action sub-type of the event's main alarm.
Definition: kaevent.cpp:1979
KAlarmCal::AlarmText::checkIfEmail
static bool checkIfEmail(const QString &text)
Return whether a text is an email, with at least To and From headers.
Definition: alarmtext.cpp:380
KAlarmCal::AlarmText::isEmail
bool isEmail() const
Return whether the instance contains the text of an email.
Definition: alarmtext.cpp:285
KAlarmCal::AlarmText::setText
void setText(const QString &text)
Set the alarm text.
Definition: alarmtext.cpp:122
KAlarmCal::AlarmText::AlarmText
AlarmText(const QString &text=QString())
Constructor which sets the alarm text.
Definition: alarmtext.cpp:98
KAlarmCal::AlarmText::body
QString body() const
Return the email message body.
Definition: alarmtext.cpp:248
KCalCore::Todo::Ptr
QSharedPointer< Todo > Ptr
KAlarmCal::AlarmText::to
QString to() const
Return the 'To' header parameter for an email alarm.
Definition: alarmtext.cpp:223
KAlarmCal::KAEvent::MESSAGE
display a message text
Definition: kaevent.h:258
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Mon Jul 21 2014 08:10:23 by doxygen 1.8.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KAlarm Library

Skip menu "KAlarm Library"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • Related Pages

kdepimlibs-4.13.3 API Reference

Skip menu "kdepimlibs-4.13.3 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
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