mailtransport
transportmanagementwidget.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "transportmanagementwidget.h"
00024 #include "ui_transportmanagementwidget.h"
00025 #include "transportmanager.h"
00026 #include "transport.h"
00027 #include "transportconfigdialog.h"
00028
00029 using namespace MailTransport;
00030
00031 class TransportManagementWidget::Private
00032 {
00033 public:
00034 Ui::TransportManagementWidget ui;
00035 };
00036
00037 TransportManagementWidget::TransportManagementWidget( QWidget *parent )
00038 : QWidget( parent ), d( new Private )
00039 {
00040 d->ui.setupUi( this );
00041
00042 d->ui.transportList->setHeaderLabels( QStringList()
00043 << i18nc( "@title:column email transport name", "Name" )
00044 << i18nc( "@title:column email transport type", "Type" ) );
00045 d->ui.transportList->sortItems( 0, Qt::AscendingOrder );
00046 connect( d->ui.transportList, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
00047 SLOT(updateButtonState()) );
00048 connect( d->ui.transportList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
00049 SLOT(editClicked()) );
00050 connect( d->ui.addButton, SIGNAL(clicked()), SLOT(addClicked()) );
00051 connect( d->ui.editButton, SIGNAL(clicked()), SLOT(editClicked()) );
00052 connect( d->ui.removeButton, SIGNAL(clicked()), SLOT(removeClicked()) );
00053 connect( d->ui.defaultButton, SIGNAL(clicked()), SLOT(defaultClicked()) );
00054
00055 fillTransportList();
00056 connect( TransportManager::self(), SIGNAL(transportsChanged()),
00057 SLOT(fillTransportList()) );
00058 }
00059
00060 TransportManagementWidget::~TransportManagementWidget()
00061 {
00062 delete d;
00063 }
00064
00065 void TransportManagementWidget::fillTransportList()
00066 {
00067
00068 int selected = -1;
00069 if ( d->ui.transportList->currentItem() ) {
00070 selected = d->ui.transportList->currentItem()->data( 0, Qt::UserRole ).toInt();
00071 }
00072
00073 d->ui.transportList->clear();
00074 foreach ( Transport *t, TransportManager::self()->transports() ) {
00075 QTreeWidgetItem *item = new QTreeWidgetItem( d->ui.transportList );
00076 item->setData( 0, Qt::UserRole, t->id() );
00077 item->setText( 0, t->name() );
00078 QString type;
00079 switch ( t->type() ) {
00080 case Transport::EnumType::SMTP:
00081 type = i18nc( "@option SMTP transport", "SMTP" );
00082 break;
00083 case Transport::EnumType::Sendmail:
00084 type = i18nc( "@option sendmail transport", "Sendmail" );
00085 break;
00086 }
00087 if ( TransportManager::self()->defaultTransportId() == t->id() ) {
00088 type += i18nc( "@label the default mail transport", " (Default)" );
00089 }
00090 item->setText( 1, type );
00091 if ( t->id() == selected ) {
00092 d->ui.transportList->setCurrentItem( item );
00093 }
00094 }
00095
00096 updateButtonState();
00097 }
00098
00099 void TransportManagementWidget::updateButtonState()
00100 {
00101 if ( !d->ui.transportList->currentItem() ) {
00102 d->ui.editButton->setEnabled( false );
00103 d->ui.removeButton->setEnabled( false );
00104 d->ui.defaultButton->setEnabled( false );
00105 } else {
00106 d->ui.editButton->setEnabled( true );
00107 d->ui.removeButton->setEnabled( true );
00108 if ( d->ui.transportList->currentItem()->data( 0, Qt::UserRole ) ==
00109 TransportManager::self()->defaultTransportId() ) {
00110 d->ui.defaultButton->setEnabled( false );
00111 } else {
00112 d->ui.defaultButton->setEnabled( true );
00113 }
00114 }
00115 }
00116
00117 void TransportManagementWidget::addClicked()
00118 {
00119
00120 Transport *t = TransportManager::self()->createTransport();
00121 t->setType( Transport::EnumType::SMTP );
00122
00123
00124 TransportConfigDialog *tcd = new TransportConfigDialog( t, this );
00125 connect( tcd, SIGNAL(sendmailClicked()), SLOT(slotSendmail()) );
00126 tcd->setCaption( i18nc( "@title:window", "Add Transport" ) );
00127 if ( tcd->exec() == KDialog::Accepted ) {
00128 TransportManager::self()->addTransport( t );
00129 } else {
00130 delete t;
00131 }
00132 }
00133
00134 void TransportManagementWidget::slotSendmail()
00135 {
00136
00137 Transport *t = TransportManager::self()->createTransport();
00138 t->setType( Transport::EnumType::Sendmail );
00139 t->setHost( QLatin1String( "/usr/sbin/sendmail" ) );
00140
00141 TransportConfigDialog tcd( t, this );
00142 tcd.setCaption( i18nc( "@title:window", "Add Transport" ) );
00143 if ( tcd.exec() == KDialog::Accepted ) {
00144 TransportManager::self()->addTransport( t );
00145 } else {
00146 delete t;
00147 }
00148 }
00149
00150 void TransportManagementWidget::editClicked()
00151 {
00152 Q_ASSERT( d->ui.transportList->currentItem() );
00153
00154 int currentId = d->ui.transportList->currentItem()->data( 0, Qt::UserRole ).toInt();
00155 Transport *transport = TransportManager::self()->transportById( currentId );
00156 if ( !transport ) {
00157 return;
00158 }
00159 transport = transport->clone();
00160 TransportConfigDialog t( transport, this );
00161 t.setCaption( i18nc( "@title:window", "Modify Transport" ) );
00162 t.exec();
00163 delete transport;
00164 }
00165
00166 void TransportManagementWidget::removeClicked()
00167 {
00168 Q_ASSERT( d->ui.transportList->currentItem() );
00169
00170 TransportManager::self()->removeTransport(
00171 d->ui.transportList->currentItem()->data( 0, Qt::UserRole ).toInt() );
00172 }
00173
00174 void TransportManagementWidget::defaultClicked()
00175 {
00176 Q_ASSERT( d->ui.transportList->currentItem() );
00177
00178 TransportManager::self()->setDefaultTransport(
00179 d->ui.transportList->currentItem()->data( 0, Qt::UserRole ).toInt() );
00180 }
00181
00182 #include "transportmanagementwidget.moc"