summaryrefslogtreecommitdiffstats
path: root/kmail/mailinglistpropertiesdialog.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commit460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch)
tree67208f7c145782a7e90b123b982ca78d88cc2c87 /kmail/mailinglistpropertiesdialog.cpp
downloadtdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz
tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kmail/mailinglistpropertiesdialog.cpp')
-rw-r--r--kmail/mailinglistpropertiesdialog.cpp344
1 files changed, 344 insertions, 0 deletions
diff --git a/kmail/mailinglistpropertiesdialog.cpp b/kmail/mailinglistpropertiesdialog.cpp
new file mode 100644
index 000000000..3ea3beaa4
--- /dev/null
+++ b/kmail/mailinglistpropertiesdialog.cpp
@@ -0,0 +1,344 @@
+/*******************************************************************************
+**
+** Filename : mailinglistpropertiesdialog.cpp
+** Created on : 30 January, 2005
+** Copyright : (c) 2005 Till Adam
+** Email : adam@kde.org
+**
+*******************************************************************************/
+
+/*******************************************************************************
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** In addition, as a special exception, the copyright holders give
+** permission to link the code of this program with any edition of
+** the Qt library by Trolltech AS, Norway (or with modified versions
+** of Qt that use the same license as Qt), and distribute linked
+** combinations including the two. You must obey the GNU General
+** Public License in all respects for all of the code used other than
+** Qt. If you modify this file, you may extend this exception to
+** your version of the file, but you are not obligated to do so. If
+** you do not wish to do so, delete this exception statement from
+** your version.
+*******************************************************************************/
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qcombobox.h>
+#include <qgroupbox.h>
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+
+#include <klocale.h>
+#include <keditlistbox.h>
+#include <kdialogbase.h>
+#include <kdebug.h>
+#include <kmessagebox.h>
+#include <kmcommands.h>
+
+#include "kmfolder.h"
+#include "mailinglist-magic.h"
+#include "mailinglistpropertiesdialog.h"
+
+using namespace KMail;
+
+MailingListFolderPropertiesDialog::MailingListFolderPropertiesDialog( QWidget* parent, KMFolder *folder )
+ : KDialogBase( parent, "mailinglist_properties", false, i18n( "Mailinglist Folder Properties" ),
+ KDialogBase::Ok|KDialogBase::Cancel,
+ KDialogBase::Ok, true ),
+ mFolder( folder )
+{
+ setWFlags( getWFlags() | WDestructiveClose );
+ QLabel* label;
+ mLastItem = 0;
+
+ QVBoxLayout *topLayout = new QVBoxLayout( layout(), spacingHint(),
+ "topLayout" );
+
+ QGroupBox *mlGroup = new QGroupBox( i18n("Associated Mailing List" ), this );
+ mlGroup->setColumnLayout( 0, Qt::Vertical );
+ QGridLayout *groupLayout = new QGridLayout( mlGroup->layout(), 6, 3, spacingHint() );
+ topLayout->addWidget( mlGroup );
+ setMainWidget( mlGroup );
+
+ mHoldsMailingList = new QCheckBox( i18n("&Folder holds a mailing list"), mlGroup );
+ QObject::connect( mHoldsMailingList, SIGNAL(toggled(bool)),
+ SLOT(slotHoldsML(bool)) );
+ groupLayout->addMultiCellWidget( mHoldsMailingList, 0, 0, 0, 2 );
+
+ groupLayout->addItem( new QSpacerItem( 0, 10 ), 1, 0 );
+
+ mDetectButton = new QPushButton( i18n("Detect Automatically"), mlGroup );
+ mDetectButton->setEnabled( false );
+ QObject::connect( mDetectButton, SIGNAL(pressed()), SLOT(slotDetectMailingList()) );
+ groupLayout->addWidget( mDetectButton, 2, 1 );
+
+ groupLayout->addItem( new QSpacerItem( 0, 10 ), 3, 0 );
+
+ label = new QLabel( i18n("Mailing list description:"), mlGroup );
+ label->setEnabled( false );
+ QObject::connect( mHoldsMailingList, SIGNAL(toggled(bool)),
+ label, SLOT(setEnabled(bool)) );
+ groupLayout->addWidget( label, 4, 0 );
+ mMLId = new QLabel( label, "", mlGroup );
+ groupLayout->addMultiCellWidget( mMLId, 4, 4, 1, 2 );
+ mMLId->setEnabled( false );
+
+ //FIXME: add QWhatsThis
+ label = new QLabel( i18n("Preferred handler:"), mlGroup );
+ label->setEnabled(false);
+ QObject::connect( mHoldsMailingList, SIGNAL(toggled(bool)),
+ label, SLOT(setEnabled(bool)) );
+ groupLayout->addWidget( label, 5, 0 );
+ mMLHandlerCombo = new QComboBox( mlGroup );
+ mMLHandlerCombo->insertItem( i18n("KMail"), MailingList::KMail );
+ mMLHandlerCombo->insertItem( i18n("Browser"), MailingList::Browser );
+ mMLHandlerCombo->setEnabled( false );
+ groupLayout->addMultiCellWidget( mMLHandlerCombo, 5, 5, 1, 2 );
+ QObject::connect( mMLHandlerCombo, SIGNAL(activated(int)),
+ SLOT(slotMLHandling(int)) );
+ label->setBuddy( mMLHandlerCombo );
+
+ label = new QLabel( i18n("&Address type:"), mlGroup );
+ label->setEnabled(false);
+ QObject::connect( mHoldsMailingList, SIGNAL(toggled(bool)),
+ label, SLOT(setEnabled(bool)) );
+ groupLayout->addWidget( label, 6, 0 );
+ mAddressCombo = new QComboBox( mlGroup );
+ label->setBuddy( mAddressCombo );
+ groupLayout->addWidget( mAddressCombo, 6, 1 );
+ mAddressCombo->setEnabled( false );
+
+ //FIXME: if the mailing list actions have either KAction's or toolbar buttons
+ // associated with them - remove this button since it's really silly
+ // here
+ QPushButton *handleButton = new QPushButton( i18n( "Invoke Handler" ), mlGroup );
+ handleButton->setEnabled( false );
+ if( mFolder)
+ {
+ QObject::connect( mHoldsMailingList, SIGNAL(toggled(bool)),
+ handleButton, SLOT(setEnabled(bool)) );
+ QObject::connect( handleButton, SIGNAL(clicked()),
+ SLOT(slotInvokeHandler()) );
+ }
+ groupLayout->addWidget( handleButton, 6, 2 );
+
+ mEditList = new KEditListBox( mlGroup );
+ mEditList->setEnabled( false );
+ groupLayout->addMultiCellWidget( mEditList, 7, 7, 0, 3 );
+
+ QStringList el;
+
+ //Order is important because the activate handler and fillMLFromWidgets
+ //depend on it
+ el << i18n( "Post to List" )
+ << i18n( "Subscribe to List" )
+ << i18n( "Unsubscribe from List" )
+ << i18n( "List Archives" )
+ << i18n( "List Help" );
+ mAddressCombo->insertStringList( el );
+ QObject::connect( mAddressCombo, SIGNAL(activated(int)),
+ SLOT(slotAddressChanged(int)) );
+
+ load();
+ resize( QSize(295, 204).expandedTo(minimumSizeHint()) );
+ clearWState( WState_Polished );
+}
+
+void MailingListFolderPropertiesDialog::slotOk()
+{
+ save();
+ KDialogBase::slotOk();
+}
+
+void MailingListFolderPropertiesDialog::load()
+{
+ if (mFolder) mMailingList = mFolder->mailingList();
+ mMLId->setText( (mMailingList.id().isEmpty() ? i18n("Not available") : mMailingList.id()) );
+ mMLHandlerCombo->setCurrentItem( mMailingList.handler() );
+ mEditList->insertStringList( mMailingList.postURLS().toStringList() );
+
+ mAddressCombo->setCurrentItem( mLastItem );
+ mHoldsMailingList->setChecked( mFolder && mFolder->isMailingListEnabled() );
+}
+
+//-----------------------------------------------------------------------------
+bool MailingListFolderPropertiesDialog::save()
+{
+ if( mFolder )
+ {
+ // settings for mailingList
+ mFolder->setMailingListEnabled( mHoldsMailingList && mHoldsMailingList->isChecked() );
+ fillMLFromWidgets();
+ mFolder->setMailingList( mMailingList );
+ }
+ return true;
+}
+
+//----------------------------------------------------------------------------
+void MailingListFolderPropertiesDialog::slotHoldsML( bool holdsML )
+{
+ mMLHandlerCombo->setEnabled( holdsML );
+ if ( mFolder && mFolder->count() )
+ mDetectButton->setEnabled( holdsML );
+ mAddressCombo->setEnabled( holdsML );
+ mEditList->setEnabled( holdsML );
+ mMLId->setEnabled( holdsML );
+}
+
+//----------------------------------------------------------------------------
+void MailingListFolderPropertiesDialog::slotDetectMailingList()
+{
+ if ( !mFolder ) return; // in case the folder was just created
+ int num = mFolder->count();
+
+ kdDebug(5006)<<k_funcinfo<<" Detecting mailing list"<<endl;
+
+ /* FIXME Till - make work without the folder tree
+ // first try the currently selected message
+ KMFolderTree *folderTree = static_cast<KMFolderTree *>( mDlg->parent() );
+ int curMsgIdx = folderTree->mainWidget()->headers()->currentItemIndex();
+ if ( curMsgIdx > 0 ) {
+ KMMessage *mes = mFolder->getMsg( curMsgIdx );
+ if ( mes )
+ mMailingList = MailingList::detect( mes );
+ }
+ */
+
+ // next try the 5 most recently added messages
+ if ( !( mMailingList.features() & MailingList::Post ) ) {
+ const int maxchecks = 5;
+ for( int i = --num; i > num-maxchecks; --i ) {
+ KMMessage *mes = mFolder->getMsg( i );
+ if ( !mes )
+ continue;
+ mMailingList = MailingList::detect( mes );
+ if ( mMailingList.features() & MailingList::Post )
+ break;
+ }
+ }
+ if ( !(mMailingList.features() & MailingList::Post) ) {
+ KMessageBox::error( this,
+ i18n("KMail was unable to detect a mailing list in this folder. "
+ "Please fill the addresses by hand.") );
+ } else {
+ mMLId->setText( (mMailingList.id().isEmpty() ? i18n("Not available.") : mMailingList.id() ) );
+ fillEditBox();
+ }
+}
+
+//----------------------------------------------------------------------------
+void MailingListFolderPropertiesDialog::slotMLHandling( int element )
+{
+ mMailingList.setHandler( static_cast<MailingList::Handler>( element ) );
+}
+
+//----------------------------------------------------------------------------
+void MailingListFolderPropertiesDialog::slotAddressChanged( int i )
+{
+ fillMLFromWidgets();
+ fillEditBox();
+ mLastItem = i;
+}
+
+//----------------------------------------------------------------------------
+void MailingListFolderPropertiesDialog::fillMLFromWidgets()
+{
+ if ( !mHoldsMailingList->isChecked() )
+ return;
+
+ // make sure that email addresses are prepended by "mailto:"
+ bool changed = false;
+ QStringList oldList = mEditList->items();
+ QStringList newList; // the correct string list
+ for ( QStringList::ConstIterator it = oldList.begin();
+ it != oldList.end(); ++it ) {
+ if ( !(*it).startsWith("http:") && !(*it).startsWith("https:") &&
+ !(*it).startsWith("mailto:") && ( (*it).find('@') != -1 ) ) {
+ changed = true;
+ newList << "mailto:" + *it;
+ }
+ else {
+ newList << *it;
+ }
+ }
+ if ( changed ) {
+ mEditList->clear();
+ mEditList->insertStringList( newList );
+ }
+
+ //mMailingList.setHandler( static_cast<MailingList::Handler>( mMLHandlerCombo->currentItem() ) );
+ switch ( mLastItem ) {
+ case 0:
+ mMailingList.setPostURLS( mEditList->items() );
+ break;
+ case 1:
+ mMailingList.setSubscribeURLS( mEditList->items() );
+ break;
+ case 2:
+ mMailingList.setUnsubscribeURLS( mEditList->items() );
+ break;
+ case 3:
+ mMailingList.setArchiveURLS( mEditList->items() );
+ break;
+ case 4:
+ mMailingList.setHelpURLS( mEditList->items() );
+ break;
+ default:
+ kdWarning( 5006 )<<"Wrong entry in the mailing list entry combo!"<<endl;
+ }
+}
+
+void MailingListFolderPropertiesDialog::fillEditBox()
+{
+ mEditList->clear();
+ switch ( mAddressCombo->currentItem() ) {
+ case 0:
+ mEditList->insertStringList( mMailingList.postURLS().toStringList() );
+ break;
+ case 1:
+ mEditList->insertStringList( mMailingList.subscribeURLS().toStringList() );
+ break;
+ case 2:
+ mEditList->insertStringList( mMailingList.unsubscribeURLS().toStringList() );
+ break;
+ case 3:
+ mEditList->insertStringList( mMailingList.archiveURLS().toStringList() );
+ break;
+ case 4:
+ mEditList->insertStringList( mMailingList.helpURLS().toStringList() );
+ break;
+ default:
+ kdWarning( 5006 )<<"Wrong entry in the mailing list entry combo!"<<endl;
+ }
+}
+
+void MailingListFolderPropertiesDialog::slotInvokeHandler()
+{
+ KMCommand *command =0;
+ switch ( mAddressCombo->currentItem() ) {
+ case 0:
+ command = new KMMailingListPostCommand( this, mFolder );
+ break;
+ case 1:
+ command = new KMMailingListSubscribeCommand( this, mFolder );
+ break;
+ case 2:
+ command = new KMMailingListUnsubscribeCommand( this, mFolder );
+ break;
+ case 3:
+ command = new KMMailingListArchivesCommand( this, mFolder );
+ break;
+ case 4:
+ command = new KMMailingListHelpCommand( this, mFolder );
+ break;
+ default:
+ kdWarning( 5006 )<<"Wrong entry in the mailing list entry combo!"<<endl;
+ }
+ if ( command ) command->start();
+}
+
+#include "mailinglistpropertiesdialog.moc"