kmfoldercombobox.cpp
00001 /* kmail folder-list combo-box */ 00002 /* Author: Ronen Tzur <rtzur@shani.net> */ 00003 00004 #include <config.h> 00005 00006 #include "kmfoldercombobox.h" 00007 #include "kmfoldermgr.h" 00008 00009 //----------------------------------------------------------------------------- 00010 00011 KMFolderComboBox::KMFolderComboBox( TQWidget *parent, char *name ) 00012 : TQComboBox( parent, name ) 00013 { 00014 init(); 00015 } 00016 00017 00018 //----------------------------------------------------------------------------- 00019 00020 KMFolderComboBox::KMFolderComboBox( bool rw, TQWidget *parent, char *name ) 00021 : TQComboBox( rw, parent, name ) 00022 { 00023 init(); 00024 } 00025 00026 00027 //----------------------------------------------------------------------------- 00028 00029 void KMFolderComboBox::init() 00030 { 00031 mSpecialIdx = -1; 00032 mOutboxShown = true; 00033 mImapShown = true; 00034 refreshFolders(); 00035 connect( this, TQT_SIGNAL( activated(int) ), 00036 this, TQT_SLOT( slotActivated(int) ) ); 00037 connect( kmkernel->folderMgr(), TQT_SIGNAL(changed()), 00038 this, TQT_SLOT(refreshFolders()) ); 00039 connect( kmkernel->dimapFolderMgr(), TQT_SIGNAL(changed()), 00040 this, TQT_SLOT(refreshFolders()) ); 00041 if (mImapShown) 00042 connect( kmkernel->imapFolderMgr(), TQT_SIGNAL(changed()), 00043 this, TQT_SLOT(refreshFolders()) ); 00044 } 00045 00046 00047 //----------------------------------------------------------------------------- 00048 00049 void KMFolderComboBox::showOutboxFolder(bool shown) 00050 { 00051 mOutboxShown = shown; 00052 refreshFolders(); 00053 } 00054 00055 //----------------------------------------------------------------------------- 00056 00057 void KMFolderComboBox::showImapFolders(bool shown) 00058 { 00059 mImapShown = shown; 00060 refreshFolders(); 00061 if (shown) 00062 connect( kmkernel->imapFolderMgr(), TQT_SIGNAL(changed()), 00063 this, TQT_SLOT(refreshFolders()) ); 00064 else 00065 disconnect( kmkernel->imapFolderMgr(), TQT_SIGNAL(changed()), 00066 this, TQT_SLOT(refreshFolders()) ); 00067 } 00068 00069 //----------------------------------------------------------------------------- 00070 00071 void KMFolderComboBox::createFolderList(TQStringList *names, 00072 TQValueList<TQGuardedPtr<KMFolder> > *folders) 00073 { 00074 kmkernel->folderMgr()->createI18nFolderList( names, folders ); 00075 if ( !mOutboxShown ) { 00076 TQValueList< TQGuardedPtr<KMFolder> >::iterator folderIt = folders->begin(); 00077 TQStringList::iterator namesIt = names->begin(); 00078 for ( ; folderIt != folders->end(); ++folderIt, ++namesIt ) { 00079 KMFolder *folder = *folderIt; 00080 if ( folder == kmkernel->outboxFolder() ) 00081 break; 00082 } 00083 if ( folderIt != folders->end() ) { 00084 folders->remove( folderIt ); 00085 names->remove( namesIt ); 00086 } 00087 } 00088 00089 if (mImapShown) 00090 kmkernel->imapFolderMgr()->createI18nFolderList( names, folders ); 00091 00092 kmkernel->dimapFolderMgr()->createI18nFolderList( names, folders ); 00093 } 00094 00095 //----------------------------------------------------------------------------- 00096 00097 void KMFolderComboBox::refreshFolders() 00098 { 00099 TQStringList names; 00100 TQValueList<TQGuardedPtr<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 TQStringList names; 00114 TQValueList<TQGuardedPtr<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 TQString &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 TQStringList names; 00150 TQValueList<TQGuardedPtr<KMFolder> > folders; 00151 createFolderList( &names, &folders ); 00152 00153 if (currentItem() == mSpecialIdx) 00154 return 0; 00155 00156 TQString text = currentText(); 00157 int idx = 0; 00158 TQStringList::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 TQStringList names; 00173 TQValueList<TQGuardedPtr<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"