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