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 Sat May 1 11:37:27 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003