00001
00002
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"