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()->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"