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

KAlarm Library

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

Skip menu "kdepimlibs API Reference"
  • akonadi
  •   contact
  •   kmime
  •   socialutils
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kldap
  • kmbox
  • kmime
  • kpimidentities
  • kpimtextedit
  • kresources
  • ktnef
  • kxmlrpcclient
  • microblog

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