kmail Library API Documentation

kmfolderdia.cpp

00001 // -*- mode: C++; c-file-style: "gnu" -*- 00002 // kmfolderdia.cpp 00003 #include <config.h> 00004 00005 #include "kmacctfolder.h" 00006 #include "kmfoldermgr.h" 00007 #include "identitycombo.h" 00008 #include "kmfolderimap.h" 00009 #include "kmfolder.h" 00010 #include "kmkernel.h" 00011 00012 #include <klineedit.h> 00013 #include <klocale.h> 00014 #include <knuminput.h> 00015 #include <kmessagebox.h> 00016 #include <kicondialog.h> 00017 #include <kconfig.h> 00018 #include <kdebug.h> 00019 00020 #include <qcheckbox.h> 00021 #include <qlayout.h> 00022 #include <qgroupbox.h> 00023 #include <qregexp.h> 00024 #include <qlabel.h> 00025 00026 #include <assert.h> 00027 00028 #include "kmfolderdia.h" //has to be later because of KMFolder* fdcls 00029 #include "kmfolderdia.moc" 00030 00031 00032 //----------------------------------------------------------------------------- 00033 KMFolderDialog::KMFolderDialog(KMFolder *aFolder, KMFolderDir *aFolderDir, 00034 QWidget *aParent, const QString& aCap, 00035 const QString& aName): 00036 KDialogBase( KDialogBase::Plain, 00037 aCap, KDialogBase::Ok|KDialogBase::Cancel, 00038 KDialogBase::Ok, aParent, "KMFolderDialog", TRUE ), 00039 mFolder( aFolder ), 00040 mFolderDir( aFolderDir ) 00041 { 00042 kdDebug(5006)<<"KMFolderDialog::KMFolderDialog()" << endl; 00043 00044 QFrame *page = plainPage(); 00045 00046 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint(), 00047 "topLayout" ); 00048 00049 QGroupBox *fpGroup = new QGroupBox( i18n("Folder Position"), page, "fpGroup" ); 00050 fpGroup->setColumnLayout( 0, Qt::Vertical ); 00051 00052 topLayout->addWidget( fpGroup ); 00053 00054 QHBoxLayout *hl = new QHBoxLayout( fpGroup->layout() ); 00055 hl->setSpacing( 6 ); 00056 00057 QLabel *label = new QLabel( i18n("&Name:"), fpGroup ); 00058 hl->addWidget( label ); 00059 00060 mNameEdit = new KLineEdit( fpGroup ); 00061 if( !mFolder ) 00062 mNameEdit->setFocus(); 00063 mNameEdit->setText( mFolder ? mFolder->label() : i18n("unnamed") ); 00064 if (!aName.isEmpty()) 00065 mNameEdit->setText(aName); 00066 mNameEdit->setMinimumSize(mNameEdit->sizeHint()); 00067 label->setBuddy( mNameEdit ); 00068 hl->addWidget( mNameEdit ); 00069 connect( mNameEdit, SIGNAL( textChanged( const QString & ) ), 00070 this, SLOT( slotFolderNameChanged( const QString & ) ) ); 00071 00072 QLabel* belongsToLabel = new QLabel( i18n("&Belongs to:" ), fpGroup ); 00073 hl->addWidget( belongsToLabel ); 00074 00075 mBelongsToComboBox = new QComboBox(fpGroup); 00076 hl->addWidget( mBelongsToComboBox ); 00077 belongsToLabel->setBuddy( mBelongsToComboBox ); 00078 00079 //start icons group 00080 QGroupBox *iconGroup = new QGroupBox( i18n("Folder Icons"), page, "iconGroup" ); 00081 iconGroup->setColumnLayout( 0, Qt::Vertical ); 00082 00083 topLayout->addWidget( iconGroup ); 00084 00085 QVBoxLayout *ivl = new QVBoxLayout( iconGroup->layout() ); 00086 ivl->setSpacing( 6 ); 00087 00088 QHBoxLayout *ihl = new QHBoxLayout( ivl ); 00089 mIconsCheckBox = new QCheckBox( i18n("Use custom &icons"), iconGroup ); 00090 mIconsCheckBox->setChecked( false ); 00091 ihl->addWidget( mIconsCheckBox ); 00092 00093 ihl = new QHBoxLayout( ivl ); 00094 mNormalIconLabel = new QLabel( i18n("&Normal:"), iconGroup ); 00095 mNormalIconLabel->setEnabled( false ); 00096 ihl->addWidget( mNormalIconLabel ); 00097 00098 mNormalIconButton = new KIconButton( iconGroup ); 00099 mNormalIconLabel->setBuddy( mNormalIconButton ); 00100 mNormalIconButton->setIconType( KIcon::NoGroup , KIcon::Any, true ); 00101 mNormalIconButton->setIconSize( 16 ); 00102 mNormalIconButton->setStrictIconSize( true ); 00103 mNormalIconButton->setFixedSize( 28, 28 ); 00104 mNormalIconButton->setIcon( QString("folder") ); 00105 mNormalIconButton->setEnabled( false ); 00106 ihl->addWidget( mNormalIconButton ); 00107 ihl->addStretch( 1 ); 00108 00109 mUnreadIconLabel = new QLabel( i18n("&Unread:"), iconGroup ); 00110 mUnreadIconLabel->setEnabled( false ); 00111 ihl->addWidget( mUnreadIconLabel ); 00112 00113 mUnreadIconButton = new KIconButton( iconGroup ); 00114 mUnreadIconLabel->setBuddy( mUnreadIconButton ); 00115 mUnreadIconButton->setIconType( KIcon::NoGroup, KIcon::Any, true ); 00116 mUnreadIconButton->setIconSize( 16 ); 00117 mUnreadIconButton->setStrictIconSize( true ); 00118 mUnreadIconButton->setFixedSize( 28, 28 ); 00119 mUnreadIconButton->setIcon( QString("folder_open") ); 00120 mUnreadIconButton->setEnabled( false ); 00121 ihl->addWidget( mUnreadIconButton ); 00122 ihl->addStretch( 1 ); 00123 00124 connect( mIconsCheckBox, SIGNAL(toggled(bool)), 00125 mNormalIconButton, SLOT(setEnabled(bool)) ); 00126 connect( mIconsCheckBox, SIGNAL(toggled(bool)), 00127 mUnreadIconButton, SLOT(setEnabled(bool)) ); 00128 connect( mIconsCheckBox, SIGNAL(toggled(bool)), 00129 mNormalIconLabel, SLOT(setEnabled(bool)) ); 00130 connect( mIconsCheckBox, SIGNAL(toggled(bool)), 00131 mUnreadIconLabel, SLOT(setEnabled(bool)) ); 00132 00133 connect( mNormalIconButton, SIGNAL(iconChanged(QString)), 00134 this, SLOT(slotChangeIcon(QString)) ); 00135 00136 //end icons group 00137 00138 mMailboxTypeGroupBox = new QGroupBox( i18n("Folder Type"), page, "mMailboxTypeGroupBox" ); 00139 mMailboxTypeGroupBox->setColumnLayout( 0, Qt::Vertical ); 00140 00141 topLayout->addWidget( mMailboxTypeGroupBox ); 00142 00143 QHBoxLayout *ml = new QHBoxLayout( mMailboxTypeGroupBox->layout() ); 00144 ml->setSpacing( 6 ); 00145 00146 QLabel *label_type = new QLabel( i18n("&Mailbox format:" ), mMailboxTypeGroupBox ); 00147 ml->addWidget( label_type ); 00148 mMailboxTypeComboBox = new QComboBox(mMailboxTypeGroupBox); 00149 label_type->setBuddy( mMailboxTypeComboBox ); 00150 mMailboxTypeComboBox->insertItem("mbox", 0); 00151 mMailboxTypeComboBox->insertItem("maildir", 1); 00152 mMailboxTypeComboBox->insertItem("search", 2); 00153 { 00154 KConfig *config = KMKernel::config(); 00155 KConfigGroupSaver saver(config, "General"); 00156 int type = config->readNumEntry("default-mailbox-format", 1); 00157 if ( type < 0 || type > 1 ) type = 1; 00158 mMailboxTypeComboBox->setCurrentItem( type ); 00159 } 00160 mMailboxTypeComboBox->setEnabled( !mFolder ); 00161 ml->addWidget( mMailboxTypeComboBox ); 00162 ml->addStretch( 1 ); 00163 00164 QStringList str; 00165 if( !mFolder ) { 00166 // new folder can be subfolder of any other folder 00167 kmkernel->folderMgr()->createFolderList( &str, &mFolders ); 00168 kmkernel->imapFolderMgr()->createI18nFolderList( &str, &mFolders ); 00169 kmkernel->dimapFolderMgr()->createFolderList( &str, &mFolders ); 00170 } 00171 else if( mFolder->folderType() != KMFolderTypeImap 00172 && mFolder->folderType() != KMFolderTypeCachedImap ) { 00173 // already existant local folder can only be moved locally 00174 kmkernel->folderMgr()->createFolderList( &str, &mFolders ); 00175 } 00176 else { 00177 // already existant IMAP folder can't be moved, but we add all 00178 // IMAP folders so that the correct parent folder can be shown 00179 kmkernel->imapFolderMgr()->createI18nFolderList( &str, &mFolders ); 00180 kmkernel->dimapFolderMgr()->createFolderList( &str, &mFolders ); 00181 } 00182 00183 // remove the local system folders from the list of parent folders because 00184 // they can't have child folders 00185 if( !mFolder || ( mFolder->folderType() != KMFolderTypeImap 00186 && mFolder->folderType() != KMFolderTypeCachedImap ) ) { 00187 QGuardedPtr<KMFolder> curFolder; 00188 QValueListIterator<QGuardedPtr<KMFolder> > folderIt = mFolders.begin(); 00189 QStringList::Iterator strIt = str.begin(); 00190 while( folderIt != mFolders.end() ) { 00191 curFolder = *folderIt; 00192 kdDebug(5006) << "Looking at folder '" << curFolder->label() << "'" 00193 << " and corresponding string '" << (*strIt) << "'" 00194 << endl; 00195 if( curFolder->isSystemFolder() 00196 && curFolder->folderType() != KMFolderTypeImap 00197 && curFolder->folderType() != KMFolderTypeCachedImap ) { 00198 kdDebug(5006) << "Removing folder '" << curFolder->label() << "'" 00199 << endl; 00200 folderIt = mFolders.remove( folderIt ); 00201 kdDebug(5006) << "Removing string '" << (*strIt) << "'" 00202 << endl; 00203 strIt = str.remove( strIt ); 00204 } 00205 else { 00206 ++folderIt; 00207 ++strIt; 00208 } 00209 } 00210 } 00211 00212 str.prepend( i18n( "Top Level" ) ); 00213 00214 mBelongsToComboBox->insertStringList( str ); 00215 // we want to know if the activated changes 00216 connect( mBelongsToComboBox, SIGNAL(activated(int)), SLOT(slotUpdateItems(int)) ); 00217 00218 // Mailing-list data tab 00219 // 00220 QGroupBox *mlGroup = new QGroupBox( i18n("Associated Mailing List" ), page ); 00221 mlGroup->setColumnLayout( 0, Qt::Vertical ); 00222 QGridLayout *mlLayout = new QGridLayout(mlGroup->layout()); 00223 mlLayout->setSpacing( 6 ); 00224 mHoldsMailingListCheckBox = new QCheckBox( i18n("&Folder holds a mailing list"), mlGroup); 00225 topLayout->addWidget( mlGroup ); 00226 mlLayout->addMultiCellWidget(mHoldsMailingListCheckBox, 0, 0, 0, 1); 00227 00228 mlLayout->setColStretch(0, 1); 00229 mlLayout->setColStretch(1, 100); 00230 00231 label = new QLabel( i18n("&Post address:"), mlGroup ); 00232 label->setEnabled(false); 00233 QObject::connect( mHoldsMailingListCheckBox, SIGNAL(toggled(bool)), 00234 label, SLOT(setEnabled(bool)) ); 00235 mlLayout->addWidget( label, 1, 0 ); 00236 mMailingListPostAddressEdit = new KLineEdit( mlGroup ); 00237 label->setBuddy( mMailingListPostAddressEdit ); 00238 mlLayout->addWidget( mMailingListPostAddressEdit, 1, 1 ); 00239 mMailingListPostAddressEdit->setEnabled(false); 00240 00241 connect( mHoldsMailingListCheckBox, SIGNAL(toggled(bool)), 00242 mMailingListPostAddressEdit, SLOT(setEnabled(bool)) ); 00243 00244 // 00245 // Expiry data. 00246 // 00247 mExpireGroupBox = new QGroupBox(i18n("Old Message Expiry"), page); 00248 mExpireGroupBox->setColumnLayout(0, Qt::Vertical); 00249 QGridLayout *expLayout = new QGridLayout(mExpireGroupBox->layout()); 00250 expLayout->setSpacing(6); 00251 00252 // Checkbox for setting whether expiry is enabled on this folder. 00253 mExpireFolderCheckBox = new QCheckBox(i18n("E&xpire old messages in this folder"), mExpireGroupBox); 00254 QObject::connect(mExpireFolderCheckBox, SIGNAL(toggled(bool)), SLOT(slotExpireFolder(bool))); 00255 topLayout->addWidget(mExpireGroupBox); 00256 expLayout->addMultiCellWidget(mExpireFolderCheckBox, 0, 0, 0, 1); 00257 00258 // Expiry time for read documents. 00259 label = new QLabel(i18n("Expire &read email after:"), mExpireGroupBox); 00260 label->setEnabled(false); 00261 QObject::connect( mExpireFolderCheckBox, SIGNAL(toggled(bool)), 00262 label, SLOT(setEnabled(bool)) ); 00263 expLayout->addWidget(label, 1, 0); 00264 mReadExpiryTimeNumInput = new KIntNumInput(mExpireGroupBox); 00265 mReadExpiryTimeNumInput->setRange(1, 500, 1, false); 00266 mReadExpiryTimeNumInput->setEnabled(false); 00267 mReadExpiryTimeNumInput->setValue(7); 00268 label->setBuddy(mReadExpiryTimeNumInput); 00269 expLayout->addWidget(mReadExpiryTimeNumInput, 1, 1); 00270 00271 mReadExpiryUnitsComboBox = new QComboBox(mExpireGroupBox); 00272 mReadExpiryUnitsComboBox->insertItem(i18n("Never")); 00273 mReadExpiryUnitsComboBox->insertItem(i18n("Day(s)")); 00274 mReadExpiryUnitsComboBox->insertItem(i18n("Week(s)")); 00275 mReadExpiryUnitsComboBox->insertItem(i18n("Month(s)")); 00276 mReadExpiryUnitsComboBox->setEnabled(false); 00277 expLayout->addWidget(mReadExpiryUnitsComboBox, 1, 2); 00278 connect( mReadExpiryUnitsComboBox, SIGNAL( activated( int ) ), 00279 this, SLOT( slotReadExpiryUnitChanged( int ) ) ); 00280 00281 // Expiry time for unread documents. 00282 label = new QLabel(i18n("Expire unr&ead email after:"), mExpireGroupBox); 00283 label->setEnabled(false); 00284 QObject::connect( mExpireFolderCheckBox, SIGNAL(toggled(bool)), 00285 label, SLOT(setEnabled(bool)) ); 00286 expLayout->addWidget(label, 2, 0); 00287 mUnreadExpiryTimeNumInput = new KIntNumInput(mExpireGroupBox); 00288 mUnreadExpiryTimeNumInput->setRange(1, 500, 1, false); 00289 mUnreadExpiryTimeNumInput->setEnabled(false); 00290 mUnreadExpiryTimeNumInput->setValue(28); 00291 label->setBuddy(mUnreadExpiryTimeNumInput); 00292 expLayout->addWidget(mUnreadExpiryTimeNumInput, 2, 1); 00293 00294 mUnreadExpiryUnitsComboBox = new QComboBox(mExpireGroupBox); 00295 mUnreadExpiryUnitsComboBox->insertItem(i18n("Never")); 00296 mUnreadExpiryUnitsComboBox->insertItem(i18n("Day(s)")); 00297 mUnreadExpiryUnitsComboBox->insertItem(i18n("Week(s)")); 00298 mUnreadExpiryUnitsComboBox->insertItem(i18n("Month(s)")); 00299 mUnreadExpiryUnitsComboBox->setEnabled(false); 00300 expLayout->addWidget(mUnreadExpiryUnitsComboBox, 2, 2); 00301 connect( mUnreadExpiryUnitsComboBox, SIGNAL( activated( int ) ), 00302 this, SLOT( slotUnreadExpiryUnitChanged( int ) ) ); 00303 00304 expLayout->setColStretch(0, 3); 00305 expLayout->setColStretch(0, 100); 00306 00307 00308 QGroupBox *idGroup = new QGroupBox( i18n("Identity" ), page ); 00309 idGroup->setColumnLayout( 0, Qt::Vertical ); 00310 QHBoxLayout *idLayout = new QHBoxLayout(idGroup->layout()); 00311 idLayout->setSpacing( 6 ); 00312 topLayout->addWidget( idGroup ); 00313 00314 label = new QLabel( i18n("&Sender:"), idGroup ); 00315 idLayout->addWidget( label ); 00316 mIdentityComboBox = new IdentityCombo( idGroup ); 00317 label->setBuddy( mIdentityComboBox ); 00318 idLayout->addWidget( mIdentityComboBox, 3 ); 00319 00320 QGroupBox* senderGroup = new QGroupBox( i18n("Show Sender/Receiver"), page, "senderGroup" ); 00321 senderGroup->setColumnLayout( 0, Qt::Vertical ); 00322 00323 topLayout->addWidget( senderGroup ); 00324 00325 QHBoxLayout *sl = new QHBoxLayout( senderGroup->layout() ); 00326 sl->setSpacing( 6 ); 00327 00328 QLabel *sender_label = new QLabel( i18n("Sho&w:" ), senderGroup ); 00329 sl->addWidget( sender_label ); 00330 mShowSenderReceiverComboBox = new QComboBox(senderGroup); 00331 sender_label->setBuddy(mShowSenderReceiverComboBox); 00332 mShowSenderReceiverComboBox->insertItem(i18n("Default"), 0); 00333 mShowSenderReceiverComboBox->insertItem(i18n("Sender"), 1); 00334 mShowSenderReceiverComboBox->insertItem(i18n("Receiver"), 2); 00335 00336 QString whoField; 00337 if (mFolder) whoField = mFolder->userWhoField(); 00338 if (whoField.isEmpty()) mShowSenderReceiverComboBox->setCurrentItem(0); 00339 if (whoField == "From") mShowSenderReceiverComboBox->setCurrentItem(1); 00340 if (whoField == "To") mShowSenderReceiverComboBox->setCurrentItem(2); 00341 00342 sl->addWidget( mShowSenderReceiverComboBox ); 00343 sl->addStretch( 1 ); 00344 00345 00346 if ( ((!mFolder) && mFolderDir->type() == KMImapDir) || 00347 (mFolder && (mFolder->folderType() == KMFolderTypeImap)) ) 00348 { 00349 KMFolderImap* imapFolder = 0; 00350 if (mFolder) imapFolder = static_cast<KMFolderImap*>((KMFolder*)mFolder); 00351 bool checked = (imapFolder) ? imapFolder->includeInMailCheck() : true; 00352 // should this folder be included in new-mail-checks? 00353 QGroupBox* newmailGroup = new QGroupBox( i18n("Check for New Mail"), page, "newmailGroup" ); 00354 newmailGroup->setColumnLayout( 0, Qt::Vertical ); 00355 topLayout->addWidget( newmailGroup ); 00356 00357 QHBoxLayout *nml = new QHBoxLayout( newmailGroup->layout() ); 00358 nml->setSpacing( 6 ); 00359 QLabel *newmailLabel = new QLabel( i18n("Include in check:" ), newmailGroup ); 00360 nml->addWidget( newmailLabel ); 00361 mNewMailCheckBox = new QCheckBox(newmailGroup); 00362 mNewMailCheckBox->setChecked(checked); 00363 newmailLabel->setBuddy(mNewMailCheckBox); 00364 nml->addWidget( mNewMailCheckBox ); 00365 nml->addStretch( 1 ); 00366 } 00367 00368 KMFolder* parentFolder = 0; 00369 00370 if( aFolderDir ) { 00371 // search the parent folder of the folder 00372 kdDebug(5006) << "search the parent folder of the folder" << endl; 00373 QValueListConstIterator<QGuardedPtr<KMFolder> > it; 00374 int i = 1; 00375 for( it = mFolders.begin(); it != mFolders.end(); ++it, ++i ) { 00376 kdDebug(5006) << "checking folder '" << (*it)->label() << "'" << endl; 00377 if( (*it)->child() == aFolderDir ) { 00378 parentFolder = *it; 00379 mBelongsToComboBox->setCurrentItem( i ); 00380 slotUpdateItems( i ); 00381 break; 00382 } 00383 } 00384 } 00385 00386 if( mFolder ) { 00387 initializeWithValuesFromFolder( mFolder ); 00388 00389 // mailbox folder type 00390 switch ( mFolder->folderType() ) { 00391 case KMFolderTypeSearch: 00392 mMailboxTypeComboBox->setCurrentItem( 2 ); 00393 belongsToLabel->hide(); 00394 mBelongsToComboBox->hide(); 00395 break; 00396 case KMFolderTypeMaildir: 00397 mMailboxTypeComboBox->setCurrentItem( 1 ); 00398 break; 00399 case KMFolderTypeMbox: 00400 mMailboxTypeComboBox->setCurrentItem( 0 ); 00401 break; 00402 case KMFolderTypeImap: 00403 case KMFolderTypeCachedImap: 00404 belongsToLabel->setEnabled( false ); 00405 mBelongsToComboBox->setEnabled( false ); 00406 break; 00407 default: ; 00408 } 00409 } 00410 else if ( parentFolder ) { 00411 initializeWithValuesFromFolder( parentFolder ); 00412 } 00413 00414 // Musn't be able to edit details for a system folder. 00415 // Make sure we don't bomb out if there isn't a folder 00416 // object yet (i.e. just about to create new folder). 00417 00418 if ( mFolder ) { 00419 if ( mFolder->folderType() == KMFolderTypeImap 00420 || mFolder->folderType() == KMFolderTypeCachedImap ) { 00421 mExpireGroupBox->hide(); 00422 mMailboxTypeGroupBox->hide(); 00423 } 00424 else if ( mFolder->isSystemFolder() ) { 00425 fpGroup->hide(); 00426 iconGroup->hide(); 00427 mMailboxTypeGroupBox->hide(); 00428 mlGroup->hide(); 00429 idGroup->hide(); 00430 } 00431 } 00432 00433 kdDebug(5006)<<"Exiting KMFolderDialog::KMFolderDialog()\n"; 00434 } 00435 00436 00437 //----------------------------------------------------------------------------- 00438 void KMFolderDialog::initializeWithValuesFromFolder( KMFolder* folder ) { 00439 if ( !folder ) 00440 return; 00441 00442 // folder icons 00443 mIconsCheckBox->setChecked( folder->useCustomIcons() ); 00444 mNormalIconLabel->setEnabled( folder->useCustomIcons() ); 00445 mNormalIconButton->setEnabled( folder->useCustomIcons() ); 00446 mUnreadIconLabel->setEnabled( folder->useCustomIcons() ); 00447 mUnreadIconButton->setEnabled( folder->useCustomIcons() ); 00448 QString iconPath = folder->normalIconPath(); 00449 if ( !iconPath.isEmpty() ) 00450 mNormalIconButton->setIcon( iconPath ); 00451 iconPath = folder->unreadIconPath(); 00452 if ( !iconPath.isEmpty() ) 00453 mUnreadIconButton->setIcon( iconPath ); 00454 00455 00456 // mailing-list related settings 00457 mMailingListPostAddressEdit->setText( folder->mailingListPostAddress() ); 00458 mMailingListPostAddressEdit->setEnabled( folder->isMailingList() ); 00459 mHoldsMailingListCheckBox->setChecked( folder->isMailingList() ); 00460 00461 // folder identity 00462 mIdentityComboBox->setCurrentIdentity( folder->identity() ); 00463 00464 // settings for automatic deletion of old messages 00465 mExpireFolderCheckBox->setChecked( folder->isAutoExpire() ); 00466 // Legal values for units are 0=never, 1=days, 2=weeks, 3=months. 00467 // Should really do something better than hardcoding this everywhere. 00468 if( folder->getReadExpireUnits() >= 0 00469 && folder->getReadExpireUnits() < expireMaxUnits) { 00470 mReadExpiryUnitsComboBox->setCurrentItem( folder->getReadExpireUnits() ); 00471 } 00472 if( folder->getUnreadExpireUnits() >= 0 00473 && folder->getUnreadExpireUnits() < expireMaxUnits ) { 00474 mUnreadExpiryUnitsComboBox->setCurrentItem( folder->getUnreadExpireUnits() ); 00475 } 00476 int age = folder->getReadExpireAge(); 00477 if ( age >= 1 && age <= 500 ) { 00478 mReadExpiryTimeNumInput->setValue( age ); 00479 } else { 00480 mReadExpiryTimeNumInput->setValue( 7 ); 00481 } 00482 age = folder->getUnreadExpireAge(); 00483 if ( age >= 1 && age <= 500 ) { 00484 mUnreadExpiryTimeNumInput->setValue( age ); 00485 } else { 00486 mUnreadExpiryTimeNumInput->setValue( 28 ); 00487 } 00488 if( !folder->isAutoExpire() ) { 00489 mReadExpiryTimeNumInput->setEnabled( false ); 00490 mReadExpiryUnitsComboBox->setEnabled( false ); 00491 mUnreadExpiryTimeNumInput->setEnabled( false ); 00492 mUnreadExpiryUnitsComboBox->setEnabled( false ); 00493 } 00494 else { 00495 // disable the number fields if "Never" is selected 00496 mReadExpiryTimeNumInput->setEnabled( mReadExpiryUnitsComboBox->currentItem() != 0 ); 00497 mUnreadExpiryTimeNumInput->setEnabled( mUnreadExpiryUnitsComboBox->currentItem() != 0 ); 00498 } 00499 } 00500 00501 //----------------------------------------------------------------------------- 00502 void KMFolderDialog::slotFolderNameChanged( const QString& str ) 00503 { 00504 enableButtonOK( !str.isEmpty() ); 00505 } 00506 00507 //----------------------------------------------------------------------------- 00508 void KMFolderDialog::slotUpdateItems ( int current ) 00509 { 00510 KMFolder* selectedFolder = 0; 00511 // check if the index is valid (the top level has no entrance in the mFolders) 00512 if (current > 0) selectedFolder = *mFolders.at(current - 1); 00513 if (selectedFolder && (selectedFolder->folderType() == KMFolderTypeImap || 00514 selectedFolder->folderType() == KMFolderTypeCachedImap)) 00515 { 00516 // deactivate stuff that is not available for imap 00517 mMailboxTypeGroupBox->setEnabled( false ); 00518 mExpireGroupBox->setEnabled( false ); 00519 } else { 00520 // activate it 00521 mMailboxTypeGroupBox->setEnabled( true ); 00522 mExpireGroupBox->setEnabled( true ); 00523 } 00524 } 00525 00526 //----------------------------------------------------------------------------- 00527 void KMFolderDialog::slotOk() 00528 { 00529 bool bIsNewFolder = ( !mFolder ); 00530 // moving of IMAP folders is not yet supported 00531 if ( bIsNewFolder || !mFolder->isSystemFolder() ) 00532 { 00533 QString acctName; 00534 QString fldName, oldFldName; 00535 KMFolderDir *selectedFolderDir = &(kmkernel->folderMgr()->dir()); 00536 KMFolder *selectedFolder = 0; 00537 int curFolder = mBelongsToComboBox->currentItem(); 00538 00539 if( !bIsNewFolder ) oldFldName = mFolder->name(); 00540 if (!mNameEdit->text().isEmpty()) fldName = mNameEdit->text(); 00541 else fldName = oldFldName; 00542 fldName.replace("/", ""); 00543 fldName.replace(QRegExp("^\\.*"), ""); 00544 if (fldName.isEmpty()) fldName = i18n("unnamed"); 00545 00546 if (mMailboxTypeComboBox->currentItem() == 2) { 00547 selectedFolderDir = &(kmkernel->searchFolderMgr()->dir()); 00548 } 00549 else if (curFolder != 0) 00550 { 00551 selectedFolder = *mFolders.at(curFolder - 1); 00552 selectedFolderDir = selectedFolder->createChildFolder(); 00553 } 00554 00555 QString message = i18n( "<qt>Failed to create folder <b>%1</b>, folder already exists.</qt>" ).arg(fldName); 00556 if( selectedFolderDir->hasNamedFolder( fldName ) 00557 && ( !( mFolder 00558 && ( selectedFolderDir == mFolder->parent() ) 00559 && ( mFolder->name() == fldName ) ) ) ) 00560 { 00561 KMessageBox::error( this, message ); 00562 return; 00563 } 00564 00565 message = i18n( "<qt>Cannot move folder <b>%1</b> into a subfolder below itself.</qt>" ).arg(fldName); 00566 KMFolderDir* folderDir = selectedFolderDir; 00567 00568 00569 // Buggy? 00570 if( mFolder && mFolder->child() ) 00571 while( ( folderDir != &kmkernel->folderMgr()->dir() ) 00572 && ( folderDir != mFolder->parent() ) ) { 00573 if( folderDir->findRef( mFolder ) != -1 ) { 00574 KMessageBox::error( this, message ); 00575 return; 00576 } 00577 folderDir = folderDir->parent(); 00578 } 00579 // End buggy? 00580 00581 00582 if( mFolder && mFolder->child() && selectedFolderDir && 00583 ( selectedFolderDir->path().find( mFolder->child()->path() + "/" ) == 0 ) ) { 00584 KMessageBox::error( this, message ); 00585 return; 00586 } 00587 00588 if( mFolder && mFolder->child() 00589 && ( selectedFolderDir == mFolder->child() ) ) { 00590 KMessageBox::error( this, message ); 00591 return; 00592 } 00593 00594 if( bIsNewFolder ) { 00595 if (selectedFolder && selectedFolder->folderType() == KMFolderTypeImap) 00596 { 00597 mFolder = kmkernel->imapFolderMgr()->createFolder( fldName, FALSE, KMFolderTypeImap, selectedFolderDir ); 00598 static_cast<KMFolderImap*>(selectedFolder)->createFolder(fldName); 00599 } else if (selectedFolder && selectedFolder->folderType() == KMFolderTypeCachedImap){ 00600 mFolder = kmkernel->dimapFolderMgr()->createFolder( fldName, FALSE, KMFolderTypeCachedImap, selectedFolderDir ); 00601 } else if (mMailboxTypeComboBox->currentItem() == 2) { 00602 mFolder = kmkernel->searchFolderMgr()->createFolder(fldName, FALSE, KMFolderTypeSearch, &kmkernel->searchFolderMgr()->dir() ); 00603 } else if (mMailboxTypeComboBox->currentItem() == 1) { 00604 mFolder = kmkernel->folderMgr()->createFolder(fldName, FALSE, KMFolderTypeMaildir, selectedFolderDir ); 00605 } else { 00606 mFolder = kmkernel->folderMgr()->createFolder(fldName, FALSE, KMFolderTypeMbox, selectedFolderDir ); 00607 } 00608 } 00609 else if( ( oldFldName != fldName ) 00610 || ( mFolder->parent() != selectedFolderDir ) ) 00611 { 00612 if( mFolder->parent() != selectedFolderDir ) { 00613 if( mFolder->folderType() == KMFolderTypeCachedImap ) { 00614 QString message = i18n("Moving IMAP folders is not supported"); 00615 KMessageBox::error( this, message ); 00616 } else 00617 mFolder->rename(fldName, selectedFolderDir ); 00618 } else 00619 mFolder->rename(fldName); 00620 00621 kmkernel->folderMgr()->contentsChanged(); 00622 } 00623 } 00624 00625 if( mFolder ) 00626 { 00627 // settings for mailingList 00628 mFolder->setMailingList( mHoldsMailingListCheckBox->isChecked() ); 00629 mFolder->setMailingListPostAddress( mMailingListPostAddressEdit->text() ); 00630 mFolder->setMailingListAdminAddress( QString::null ); 00631 00632 mFolder->setIdentity( mIdentityComboBox->currentIdentity() ); 00633 00634 // Settings for auto expiry of old email messages. 00635 mFolder->setAutoExpire(mExpireFolderCheckBox->isChecked()); 00636 mFolder->setUnreadExpireAge(mUnreadExpiryTimeNumInput->value()); 00637 mFolder->setReadExpireAge(mReadExpiryTimeNumInput->value()); 00638 mFolder->setUnreadExpireUnits((ExpireUnits)mUnreadExpiryUnitsComboBox->currentItem()); 00639 mFolder->setReadExpireUnits((ExpireUnits)mReadExpiryUnitsComboBox->currentItem()); 00640 // Update the tree iff new icon paths are different and not empty or if 00641 // useCustomIcons changed. 00642 if ( mFolder->useCustomIcons() != mIconsCheckBox->isChecked() ) { 00643 mFolder->setUseCustomIcons( mIconsCheckBox->isChecked() ); 00644 // Reset icons, useCustomIcons was turned off. 00645 if ( !mFolder->useCustomIcons() ) { 00646 mFolder->setIconPaths( "", "" ); 00647 } 00648 } 00649 if ( mFolder->useCustomIcons() && 00650 (( mNormalIconButton->icon() != mFolder->normalIconPath() ) && 00651 ( !mNormalIconButton->icon().isEmpty())) || 00652 (( mUnreadIconButton->icon() != mFolder->unreadIconPath() ) && 00653 ( !mUnreadIconButton->icon().isEmpty())) ) { 00654 mFolder->setIconPaths( mNormalIconButton->icon(), mUnreadIconButton->icon() ); 00655 } 00656 // set whoField 00657 if (mShowSenderReceiverComboBox->currentItem() == 1) 00658 mFolder->setUserWhoField("From"); 00659 else if (mShowSenderReceiverComboBox->currentItem() == 2) 00660 mFolder->setUserWhoField("To"); 00661 else 00662 mFolder->setUserWhoField(QString::null); 00663 00664 if( bIsNewFolder ) 00665 mFolder->close(); 00666 00667 if( mFolder->folderType() == KMFolderTypeImap ) 00668 { 00669 KMFolderImap* imapFolder = static_cast<KMFolderImap*>( (KMFolder*) mFolder ); 00670 imapFolder->setIncludeInMailCheck( 00671 mNewMailCheckBox->isChecked() ); 00672 } 00673 } 00674 00675 KDialogBase::slotOk(); 00676 } 00677 00678 00683 void KMFolderDialog::slotExpireFolder(bool expire) 00684 { 00685 if (expire) { 00686 // disable the number field if "Never" is selected 00687 mReadExpiryTimeNumInput->setEnabled( mReadExpiryUnitsComboBox->currentItem() != 0 ); 00688 mReadExpiryUnitsComboBox->setEnabled(true); 00689 // disable the number field if "Never" is selected 00690 mUnreadExpiryTimeNumInput->setEnabled( mUnreadExpiryUnitsComboBox->currentItem() != 0 ); 00691 mUnreadExpiryUnitsComboBox->setEnabled(true); 00692 } else { 00693 mReadExpiryTimeNumInput->setEnabled(false); 00694 mReadExpiryUnitsComboBox->setEnabled(false); 00695 mUnreadExpiryTimeNumInput->setEnabled(false); 00696 mUnreadExpiryUnitsComboBox->setEnabled(false); 00697 } 00698 } 00699 00700 00704 void 00705 KMFolderDialog::slotReadExpiryUnitChanged( int value ) 00706 { 00707 // disable the number field if "Never" is selected 00708 mReadExpiryTimeNumInput->setEnabled( value != 0 ); 00709 } 00710 00711 00715 void 00716 KMFolderDialog::slotUnreadExpiryUnitChanged( int value ) 00717 { 00718 // disable the number field if "Never" is selected 00719 mUnreadExpiryTimeNumInput->setEnabled( value != 0 ); 00720 } 00721 00722 00723 void 00724 KMFolderDialog::slotChangeIcon( QString icon ) // can't use a const-ref here, due to KIconButton's signal 00725 { 00726 mUnreadIconButton->setIcon( icon ); 00727 }
KDE Logo
This file is part of the documentation for kmail Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Jul 28 23:58:00 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003