00001
00002
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"
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
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
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
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
00174 kmkernel->folderMgr()->createFolderList( &str, &mFolders );
00175 }
00176 else {
00177
00178
00179 kmkernel->imapFolderMgr()->createI18nFolderList( &str, &mFolders );
00180 kmkernel->dimapFolderMgr()->createFolderList( &str, &mFolders );
00181 }
00182
00183
00184
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
00216 connect( mBelongsToComboBox, SIGNAL(activated(int)), SLOT(slotUpdateItems(int)) );
00217
00218
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
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
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
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
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
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
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
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
00415
00416
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
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
00457 mMailingListPostAddressEdit->setText( folder->mailingListPostAddress() );
00458 mMailingListPostAddressEdit->setEnabled( folder->isMailingList() );
00459 mHoldsMailingListCheckBox->setChecked( folder->isMailingList() );
00460
00461
00462 mIdentityComboBox->setCurrentIdentity( folder->identity() );
00463
00464
00465 mExpireFolderCheckBox->setChecked( folder->isAutoExpire() );
00466
00467
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
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
00512 if (current > 0) selectedFolder = *mFolders.at(current - 1);
00513 if (selectedFolder && (selectedFolder->folderType() == KMFolderTypeImap ||
00514 selectedFolder->folderType() == KMFolderTypeCachedImap))
00515 {
00516
00517 mMailboxTypeGroupBox->setEnabled( false );
00518 mExpireGroupBox->setEnabled( false );
00519 } else {
00520
00521 mMailboxTypeGroupBox->setEnabled( true );
00522 mExpireGroupBox->setEnabled( true );
00523 }
00524 }
00525
00526
00527 void KMFolderDialog::slotOk()
00528 {
00529 bool bIsNewFolder = ( !mFolder );
00530
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
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
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
00628 mFolder->setMailingList( mHoldsMailingListCheckBox->isChecked() );
00629 mFolder->setMailingListPostAddress( mMailingListPostAddressEdit->text() );
00630 mFolder->setMailingListAdminAddress( QString::null );
00631
00632 mFolder->setIdentity( mIdentityComboBox->currentIdentity() );
00633
00634
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
00641
00642 if ( mFolder->useCustomIcons() != mIconsCheckBox->isChecked() ) {
00643 mFolder->setUseCustomIcons( mIconsCheckBox->isChecked() );
00644
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
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
00687 mReadExpiryTimeNumInput->setEnabled( mReadExpiryUnitsComboBox->currentItem() != 0 );
00688 mReadExpiryUnitsComboBox->setEnabled(true);
00689
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
00708 mReadExpiryTimeNumInput->setEnabled( value != 0 );
00709 }
00710
00711
00715 void
00716 KMFolderDialog::slotUnreadExpiryUnitChanged( int value )
00717 {
00718
00719 mUnreadExpiryTimeNumInput->setEnabled( value != 0 );
00720 }
00721
00722
00723 void
00724 KMFolderDialog::slotChangeIcon( QString icon )
00725 {
00726 mUnreadIconButton->setIcon( icon );
00727 }