You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
669 lines
23 KiB
669 lines
23 KiB
// kmfolderdia.cpp |
|
#include <config.h> |
|
|
|
#include "kmacctfolder.h" |
|
#include "kmfoldermgr.h" |
|
#include "identitycombo.h" |
|
#include "kmfolderimap.h" |
|
#include "kmfolder.h" |
|
#include "kmkernel.h" |
|
|
|
#include <klineedit.h> |
|
#include <klocale.h> |
|
#include <knuminput.h> |
|
#include <kmessagebox.h> |
|
#include <kicondialog.h> |
|
#include <kconfig.h> |
|
#include <kdebug.h> |
|
|
|
#include <qcheckbox.h> |
|
#include <qlayout.h> |
|
#include <qgroupbox.h> |
|
#include <qregexp.h> |
|
#include <qlabel.h> |
|
|
|
#include <assert.h> |
|
|
|
#include "kmfolderdia.h" //has to be later becuase of KMFolder* fdcls |
|
#include "kmfolderdia.moc" |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
KMFolderDialog::KMFolderDialog(KMFolder *aFolder, KMFolderDir *aFolderDir, |
|
QWidget *aParent, const QString& aCap, |
|
const QString& aName): |
|
KDialogBase( KDialogBase::Plain, |
|
aCap, KDialogBase::Ok|KDialogBase::Cancel, |
|
KDialogBase::Ok, aParent, "KMFolderDialog", TRUE ), |
|
mFolderDir( aFolderDir ) |
|
{ |
|
folder = static_cast<KMAcctFolder*>( aFolder ); |
|
mFolder = aFolder; |
|
kdDebug(5006)<<"KMFolderDialog::KMFolderDialog()" << endl; |
|
|
|
QFrame *page = plainPage(); |
|
|
|
QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint(), |
|
"topLayout" ); |
|
|
|
QGroupBox *fpGroup = new QGroupBox( i18n("Folder Position"), page, "fpGroup" ); |
|
fpGroup->setColumnLayout( 0, Qt::Vertical ); |
|
|
|
topLayout->addWidget( fpGroup ); |
|
|
|
QHBoxLayout *hl = new QHBoxLayout( fpGroup->layout() ); |
|
hl->setSpacing( 6 ); |
|
|
|
QLabel *label = new QLabel( i18n("&Name:"), fpGroup ); |
|
hl->addWidget( label ); |
|
|
|
nameEdit = new KLineEdit( fpGroup ); |
|
if( !folder ) |
|
nameEdit->setFocus(); |
|
nameEdit->setText(folder ? folder->label() : i18n("unnamed")); |
|
if (!aName.isEmpty()) |
|
nameEdit->setText(aName); |
|
nameEdit->setMinimumSize(nameEdit->sizeHint()); |
|
label->setBuddy( nameEdit ); |
|
hl->addWidget( nameEdit ); |
|
|
|
QLabel *label2 = new QLabel( i18n("&Belongs to:" ), fpGroup ); |
|
hl->addWidget( label2 ); |
|
|
|
fileInFolder = new QComboBox(fpGroup); |
|
hl->addWidget( fileInFolder ); |
|
label2->setBuddy( fileInFolder ); |
|
|
|
//start icons group |
|
QString normalIcon = (mFolder ? mFolder->normalIconPath() : QString("") ); |
|
QString unreadIcon = (mFolder ? mFolder->unreadIconPath() : QString("") ); |
|
QGroupBox *iconGroup = new QGroupBox( i18n("Folder Icons"), page, "iconGroup" ); |
|
iconGroup->setColumnLayout( 0, Qt::Vertical ); |
|
|
|
topLayout->addWidget( iconGroup ); |
|
|
|
QVBoxLayout *ivl = new QVBoxLayout( iconGroup->layout() ); |
|
ivl->setSpacing( 6 ); |
|
|
|
QHBoxLayout *ihl = new QHBoxLayout( ivl ); |
|
mIconsCheckBox = new QCheckBox( i18n("Use custom &icons"), iconGroup ); |
|
mIconsCheckBox->setChecked( mFolder ? mFolder->useCustomIcons() : false ); |
|
ihl->addWidget( mIconsCheckBox ); |
|
|
|
ihl = new QHBoxLayout( ivl ); |
|
QLabel *ilabel = new QLabel( i18n("&Normal:"), iconGroup ); |
|
ihl->addWidget( ilabel ); |
|
|
|
mNormalIconButton = new KIconButton( iconGroup ); |
|
ilabel->setBuddy( mNormalIconButton ); |
|
mNormalIconButton->setIconType( KIcon::NoGroup , KIcon::Any, true ); |
|
mNormalIconButton->setIconSize( 16 ); |
|
mNormalIconButton->setStrictIconSize( true ); |
|
mNormalIconButton->setFixedSize( 28, 28 ); |
|
mNormalIconButton->setIcon( (!normalIcon.isEmpty()) ? normalIcon : |
|
QString("folder") ); |
|
ihl->addWidget( mNormalIconButton ); |
|
ihl->addStretch( 1 ); |
|
|
|
QLabel *ilabel2 = new QLabel( i18n("&Unread:"), iconGroup ); |
|
ihl->addWidget( ilabel2 ); |
|
|
|
mUnreadIconButton = new KIconButton( iconGroup ); |
|
ilabel2->setBuddy( mUnreadIconButton ); |
|
mUnreadIconButton->setIconType( KIcon::NoGroup, KIcon::Any, true ); |
|
mUnreadIconButton->setIconSize( 16 ); |
|
mUnreadIconButton->setStrictIconSize( true ); |
|
mUnreadIconButton->setFixedSize( 28, 28 ); |
|
mUnreadIconButton->setIcon( (!unreadIcon.isEmpty()) ? unreadIcon : |
|
QString("folder_open") ); |
|
ihl->addWidget( mUnreadIconButton ); |
|
ihl->addStretch( 1 ); |
|
|
|
if ( !mIconsCheckBox->isChecked() ) { |
|
mNormalIconButton->setEnabled( false ); |
|
mUnreadIconButton->setEnabled( false ); |
|
ilabel->setEnabled( false ); |
|
ilabel2->setEnabled( false ); |
|
} |
|
|
|
connect( mIconsCheckBox, SIGNAL(toggled(bool)), |
|
mNormalIconButton, SLOT(setEnabled(bool)) ); |
|
connect( mIconsCheckBox, SIGNAL(toggled(bool)), |
|
mUnreadIconButton, SLOT(setEnabled(bool)) ); |
|
connect( mIconsCheckBox, SIGNAL(toggled(bool)), |
|
ilabel, SLOT(setEnabled(bool)) ); |
|
connect( mIconsCheckBox, SIGNAL(toggled(bool)), |
|
ilabel2, SLOT(setEnabled(bool)) ); |
|
|
|
connect( mNormalIconButton, SIGNAL(iconChanged(QString)), |
|
this, SLOT(slotChangeIcon(QString)) ); |
|
|
|
//end icons group |
|
|
|
mtGroup = new QGroupBox( i18n("Folder Type"), page, "mtGroup" ); |
|
mtGroup->setColumnLayout( 0, Qt::Vertical ); |
|
|
|
topLayout->addWidget( mtGroup ); |
|
|
|
QHBoxLayout *ml = new QHBoxLayout( mtGroup->layout() ); |
|
ml->setSpacing( 6 ); |
|
|
|
QLabel *label_type = new QLabel( i18n("&Mailbox format:" ), mtGroup ); |
|
ml->addWidget( label_type ); |
|
mailboxType = new QComboBox(mtGroup); |
|
label_type->setBuddy( mailboxType ); |
|
mailboxType->insertItem("mbox", 0); |
|
mailboxType->insertItem("maildir", 1); |
|
mailboxType->insertItem("search", 2); |
|
{ |
|
KConfig *config = KMKernel::config(); |
|
KConfigGroupSaver saver(config, "General"); |
|
int type = config->readNumEntry("default-mailbox-format", 1); |
|
if ( type < 0 || type > 1 ) type = 1; |
|
mailboxType->setCurrentItem( type ); |
|
} |
|
if (mFolder) mailboxType->setEnabled(false); |
|
ml->addWidget( mailboxType ); |
|
ml->addStretch( 1 ); |
|
|
|
QStringList str; |
|
// if (!folder) kernel->imapFolderMgr()->createI18nFolderList( &str, &mFolders ); |
|
kernel->imapFolderMgr()->createI18nFolderList( &str, &mFolders ); |
|
kernel->folderMgr()->createFolderList( &str, &mFolders ); |
|
str.prepend( i18n( "Top Level" )); |
|
QGuardedPtr<KMFolder> curFolder; |
|
int i = 1; |
|
while (mFolders.at(i - 1) != mFolders.end()) { |
|
curFolder = *mFolders.at(i - 1); |
|
if (curFolder->isSystemFolder() && curFolder->protocol() != "imap" && |
|
curFolder->protocol() != "cachedimap") |
|
{ |
|
mFolders.remove(mFolders.at(i-1)); |
|
str.remove(str.at(i)); |
|
} else |
|
++i; |
|
} |
|
fileInFolder->insertStringList( str ); |
|
// we want to know if the activated changes |
|
connect( fileInFolder, SIGNAL(activated(int)), SLOT(slotUpdateItems(int)) ); |
|
|
|
if (mFolder && (mFolder->protocol() == "imap")) { |
|
//label->setEnabled( false ); |
|
//nameEdit->setEnabled( false ); |
|
label2->setEnabled( false ); |
|
fileInFolder->setEnabled( false ); |
|
} |
|
|
|
// Mailing-list data tab |
|
// |
|
QGroupBox *mlGroup = new QGroupBox( i18n("Associated Mailing List" ), page ); |
|
mlGroup->setColumnLayout( 0, Qt::Vertical ); |
|
QGridLayout *mlLayout = new QGridLayout(mlGroup->layout()); |
|
mlLayout->setSpacing( 6 ); |
|
holdsMailingList = new QCheckBox( i18n("&Folder holds a mailing list"), mlGroup); |
|
topLayout->addWidget( mlGroup ); |
|
mlLayout->addMultiCellWidget(holdsMailingList, 0, 0, 0, 1); |
|
|
|
mlLayout->setColStretch(0, 1); |
|
mlLayout->setColStretch(1, 100); |
|
|
|
label = new QLabel( i18n("&Post address:"), mlGroup ); |
|
label->setEnabled(false); |
|
QObject::connect( holdsMailingList, SIGNAL(toggled(bool)), |
|
label, SLOT(setEnabled(bool)) ); |
|
mlLayout->addWidget( label, 1, 0 ); |
|
mailingListPostAddress = new KLineEdit( mlGroup ); |
|
label->setBuddy( mailingListPostAddress ); |
|
mlLayout->addWidget( mailingListPostAddress, 1, 1 ); |
|
mailingListPostAddress->setEnabled(false); |
|
|
|
connect( holdsMailingList, SIGNAL(toggled(bool)), |
|
mailingListPostAddress, SLOT(setEnabled(bool)) ); |
|
|
|
// |
|
// Expiry data. |
|
// |
|
expGroup = new QGroupBox(i18n("Old Message Expiry"), page); |
|
expGroup->setColumnLayout(0, Qt::Vertical); |
|
QGridLayout *expLayout = new QGridLayout(expGroup->layout()); |
|
expLayout->setSpacing(6); |
|
|
|
// Checkbox for setting whether expiry is enabled on this folder. |
|
expireFolder = new QCheckBox(i18n("E&xpire old messages in this folder"), expGroup); |
|
QObject::connect(expireFolder, SIGNAL(toggled(bool)), SLOT(slotExpireFolder(bool))); |
|
topLayout->addWidget(expGroup); |
|
expLayout->addMultiCellWidget(expireFolder, 0, 0, 0, 1); |
|
|
|
// Expiry time for read documents. |
|
label = new QLabel(i18n("Expire &read email after:"), expGroup); |
|
label->setEnabled(false); |
|
QObject::connect( expireFolder, SIGNAL(toggled(bool)), |
|
label, SLOT(setEnabled(bool)) ); |
|
expLayout->addWidget(label, 1, 0); |
|
readExpiryTime = new KIntNumInput(expGroup); |
|
readExpiryTime->setRange(1, 500, 1, false); |
|
label->setBuddy(readExpiryTime); |
|
expLayout->addWidget(readExpiryTime, 1, 1); |
|
|
|
readExpiryUnits = new QComboBox(expGroup); |
|
readExpiryUnits->insertItem(i18n("Never")); |
|
readExpiryUnits->insertItem(i18n("Day(s)")); |
|
readExpiryUnits->insertItem(i18n("Week(s)")); |
|
readExpiryUnits->insertItem(i18n("Month(s)")); |
|
expLayout->addWidget(readExpiryUnits, 1, 2); |
|
connect( readExpiryUnits, SIGNAL( activated( int ) ), |
|
this, SLOT( slotReadExpiryUnitChanged( int ) ) ); |
|
|
|
// Expiry time for unread documents. |
|
label = new QLabel(i18n("Expire unr&ead email after:"), expGroup); |
|
label->setEnabled(false); |
|
QObject::connect( expireFolder, SIGNAL(toggled(bool)), |
|
label, SLOT(setEnabled(bool)) ); |
|
expLayout->addWidget(label, 2, 0); |
|
unreadExpiryTime = new KIntNumInput(expGroup); |
|
unreadExpiryTime->setRange(1, 500, 1, false); |
|
label->setBuddy(unreadExpiryTime); |
|
expLayout->addWidget(unreadExpiryTime, 2, 1); |
|
|
|
unreadExpiryUnits = new QComboBox(expGroup); |
|
unreadExpiryUnits->insertItem(i18n("Never")); |
|
unreadExpiryUnits->insertItem(i18n("Day(s)")); |
|
unreadExpiryUnits->insertItem(i18n("Week(s)")); |
|
unreadExpiryUnits->insertItem(i18n("Month(s)")); |
|
expLayout->addWidget(unreadExpiryUnits, 2, 2); |
|
connect( unreadExpiryUnits, SIGNAL( activated( int ) ), |
|
this, SLOT( slotUnreadExpiryUnitChanged( int ) ) ); |
|
|
|
expLayout->setColStretch(0, 3); |
|
expLayout->setColStretch(0, 100); |
|
|
|
|
|
QGroupBox *idGroup = new QGroupBox( i18n("Identity" ), page ); |
|
idGroup->setColumnLayout( 0, Qt::Vertical ); |
|
QHBoxLayout *idLayout = new QHBoxLayout(idGroup->layout()); |
|
idLayout->setSpacing( 6 ); |
|
topLayout->addWidget( idGroup ); |
|
|
|
label = new QLabel( i18n("&Sender:"), idGroup ); |
|
idLayout->addWidget( label ); |
|
identity = new IdentityCombo( idGroup ); |
|
label->setBuddy( identity ); |
|
idLayout->addWidget( identity, 3 ); |
|
|
|
QGroupBox *mcGroup = new QGroupBox( i18n("Misc" ), page ); |
|
mcGroup->setColumnLayout( 0, Qt::Vertical ); |
|
QHBoxLayout *mcLayout = new QHBoxLayout(mcGroup->layout()); |
|
topLayout->addWidget( mcGroup ); |
|
|
|
markAnyMessage = new QCheckBox( i18n( "&Mark any message in this folder" ), mcGroup ); |
|
mcLayout->addWidget( markAnyMessage ); |
|
mcGroup->hide(); |
|
|
|
QGroupBox* senderGroup = new QGroupBox( i18n("Show Sender/Receiver"), page, "senderGroup" ); |
|
senderGroup->setColumnLayout( 0, Qt::Vertical ); |
|
|
|
topLayout->addWidget( senderGroup ); |
|
|
|
QHBoxLayout *sl = new QHBoxLayout( senderGroup->layout() ); |
|
sl->setSpacing( 6 ); |
|
|
|
QLabel *sender_label = new QLabel( i18n("Sho&w:" ), senderGroup ); |
|
sl->addWidget( sender_label ); |
|
senderType = new QComboBox(senderGroup); |
|
sender_label->setBuddy(senderType); |
|
senderType->insertItem(i18n("Default"), 0); |
|
senderType->insertItem(i18n("Sender"), 1); |
|
senderType->insertItem(i18n("Receiver"), 2); |
|
|
|
QString whoField; |
|
if (mFolder) whoField = mFolder->userWhoField(); |
|
if (whoField.isEmpty()) senderType->setCurrentItem(0); |
|
if (whoField == "From") senderType->setCurrentItem(1); |
|
if (whoField == "To") senderType->setCurrentItem(2); |
|
|
|
sl->addWidget( senderType ); |
|
sl->addStretch( 1 ); |
|
|
|
|
|
if ( ((!mFolder) && mFolderDir->type() == KMImapDir) || |
|
(mFolder && (mFolder->folderType() == KMFolderTypeImap)) ) |
|
{ |
|
KMFolderImap* imapFolder = 0; |
|
if (mFolder) imapFolder = static_cast<KMFolderImap*>((KMFolder*)mFolder); |
|
bool checked = (imapFolder) ? imapFolder->includeInMailCheck() : true; |
|
// should this folder be included in new-mail-checks? |
|
QGroupBox* newmailGroup = new QGroupBox( i18n("Check for new mail"), page, "newmailGroup" ); |
|
newmailGroup->setColumnLayout( 0, Qt::Vertical ); |
|
topLayout->addWidget( newmailGroup ); |
|
|
|
QHBoxLayout *nml = new QHBoxLayout( newmailGroup->layout() ); |
|
nml->setSpacing( 6 ); |
|
QLabel *newmailLabel = new QLabel( i18n("Include in check:" ), newmailGroup ); |
|
nml->addWidget( newmailLabel ); |
|
mNewMailCheckBox = new QCheckBox(newmailGroup); |
|
mNewMailCheckBox->setChecked(checked); |
|
newmailLabel->setBuddy(mNewMailCheckBox); |
|
nml->addWidget( mNewMailCheckBox ); |
|
nml->addStretch( 1 ); |
|
} |
|
|
|
for( i = 1; mFolders.at(i - 1) != mFolders.end(); ++i ) { |
|
curFolder = *mFolders.at(i - 1); |
|
if (curFolder->child() == aFolderDir) { |
|
fileInFolder->setCurrentItem( i ); |
|
slotUpdateItems( i ); |
|
} |
|
} |
|
|
|
// hl = new QHBoxLayout(); |
|
// topLayout->addLayout( hl ); |
|
|
|
// label = new QLabel( i18n("Admin Address:"), page ); |
|
// hl->addWidget( label ); |
|
// mailingListAdminAddress = new KLineEdit( page ); |
|
// mailingListAdminAddress->setMinimumSize(mailingListAdminAddress->sizeHint()); |
|
// hl->addWidget( mailingListAdminAddress ); |
|
|
|
if (folder) |
|
{ |
|
mailingListPostAddress->setText(folder->mailingListPostAddress()); |
|
// mailingListAdminAddress->setText(folder->mailingListAdminAddress()); |
|
mailingListPostAddress->setEnabled(folder->isMailingList()); |
|
// mailingListAdminAddress->setEnabled(folder->isMailingList()); |
|
// mailingListIdentity->setEnabled(folder->isMailingList()); |
|
holdsMailingList->setChecked(folder->isMailingList()); |
|
// markAnyMessage->setChecked( folder->isAnyMessageMarked() ); |
|
|
|
if (folder->protocol() == "search") { |
|
mailboxType->setCurrentItem(2); |
|
label2->hide(); |
|
fileInFolder->hide(); |
|
} else if (folder->protocol() == "maildir") { |
|
mailboxType->setCurrentItem(1); |
|
} else { |
|
mailboxType->setCurrentItem(0); |
|
} |
|
|
|
identity->setCurrentIdentity( folder->identity() ); |
|
|
|
// Set the status of widgets to represent the folder |
|
// properties for auto expiry of old email. |
|
expireFolder->setChecked(folder->isAutoExpire()); |
|
// Legal values for units are 0=never, 1=days, 2=weeks, 3=months. |
|
// Should really do something better than hardcoding this everywhere. |
|
if (folder->getReadExpireUnits() >= 0 && folder->getReadExpireUnits() < expireMaxUnits) { |
|
readExpiryUnits->setCurrentItem(folder->getReadExpireUnits()); |
|
} |
|
if (folder->getUnreadExpireUnits() >= 0 && folder->getUnreadExpireUnits() < expireMaxUnits) { |
|
unreadExpiryUnits->setCurrentItem(folder->getUnreadExpireUnits()); |
|
} |
|
int age = folder->getReadExpireAge(); |
|
if (age >= 1 && age <= 500) { |
|
readExpiryTime->setValue(age); |
|
} else { |
|
readExpiryTime->setValue(7); |
|
} |
|
age = folder->getUnreadExpireAge(); |
|
if (age >= 1 && age <= 500) { |
|
unreadExpiryTime->setValue(age); |
|
} else { |
|
unreadExpiryTime->setValue(28); |
|
} |
|
if (!folder->isAutoExpire()) { |
|
readExpiryTime->setEnabled(false); |
|
readExpiryUnits->setEnabled(false); |
|
unreadExpiryTime->setEnabled(false); |
|
unreadExpiryUnits->setEnabled(false); |
|
} |
|
else { |
|
// disable the number fields if "Never" is selected |
|
readExpiryTime->setEnabled( readExpiryUnits->currentItem() != 0 ); |
|
unreadExpiryTime->setEnabled( unreadExpiryUnits->currentItem() != 0 ); |
|
} |
|
} else { |
|
// Default values for everything if there isn't a folder |
|
// object yet. |
|
readExpiryTime->setEnabled(false); |
|
readExpiryUnits->setEnabled(false); |
|
unreadExpiryTime->setEnabled(false); |
|
unreadExpiryUnits->setEnabled(false); |
|
readExpiryTime->setValue(7); |
|
unreadExpiryTime->setValue(28); |
|
|
|
} |
|
|
|
// Musn't be able to edit details for a system folder. |
|
// Make sure we don't bomb out if there isn't a folder |
|
// object yet (i.e. just about to create new folder). |
|
|
|
if (mFolder && mFolder->folderType() == KMFolderTypeImap) { |
|
expGroup->hide(); |
|
mtGroup->hide(); |
|
if (mFolder->isSystemFolder()) |
|
senderGroup->hide(); |
|
} |
|
else if (folder && folder->isSystemFolder()) { |
|
fpGroup->hide(); |
|
iconGroup->hide(); |
|
mtGroup->hide(); |
|
mlGroup->hide(); |
|
idGroup->hide(); |
|
mcGroup->hide(); |
|
senderGroup->hide(); |
|
} |
|
|
|
kdDebug(5006)<<"Exiting KMFolderDialog::KMFolderDialog()\n"; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
void KMFolderDialog::slotUpdateItems ( int current ) |
|
{ |
|
KMFolder* selectedFolder = 0; |
|
// check if the index is valid (the top level has no entrance in the mFolders) |
|
if (current > 0) selectedFolder = *mFolders.at(current - 1); |
|
if (selectedFolder && (selectedFolder->protocol() == "imap" || |
|
selectedFolder->protocol() == "cachedimap")) |
|
{ |
|
// deactivate stuff that is not available for imap |
|
mtGroup->setEnabled( false ); |
|
expGroup->setEnabled( false ); |
|
} else { |
|
// activate it |
|
mtGroup->setEnabled( true ); |
|
expGroup->setEnabled( true ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
void KMFolderDialog::slotOk() |
|
{ |
|
// moving of IMAP folders is not yet supported |
|
if (!mFolder || !mFolder->isSystemFolder()) |
|
{ |
|
QString acctName; |
|
QString fldName, oldFldName; |
|
KMFolderDir *selectedFolderDir = &(kernel->folderMgr()->dir()); |
|
KMFolder *selectedFolder = 0; |
|
int curFolder = fileInFolder->currentItem(); |
|
|
|
if (folder) oldFldName = folder->name(); |
|
if (!nameEdit->text().isEmpty()) fldName = nameEdit->text(); |
|
else fldName = oldFldName; |
|
fldName.replace("/", ""); |
|
fldName.replace(QRegExp("^\\.*"), ""); |
|
if (fldName.isEmpty()) fldName = i18n("unnamed"); |
|
|
|
if (mailboxType->currentItem() == 2) { |
|
selectedFolderDir = &(kernel->searchFolderMgr()->dir()); |
|
} |
|
else if (curFolder != 0) |
|
{ |
|
selectedFolder = *mFolders.at(curFolder - 1); |
|
selectedFolderDir = selectedFolder->createChildFolder(); |
|
} |
|
|
|
QString message = i18n( "<qt>Failed to create folder <b>%1</b>, folder already exists.</qt>" ).arg(fldName); |
|
if ((selectedFolderDir->hasNamedFolder(fldName)) && |
|
(!((folder) && |
|
(selectedFolderDir == folder->parent()) && |
|
(folder->name() == fldName)))) |
|
{ |
|
KMessageBox::error( this, message ); |
|
return; |
|
} |
|
|
|
message = i18n( "<qt>Cannot move folder <b>%1</b> into a subfolder below itself.</qt>" ).arg(fldName); |
|
KMFolderDir* folderDir = selectedFolderDir; |
|
|
|
|
|
// Buggy? |
|
if (folder && folder->child()) |
|
while ((folderDir != &kernel->folderMgr()->dir()) && |
|
(folderDir != folder->parent())){ |
|
if (folderDir->findRef( folder ) != -1) { |
|
KMessageBox::error( this, message ); |
|
return; |
|
} |
|
folderDir = folderDir->parent(); |
|
} |
|
// End buggy? |
|
|
|
|
|
if (folder && folder->child() && (selectedFolderDir) && |
|
(selectedFolderDir->path().find( folder->child()->path() + "/" ) == 0)) { |
|
KMessageBox::error( this, message ); |
|
return; |
|
} |
|
|
|
if (folder && folder->child() && (selectedFolderDir == folder->child())) { |
|
KMessageBox::error( this, message ); |
|
return; |
|
} |
|
|
|
if (!folder) { |
|
if (selectedFolder && selectedFolder->protocol() == "imap") |
|
{ |
|
folder = (KMAcctFolder*) new KMFolderImap(mFolderDir, fldName); |
|
static_cast<KMFolderImap*>(selectedFolder)->createFolder(fldName); |
|
} else if (selectedFolder && selectedFolder->protocol() == "cachedimap"){ |
|
folder = (KMAcctFolder*)kernel->imapFolderMgr()->createFolder( fldName, FALSE, KMFolderTypeCachedImap, selectedFolderDir ); |
|
} else if (mailboxType->currentItem() == 2) { |
|
folder = (KMAcctFolder*)kernel->searchFolderMgr()->createFolder(fldName, FALSE, KMFolderTypeSearch, &kernel->searchFolderMgr()->dir() ); |
|
} else if (mailboxType->currentItem() == 1) { |
|
folder = (KMAcctFolder*)kernel->folderMgr()->createFolder(fldName, FALSE, KMFolderTypeMaildir, selectedFolderDir ); |
|
} else { |
|
folder = (KMAcctFolder*)kernel->folderMgr()->createFolder(fldName, FALSE, KMFolderTypeMbox, selectedFolderDir ); |
|
} |
|
} |
|
else if ((oldFldName != fldName) || (folder->parent() != selectedFolderDir)) |
|
{ |
|
if (folder->parent() != selectedFolderDir) { |
|
if (folder->protocol() == "cachedimap") { |
|
QString message = i18n("Moving IMAP folders is not supported"); |
|
KMessageBox::error( this, message ); |
|
} else |
|
folder->rename(fldName, selectedFolderDir ); |
|
} else |
|
folder->rename(fldName); |
|
|
|
kernel->folderMgr()->contentsChanged(); |
|
} |
|
} |
|
|
|
if (folder) |
|
{ |
|
// settings for mailingList |
|
folder->setMailingList( holdsMailingList->isChecked() ); |
|
folder->setMailingListPostAddress( mailingListPostAddress->text() ); |
|
// folder->setMailingListAdminAddress( mailingListAdminAddress->text() ); |
|
folder->setMailingListAdminAddress( QString::null ); |
|
|
|
folder->setIdentity( identity->currentIdentity() ); |
|
// folder->setMarkAnyMessage( markAnyMessage->isChecked() ); |
|
|
|
// Settings for auto expiry of old email messages. |
|
folder->setAutoExpire(expireFolder->isChecked()); |
|
folder->setUnreadExpireAge(unreadExpiryTime->value()); |
|
folder->setReadExpireAge(readExpiryTime->value()); |
|
folder->setUnreadExpireUnits((ExpireUnits)unreadExpiryUnits->currentItem()); |
|
folder->setReadExpireUnits((ExpireUnits)readExpiryUnits->currentItem()); |
|
//update the tree iff new icon paths are different and not empty |
|
folder->setUseCustomIcons( mIconsCheckBox->isChecked() ); |
|
if ( (( mNormalIconButton->icon() != folder->normalIconPath() ) && |
|
( !mNormalIconButton->icon().isEmpty())) || |
|
(( mUnreadIconButton->icon() != folder->unreadIconPath() ) && |
|
( !mUnreadIconButton->icon().isEmpty())) ) |
|
folder->setIconPaths( mNormalIconButton->icon(), mUnreadIconButton->icon() ); |
|
|
|
// set whoField |
|
if (senderType->currentItem() == 1) |
|
folder->setUserWhoField("From"); |
|
else if (senderType->currentItem() == 2) |
|
folder->setUserWhoField("To"); |
|
else |
|
folder->setUserWhoField(QString()); |
|
if (!mFolder) folder->close(); |
|
|
|
if (folder->protocol() == "imap") |
|
{ |
|
KMFolderImap* imapFolder = static_cast<KMFolderImap*>((KMFolder*)folder); |
|
imapFolder->setIncludeInMailCheck( |
|
mNewMailCheckBox->isChecked() ); |
|
kernel->imapFolderMgr()->contentsChanged(); |
|
} |
|
} |
|
|
|
KDialogBase::slotOk(); |
|
} |
|
|
|
|
|
/** |
|
* Called when the 'auto expire' toggle is clicked. |
|
* Enables/disables all widgets related to this. |
|
*/ |
|
void KMFolderDialog::slotExpireFolder(bool expire) |
|
{ |
|
if (expire) { |
|
// disable the number field if "Never" is selected |
|
readExpiryTime->setEnabled( readExpiryUnits->currentItem() != 0 ); |
|
readExpiryUnits->setEnabled(true); |
|
// disable the number field if "Never" is selected |
|
unreadExpiryTime->setEnabled( unreadExpiryUnits->currentItem() != 0 ); |
|
unreadExpiryUnits->setEnabled(true); |
|
} else { |
|
readExpiryTime->setEnabled(false); |
|
readExpiryUnits->setEnabled(false); |
|
unreadExpiryTime->setEnabled(false); |
|
unreadExpiryUnits->setEnabled(false); |
|
} |
|
} |
|
|
|
|
|
/** |
|
* Enable/disable the number field if appropriate |
|
*/ |
|
void |
|
KMFolderDialog::slotReadExpiryUnitChanged( int value ) |
|
{ |
|
// disable the number field if "Never" is selected |
|
readExpiryTime->setEnabled( value != 0 ); |
|
} |
|
|
|
|
|
/** |
|
* Enable/disable the number field if appropriate |
|
*/ |
|
void |
|
KMFolderDialog::slotUnreadExpiryUnitChanged( int value ) |
|
{ |
|
// disable the number field if "Never" is selected |
|
unreadExpiryTime->setEnabled( value != 0 ); |
|
} |
|
|
|
|
|
void |
|
KMFolderDialog::slotChangeIcon( QString icon ) // can't use a const-ref here, due to KIconButton's signal |
|
{ |
|
mUnreadIconButton->setIcon( icon ); |
|
}
|
|
|