kmail Library API Documentation

kmailicalifaceimpl.cpp

00001 /*
00002     This file is part of KMail.
00003 
00004     Copyright (c) 2003 Steffen Hansen <steffen@klaralvdalens-datakonsult.se>
00005     Copyright (c) 2003 - 2004 Bo Thorsen <bo@klaralvdalens-datakonsult.se>
00006 
00007     This library is free software; you can redistribute it and/or
00008     modify it under the terms of the GNU Library General Public
00009     License as published by the Free Software Foundation; either
00010     version 2 of the License, or (at your option) any later version.
00011 
00012     This library is distributed in the hope that it will be useful,
00013     but WITHOUT ANY WARRANTY; without even the implied warranty of
00014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015     Library General Public License for more details.
00016 
00017     You should have received a copy of the GNU Library General Public License
00018     along with this library; see the file COPYING.LIB.  If not, write to
00019     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00020     Boston, MA 02111-1307, USA.
00021 */
00022 
00023 #ifdef HAVE_CONFIG_H
00024 #include <config.h>
00025 #endif
00026 
00027 #include "kmailicalifaceimpl.h"
00028 #include "kmfoldertree.h"
00029 #include "kmfolderdir.h"
00030 #include "kmgroupware.h"
00031 #include "kmgroupwarefuncs.h"
00032 #include "kmfoldermgr.h"
00033 #include "kmcommands.h"
00034 #include "kmfolderindex.h"
00035 #include "kmmsgdict.h"
00036 
00037 #include <mimelib/enum.h>
00038 
00039 #include <kdebug.h>
00040 #include <kiconloader.h>
00041 #include <dcopclient.h>
00042 #include <kmessagebox.h>
00043 #include <kconfig.h>
00044 #include <qmap.h>
00045 
00046 /*
00047   This interface have three parts to it - libkcal interface;
00048   kmail interface; and helper functions.
00049 
00050   The libkcal interface and the kmail interface have the same three
00051   methods: add, delete and refresh. The only difference is that the
00052   libkcal interface is used from the IMAP resource in libkcal and
00053   the kmail interface is used from the groupware object in kmail.
00054 */
00055 
00056 KMailICalIfaceImpl::KMailICalIfaceImpl()
00057   : DCOPObject( "KMailICalIface" ), QObject( 0, "KMailICalIfaceImpl" ),
00058     mContacts( 0 ), mCalendar( 0 ), mNotes( 0 ), mTasks( 0 ), mJournals( 0 ),
00059     mFolderLanguage( 0 ), mUseResourceIMAP( false ), mResourceQuiet( false )
00060 {
00061 }
00062 
00063 // Receive an iCal or vCard from the resource
00064 bool KMailICalIfaceImpl::addIncidence( const QString& type, 
00065                                        const QString& uid, 
00066                                        const QString& ical )
00067 {
00068   if( !mUseResourceIMAP )
00069     return false;
00070 
00071   bool rc = false;
00072   bool quiet = mResourceQuiet;
00073   mResourceQuiet = true;
00074 
00075   // Find the folder
00076   KMFolder* folder = folderFromType( type );
00077   if( folder ) {
00078     // Make a new message for the incidence
00079     KMMessage* msg = new KMMessage();
00080     msg->initHeader();
00081     msg->setType( DwMime::kTypeText );
00082     if( folder == mContacts ) {
00083       msg->setSubtype( DwMime::kSubtypeXVCard );
00084       msg->setHeaderField( "Content-Type", "Text/X-VCard; charset=\"utf-8\"" );
00085       msg->setSubject( "vCard " + uid );
00086     } else {
00087       msg->setSubtype( DwMime::kSubtypeVCal );
00088       msg->setHeaderField("Content-Type",
00089                           "text/calendar; method=REQUEST; charset=\"utf-8\"");
00090       msg->setSubject( "iCal " + uid );
00091     }
00092     msg->setBodyEncoded( ical.utf8() );
00093 
00094     // Mark the message as read and store it in the folder
00095     msg->touch();
00096     folder->addMsg( msg );  
00097 
00098     rc = true;
00099   } else
00100     kdError() << "Not an IMAP resource folder" << endl;
00101 
00102   mResourceQuiet = quiet;
00103   return false;
00104 }
00105 
00106 // The resource orders a deletion
00107 bool KMailICalIfaceImpl::deleteIncidence( const QString& type,
00108                                           const QString& uid )
00109 {
00110   if( !mUseResourceIMAP )
00111     return false;
00112 
00113   bool rc = false;
00114   bool quiet = mResourceQuiet;
00115   mResourceQuiet = true;
00116 
00117   // Find the folder and the incidence in it
00118   KMFolder* folder = folderFromType( type );
00119   if( folder ) {
00120     KMMessage* msg = findMessageByUID( uid, folder );
00121     if( msg ) {
00122       // Message found - delete it and return happy
00123       deleteMsg( msg );
00124       rc = true;
00125     } else
00126       kdDebug(5006) << type << " not found, cannot remove uid " << uid << endl;
00127   } else
00128     kdError() << "Not an IMAP resource folder" << endl;
00129 
00130   mResourceQuiet = quiet;
00131   return true;
00132 }
00133 
00134 // The resource asks for a full list of incidences
00135 QStringList KMailICalIfaceImpl::incidences( const QString& type )
00136 {
00137   if( !mUseResourceIMAP )
00138     return QStringList();
00139 
00140   QStringList ilist;
00141 
00142   KMFolder* folder = folderFromType( type );
00143   if( folder ) {
00144     QString s;
00145     for( int i=0; i<folder->count(); ++i ) {
00146       bool unget = !folder->isMessage(i);
00147       if( KMGroupware::vPartFoundAndDecoded( folder->getMsg( i ), s ) ) {
00148         ilist << s;
00149       }
00150       if( unget ) folder->unGetMsg(i);
00151     }
00152   } else
00153     kdError() << "Not an IMAP resource folder" << endl;
00154 
00155   return ilist;
00156 }
00157 
00158 bool KMailICalIfaceImpl::update( const QString& type,
00159                                  const QStringList& entries )
00160 {
00161   if( !mUseResourceIMAP )
00162     return false;
00163 
00164   if( entries.count() & 2 == 1 )
00165     // Something is wrong - an odd amount of strings should not happen
00166     return false;
00167 
00168   QStringList::ConstIterator it = entries.begin();
00169   while( true ) {
00170     // Read them in pairs and call the single update method
00171     QString uid, entry;
00172     if( it == entries.end() )
00173       break;
00174     uid = *it;
00175     ++it;
00176     if( it == entries.end() )
00177       break;
00178     entry = *it;
00179     ++it;
00180 
00181     if( !update( type, uid, entry ) )
00182       // Some error happened
00183       return false;
00184   }
00185 
00186   return true;
00187 }
00188 
00189 bool KMailICalIfaceImpl::update( const QString& type, const QString& uid,
00190                                  const QString& entry )
00191 {
00192   if( !mUseResourceIMAP )
00193     return false;
00194 
00195   bool rc = true;
00196   bool quiet = mResourceQuiet;
00197   mResourceQuiet = true;
00198 
00199   // Find the folder and the incidence in it
00200   KMFolder* folder = folderFromType( type );
00201   if( folder ) {
00202     KMMessage* msg = findMessageByUID( uid, folder );
00203     if( msg ) {
00204       // Message found - update it
00205       deleteMsg( msg );
00206       addIncidence( type, uid, entry );
00207       rc = true;
00208     } else {
00209       kdDebug(5006) << type << " not found, cannot update uid " << uid << endl;
00210       // Since it doesn't seem to be there, save it instead
00211       addIncidence( type, uid, entry );
00212     }
00213   } else {
00214     kdError() << "Not an IMAP resource folder" << endl;
00215     rc = false;
00216   }
00217 
00218   mResourceQuiet = quiet;
00219   return rc;
00220 }
00221 
00222 // KMail added a file to one of the groupware folders
00223 void KMailICalIfaceImpl::slotIncidenceAdded( KMFolder* folder,
00224                                              Q_UINT32 sernum )
00225 {
00226   if( mResourceQuiet || !mUseResourceIMAP )
00227     return;
00228 
00229   QString type = icalFolderType( folder );
00230   if( !type.isEmpty() ) {
00231     // Get the index of the mail
00232     int i = 0;
00233     KMFolder* aFolder = 0;
00234     kmkernel->msgDict()->getLocation( sernum, &aFolder, &i );
00235     assert( folder == aFolder );
00236 
00237     // Read the iCal or vCard
00238     bool unget = !folder->isMessage( i );
00239     QString s;
00240     if( KMGroupware::vPartFoundAndDecoded( folder->getMsg( i ), s ) ) {
00241       QByteArray data;
00242       QDataStream arg(data, IO_WriteOnly );
00243       arg << type << s;
00244       emitDCOPSignal( "incidenceAdded(QString,QString)", data );
00245     }
00246     if( unget ) folder->unGetMsg(i);
00247   } else
00248     kdError() << "Not an IMAP resource folder" << endl;
00249 }
00250 
00251 // KMail deleted a file
00252 void KMailICalIfaceImpl::slotIncidenceDeleted( KMFolder* folder,
00253                                                Q_UINT32 sernum )
00254 {
00255   if( mResourceQuiet || !mUseResourceIMAP )
00256     return;
00257 
00258   QString type = icalFolderType( folder );
00259   if( !type.isEmpty() ) {
00260     // Get the index of the mail
00261     int i = 0;
00262     KMFolder* aFolder = 0;
00263     kmkernel->msgDict()->getLocation( sernum, &aFolder, &i );
00264     assert( folder == aFolder );
00265 
00266     // Read the iCal or vCard
00267     bool unget = !folder->isMessage( i );
00268     QString s;
00269     if( KMGroupware::vPartFoundAndDecoded( folder->getMsg( i ), s ) ) {
00270       QString uid( "UID" );
00271       vPartMicroParser( s.utf8(), uid );
00272       QByteArray data;
00273       QDataStream arg(data, IO_WriteOnly );
00274       arg << type << uid;
00275       emitDCOPSignal( "incidenceDeleted(QString,QString)", data );
00276     }
00277     if( unget ) folder->unGetMsg(i);
00278   } else
00279     kdError() << "Not a groupware folder" << endl;
00280 }
00281 
00282 // KMail orders a refresh
00283 void KMailICalIfaceImpl::slotRefresh( const QString& type )
00284 {
00285   if( mUseResourceIMAP ) {
00286     QByteArray data;
00287     QDataStream arg(data, IO_WriteOnly );
00288     arg << type;
00289     emitDCOPSignal( "signalRefresh(QString)", data );
00290   }
00291 }
00292 
00293 
00294 /****************************
00295  * The folder and message stuff code
00296  */
00297 
00298 KMFolder* KMailICalIfaceImpl::folderFromType( const QString& type )
00299 {
00300   if( mUseResourceIMAP ) {
00301     if( type == "Calendar" ) return mCalendar;
00302     else if( type == "Contact" ) return mContacts;
00303     else if( type == "Note" ) return mNotes;
00304     else if( type == "Task" || type == "Todo" ) return mTasks;
00305     else if( type == "Journal" ) return mJournals;
00306 
00307     kdError() << "No folder type \"" << type << "\"" << endl;
00308   }
00309 
00310   return 0;
00311 }
00312 
00313 
00314 // Returns true if folder is a resource folder. If the resource isn't enabled
00315 // this always returns false
00316 bool KMailICalIfaceImpl::isResourceImapFolder( KMFolder* folder ) const
00317 {
00318   return mUseResourceIMAP && folder &&
00319     ( folder == mCalendar || folder == mTasks || folder == mJournals ||
00320       folder == mNotes || folder == mContacts );
00321 }
00322 
00323 
00324 KFolderTreeItem::Type KMailICalIfaceImpl::folderType( KMFolder* folder ) const
00325 {
00326   if( mUseResourceIMAP && folder ) {
00327     if( folder == mCalendar )
00328       return KFolderTreeItem::Calendar;
00329     else if( folder == mContacts )
00330       return KFolderTreeItem::Contacts;
00331     else if( folder == mNotes )
00332       return KFolderTreeItem::Notes;
00333     else if( folder == mTasks )
00334       return KFolderTreeItem::Tasks;
00335     else if( folder == mJournals )
00336       return KFolderTreeItem::Journals;
00337   }
00338 
00339   return KFolderTreeItem::Other;
00340 }
00341 
00342 
00343 QString KMailICalIfaceImpl::icalFolderType( KMFolder* folder ) const
00344 {
00345   if( mUseResourceIMAP && folder ) {
00346     if( folder == mCalendar )
00347       return "Calendar";
00348     else if( folder == mContacts )
00349       return "Contact";
00350     else if( folder == mNotes )
00351       return "Note";
00352     else if( folder == mTasks )
00353       return "Task";
00354     else if( folder == mJournals )
00355       return "Journal";
00356   }
00357 
00358   return QString::null;
00359 }
00360 
00361 
00362 // Global tables of foldernames is different languages
00363 // For now: 0->English, 1->German, 2->French, 3->Dutch
00364 static QMap<KFolderTreeItem::Type,QString> folderNames[4];
00365 QString KMailICalIfaceImpl::folderName( KFolderTreeItem::Type type, int language ) const
00366 {
00367   static bool folderNamesSet = false;
00368   if( !folderNamesSet ) {
00369     folderNamesSet = true;
00370     /* NOTE: If you add something here, you also need to update
00371        GroupwarePage in configuredialog.cpp */
00372 
00373     // English
00374     folderNames[0][KFolderTreeItem::Calendar] = QString::fromLatin1("Calendar");
00375     folderNames[0][KFolderTreeItem::Tasks] = QString::fromLatin1("Tasks");
00376     folderNames[0][KFolderTreeItem::Journals] = QString::fromLatin1("Journal");
00377     folderNames[0][KFolderTreeItem::Contacts] = QString::fromLatin1("Contacts");
00378     folderNames[0][KFolderTreeItem::Notes] = QString::fromLatin1("Notes");
00379 
00380     // German
00381     folderNames[1][KFolderTreeItem::Calendar] = QString::fromLatin1("Kalender");
00382     folderNames[1][KFolderTreeItem::Tasks] = QString::fromLatin1("Aufgaben");
00383     folderNames[1][KFolderTreeItem::Journals] = QString::fromLatin1("Journal");
00384     folderNames[1][KFolderTreeItem::Contacts] = QString::fromLatin1("Kontakte");
00385     folderNames[1][KFolderTreeItem::Notes] = QString::fromLatin1("Notizen");
00386 
00387     // French
00388     folderNames[2][KFolderTreeItem::Calendar] = QString::fromLatin1("Calendrier");
00389     folderNames[2][KFolderTreeItem::Tasks] = QString::fromLatin1("Tāches");
00390     folderNames[2][KFolderTreeItem::Journals] = QString::fromLatin1("Journal");
00391     folderNames[2][KFolderTreeItem::Contacts] = QString::fromLatin1("Contacts");
00392     folderNames[2][KFolderTreeItem::Notes] = QString::fromLatin1("Notes");
00393 
00394     // Dutch
00395     folderNames[3][KFolderTreeItem::Calendar] = QString::fromLatin1("Agenda");
00396     folderNames[3][KFolderTreeItem::Tasks] = QString::fromLatin1("Taken");
00397     folderNames[3][KFolderTreeItem::Journals] = QString::fromLatin1("Logboek");
00398     folderNames[3][KFolderTreeItem::Contacts] = QString::fromLatin1("Contactpersonen");
00399     folderNames[3][KFolderTreeItem::Notes] = QString::fromLatin1("Notities");
00400   }
00401 
00402   if( language < 0 || language > 3 ) {
00403     return folderNames[mFolderLanguage][type];
00404   }
00405   else {
00406     return folderNames[language][type];
00407   }
00408 }
00409 
00410 
00411 // Find message matching a given UID
00412 KMMessage *KMailICalIfaceImpl::findMessageByUID( const QString& uid, KMFolder* folder )
00413 {
00414   if( !folder ) return 0;
00415 
00416   for( int i=0; i<folder->count(); ++i ) {
00417     bool unget = !folder->isMessage(i);
00418     KMMessage* msg = folder->getMsg( i );
00419     if( msg ) {
00420       QString vCal;
00421       if( KMGroupware::vPartFoundAndDecoded( msg, vCal ) ) {
00422         QString msgUid( "UID" );
00423         vPartMicroParser( vCal.utf8(), msgUid );
00424         if( msgUid == uid )
00425           return msg;
00426       }
00427     }
00428     if( unget ) folder->unGetMsg(i);
00429   }
00430 
00431   return 0;
00432 }
00433 
00434 void KMailICalIfaceImpl::deleteMsg( KMMessage *msg )
00435 {
00436   if( !msg ) return;
00437   ( new KMDeleteMsgCommand( msg->parent(), msg ) )->start();
00438 }
00439 
00440 /****************************
00441  * The config stuff
00442  */
00443 
00444 void KMailICalIfaceImpl::readConfig()
00445 {
00446   // Read the options
00447   KConfigGroup options( KMKernel::config(), "IMAP Resource" );
00448   bool enabled = options.readBoolEntry( "Enabled", false );
00449 
00450   if( !enabled ) {
00451     if( mUseResourceIMAP == true ) {
00452       // Shutting down
00453       mUseResourceIMAP = false;
00454       cleanup();
00455       kmkernel->groupware().reloadFolderTree();
00456     }
00457     return;
00458   }
00459 
00460   // Read remaining options
00461   unsigned int folderLanguage = options.readNumEntry( "Folder Language", 0 );
00462   if( folderLanguage > 3 ) folderLanguage = 0;
00463   QString parentName = options.readEntry("Folder Parent");
00464 
00465   // Find the folder parent
00466   KMFolderDir* folderParentDir;
00467   KMFolderType folderType;
00468   KMFolder* folderParent = kmkernel->folderMgr()->findIdString( parentName );
00469   if( folderParent == 0 )
00470     folderParent = kmkernel->dimapFolderMgr()->findIdString( parentName );
00471   if( folderParent == 0 )
00472     folderParent = kmkernel->imapFolderMgr()->findIdString( parentName );
00473   if( folderParent == 0 ) {
00474     // Maybe nothing was configured?
00475     folderParentDir = &(kmkernel->folderMgr()->dir());
00476     folderType = KMFolderTypeMaildir;
00477   } else {
00478     folderParentDir = folderParent->createChildFolder();
00479     folderType = folderParent->folderType();
00480   }
00481 
00482   // Make sure the folder parent has the subdirs
00483   bool makeSubFolders = false;
00484   KMFolderNode* node;
00485   node = folderParentDir->hasNamedFolder( folderName( KFolderTreeItem::Calendar ) );
00486   if( !node || node->isDir() ) makeSubFolders = true;
00487   node = folderParentDir->hasNamedFolder( folderName( KFolderTreeItem::Tasks ) );
00488   if( !node || node->isDir() ) makeSubFolders = true;
00489   node = folderParentDir->hasNamedFolder( folderName( KFolderTreeItem::Journals ) );
00490   if( !node || node->isDir() ) makeSubFolders = true;
00491   node = folderParentDir->hasNamedFolder( folderName( KFolderTreeItem::Contacts ) );
00492   if( !node || node->isDir() ) makeSubFolders = true;
00493   node = folderParentDir->hasNamedFolder( folderName( KFolderTreeItem::Notes ) );
00494   if( !node || node->isDir() ) makeSubFolders = true;
00495   if( makeSubFolders ) {
00496     // Not all subfolders were there, so ask if we can make them
00497     if( KMessageBox::questionYesNo( 0, i18n("KMail will now create the required folders for the IMAP resource"
00498                                             " as subfolders of %1. If you don't want this, press \"No\","
00499                                             " and the IMAP resource will be disabled").arg(folderParent!=0?folderParent->name():folderParentDir->name()),
00500                                     i18n("IMAP Resource Folders") ) == KMessageBox::No ) {
00501       mUseResourceIMAP = false;
00502       mFolderParent = 0;
00503       kmkernel->groupware().reloadFolderTree();
00504       return;
00505     }
00506   }
00507 
00508   // Check if something changed
00509   if( mUseResourceIMAP && !makeSubFolders && mFolderParent == folderParentDir && mFolderType == folderType )
00510     // Nothing changed
00511     return;
00512 
00513   // Make the new settings work
00514   mUseResourceIMAP = true;
00515   mFolderLanguage = folderLanguage;
00516   mFolderParent = folderParentDir;
00517   mFolderType = folderType;
00518 
00519   // Close the previous folders
00520   cleanup();
00521 
00522   // Set the new folders
00523   mCalendar = initFolder( KFolderTreeItem::Calendar, "GCa" );
00524   mTasks    = initFolder( KFolderTreeItem::Tasks, "GTa" );
00525   mJournals = initFolder( KFolderTreeItem::Journals, "GTa" );
00526   mContacts = initFolder( KFolderTreeItem::Contacts, "GCo" );
00527   mNotes    = initFolder( KFolderTreeItem::Notes, "GNo" );
00528 
00529   // Connect the expunged signal
00530   connect( mCalendar, SIGNAL( expunged() ), this, SLOT( slotRefreshCalendar() ) );
00531   connect( mTasks,    SIGNAL( expunged() ), this, SLOT( slotRefreshTasks() ) );
00532   connect( mJournals, SIGNAL( expunged() ), this, SLOT( slotRefreshJournals() ) );
00533   connect( mContacts, SIGNAL( expunged() ), this, SLOT( slotRefreshContacts() ) );
00534   connect( mNotes,    SIGNAL( expunged() ), this, SLOT( slotRefreshNotes() ) );
00535 
00536   // Bad hack
00537   connect( mNotes,    SIGNAL( changed() ),  this, SLOT( slotRefreshNotes() ) );
00538 
00539   // Make KOrganizer re-read everything
00540   slotRefresh( "Calendar" );
00541   slotRefresh( "Task" );
00542   slotRefresh( "Journal" );
00543   slotRefresh( "Contact" );
00544   slotRefresh( "Notes" );
00545 
00546   kmkernel->groupware().reloadFolderTree();
00547 }
00548 
00549 void KMailICalIfaceImpl::slotRefreshCalendar() { slotRefresh( "Calendar" ); }
00550 void KMailICalIfaceImpl::slotRefreshTasks() { slotRefresh( "Task" ); }
00551 void KMailICalIfaceImpl::slotRefreshJournals() { slotRefresh( "Journal" ); }
00552 void KMailICalIfaceImpl::slotRefreshContacts() { slotRefresh( "Contact" ); }
00553 void KMailICalIfaceImpl::slotRefreshNotes() { slotRefresh( "Notes" ); }
00554 
00555 KMFolder* KMailICalIfaceImpl::initFolder( KFolderTreeItem::Type itemType,
00556                                           const char* typeString )
00557 {
00558   // Figure out what type of folder this is supposed to be
00559   KMFolderType type = mFolderType;
00560   if( type == KMFolderTypeUnknown ) type = KMFolderTypeMaildir;
00561 
00562   // Find the folder
00563   KMFolder* folder = 0;
00564   KMFolderNode* node = mFolderParent->hasNamedFolder( folderName( itemType ) );
00565   if( node && !node->isDir() ) folder = static_cast<KMFolder*>(node);
00566   // It should never be possible that it's not there, but better safe than sorry
00567   if( !folder ) folder = mFolderParent->createFolder( folderName( itemType ), false, type );
00568   if( folder->canAccess() != 0 ) {
00569     KMessageBox::sorry(0, i18n("You do not have read/write permission to your %1 folder.")
00570                        .arg( folderName( itemType ) ) );
00571     return 0;
00572   }
00573   folder->setType( typeString );
00574   folder->setSystemFolder( true );
00575   folder->open();
00576 
00577   // Setup the signals to listen for changes
00578   connect( folder, SIGNAL( msgAdded( KMFolder*, Q_UINT32 ) ),
00579            this, SLOT( slotIncidenceAdded( KMFolder*, Q_UINT32 ) ) );
00580   connect( folder, SIGNAL( msgRemoved( KMFolder*, Q_UINT32 ) ),
00581            this, SLOT( slotIncidenceDeleted( KMFolder*, Q_UINT32 ) ) );
00582 
00583   return folder;
00584 }
00585 
00586 static void cleanupFolder( KMFolder* folder, KMailICalIfaceImpl* _this )
00587 {
00588   if( folder ) {
00589     folder->setType( "plain" );
00590     folder->setSystemFolder( false );
00591     folder->disconnect( _this );
00592     folder->close( true );
00593   }
00594 }
00595 
00596 void KMailICalIfaceImpl::cleanup()
00597 {
00598   cleanupFolder( mContacts, this );
00599   cleanupFolder( mCalendar, this );
00600   cleanupFolder( mNotes, this );
00601   cleanupFolder( mTasks, this );
00602   cleanupFolder( mJournals, this );
00603 
00604   mContacts = mCalendar = mNotes = mTasks = mJournals = 0;
00605 }
00606 
00607 void KMailICalIfaceImpl::loadPixmaps() const
00608 {
00609   static bool pixmapsLoaded = false;
00610 
00611   if( mUseResourceIMAP && !pixmapsLoaded ) {
00612     pixmapsLoaded = true;
00613     pixContacts = new QPixmap( UserIcon("kmgroupware_folder_contacts"));
00614     pixCalendar = new QPixmap( UserIcon("kmgroupware_folder_calendar"));
00615     pixNotes    = new QPixmap( UserIcon("kmgroupware_folder_notes"));
00616     pixTasks    = new QPixmap( UserIcon("kmgroupware_folder_tasks"));
00617     // TODO: Find a pixmap for journals
00618   }
00619 }
00620 
00621 QString KMailICalIfaceImpl::folderPixmap( KFolderTreeItem::Type type ) const
00622 {
00623   if( !mUseResourceIMAP )
00624     return QString::null;
00625 
00626   if( type == KFolderTreeItem::Contacts )
00627     return QString::fromLatin1( "kmgroupware_folder_contacts" );
00628   else if( type == KFolderTreeItem::Calendar )
00629     return QString::fromLatin1( "kmgroupware_folder_calendar" );
00630   else if( type == KFolderTreeItem::Notes )
00631     return QString::fromLatin1( "kmgroupware_folder_notes" );
00632   else if( type == KFolderTreeItem::Tasks )
00633     return QString::fromLatin1( "kmgroupware_folder_tasks" );
00634   else if( type == KFolderTreeItem::Journals )
00635     return QString::fromLatin1( "kmgroupware_folder_journals" );
00636 
00637   return QString::null;
00638 }
00639 
00640 QPixmap* KMailICalIfaceImpl::pixContacts;
00641 QPixmap* KMailICalIfaceImpl::pixCalendar;
00642 QPixmap* KMailICalIfaceImpl::pixNotes;
00643 QPixmap* KMailICalIfaceImpl::pixTasks;
00644 
00645 
00646 #include "kmailicalifaceimpl.moc"
KDE Logo
This file is part of the documentation for kmail Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat May 1 11:37:19 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003