kmfoldercombobox.cpp
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"
This file is part of the documentation for kmail Library Version 3.2.2.