krop's commit fixes my problem in a better way, reverting
[kdepim.git] / kmail / kmfoldercombobox.cpp
blob0d161ca6fb219c11fbb8a07afcab388614620f47
1 /* kmail folder-list combo-box */
2 /* Author: Ronen Tzur <rtzur@shani.net> */
5 #include "kmfoldercombobox.h"
6 #include "kmfoldermgr.h"
8 //-----------------------------------------------------------------------------
10 KMFolderComboBox::KMFolderComboBox( QWidget *parent ) : KComboBox( parent )
12 init();
16 //-----------------------------------------------------------------------------
18 void KMFolderComboBox::init()
20 mSpecialIdx = -1;
21 mOutboxShown = true;
22 mImapShown = true;
23 refreshFolders();
24 connect( this, SIGNAL( activated(int) ),
25 this, SLOT( slotActivated(int) ) );
26 connect( kmkernel->folderMgr(), SIGNAL(changed()),
27 this, SLOT(refreshFolders()) );
28 connect( kmkernel->dimapFolderMgr(), SIGNAL(changed()),
29 this, SLOT(refreshFolders()) );
30 if (mImapShown)
31 connect( kmkernel->imapFolderMgr(), SIGNAL(changed()),
32 this, SLOT(refreshFolders()) );
36 //-----------------------------------------------------------------------------
38 void KMFolderComboBox::showOutboxFolder(bool shown)
40 mOutboxShown = shown;
41 refreshFolders();
44 //-----------------------------------------------------------------------------
46 void KMFolderComboBox::showImapFolders(bool shown)
48 mImapShown = shown;
49 refreshFolders();
50 if (shown)
51 connect( kmkernel->imapFolderMgr(), SIGNAL(changed()),
52 this, SLOT(refreshFolders()) );
53 else
54 disconnect( kmkernel->imapFolderMgr(), SIGNAL(changed()),
55 this, SLOT(refreshFolders()) );
58 //-----------------------------------------------------------------------------
60 void KMFolderComboBox::createFolderList(QStringList *names,
61 QList<QPointer<KMFolder> > *folders)
63 kmkernel->folderMgr()->createI18nFolderList( names, folders );
64 if ( !mOutboxShown ) {
65 QList< QPointer<KMFolder> >::iterator folderIt = folders->begin();
66 QStringList::iterator namesIt = names->begin();
67 for ( ; folderIt != folders->end(); ++folderIt, ++namesIt ) {
68 KMFolder *folder = *folderIt;
69 if ( folder == kmkernel->outboxFolder() )
70 break;
72 if ( folderIt != folders->end() ) {
73 folders->erase( folderIt );
74 names->erase( namesIt );
78 if (mImapShown)
79 kmkernel->imapFolderMgr()->createI18nFolderList( names, folders );
81 kmkernel->dimapFolderMgr()->createI18nFolderList( names, folders );
84 //-----------------------------------------------------------------------------
86 void KMFolderComboBox::refreshFolders()
88 QStringList names;
89 QList<QPointer<KMFolder> > folders;
90 createFolderList( &names, &folders );
92 KMFolder *folder = getFolder();
93 this->clear();
94 addItems( names );
95 setFolder( folder );
98 //-----------------------------------------------------------------------------
100 void KMFolderComboBox::setFolder( KMFolder *aFolder )
102 QStringList names;
103 QList<QPointer<KMFolder> > folders;
104 createFolderList( &names, &folders );
106 int idx = folders.indexOf( aFolder );
107 if (idx == -1)
108 idx = folders.indexOf( kmkernel->draftsFolder() );
109 setCurrentIndex( idx >= 0 ? idx : 0 );
111 mFolder = aFolder;
114 void KMFolderComboBox::setFolder( const QString &idString )
116 KMFolder * folder = kmkernel->findFolderById( idString );
117 if (!folder && !idString.isEmpty())
119 if (mSpecialIdx >= 0)
120 removeItem(mSpecialIdx);
121 mSpecialIdx = count();
122 insertItem(-1, idString);
123 setCurrentIndex(mSpecialIdx);
125 mFolder = 0;
126 return;
128 setFolder( folder );
131 //-----------------------------------------------------------------------------
133 KMFolder *KMFolderComboBox::getFolder()
135 if (mFolder)
136 return mFolder;
138 QStringList names;
139 QList<QPointer<KMFolder> > folders;
140 createFolderList( &names, &folders );
142 if (currentIndex() == mSpecialIdx)
143 return 0;
145 QString text = currentText();
146 int idx = 0;
147 QStringList::Iterator it;
148 for ( it = names.begin(); it != names.end(); ++it ) {
149 if ( ! (*it).compare( text ) )
150 return folders.at( idx );
151 idx++;
154 return kmkernel->draftsFolder();
157 //-----------------------------------------------------------------------------
159 void KMFolderComboBox::slotActivated(int index)
161 QStringList names;
162 QList<QPointer<KMFolder> > folders;
163 createFolderList( &names, &folders );
165 if (index == mSpecialIdx)
167 mFolder = 0;
169 else
171 mFolder = folders.at( index );
175 //-----------------------------------------------------------------------------
177 #include "kmfoldercombobox.moc"