kmail Library API Documentation

kmfoldercombobox.cpp

00001 /* kmail folder-list combo-box */
00002 /* Author: Ronen Tzur <rtzur@shani.net> */
00003 
00004 #include <config.h>
00005 
00006 #include "kmfoldercombobox.h"
00007 #include "kmfoldermgr.h"
00008 #include "kmkernel.h"
00009 
00010 //-----------------------------------------------------------------------------
00011 
00012 KMFolderComboBox::KMFolderComboBox( QWidget *parent, char *name )
00013   : QComboBox( parent, name )
00014 {
00015   init();
00016 }
00017 
00018 
00019 //-----------------------------------------------------------------------------
00020 
00021 KMFolderComboBox::KMFolderComboBox( bool rw, QWidget *parent, char *name )
00022   : QComboBox( rw, parent, name )
00023 {
00024   init();
00025 }
00026 
00027 
00028 //-----------------------------------------------------------------------------
00029 
00030 void KMFolderComboBox::init()
00031 {
00032   mSpecialIdx = -1;
00033   mOutboxShown = true;
00034   mImapShown = true;
00035   refreshFolders();
00036   connect( this, SIGNAL( activated(int) ), this, SLOT( slotActivated(int) ) );
00037   connect( kmkernel->folderMgr(), SIGNAL(changed()), this, SLOT(refreshFolders()) );
00038   connect( kmkernel->dimapFolderMgr(), SIGNAL(changed()), this, SLOT(refreshFolders()) );
00039   if (mImapShown) connect( kmkernel->imapFolderMgr(), SIGNAL(changed()), this, SLOT(refreshFolders()) );
00040 }
00041 
00042 
00043 //-----------------------------------------------------------------------------
00044 
00045 void KMFolderComboBox::showOutboxFolder(bool shown)
00046 {
00047   mOutboxShown = shown;
00048   refreshFolders();
00049 }
00050 
00051 //-----------------------------------------------------------------------------
00052 
00053 void KMFolderComboBox::showImapFolders(bool shown)
00054 {
00055   mImapShown = shown;
00056   refreshFolders();
00057   if (shown)
00058     connect( kmkernel->imapFolderMgr(), SIGNAL(changed()), this, SLOT(refreshFolders()) );
00059   else
00060     disconnect( kmkernel->imapFolderMgr(), SIGNAL(changed()), this, SLOT(refreshFolders()) );
00061 }
00062 
00063 //-----------------------------------------------------------------------------
00064 
00065 void KMFolderComboBox::createFolderList(QStringList *names,
00066                                         QValueList<QGuardedPtr<KMFolder> > *folders)
00067 {
00068   if (mImapShown)
00069     kmkernel->imapFolderMgr()->createI18nFolderList( names, folders );
00070 
00071   kmkernel->dimapFolderMgr()->createFolderList( names, folders );
00072   kmkernel->folderMgr()->createFolderList( names, folders );
00073   uint i = 0;
00074   while (i < folders->count())
00075   {
00076     if ((*(folders->at(i)))->isSystemFolder()
00077     && (*(folders->at(i)))->folderType() != KMFolderTypeImap
00078     && (*(folders->at(i)))->folderType() != KMFolderTypeCachedImap)
00079     {
00080       folders->remove(folders->at(i));
00081       names->remove(names->at(i));
00082     }
00083     else i++;
00084   }
00085 
00086   folders->prepend(kmkernel->draftsFolder());
00087   folders->prepend(kmkernel->trashFolder());
00088   folders->prepend(kmkernel->sentFolder());
00089   if (mOutboxShown) folders->prepend(kmkernel->outboxFolder());
00090   folders->prepend(kmkernel->inboxFolder());
00091   for (int i = ((mOutboxShown) ? 4 : 3); i >= 0; i--)
00092     names->prepend((*(folders->at(i)))->label());
00093 }
00094 
00095 //-----------------------------------------------------------------------------
00096 
00097 void KMFolderComboBox::refreshFolders()
00098 {
00099   QStringList names;
00100   QValueList<QGuardedPtr<KMFolder> > folders;
00101   createFolderList( &names, &folders );
00102 
00103   KMFolder *folder = getFolder();
00104   this->clear();
00105   insertStringList( names );
00106   setFolder( folder );
00107 }
00108 
00109 //-----------------------------------------------------------------------------
00110 
00111 void KMFolderComboBox::setFolder( KMFolder *aFolder )
00112 {
00113   QStringList names;
00114   QValueList<QGuardedPtr<KMFolder> > folders;
00115   createFolderList( &names, &folders );
00116 
00117   int idx = folders.findIndex( aFolder );
00118   if (idx == -1)
00119     idx = folders.findIndex( kmkernel->draftsFolder() );
00120   setCurrentItem( idx >= 0 ? idx : 0 );
00121 
00122   mFolder = aFolder;
00123 }
00124 
00125 void KMFolderComboBox::setFolder( const QString &idString )
00126 {
00127   KMFolder *folder = kmkernel->folderMgr()->findIdString( idString );
00128   if (!folder) folder = kmkernel->imapFolderMgr()->findIdString( idString );
00129   if (!folder) folder = kmkernel->dimapFolderMgr()->findIdString( idString );
00130   if (!folder && !idString.isEmpty())
00131   {
00132      if (mSpecialIdx >= 0)
00133         removeItem(mSpecialIdx);
00134      mSpecialIdx = count();
00135      insertItem(idString, -1);
00136      setCurrentItem(mSpecialIdx);
00137 
00138      mFolder = 0;
00139      return;
00140   }
00141   setFolder( folder );
00142 }
00143 
00144 //-----------------------------------------------------------------------------
00145 
00146 KMFolder *KMFolderComboBox::getFolder()
00147 {
00148   if (mFolder)
00149     return mFolder;
00150 
00151   QStringList names;
00152   QValueList<QGuardedPtr<KMFolder> > folders;
00153   createFolderList( &names, &folders );
00154 
00155   if (currentItem() == mSpecialIdx)
00156      return 0;
00157 
00158   QString text = currentText();
00159   int idx = 0;
00160   QStringList::Iterator it;
00161   for ( it = names.begin(); it != names.end(); ++it ) {
00162     if ( ! (*it).compare( text ) )
00163       return *folders.at( idx );
00164     idx++;
00165   }
00166 
00167   return kmkernel->draftsFolder();
00168 }
00169 
00170 //-----------------------------------------------------------------------------
00171 
00172 void KMFolderComboBox::slotActivated(int index)
00173 {
00174   QStringList names;
00175   QValueList<QGuardedPtr<KMFolder> > folders;
00176   createFolderList( &names, &folders );
00177 
00178   if (index == mSpecialIdx)
00179   {
00180      mFolder = 0;
00181   }
00182   else
00183   {
00184      mFolder = *folders.at( index );
00185   }
00186 }
00187 
00188 //-----------------------------------------------------------------------------
00189 
00190 #include "kmfoldercombobox.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:27 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003