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()->createI18nFolderList( 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->findFolderById( idString ); 00128 if (!folder && !idString.isEmpty()) 00129 { 00130 if (mSpecialIdx >= 0) 00131 removeItem(mSpecialIdx); 00132 mSpecialIdx = count(); 00133 insertItem(idString, -1); 00134 setCurrentItem(mSpecialIdx); 00135 00136 mFolder = 0; 00137 return; 00138 } 00139 setFolder( folder ); 00140 } 00141 00142 //----------------------------------------------------------------------------- 00143 00144 KMFolder *KMFolderComboBox::getFolder() 00145 { 00146 if (mFolder) 00147 return mFolder; 00148 00149 QStringList names; 00150 QValueList<QGuardedPtr<KMFolder> > folders; 00151 createFolderList( &names, &folders ); 00152 00153 if (currentItem() == mSpecialIdx) 00154 return 0; 00155 00156 QString text = currentText(); 00157 int idx = 0; 00158 QStringList::Iterator it; 00159 for ( it = names.begin(); it != names.end(); ++it ) { 00160 if ( ! (*it).compare( text ) ) 00161 return *folders.at( idx ); 00162 idx++; 00163 } 00164 00165 return kmkernel->draftsFolder(); 00166 } 00167 00168 //----------------------------------------------------------------------------- 00169 00170 void KMFolderComboBox::slotActivated(int index) 00171 { 00172 QStringList names; 00173 QValueList<QGuardedPtr<KMFolder> > folders; 00174 createFolderList( &names, &folders ); 00175 00176 if (index == mSpecialIdx) 00177 { 00178 mFolder = 0; 00179 } 00180 else 00181 { 00182 mFolder = *folders.at( index ); 00183 } 00184 } 00185 00186 //----------------------------------------------------------------------------- 00187 00188 #include "kmfoldercombobox.moc"
KDE Logo
This file is part of the documentation for kmail Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Aug 27 12:52:33 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003