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   kmkernel->folderMgr()->createI18nFolderList( names, folders );
00069   if ( !mOutboxShown ) {
00070     QValueList< QGuardedPtr<KMFolder> >::iterator folderIt = folders->begin();
00071     QStringList::iterator namesIt = names->begin();
00072     for ( ; folderIt != folders->end(); ++folderIt, ++namesIt ) {
00073       KMFolder *folder = *folderIt;
00074       if ( folder == kmkernel->outboxFolder() )
00075         break;
00076     }
00077     if ( folderIt != folders->end() ) {
00078       folders->remove( folderIt );
00079       names->remove( namesIt );
00080     }
00081   }
00082 
00083   if (mImapShown)
00084     kmkernel->imapFolderMgr()->createI18nFolderList( names, folders );
00085 
00086   kmkernel->dimapFolderMgr()->createI18nFolderList( names, folders );
00087 }
00088 
00089 //-----------------------------------------------------------------------------
00090 
00091 void KMFolderComboBox::refreshFolders()
00092 {
00093   QStringList names;
00094   QValueList<QGuardedPtr<KMFolder> > folders;
00095   createFolderList( &names, &folders );
00096 
00097   KMFolder *folder = getFolder();
00098   this->clear();
00099   insertStringList( names );
00100   setFolder( folder );
00101 }
00102 
00103 //-----------------------------------------------------------------------------
00104 
00105 void KMFolderComboBox::setFolder( KMFolder *aFolder )
00106 {
00107   QStringList names;
00108   QValueList<QGuardedPtr<KMFolder> > folders;
00109   createFolderList( &names, &folders );
00110 
00111   int idx = folders.findIndex( aFolder );
00112   if (idx == -1)
00113     idx = folders.findIndex( kmkernel->draftsFolder() );
00114   setCurrentItem( idx >= 0 ? idx : 0 );
00115 
00116   mFolder = aFolder;
00117 }
00118 
00119 void KMFolderComboBox::setFolder( const QString &idString )
00120 {
00121   KMFolder * folder = kmkernel->findFolderById( idString );
00122   if (!folder && !idString.isEmpty())
00123   {
00124      if (mSpecialIdx >= 0)
00125         removeItem(mSpecialIdx);
00126      mSpecialIdx = count();
00127      insertItem(idString, -1);
00128      setCurrentItem(mSpecialIdx);
00129 
00130      mFolder = 0;
00131      return;
00132   }
00133   setFolder( folder );
00134 }
00135 
00136 //-----------------------------------------------------------------------------
00137 
00138 KMFolder *KMFolderComboBox::getFolder()
00139 {
00140   if (mFolder)
00141     return mFolder;
00142 
00143   QStringList names;
00144   QValueList<QGuardedPtr<KMFolder> > folders;
00145   createFolderList( &names, &folders );
00146 
00147   if (currentItem() == mSpecialIdx)
00148      return 0;
00149 
00150   QString text = currentText();
00151   int idx = 0;
00152   QStringList::Iterator it;
00153   for ( it = names.begin(); it != names.end(); ++it ) {
00154     if ( ! (*it).compare( text ) )
00155       return *folders.at( idx );
00156     idx++;
00157   }
00158 
00159   return kmkernel->draftsFolder();
00160 }
00161 
00162 //-----------------------------------------------------------------------------
00163 
00164 void KMFolderComboBox::slotActivated(int index)
00165 {
00166   QStringList names;
00167   QValueList<QGuardedPtr<KMFolder> > folders;
00168   createFolderList( &names, &folders );
00169 
00170   if (index == mSpecialIdx)
00171   {
00172      mFolder = 0;
00173   }
00174   else
00175   {
00176      mFolder = *folders.at( index );
00177   }
00178 }
00179 
00180 //-----------------------------------------------------------------------------
00181 
00182 #include "kmfoldercombobox.moc"
KDE Logo
This file is part of the documentation for kmail Library Version 3.3.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Oct 4 14:42:21 2007 by doxygen 1.4.2 written by Dimitri van Heesch, © 1997-2003