You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
4.7 KiB
189 lines
4.7 KiB
15 years ago
|
/* kmail folder-list combo-box */
|
||
|
/* Author: Ronen Tzur <rtzur@shani.net> */
|
||
|
|
||
|
#include <config.h>
|
||
|
|
||
|
#include "kmfoldercombobox.h"
|
||
|
#include "kmfoldermgr.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
KMFolderComboBox::KMFolderComboBox( QWidget *parent, char *name )
|
||
|
: QComboBox( parent, name )
|
||
|
{
|
||
|
init();
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
KMFolderComboBox::KMFolderComboBox( bool rw, QWidget *parent, char *name )
|
||
|
: QComboBox( rw, parent, name )
|
||
|
{
|
||
|
init();
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
void KMFolderComboBox::init()
|
||
|
{
|
||
|
mSpecialIdx = -1;
|
||
|
mOutboxShown = true;
|
||
|
mImapShown = true;
|
||
|
refreshFolders();
|
||
|
connect( this, SIGNAL( activated(int) ),
|
||
|
this, SLOT( slotActivated(int) ) );
|
||
|
connect( kmkernel->folderMgr(), SIGNAL(changed()),
|
||
|
this, SLOT(refreshFolders()) );
|
||
|
connect( kmkernel->dimapFolderMgr(), SIGNAL(changed()),
|
||
|
this, SLOT(refreshFolders()) );
|
||
|
if (mImapShown)
|
||
|
connect( kmkernel->imapFolderMgr(), SIGNAL(changed()),
|
||
|
this, SLOT(refreshFolders()) );
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
void KMFolderComboBox::showOutboxFolder(bool shown)
|
||
|
{
|
||
|
mOutboxShown = shown;
|
||
|
refreshFolders();
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
void KMFolderComboBox::showImapFolders(bool shown)
|
||
|
{
|
||
|
mImapShown = shown;
|
||
|
refreshFolders();
|
||
|
if (shown)
|
||
|
connect( kmkernel->imapFolderMgr(), SIGNAL(changed()),
|
||
|
this, SLOT(refreshFolders()) );
|
||
|
else
|
||
|
disconnect( kmkernel->imapFolderMgr(), SIGNAL(changed()),
|
||
|
this, SLOT(refreshFolders()) );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
void KMFolderComboBox::createFolderList(QStringList *names,
|
||
|
QValueList<QGuardedPtr<KMFolder> > *folders)
|
||
|
{
|
||
|
kmkernel->folderMgr()->createI18nFolderList( names, folders );
|
||
|
if ( !mOutboxShown ) {
|
||
|
QValueList< QGuardedPtr<KMFolder> >::iterator folderIt = folders->begin();
|
||
|
QStringList::iterator namesIt = names->begin();
|
||
|
for ( ; folderIt != folders->end(); ++folderIt, ++namesIt ) {
|
||
|
KMFolder *folder = *folderIt;
|
||
|
if ( folder == kmkernel->outboxFolder() )
|
||
|
break;
|
||
|
}
|
||
|
if ( folderIt != folders->end() ) {
|
||
|
folders->remove( folderIt );
|
||
|
names->remove( namesIt );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (mImapShown)
|
||
|
kmkernel->imapFolderMgr()->createI18nFolderList( names, folders );
|
||
|
|
||
|
kmkernel->dimapFolderMgr()->createI18nFolderList( names, folders );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
void KMFolderComboBox::refreshFolders()
|
||
|
{
|
||
|
QStringList names;
|
||
|
QValueList<QGuardedPtr<KMFolder> > folders;
|
||
|
createFolderList( &names, &folders );
|
||
|
|
||
|
KMFolder *folder = getFolder();
|
||
|
this->clear();
|
||
|
insertStringList( names );
|
||
|
setFolder( folder );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
void KMFolderComboBox::setFolder( KMFolder *aFolder )
|
||
|
{
|
||
|
QStringList names;
|
||
|
QValueList<QGuardedPtr<KMFolder> > folders;
|
||
|
createFolderList( &names, &folders );
|
||
|
|
||
|
int idx = folders.findIndex( aFolder );
|
||
|
if (idx == -1)
|
||
|
idx = folders.findIndex( kmkernel->draftsFolder() );
|
||
|
setCurrentItem( idx >= 0 ? idx : 0 );
|
||
|
|
||
|
mFolder = aFolder;
|
||
|
}
|
||
|
|
||
|
void KMFolderComboBox::setFolder( const QString &idString )
|
||
|
{
|
||
|
KMFolder * folder = kmkernel->findFolderById( idString );
|
||
|
if (!folder && !idString.isEmpty())
|
||
|
{
|
||
|
if (mSpecialIdx >= 0)
|
||
|
removeItem(mSpecialIdx);
|
||
|
mSpecialIdx = count();
|
||
|
insertItem(idString, -1);
|
||
|
setCurrentItem(mSpecialIdx);
|
||
|
|
||
|
mFolder = 0;
|
||
|
return;
|
||
|
}
|
||
|
setFolder( folder );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
KMFolder *KMFolderComboBox::getFolder()
|
||
|
{
|
||
|
if (mFolder)
|
||
|
return mFolder;
|
||
|
|
||
|
QStringList names;
|
||
|
QValueList<QGuardedPtr<KMFolder> > folders;
|
||
|
createFolderList( &names, &folders );
|
||
|
|
||
|
if (currentItem() == mSpecialIdx)
|
||
|
return 0;
|
||
|
|
||
|
QString text = currentText();
|
||
|
int idx = 0;
|
||
|
QStringList::Iterator it;
|
||
|
for ( it = names.begin(); it != names.end(); ++it ) {
|
||
|
if ( ! (*it).compare( text ) )
|
||
|
return *folders.at( idx );
|
||
|
idx++;
|
||
|
}
|
||
|
|
||
|
return kmkernel->draftsFolder();
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
void KMFolderComboBox::slotActivated(int index)
|
||
|
{
|
||
|
QStringList names;
|
||
|
QValueList<QGuardedPtr<KMFolder> > folders;
|
||
|
createFolderList( &names, &folders );
|
||
|
|
||
|
if (index == mSpecialIdx)
|
||
|
{
|
||
|
mFolder = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
mFolder = *folders.at( index );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
#include "kmfoldercombobox.moc"
|