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

kmail

  • sources
  • kde-4.12
  • kdepim
  • kmail
kmreaderwin.cpp
Go to the documentation of this file.
1 /* -*- mode: C++; c-file-style: "gnu" -*-
2  This file is part of KMail, the KDE mail client.
3  Copyright (c) 1997 Markus Wuebben <markus.wuebben@kde.org>
4  Copyright (c) 2009 Laurent Montel <montel@kde.org>
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License along
17  with this program; if not, write to the Free Software Foundation, Inc.,
18  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 */
20 
21 // define this to copy all html that is written to the readerwindow to
22 // filehtmlwriter.out in the current working directory
23 #include "kmreaderwin.h"
24 
25 #include "settings/globalsettings.h"
26 #include "kmmainwidget.h"
27 #include "kmreadermainwin.h"
28 #include "kernel/mailkernel.h"
29 
30 #include "kdepim-version.h"
31 #include <kpimutils/email.h>
32 #include <libkdepim/job/addemailaddressjob.h>
33 #include <libkdepim/job/openemailaddressjob.h>
34 #include <libkdepim/job/addemaildisplayjob.h>
35 #include <libkdepim/misc/broadcaststatus.h>
36 #include "kmcommands.h"
37 #include "mailcommon/mdn/sendmdnhandler.h"
38 #include <QVBoxLayout>
39 #include "messageviewer/header/headerstrategy.h"
40 #include "messageviewer/header/headerstyle.h"
41 #include "messageviewer/viewer/mailwebview.h"
42 #include "messageviewer/utils/markmessagereadhandler.h"
43 #include "messageviewer/settings/globalsettings.h"
44 #include "messageviewer/viewer/csshelper.h"
45 using MessageViewer::CSSHelper;
46 #include "util.h"
47 #include "utils/stringutil.h"
48 
49 #include <kmime/kmime_mdn.h>
50 
51 #include "messageviewer/viewer/viewer.h"
52 using namespace MessageViewer;
53 #include <messagecore/settings/globalsettings.h>
54 
55 #include "messageviewer/viewer/attachmentstrategy.h"
56 #include "messagecomposer/sender/messagesender.h"
57 #include "messagecomposer/helper/messagefactory.h"
58 #include "messagecomposer/composer/composer.h"
59 #include "messagecomposer/part/textpart.h"
60 #include "messagecomposer/part/infopart.h"
61 
62 #include <KIO/JobUiDelegate>
63 using MessageComposer::MessageFactory;
64 
65 #include "messagecore/helpers/messagehelpers.h"
66 
67 #include <Akonadi/Contact/ContactEditorDialog>
68 
69 #include <kde_file.h>
70 #include <kdebug.h>
71 #include <klocale.h>
72 #include <kaction.h>
73 #include <kicon.h>
74 #include <kcodecs.h>
75 #include <ktoggleaction.h>
76 #include <kservice.h>
77 #include <KActionCollection>
78 #include <KMessageBox>
79 #include <KMenu>
80 
81 #include <QClipboard>
82 
83 // X headers...
84 #undef Never
85 #undef Always
86 
87 #include <unistd.h>
88 #include <stdlib.h>
89 #include <sys/stat.h>
90 #include <stdio.h>
91 #include <ctype.h>
92 #include <string.h>
93 #include <util/mailutil.h>
94 
95 using namespace KMail;
96 using namespace MailCommon;
97 
98 //-----------------------------------------------------------------------------
99 KMReaderWin::KMReaderWin(QWidget *aParent,
100  QWidget *mainWindow,
101  KActionCollection* actionCollection,
102  Qt::WindowFlags aFlags )
103  : QWidget(aParent, aFlags ),
104  mMainWindow( mainWindow ),
105  mActionCollection( actionCollection ),
106  mMailToComposeAction( 0 ),
107  mMailToReplyAction( 0 ),
108  mMailToForwardAction( 0 ),
109  mAddAddrBookAction( 0 ),
110  mOpenAddrBookAction( 0 ),
111  mUrlSaveAsAction( 0 ),
112  mAddBookmarksAction( 0 )
113 {
114  createActions();
115  QVBoxLayout * vlay = new QVBoxLayout( this );
116  vlay->setMargin( 0 );
117  mViewer = new Viewer( this, mainWindow, mActionCollection );
118  mViewer->setExternalWindow( true );
119  mViewer->setAppName( QLatin1String("KMail") );
120  connect( mViewer, SIGNAL(urlClicked(Akonadi::Item,KUrl)),
121  this, SLOT(slotUrlClicked(Akonadi::Item,KUrl)) );
122  connect( mViewer, SIGNAL(requestConfigSync()), kmkernel, SLOT(slotRequestConfigSync()), Qt::QueuedConnection ); // happens anyway on shutdown, so we can skip it there with using a queued connection
123  connect( mViewer, SIGNAL(makeResourceOnline(MessageViewer::Viewer::ResourceOnlineMode)), kmkernel, SLOT(makeResourceOnline(MessageViewer::Viewer::ResourceOnlineMode)));
124  connect( mViewer, SIGNAL(showReader(KMime::Content*,bool,QString)),
125  this, SLOT(slotShowReader(KMime::Content*,bool,QString)) );
126  connect( mViewer, SIGNAL(showMessage(KMime::Message::Ptr,QString)),
127  this, SLOT(slotShowMessage(KMime::Message::Ptr,QString)) );
128  connect( mViewer, SIGNAL(showStatusBarMessage(QString)),
129  this, SIGNAL(showStatusBarMessage(QString)) );
130  connect( mViewer, SIGNAL(deleteMessage(Akonadi::Item)),
131  this, SLOT(slotDeleteMessage(Akonadi::Item)) );
132 
133  mViewer->addMessageLoadedHandler( new MessageViewer::MarkMessageReadHandler( this ) );
134  mViewer->addMessageLoadedHandler( new MailCommon::SendMdnHandler( kmkernel, this ) );
135 
136  vlay->addWidget( mViewer );
137  readConfig();
138 
139 }
140 
141 void KMReaderWin::createActions()
142 {
143  KActionCollection *ac = mActionCollection;
144  if ( !ac ) {
145  return;
146  }
147  //
148  // Message Menu
149  //
150  // new message to
151  mMailToComposeAction = new KAction( KIcon( QLatin1String("mail-message-new") ),
152  i18n( "New Message To..." ), this );
153  ac->addAction(QLatin1String("mail_new"), mMailToComposeAction );
154  mMailToComposeAction->setShortcutConfigurable( false );
155  connect( mMailToComposeAction, SIGNAL(triggered(bool)),
156  SLOT(slotMailtoCompose()) );
157 
158  // reply to
159  mMailToReplyAction = new KAction( KIcon( QLatin1String("mail-reply-sender") ),
160  i18n( "Reply To..." ), this );
161  ac->addAction( QLatin1String("mailto_reply"), mMailToReplyAction );
162  mMailToReplyAction->setShortcutConfigurable( false );
163  connect( mMailToReplyAction, SIGNAL(triggered(bool)),
164  SLOT(slotMailtoReply()) );
165 
166  // forward to
167  mMailToForwardAction = new KAction( KIcon( QLatin1String("mail-forward" )),
168  i18n( "Forward To..." ), this );
169  mMailToForwardAction->setShortcutConfigurable( false );
170  ac->addAction( QLatin1String("mailto_forward"), mMailToForwardAction );
171  connect( mMailToForwardAction, SIGNAL(triggered(bool)),
172  SLOT(slotMailtoForward()) );
173 
174 
175  // add to addressbook
176  mAddAddrBookAction = new KAction( KIcon(QLatin1String( "contact-new") ),
177  i18n( "Add to Address Book" ), this );
178  mAddAddrBookAction->setShortcutConfigurable( false );
179  ac->addAction( QLatin1String("add_addr_book"), mAddAddrBookAction );
180  connect( mAddAddrBookAction, SIGNAL(triggered(bool)),
181  SLOT(slotMailtoAddAddrBook()) );
182 
183  // open in addressbook
184  mOpenAddrBookAction = new KAction( KIcon( QLatin1String("view-pim-contacts") ),
185  i18n( "Open in Address Book" ), this );
186  mOpenAddrBookAction->setShortcutConfigurable( false );
187  ac->addAction( QLatin1String("openin_addr_book"), mOpenAddrBookAction );
188  connect( mOpenAddrBookAction, SIGNAL(triggered(bool)),
189  SLOT(slotMailtoOpenAddrBook()) );
190  // bookmark message
191  mAddBookmarksAction = new KAction( KIcon( QLatin1String("bookmark-new") ), i18n( "Bookmark This Link" ), this );
192  mAddBookmarksAction->setShortcutConfigurable( false );
193  ac->addAction( QLatin1String("add_bookmarks"), mAddBookmarksAction );
194  connect( mAddBookmarksAction, SIGNAL(triggered(bool)),
195  SLOT(slotAddBookmarks()) );
196 
197  mEditContactAction = new KAction( KIcon( QLatin1String("view-pim-contacts") ),
198  i18n( "Edit contact..." ), this );
199  mEditContactAction->setShortcutConfigurable( false );
200  ac->addAction( QLatin1String("edit_contact"), mOpenAddrBookAction );
201  connect( mEditContactAction, SIGNAL(triggered(bool)),
202  SLOT(slotEditContact()) );
203 
204  // save URL as
205  mUrlSaveAsAction = new KAction( i18n( "Save Link As..." ), this );
206  ac->addAction( QLatin1String("saveas_url"), mUrlSaveAsAction );
207  mUrlSaveAsAction->setShortcutConfigurable( false );
208  connect( mUrlSaveAsAction, SIGNAL(triggered(bool)), SLOT(slotUrlSave()) );
209 
210  // find text
211  KAction *action = new KAction(KIcon(QLatin1String("edit-find")), i18n("&Find in Message..."), this);
212  ac->addAction(QLatin1String("find_in_messages"), action );
213  connect(action, SIGNAL(triggered(bool)), SLOT(slotFind()));
214  action->setShortcut(KStandardShortcut::find());
215 
216  // save Image On Disk
217  mImageUrlSaveAsAction = new KAction( i18n( "Save Image On Disk..." ), this );
218  ac->addAction( QLatin1String("saveas_imageurl"), mImageUrlSaveAsAction );
219  mImageUrlSaveAsAction->setShortcutConfigurable( false );
220  connect( mImageUrlSaveAsAction, SIGNAL(triggered(bool)), SLOT(slotSaveImageOnDisk()) );
221 
222  // View html options
223  mViewHtmlOptions = new KMenu(i18n("Show HTML Format"));
224  mViewAsHtml = new KAction( i18n("Show HTML format when mail comes from this contact"), mViewHtmlOptions);
225  mViewAsHtml->setShortcutConfigurable( false );
226  connect( mViewAsHtml, SIGNAL(triggered(bool)), SLOT(slotContactHtmlOptions()));
227  mViewAsHtml->setCheckable(true);
228  mViewHtmlOptions->addAction(mViewAsHtml);
229 
230  mLoadExternalReference = new KAction( i18n("Load external reference when mail comes for this contact"), mViewHtmlOptions);
231  mLoadExternalReference->setShortcutConfigurable( false );
232  connect(mLoadExternalReference, SIGNAL(triggered(bool)), SLOT(slotContactHtmlOptions()));
233  mLoadExternalReference->setCheckable(true);
234  mViewHtmlOptions->addAction(mLoadExternalReference);
235 
236 
237  mShareImage = new KAction(i18n("Share image..."), this);
238  ac->addAction( QLatin1String("share_imageurl"), mShareImage );
239  mShareImage->setShortcutConfigurable( false );
240  connect(mShareImage, SIGNAL(triggered(bool)), SLOT(slotShareImage()));
241 
242 
243 }
244 
245 void KMReaderWin::setUseFixedFont( bool useFixedFont )
246 {
247  mViewer->setUseFixedFont( useFixedFont );
248 }
249 
250 bool KMReaderWin::isFixedFont() const
251 {
252  return mViewer->isFixedFont();
253 }
254 
255 //-----------------------------------------------------------------------------
256 KMReaderWin::~KMReaderWin()
257 {
258 }
259 
260 
261 //-----------------------------------------------------------------------------
262 void KMReaderWin::readConfig(void)
263 {
264  mViewer->readConfig();
265 }
266 
267 void KMReaderWin::setAttachmentStrategy( const AttachmentStrategy * strategy ) {
268  mViewer->setAttachmentStrategy( strategy );
269 }
270 
271 void KMReaderWin::setHeaderStyleAndStrategy( HeaderStyle * style,
272  HeaderStrategy * strategy ) {
273  mViewer->setHeaderStyleAndStrategy( style, strategy );
274 }
275 //-----------------------------------------------------------------------------
276 void KMReaderWin::setOverrideEncoding( const QString & encoding )
277 {
278  mViewer->setOverrideEncoding( encoding );
279 }
280 
281 //-----------------------------------------------------------------------------
282 void KMReaderWin::clearCache()
283 {
284  clear();
285 }
286 
287 // enter items for the "Important changes" list here:
288 static const char * const kmailChanges[] = {
289  I18N_NOOP( "KMail is now based on the Akonadi Personal Information Management framework, which brings many "
290  "changes all around.")
291 };
292 static const int numKMailChanges =
293  sizeof kmailChanges / sizeof *kmailChanges;
294 
295 // enter items for the "new features" list here, so the main body of
296 // the welcome page can be left untouched (probably much easier for
297 // the translators). Note that the <li>...</li> tags are added
298 // automatically below:
299 static const char * const kmailNewFeatures[] = {
300  I18N_NOOP( "Push email (IMAP IDLE)" ),
301  I18N_NOOP( "Improved virtual folders" ),
302  I18N_NOOP( "Improved searches" ),
303  I18N_NOOP( "Support for adding notes (annotations) to mails" ),
304  I18N_NOOP( "Tag folders" ),
305  I18N_NOOP( "Less GUI freezes, mail checks happen in the background" )
306 };
307 static const int numKMailNewFeatures =
308  sizeof kmailNewFeatures / sizeof *kmailNewFeatures;
309 
310 
311 //-----------------------------------------------------------------------------
312 //static
313 QString KMReaderWin::newFeaturesMD5()
314 {
315  QByteArray str;
316  for ( int i = 0 ; i < numKMailChanges ; ++i )
317  str += kmailChanges[i];
318  for ( int i = 0 ; i < numKMailNewFeatures ; ++i )
319  str += kmailNewFeatures[i];
320  KMD5 md5( str );
321  return QLatin1String(md5.base64Digest());
322 }
323 
324 //-----------------------------------------------------------------------------
325 void KMReaderWin::displaySplashPage( const QString &info )
326 {
327  mViewer->displaySplashPage( info );
328 }
329 
330 void KMReaderWin::displayBusyPage()
331 {
332  const QString info =
333  i18n( "<h2 style='margin-top: 0px;'>Retrieving Folder Contents</h2><p>Please wait . . .</p>&nbsp;" );
334 
335  displaySplashPage( info );
336 }
337 
338 void KMReaderWin::displayOfflinePage()
339 {
340  const QString info =
341  i18n( "<h2 style='margin-top: 0px;'>Offline</h2><p>KMail is currently in offline mode. "
342  "Click <a href=\"kmail:goOnline\">here</a> to go online . . .</p>&nbsp;" );
343 
344  displaySplashPage( info );
345 }
346 
347 void KMReaderWin::displayResourceOfflinePage()
348 {
349  const QString info =
350  i18n( "<h2 style='margin-top: 0px;'>Offline</h2><p>Account is currently in offline mode. "
351  "Click <a href=\"kmail:goResourceOnline\">here</a> to go online . . .</p>&nbsp;" );
352 
353  displaySplashPage( info );
354 }
355 
356 
357 //-----------------------------------------------------------------------------
358 void KMReaderWin::displayAboutPage()
359 {
360  KLocalizedString info =
361  ki18nc("%1: KMail version; %2: help:// URL; "
362  "%3: generated list of new features; "
363  "%4: First-time user text (only shown on first start); "
364  "%5: generated list of important changes; "
365  "--- end of comment ---",
366  "<h2 style='margin-top: 0px;'>Welcome to KMail %1</h2><p>KMail is the email client by KDE. "
367  "It is designed to be fully compatible with "
368  "Internet mailing standards including MIME, SMTP, POP3, and IMAP."
369  "</p>\n"
370  "<ul><li>KMail has many powerful features which are described in the "
371  "<a href=\"%2\">documentation</a></li>\n"
372  "%5\n" // important changes
373  "%3\n" // new features
374  "%4\n" // first start info
375  "<p>We hope that you will enjoy KMail.</p>\n"
376  "<p>Thank you,</p>\n"
377  "<p style='margin-bottom: 0px'>&nbsp; &nbsp; The KMail Team</p>")
378  .subs( QLatin1String(KDEPIM_VERSION) )
379  .subs( QLatin1String("help:/kmail/index.html") );
380 
381  if ( ( numKMailNewFeatures > 1 ) || ( numKMailNewFeatures == 1 && strlen(kmailNewFeatures[0]) > 0 ) ) {
382  QString featuresText =
383  i18n("<p>Some of the new features in this release of KMail include "
384  "(compared to KMail %1, which is part of KDE Software Compilation %2):</p>\n",
385  QLatin1String("1.13"), QLatin1String(KDE::versionString()) ); // prior KMail and KDE version
386  featuresText += QLatin1String("<ul>\n");
387  for ( int i = 0 ; i < numKMailNewFeatures ; ++i )
388  featuresText += QLatin1String("<li>") + i18n( kmailNewFeatures[i] ) + QLatin1String("</li>\n");
389  featuresText += QLatin1String("</ul>\n");
390  info = info.subs( featuresText );
391  }
392  else
393  info = info.subs( QString() ); // remove the place holder
394 
395  if( kmkernel->firstStart() ) {
396  info = info.subs( i18n("<p>Please take a moment to fill in the KMail "
397  "configuration panel at Settings-&gt;Configure "
398  "KMail.\n"
399  "You need to create at least a default identity and "
400  "an incoming as well as outgoing mail account."
401  "</p>\n") );
402  } else {
403  info = info.subs( QString() ); // remove the place holder
404  }
405 
406  if ( ( numKMailChanges > 1 ) || ( numKMailChanges == 1 && strlen(kmailChanges[0]) > 0 ) ) {
407  QString changesText =
408  i18n("<p><span style='font-size:125%; font-weight:bold;'>"
409  "Important changes</span> (compared to KMail %1):</p>\n",
410  QLatin1String("1.13"));
411  changesText += QLatin1String("<ul>\n");
412  for ( int i = 0 ; i < numKMailChanges ; ++i )
413  changesText += i18n("<li>%1</li>\n", i18n( kmailChanges[i] ) );
414  changesText += QLatin1String("</ul>\n");
415  info = info.subs( changesText );
416  }
417  else
418  info = info.subs( QString() ); // remove the place holder
419 
420  displaySplashPage( info.toString() );
421 }
422 
423 //-----------------------------------------------------------------------------
424 void KMReaderWin::slotFind()
425 {
426  mViewer->slotFind();
427 }
428 //-----------------------------------------------------------------------------
429 void KMReaderWin::slotCopySelectedText()
430 {
431  QString selection = mViewer->selectedText();
432  selection.replace( QChar::Nbsp, QLatin1Char(' ') );
433  QApplication::clipboard()->setText( selection );
434 }
435 
436 //-----------------------------------------------------------------------------
437 void KMReaderWin::setMsgPart( KMime::Content* aMsgPart )
438 {
439  mViewer->setMessagePart( aMsgPart );
440 }
441 
442 //-----------------------------------------------------------------------------
443 QString KMReaderWin::copyText() const
444 {
445  return mViewer->selectedText();
446 }
447 
448 //-----------------------------------------------------------------------------
449 void KMReaderWin::setHtmlOverride( bool override )
450 {
451  mViewer->setHtmlOverride( override );
452 }
453 
454 bool KMReaderWin::htmlOverride() const
455 {
456  return mViewer->htmlOverride();
457 }
458 
459 //-----------------------------------------------------------------------------
460 void KMReaderWin::setHtmlLoadExtOverride( bool override )
461 {
462  mViewer->setHtmlLoadExtOverride( override );
463 }
464 
465 //-----------------------------------------------------------------------------
466 bool KMReaderWin::htmlMail() const
467 {
468  return mViewer->htmlMail();
469 }
470 
471 //-----------------------------------------------------------------------------
472 bool KMReaderWin::htmlLoadExternal()
473 {
474  return mViewer->htmlLoadExternal();
475 }
476 
477 //-----------------------------------------------------------------------------
478 Akonadi::Item KMReaderWin::message() const
479 {
480  return mViewer->messageItem();
481 }
482 
483 //-----------------------------------------------------------------------------
484 void KMReaderWin::slotMailtoCompose()
485 {
486  KMCommand *command = new KMMailtoComposeCommand( urlClicked(), message() );
487  command->start();
488 }
489 
490 //-----------------------------------------------------------------------------
491 void KMReaderWin::slotMailtoForward()
492 {
493  KMCommand *command = new KMMailtoForwardCommand( mMainWindow, urlClicked(),
494  message() );
495  command->start();
496 }
497 
498 //-----------------------------------------------------------------------------
499 void KMReaderWin::slotMailtoAddAddrBook()
500 {
501  const KUrl url = urlClicked();
502  if( url.isEmpty() )
503  return;
504  const QString emailString = KPIMUtils::decodeMailtoUrl( url );
505 
506  KPIM::AddEmailAddressJob *job = new KPIM::AddEmailAddressJob( emailString, mMainWindow, this );
507  job->start();
508 }
509 
510 //-----------------------------------------------------------------------------
511 void KMReaderWin::slotMailtoOpenAddrBook()
512 {
513  const KUrl url = urlClicked();
514  if( url.isEmpty() )
515  return;
516  const QString emailString = KPIMUtils::decodeMailtoUrl( url ).toLower();
517 
518  KPIM::OpenEmailAddressJob *job = new KPIM::OpenEmailAddressJob( emailString, mMainWindow, this );
519  job->start();
520 }
521 
522 //-----------------------------------------------------------------------------
523 void KMReaderWin::slotAddBookmarks()
524 {
525  const KUrl url = urlClicked();
526  if( url.isEmpty() )
527  return;
528  KMCommand *command = new KMAddBookmarksCommand( url, this );
529  command->start();
530 }
531 
532 //-----------------------------------------------------------------------------
533 void KMReaderWin::slotUrlSave()
534 {
535  const KUrl url = urlClicked();
536  if( url.isEmpty() )
537  return;
538  KMCommand *command = new KMUrlSaveCommand( url, mMainWindow );
539  command->start();
540 }
541 
542 void KMReaderWin::slotSaveImageOnDisk()
543 {
544  const KUrl url = imageUrlClicked();
545  if( url.isEmpty() )
546  return;
547  KMCommand *command = new KMUrlSaveCommand( url, mMainWindow );
548  command->start();
549 }
550 
551 //-----------------------------------------------------------------------------
552 void KMReaderWin::slotMailtoReply()
553 {
554  KMCommand *command = new KMMailtoReplyCommand( mMainWindow, urlClicked(),
555  message(), copyText() );
556  command->start();
557 }
558 
559 CSSHelper* KMReaderWin::cssHelper() const
560 {
561  return mViewer->cssHelper();
562 }
563 
564 bool KMReaderWin::htmlLoadExtOverride() const
565 {
566  return mViewer->htmlLoadExtOverride();
567 }
568 void KMReaderWin::setDecryptMessageOverwrite( bool overwrite )
569 {
570  mViewer->setDecryptMessageOverwrite( overwrite );
571 }
572 const AttachmentStrategy * KMReaderWin::attachmentStrategy() const
573 {
574  return mViewer->attachmentStrategy();
575 }
576 
577 QString KMReaderWin::overrideEncoding() const
578 {
579  return mViewer->overrideEncoding();
580 }
581 
582 KToggleAction *KMReaderWin::toggleFixFontAction() const
583 {
584  return mViewer->toggleFixFontAction();
585 }
586 
587 KAction *KMReaderWin::toggleMimePartTreeAction() const
588 {
589  return mViewer->toggleMimePartTreeAction();
590 }
591 
592 KAction *KMReaderWin::selectAllAction() const
593 {
594  return mViewer->selectAllAction();
595 }
596 
597 const HeaderStrategy * KMReaderWin::headerStrategy() const
598 {
599  return mViewer->headerStrategy();
600 }
601 
602 HeaderStyle * KMReaderWin::headerStyle() const
603 {
604  return mViewer->headerStyle();
605 }
606 
607 KAction *KMReaderWin::copyURLAction() const
608 {
609  return mViewer->copyURLAction();
610 }
611 
612 KAction *KMReaderWin::copyImageLocation() const
613 {
614  return mViewer->copyImageLocation();
615 }
616 
617 KAction *KMReaderWin::copyAction() const
618 {
619  return mViewer->copyAction();
620 }
621 
622 KAction *KMReaderWin::viewSourceAction() const
623 {
624  return mViewer->viewSourceAction();
625 }
626 
627 KAction *KMReaderWin::saveAsAction() const
628 {
629  return mViewer->saveAsAction();
630 }
631 
632 KAction *KMReaderWin::findInMessageAction() const
633 {
634  return mViewer->findInMessageAction();
635 }
636 
637 KAction *KMReaderWin::urlOpenAction() const
638 {
639  return mViewer->urlOpenAction();
640 }
641 void KMReaderWin::setPrinting(bool enable)
642 {
643  mViewer->setPrinting( enable );
644 }
645 
646 KAction* KMReaderWin::speakTextAction() const
647 {
648  return mViewer->speakTextAction();
649 }
650 
651 KAction* KMReaderWin::downloadImageToDiskAction() const
652 {
653  return mImageUrlSaveAsAction;
654 }
655 
656 KAction* KMReaderWin::translateAction() const
657 {
658  return mViewer->translateAction();
659 }
660 
661 void KMReaderWin::clear(bool force )
662 {
663  mViewer->clear( force ? Viewer::Force : Viewer::Delayed );
664 }
665 
666 void KMReaderWin::setMessage( const Akonadi::Item &item, Viewer::UpdateMode updateMode)
667 {
668  kDebug() << Q_FUNC_INFO << parentWidget();
669  mViewer->setMessageItem( item, updateMode );
670 }
671 
672 void KMReaderWin::setMessage( KMime::Message::Ptr message)
673 {
674  mViewer->setMessage( message );
675 }
676 
677 
678 KUrl KMReaderWin::urlClicked() const
679 {
680  return mViewer->urlClicked();
681 }
682 
683 KUrl KMReaderWin::imageUrlClicked() const
684 {
685  return mViewer->imageUrlClicked();
686 }
687 
688 void KMReaderWin::update( bool force )
689 {
690  mViewer->update( force ? Viewer::Force : Viewer::Delayed );
691 }
692 
693 void KMReaderWin::slotUrlClicked( const Akonadi::Item & item, const KUrl & url )
694 {
695  if ( item.isValid() && item.parentCollection().isValid() ) {
696  QSharedPointer<FolderCollection> fd = FolderCollection::forCollection(
697  MailCommon::Util::updatedCollection( item.parentCollection() ), false );
698  KMail::Util::handleClickedURL( url, fd );
699  return;
700  }
701  //No folder so we can't have identity and template.
702  KMail::Util::handleClickedURL( url );
703 }
704 
705 void KMReaderWin::slotShowReader( KMime::Content* msgPart, bool htmlMail, const QString &encoding )
706 {
707  KMReaderMainWin *win = new KMReaderMainWin( msgPart, htmlMail, encoding );
708  win->show();
709 }
710 
711 void KMReaderWin::slotShowMessage( KMime::Message::Ptr message, const QString& encoding )
712 {
713  KMReaderMainWin *win = new KMReaderMainWin();
714  win->showMessage( encoding, message );
715  win->show();
716 }
717 
718 void KMReaderWin::slotDeleteMessage(const Akonadi::Item& item)
719 {
720  if ( !item.isValid() )
721  return;
722  KMTrashMsgCommand *command = new KMTrashMsgCommand( item.parentCollection(), item, -1 );
723  command->start();
724 }
725 
726 bool KMReaderWin::printSelectedText(bool preview)
727 {
728  const QString str = mViewer->selectedText();
729  if(str.isEmpty())
730  return false;
731  ::MessageComposer::Composer* composer = new ::MessageComposer::Composer;
732  composer->textPart()->setCleanPlainText(str);
733  composer->textPart()->setWrappedPlainText(str);
734  KMime::Message::Ptr messagePtr = message().payload<KMime::Message::Ptr>();
735  composer->infoPart()->setFrom(messagePtr->from()->asUnicodeString());
736  composer->infoPart()->setTo(QStringList()<<messagePtr->to()->asUnicodeString());
737  composer->infoPart()->setCc(QStringList()<<messagePtr->cc()->asUnicodeString());
738  composer->infoPart()->setSubject(messagePtr->subject()->asUnicodeString());
739  composer->setProperty("preview",preview);
740  connect( composer, SIGNAL(result(KJob*)),
741  this, SLOT(slotPrintComposeResult(KJob*)) );
742  composer->start();
743  return true;
744 }
745 
746 void KMReaderWin::slotPrintComposeResult( KJob *job )
747 {
748  const bool preview = job->property("preview").toBool();
749  Q_ASSERT( dynamic_cast< ::MessageComposer::Composer* >( job ) );
750 
751  ::MessageComposer::Composer* composer = dynamic_cast< ::MessageComposer::Composer* >( job );
752  if( composer->error() == ::MessageComposer::Composer::NoError ) {
753 
754  Q_ASSERT( composer->resultMessages().size() == 1 );
755  Akonadi::Item printItem;
756  printItem.setPayload<KMime::Message::Ptr>( composer->resultMessages().first() );
757  const bool useFixedFont = MessageViewer::GlobalSettings::self()->useFixedFont();
758  const QString overrideEncoding = MessageCore::GlobalSettings::self()->overrideCharacterEncoding();
759 
760  KMPrintCommand *command = new KMPrintCommand( this, printItem, mViewer->headerStyle(), mViewer->headerStrategy()
761  , mViewer->htmlOverride(), mViewer->htmlLoadExternal() ,useFixedFont, overrideEncoding );
762  command->setPrintPreview( preview );
763  command->start();
764  } else {
765  if ( static_cast<KIO::Job*>(job)->ui() ) {
766  static_cast<KIO::Job*>(job)->ui()->showErrorMessage();
767  } else {
768  kWarning() << "Composer for printing failed:" << composer->errorString();
769  }
770  }
771 
772 }
773 
774 void KMReaderWin::clearContactItem()
775 {
776  mSearchedContact = Akonadi::Item();
777  mSearchedAddress = KABC::Addressee();
778  mLoadExternalReference->setChecked(false);
779  mViewAsHtml->setChecked(false);
780 }
781 
782 void KMReaderWin::setContactItem(const Akonadi::Item& contact, const KABC::Addressee &address)
783 {
784  mSearchedContact = contact;
785  mSearchedAddress = address;
786  updateHtmlActions();
787 }
788 
789 void KMReaderWin::updateHtmlActions()
790 {
791  if (!mSearchedContact.isValid()) {
792  mLoadExternalReference->setChecked(false);
793  mViewAsHtml->setChecked(false);
794  } else {
795  const QStringList customs = mSearchedAddress.customs();
796  Q_FOREACH ( const QString& custom, customs ) {
797  if ( custom.contains(QLatin1String( "MailPreferedFormatting")) ) {
798  const QString value = mSearchedAddress.custom( QLatin1String( "KADDRESSBOOK" ), QLatin1String( "MailPreferedFormatting" ) );
799  mViewAsHtml->setChecked(value == QLatin1String( "HTML" ));
800  } else if ( custom.contains(QLatin1String( "MailAllowToRemoteContent")) ) {
801  const QString value = mSearchedAddress.custom( QLatin1String( "KADDRESSBOOK" ), QLatin1String( "MailAllowToRemoteContent" ) );
802  mLoadExternalReference->setChecked(( value == QLatin1String( "TRUE" ) ));
803  }
804  }
805  }
806 }
807 
808 void KMReaderWin::slotContactHtmlOptions()
809 {
810  const KUrl url = urlClicked();
811  if( url.isEmpty() )
812  return;
813  const QString emailString = KPIMUtils::decodeMailtoUrl( url ).toLower();
814 
815  KPIM::AddEmailDiplayJob *job = new KPIM::AddEmailDiplayJob( emailString, mMainWindow, this );
816  job->setRemoteContent(mLoadExternalReference->isChecked());
817  job->setShowAsHTML(mViewAsHtml->isChecked());
818  job->setContact(mSearchedContact);
819  job->start();
820 }
821 
822 void KMReaderWin::slotEditContact()
823 {
824  if( mSearchedContact.isValid() ) {
825  QPointer<Akonadi::ContactEditorDialog> dlg =
826  new Akonadi::ContactEditorDialog( Akonadi::ContactEditorDialog::EditMode, this );
827  connect( dlg, SIGNAL(contactStored(Akonadi::Item)),
828  this, SLOT(contactStored(Akonadi::Item)) );
829  connect( dlg, SIGNAL(error(QString)),
830  this, SLOT(slotContactEditorError(QString)) );
831  dlg->setContact( mSearchedContact );
832  dlg->exec();
833  delete dlg;
834  }
835 }
836 
837 void KMReaderWin::slotContactEditorError(const QString &error)
838 {
839  KMessageBox::error(this, i18n("Contact cannot be stored: %1", error), i18n("Failed to store contact"));
840 }
841 
842 void KMReaderWin::contactStored( const Akonadi::Item &item )
843 {
844  Q_UNUSED( item );
845  KPIM::BroadcastStatus::instance()->setStatusMsg( i18n( "Contact modified successfully" ) );
846 }
847 
848 KAction *KMReaderWin::saveMessageDisplayFormatAction() const
849 {
850  return mViewer->saveMessageDisplayFormatAction();
851 }
852 
853 KAction *KMReaderWin::resetMessageDisplayFormatAction() const
854 {
855  return mViewer->resetMessageDisplayFormatAction();
856 }
857 
858 KAction *KMReaderWin::blockImage() const
859 {
860  return mViewer->blockImage();
861 }
862 
863 bool KMReaderWin::adblockEnabled() const
864 {
865  return mViewer->adblockEnabled();
866 }
867 
868 KAction *KMReaderWin::openBlockableItems() const
869 {
870  return mViewer->openBlockableItems();
871 }
872 
873 //-----------------------------------------------------------------------------
874 void KMReaderWin::slotShareImage()
875 {
876  KMCommand *command = new KMShareImageCommand( imageUrlClicked(), this);
877  command->start();
878 }
879 
880 bool KMReaderWin::isAShortUrl(const KUrl &url) const
881 {
882  return mViewer->isAShortUrl(url);
883 }
884 
885 KAction *KMReaderWin::expandShortUrlAction() const
886 {
887  return mViewer->expandShortUrlAction();
888 }
889 
890 #include "kmreaderwin.moc"
891 
892 
KMReaderWin::htmlOverride
bool htmlOverride() const
Override default html mail setting.
Definition: kmreaderwin.cpp:454
kmailChanges
static const char *const kmailChanges[]
Definition: kmreaderwin.cpp:288
globalsettings.h
KMReaderWin::headerStrategy
const MessageViewer::HeaderStrategy * headerStrategy() const
Getthe message header strategy.
Definition: kmreaderwin.cpp:597
KMReaderWin::attachmentStrategy
const MessageViewer::AttachmentStrategy * attachmentStrategy() const
Get/set the message attachment strategy.
Definition: kmreaderwin.cpp:572
QSharedPointer
Definition: collectionmailinglistpage.h:34
KMAddBookmarksCommand
Definition: kmcommands.h:190
KMReaderMainWin::showMessage
void showMessage(const QString &encoding, const Akonadi::Item &msg, const Akonadi::Collection &parentCollection=Akonadi::Collection())
take ownership of and show
Definition: kmreadermainwin.cpp:137
KMMailtoComposeCommand
Definition: kmcommands.h:148
kmmainwidget.h
KMReaderWin::slotPrintComposeResult
void slotPrintComposeResult(KJob *job)
Definition: kmreaderwin.cpp:746
KMReaderWin::slotFind
void slotFind()
The user selected "Find" from the menu.
Definition: kmreaderwin.cpp:424
KPIM::OpenEmailAddressJob
KMReaderWin::urlOpenAction
KAction * urlOpenAction() const
Definition: kmreaderwin.cpp:637
KPIM::BroadcastStatus::instance
static BroadcastStatus * instance()
KMTrashMsgCommand
Definition: kmcommands.h:540
KPIM::OpenEmailAddressJob::start
virtual void start()
KMReaderWin::blockImage
KAction * blockImage() const
Definition: kmreaderwin.cpp:858
KMReaderWin::copyURLAction
KAction * copyURLAction() const
Definition: kmreaderwin.cpp:607
KMReaderWin::urlClicked
KUrl urlClicked() const
Definition: kmreaderwin.cpp:678
KMMailtoReplyCommand
Definition: kmcommands.h:162
KPIM::AddEmailDiplayJob
KMReaderWin::slotMailtoCompose
void slotMailtoCompose()
Definition: kmreaderwin.cpp:484
KPIM::AddEmailAddressJob
KMReaderWin::slotEditContact
void slotEditContact()
Definition: kmreaderwin.cpp:822
KMReaderWin::slotShareImage
void slotShareImage()
Definition: kmreaderwin.cpp:874
QWidget
KMail::Util::handleClickedURL
bool handleClickedURL(const KUrl &url, const QSharedPointer< MailCommon::FolderCollection > &folder=QSharedPointer< MailCommon::FolderCollection >())
Handles a clicked URL, but only in case the viewer didn't handle it.
Definition: util.cpp:103
KMReaderWin::slotUrlSave
void slotUrlSave()
Save the page to a file.
Definition: kmreaderwin.cpp:533
numKMailNewFeatures
static const int numKMailNewFeatures
Definition: kmreaderwin.cpp:307
KMReaderWin::isAShortUrl
bool isAShortUrl(const KUrl &url) const
Definition: kmreaderwin.cpp:880
KMReaderWin::saveAsAction
KAction * saveAsAction() const
Definition: kmreaderwin.cpp:627
KMReaderWin::contactStored
void contactStored(const Akonadi::Item &item)
Definition: kmreaderwin.cpp:842
KMReaderWin::setHeaderStyleAndStrategy
void setHeaderStyleAndStrategy(MessageViewer::HeaderStyle *style, MessageViewer::HeaderStrategy *strategy)
Set the header style and strategy.
Definition: kmreaderwin.cpp:271
KMReaderWin::~KMReaderWin
virtual ~KMReaderWin()
Definition: kmreaderwin.cpp:256
KMReaderWin::headerStyle
MessageViewer::HeaderStyle * headerStyle() const
Definition: kmreaderwin.cpp:602
openemailaddressjob.h
KMReaderWin::message
Akonadi::Item message() const
Definition: kmreaderwin.cpp:478
KMReaderWin::displayResourceOfflinePage
void displayResourceOfflinePage()
Definition: kmreaderwin.cpp:347
kmreaderwin.h
KMReaderWin::setOverrideEncoding
void setOverrideEncoding(const QString &encoding)
Set the override character encoding.
Definition: kmreaderwin.cpp:276
KPIM::BroadcastStatus::setStatusMsg
void setStatusMsg(const QString &message)
KMReaderWin::slotMailtoForward
void slotMailtoForward()
Definition: kmreaderwin.cpp:491
KMReaderWin::setContactItem
void setContactItem(const Akonadi::Item &contact, const KABC::Addressee &address)
Definition: kmreaderwin.cpp:782
KMReaderWin::setPrinting
virtual void setPrinting(bool enable)
Definition: kmreaderwin.cpp:641
KMReaderWin::cssHelper
MessageViewer::CSSHelper * cssHelper() const
Definition: kmreaderwin.cpp:559
KMReaderWin::expandShortUrlAction
KAction * expandShortUrlAction() const
Definition: kmreaderwin.cpp:885
KMReaderWin::copyImageLocation
KAction * copyImageLocation() const
Definition: kmreaderwin.cpp:612
KMReaderWin::update
void update(bool force=false)
Definition: kmreaderwin.cpp:688
kmailNewFeatures
static const char *const kmailNewFeatures[]
Definition: kmreaderwin.cpp:299
KMCommand
Small helper structure which encapsulates the KMMessage created when creating a reply, and.
Definition: kmcommands.h:44
KMReaderWin::setDecryptMessageOverwrite
void setDecryptMessageOverwrite(bool overwrite=true)
Enforce message decryption.
Definition: kmreaderwin.cpp:568
KMReaderWin::slotMailtoAddAddrBook
void slotMailtoAddAddrBook()
Definition: kmreaderwin.cpp:499
KMReaderWin::KMReaderWin
KMReaderWin(QWidget *parent, QWidget *mainWindow, KActionCollection *actionCollection, Qt::WindowFlags f=0)
Definition: kmreaderwin.cpp:99
KMReaderWin::viewSourceAction
KAction * viewSourceAction() const
Definition: kmreaderwin.cpp:622
KMReaderWin::imageUrlClicked
KUrl imageUrlClicked() const
Definition: kmreaderwin.cpp:683
KMReaderWin::setMsgPart
void setMsgPart(KMime::Content *aMsgPart)
Instead of settings a message to be shown sets a message part to be shown.
Definition: kmreaderwin.cpp:437
KMReaderWin::translateAction
KAction * translateAction() const
Definition: kmreaderwin.cpp:656
KMCommand::start
void start()
Definition: kmcommands.cpp:234
KMReaderWin::displayBusyPage
void displayBusyPage()
Display the 'please wait' page instead of a message.
Definition: kmreaderwin.cpp:330
KMReaderWin::setAttachmentStrategy
void setAttachmentStrategy(const MessageViewer::AttachmentStrategy *strategy)
Definition: kmreaderwin.cpp:267
KMReaderWin::setHtmlOverride
void setHtmlOverride(bool override)
Definition: kmreaderwin.cpp:449
numKMailChanges
static const int numKMailChanges
Definition: kmreaderwin.cpp:292
KMReaderWin::setHtmlLoadExtOverride
void setHtmlLoadExtOverride(bool override)
Definition: kmreaderwin.cpp:460
KMReaderWin::setMessage
void setMessage(const Akonadi::Item &item, MessageViewer::Viewer::UpdateMode updateMode=MessageViewer::Viewer::Delayed)
KMMailtoForwardCommand
Definition: kmcommands.h:177
KPIM::AddEmailAddressJob::start
virtual void start()
KMReaderWin::htmlMail
bool htmlMail() const
Is html mail to be supported? Takes into account override.
Definition: kmreaderwin.cpp:466
addemaildisplayjob.h
KMReaderWin::clear
void clear(bool force=false)
Clear the reader and discard the current message.
Definition: kmreaderwin.cpp:661
KMReaderWin::slotSaveImageOnDisk
void slotSaveImageOnDisk()
Definition: kmreaderwin.cpp:542
KMReaderWin::displayOfflinePage
void displayOfflinePage()
Display the 'we are currently in offline mode' page instead of a message.
Definition: kmreaderwin.cpp:338
util.h
KMReaderWin::clearContactItem
void clearContactItem()
Definition: kmreaderwin.cpp:774
kmkernel
#define kmkernel
Definition: kmkernel.h:22
KMReaderWin::resetMessageDisplayFormatAction
KAction * resetMessageDisplayFormatAction() const
Definition: kmreaderwin.cpp:853
KMReaderWin::downloadImageToDiskAction
KAction * downloadImageToDiskAction() const
Definition: kmreaderwin.cpp:651
KMReaderWin::adblockEnabled
bool adblockEnabled() const
Definition: kmreaderwin.cpp:863
KMReaderWin::slotDeleteMessage
void slotDeleteMessage(const Akonadi::Item &)
Definition: kmreaderwin.cpp:718
KMUrlSaveCommand
Definition: kmcommands.h:203
KMReaderWin::saveMessageDisplayFormatAction
KAction * saveMessageDisplayFormatAction() const
Definition: kmreaderwin.cpp:848
KMReaderWin::copyAction
KAction * copyAction() const
Definition: kmreaderwin.cpp:617
KPIM::AddEmailDiplayJob::setContact
void setContact(const Akonadi::Item &contact)
KMReaderWin::showStatusBarMessage
void showStatusBarMessage(const QString &message)
KMReaderWin::newFeaturesMD5
static QString newFeaturesMD5()
Returns the MD5 hash for the list of new features.
Definition: kmreaderwin.cpp:313
KMReaderWin::slotContactEditorError
void slotContactEditorError(const QString &error)
Definition: kmreaderwin.cpp:837
KMReaderWin::slotContactHtmlOptions
void slotContactHtmlOptions()
Definition: kmreaderwin.cpp:808
KMReaderWin::toggleFixFontAction
KToggleAction * toggleFixFontAction() const
Definition: kmreaderwin.cpp:582
KMReaderWin::slotMailtoOpenAddrBook
void slotMailtoOpenAddrBook()
Definition: kmreaderwin.cpp:511
KMReaderWin::slotMailtoReply
void slotMailtoReply()
Operations on mailto: URLs.
Definition: kmreaderwin.cpp:552
addemailaddressjob.h
KMPrintCommand::setPrintPreview
void setPrintPreview(bool preview)
Definition: kmcommands.cpp:1101
KMReaderWin::isFixedFont
bool isFixedFont() const
Definition: kmreaderwin.cpp:250
KMReaderWin::copyText
QString copyText() const
Return selected text.
Definition: kmreaderwin.cpp:443
KMReaderWin::overrideEncoding
QString overrideEncoding() const
Get selected override character encoding.
Definition: kmreaderwin.cpp:577
KMReaderWin::htmlLoadExtOverride
bool htmlLoadExtOverride() const
Override default load external references setting.
Definition: kmreaderwin.cpp:564
KMReaderWin::openBlockableItems
KAction * openBlockableItems() const
Definition: kmreaderwin.cpp:868
KMReaderWin::findInMessageAction
KAction * findInMessageAction() const
Definition: kmreaderwin.cpp:632
KMReaderWin::htmlLoadExternal
bool htmlLoadExternal()
Is loading ext.
Definition: kmreaderwin.cpp:472
KMReaderWin::toggleMimePartTreeAction
KAction * toggleMimePartTreeAction() const
Definition: kmreaderwin.cpp:587
KMReaderWin::displayAboutPage
void displayAboutPage()
Display the about page instead of a message.
Definition: kmreaderwin.cpp:358
KMReaderWin::printSelectedText
bool printSelectedText(bool preview)
Definition: kmreaderwin.cpp:726
KPIM::AddEmailDiplayJob::setRemoteContent
void setRemoteContent(bool b)
KMReaderMainWin
Definition: kmreadermainwin.h:32
KPIM::AddEmailDiplayJob::setShowAsHTML
void setShowAsHTML(bool html)
KPIM::AddEmailDiplayJob::start
virtual void start()
KMReaderWin::slotUrlClicked
void slotUrlClicked(const Akonadi::Item &, const KUrl &)
Definition: kmreaderwin.cpp:693
KMPrintCommand
Definition: kmcommands.h:377
kmreadermainwin.h
KMReaderWin::slotAddBookmarks
void slotAddBookmarks()
Definition: kmreaderwin.cpp:523
kmcommands.h
KMReaderWin::slotShowMessage
void slotShowMessage(KMime::Message::Ptr message, const QString &encoding)
Definition: kmreaderwin.cpp:711
broadcaststatus.h
KMReaderWin::setUseFixedFont
void setUseFixedFont(bool useFixedFont)
Definition: kmreaderwin.cpp:245
KMReaderWin::selectAllAction
KAction * selectAllAction() const
Definition: kmreaderwin.cpp:592
KJob
KMReaderWin::slotCopySelectedText
void slotCopySelectedText()
Copy the selected text to the clipboard.
Definition: kmreaderwin.cpp:429
KMReaderWin::slotShowReader
void slotShowReader(KMime::Content *, bool, const QString &)
Definition: kmreaderwin.cpp:705
KMShareImageCommand
Definition: kmcommands.h:564
KMReaderWin::displaySplashPage
void displaySplashPage(const QString &info)
Display a generic HTML splash page instead of a message.
Definition: kmreaderwin.cpp:325
KMReaderWin::clearCache
void clearCache()
Force update even if message is the same.
Definition: kmreaderwin.cpp:282
KMReaderWin::speakTextAction
KAction * speakTextAction() const
Definition: kmreaderwin.cpp:646
KMReaderWin::readConfig
void readConfig()
Read settings from app's config file.
Definition: kmreaderwin.cpp:262
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:58:52 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kmail

Skip menu "kmail"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

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