diff --git a/archivefolderdialog.cpp b/archivefolderdialog.cpp index a3cf04648..e8a101ceb 100644 --- a/archivefolderdialog.cpp +++ b/archivefolderdialog.cpp @@ -56,6 +56,7 @@ ArchiveFolderDialog::ArchiveFolderDialog( QWidget *parent ) int row = 0; + // TODO: better label for "Ok" button // TODO: Explaination label // TODO: Use QFormLayout in KDE4 diff --git a/folderutil.cpp b/folderutil.cpp index 31e0662d3..c41864514 100644 --- a/folderutil.cpp +++ b/folderutil.cpp @@ -23,6 +23,8 @@ #include "kmfoldercachedimap.h" #include "kmfoldermgr.h" +#include + using namespace KMail; using namespace FolderUtil; @@ -49,7 +51,7 @@ KMFolder *KMail::FolderUtil::createSubFolder( KMFolder *parentFolder, KMFolderDi } KMFolderImap* newStorage = static_cast( newFolder->storage() ); selectedStorage->createFolder(folderName, parent); // create it on the server - newStorage->initializeFrom( selectedStorage, imapPath, QString::null ); + newStorage->initializeFrom( selectedStorage, imapPath, QString() ); static_cast(parentFolder->storage())->setAccount( selectedStorage->account() ); return newFolder; } @@ -78,4 +80,36 @@ KMFolder *KMail::FolderUtil::createSubFolder( KMFolder *parentFolder, KMFolderDi } return newFolder; -} \ No newline at end of file +} + +void KMail::FolderUtil::deleteFolder( KMFolder *folderToDelete, QWidget *parent ) +{ + if ( folderToDelete->hasAccounts() ) { + // this folder has an account, so we need to change that to the inbox + for ( AccountList::Iterator it (folderToDelete->acctList()->begin() ), + end( folderToDelete->acctList()->end() ); it != end; ++it ) { + (*it)->setFolder( kmkernel->inboxFolder() ); + KMessageBox::information( + parent, + i18n( "The folder you deleted was associated with the account " + "%1 which delivered mail into it. The folder the account " + "delivers new mail into was reset to the main Inbox folder.", + (*it)->name() ) ); + } + } + if (folderToDelete->folderType() == KMFolderTypeImap) + kmkernel->imapFolderMgr()->remove(folderToDelete); + else if (folderToDelete->folderType() == KMFolderTypeCachedImap) { + // Deleted by user -> tell the account (see KMFolderCachedImap::listDirectory2) + KMFolderCachedImap* storage = static_cast( folderToDelete->storage() ); + KMAcctCachedImap* acct = storage->account(); + if ( acct ) + acct->addDeletedFolder( folderToDelete ); + + kmkernel->dimapFolderMgr()->remove(folderToDelete); + } + else if (folderToDelete->folderType() == KMFolderTypeSearch) + kmkernel->searchFolderMgr()->remove(folderToDelete); + else + kmkernel->folderMgr()->remove(folderToDelete); +} diff --git a/folderutil.h b/folderutil.h index 82aa3afd2..9cac618ed 100644 --- a/folderutil.h +++ b/folderutil.h @@ -24,6 +24,7 @@ class KMFolder; class KMFolderDir; class QString; +class QWidget; namespace KMail { @@ -41,12 +42,22 @@ namespace FolderUtil * @param namespaceName for (d)IMAP folders, the namespace the new folder should be in. Can be empty. * @param localFolderType for local folders, this determines if the folder should be MBOX or maildir * - * @return the newly created folder or 0 in case an error occured + * @return the newly created folder or 0 in case an error occurred */ KMFolder *createSubFolder( KMFolder *parentFolder, KMFolderDir *parentDir, const QString &folderName, const QString &namespaceName, KMFolderType localFolderType ); +/** + * Deletes a folder and all its subfolders. + * Handles all types of folders correctly, as well as folders with accounts + * + * @param folderToDelete the folder which is going to be deleted + * @param parent the parent widget, which is used when displaying a messagebox, + * which happens when removing a folder with an associated account + */ +void deleteFolder( KMFolder *folderToDelete, QWidget *parent ); + } } diff --git a/importarchivedialog.cpp b/importarchivedialog.cpp index dd3b8df2c..9138cec4c 100644 --- a/importarchivedialog.cpp +++ b/importarchivedialog.cpp @@ -50,6 +50,7 @@ ImportArchiveDialog::ImportArchiveDialog( QWidget *parent ) // TODO: Explaination label // TODO: Use QFormLayout in KDE4 + // TODO: better label for "Ok" button QLabel *folderLabel = new QLabel( i18n( "Folder:" ), mainWidget ); mainLayout->addWidget( folderLabel, row, 0 ); diff --git a/kmmainwidget.cpp b/kmmainwidget.cpp index 820782dc6..3496f6695 100644 --- a/kmmainwidget.cpp +++ b/kmmainwidget.cpp @@ -136,6 +136,7 @@ using KMail::TemplateParser; #include "statusbarlabel.h" #include "archivefolderdialog.h" #include "importarchivedialog.h" +#include "folderutil.h" #if !defined(NDEBUG) #include "sievedebugdialog.h" @@ -1385,32 +1386,7 @@ void KMMainWidget::slotRemoveFolder() KMessageBox::Notify | KMessageBox::Dangerous ) == KMessageBox::Continue ) { - if ( mFolder->hasAccounts() ) { - // this folder has an account, so we need to change that to the inbox - for ( AccountList::Iterator it (mFolder->acctList()->begin() ), - end( mFolder->acctList()->end() ); it != end; ++it ) { - (*it)->setFolder( kmkernel->inboxFolder() ); - KMessageBox::information(this, - i18n("The folder you deleted was associated with the account " - "%1 which delivered mail into it. The folder the account " - "delivers new mail into was reset to the main Inbox folder.", (*it)->name())); - } - } - if (mFolder->folderType() == KMFolderTypeImap) - kmkernel->imapFolderMgr()->remove(mFolder); - else if (mFolder->folderType() == KMFolderTypeCachedImap) { - // Deleted by user -> tell the account (see KMFolderCachedImap::listDirectory2) - KMFolderCachedImap* storage = static_cast( mFolder->storage() ); - KMAcctCachedImap* acct = storage->account(); - if ( acct ) - acct->addDeletedFolder( mFolder ); - - kmkernel->dimapFolderMgr()->remove(mFolder); - } - else if (mFolder->folderType() == KMFolderTypeSearch) - kmkernel->searchFolderMgr()->remove(mFolder); - else - kmkernel->folderMgr()->remove(mFolder); + KMail::FolderUtil::deleteFolder( mFolder, this ); } }