00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifdef HAVE_CONFIG_H
00033 #include <config.h>
00034 #endif
00035
00036 #include "identitydialog.h"
00037
00038
00039 #include "signatureconfigurator.h"
00040 #include "kmfoldercombobox.h"
00041 #include "kmfoldermgr.h"
00042 #include "transportmanager.h"
00043 #include "kmkernel.h"
00044 #include "dictionarycombobox.h"
00045
00046
00047
00048 #include <kpgpui.h>
00049
00050
00051 #include <klineedit.h>
00052 #include <klocale.h>
00053 #include <kmessagebox.h>
00054 #include <kconfig.h>
00055
00056
00057 #include <qtabwidget.h>
00058 #include <qlabel.h>
00059 #include <qwhatsthis.h>
00060
00061
00062
00063 namespace KMail {
00064
00065 IdentityDialog::IdentityDialog( QWidget * parent, const char * name )
00066 : KDialogBase( Plain, i18n("Edit Identity"), Ok|Cancel|Help, Ok,
00067 parent, name )
00068 {
00069
00070 QWidget * tab;
00071 QLabel * label;
00072 int row;
00073 QGridLayout * glay;
00074 QString msg;
00075
00076
00077
00078
00079 row = -1;
00080 QVBoxLayout * vlay = new QVBoxLayout( plainPage(), 0, spacingHint() );
00081 QTabWidget *tabWidget = new QTabWidget( plainPage(), "config-identity-tab" );
00082 vlay->addWidget( tabWidget );
00083
00084 tab = new QWidget( tabWidget );
00085 tabWidget->addTab( tab, i18n("&General") );
00086 glay = new QGridLayout( tab, 4, 2, marginHint(), spacingHint() );
00087 glay->setRowStretch( 3, 1 );
00088 glay->setColStretch( 1, 1 );
00089
00090
00091 ++row;
00092 mNameEdit = new KLineEdit( tab );
00093 glay->addWidget( mNameEdit, row, 1 );
00094 label = new QLabel( mNameEdit, i18n("&Your name:"), tab );
00095 glay->addWidget( label, row, 0 );
00096 msg = i18n("<qt><h3>Your name</h3>"
00097 "<p>This field should have your name, as you'd like "
00098 "it to appear in the email header that is sent out.</p>"
00099 "<p>If you leave this blank, your real name won't "
00100 "appear, only the email address.</p></qt>");
00101 QWhatsThis::add( label, msg );
00102 QWhatsThis::add( mNameEdit, msg );
00103
00104
00105 ++row;
00106 mOrganizationEdit = new KLineEdit( tab );
00107 glay->addWidget( mOrganizationEdit, row, 1 );
00108 label = new QLabel( mOrganizationEdit, i18n("Organi&zation:"), tab );
00109 glay->addWidget( label, row, 0 );
00110 msg = i18n("<qt><h3>Organization</h3>"
00111 "<p>This field should have the name of your organization "
00112 "if you'd like it to be shown in the email header that "
00113 "is sent out.</p>"
00114 "<p>It is safe (and normal) to leave this blank.</p></qt>");
00115 QWhatsThis::add( label, msg );
00116 QWhatsThis::add( mOrganizationEdit, msg );
00117
00118
00119
00120 ++row;
00121 mEmailEdit = new KLineEdit( tab );
00122 glay->addWidget( mEmailEdit, row, 1 );
00123 label = new QLabel( mEmailEdit, i18n("&Email address:"), tab );
00124 glay->addWidget( label, row, 0 );
00125 msg = i18n("<qt><h3>Email address</h3>"
00126 "<p>This field should have your full email address.</p>"
00127 "<p>If you leave this blank, or get it wrong, people "
00128 "will have trouble replying to you.</p></qt>");
00129 QWhatsThis::add( label, msg );
00130 QWhatsThis::add( mEmailEdit, msg );
00131
00132
00133
00134
00135 row = -1;
00136 tab = new QWidget( tabWidget );
00137 tabWidget->addTab( tab, i18n("&Advanced") );
00138 glay = new QGridLayout( tab, 7, 2, marginHint(), spacingHint() );
00139
00140 glay->setRowStretch( 7-1, 1 );
00141 glay->setColStretch( 1, 1 );
00142
00143
00144 ++row;
00145 mReplyToEdit = new KLineEdit( tab );
00146 glay->addWidget( mReplyToEdit, row, 1 );
00147 label = new QLabel ( mReplyToEdit, i18n("&Reply-To address:"), tab);
00148 glay->addWidget( label , row, 0 );
00149 msg = i18n("<qt><h3>Reply-To addresses</h3>"
00150 "<p>This sets the <tt>Reply-to:</tt> header to contain a "
00151 "different email address to the normal <tt>From:</tt> "
00152 "address.</p>"
00153 "<p>This can be useful when you have a group of people "
00154 "working together in similar roles. For example, you "
00155 "might want any emails sent to have your email in the "
00156 "<tt>From:</tt> field, but any responses to go to "
00157 "a group address.</p>"
00158 "<p>If in doubt, leave this field blank.</p></qt>");
00159 QWhatsThis::add( label, msg );
00160 QWhatsThis::add( mReplyToEdit, msg );
00161
00162
00163 ++row;
00164 mBccEdit = new KLineEdit( tab );
00165 glay->addWidget( mBccEdit, row, 1 );
00166 label = new QLabel( mBccEdit, i18n("&BCC addresses:"), tab );
00167 glay->addWidget( label, row, 0 );
00168 msg = i18n("<qt><h3>BCC (Blind Carbon Copy) addresses</h3>"
00169 "<p>The addresses that you enter here will be added to each "
00170 "outgoing mail that is sent with this identity. They will not "
00171 "be visible to other recipients.</p>"
00172 "<p>This is commonly used to send a copy of each sent message to "
00173 "another account of yours.</p>"
00174 "<p>If in doubt, leave this field blank.</p></qt>");
00175 QWhatsThis::add( label, msg );
00176 QWhatsThis::add( mBccEdit, msg );
00177
00178
00179 ++row;
00180 mPgpKeyRequester = new Kpgp::SecretKeyRequester( tab );
00181 mPgpKeyRequester->dialogButton()->setText( i18n("Chang&e...") );
00182 mPgpKeyRequester->setDialogCaption( i18n("Your OpenPGP Key") );
00183 mPgpKeyRequester->setDialogMessage( i18n("Select the OpenPGP key which "
00184 "should be used to sign your "
00185 "messages and when encrypting to "
00186 "yourself.") );
00187 msg = i18n("<qt><p>The OpenPGP key you choose here will be used "
00188 "to sign messages and to encrypt messages to "
00189 "yourself. You can also use GnuPG keys.</p>"
00190 "You can leave this blank, but KMail won't be able "
00191 "to cryptographically sign emails. Normal mail functions won't "
00192 "be affected.</p>"
00193 "You can find out more about keys at <a>http://www.gnupg.org</a></qt>");
00194
00195 label = new QLabel( mPgpKeyRequester, i18n("OpenPGP key:"), tab );
00196 QWhatsThis::add( mPgpKeyRequester, msg );
00197 QWhatsThis::add( label, msg );
00198
00199 glay->addWidget( label, row, 0 );
00200 glay->addWidget( mPgpKeyRequester, row, 1 );
00201
00202
00203 ++row;
00204 mDictionaryCombo = new DictionaryComboBox( tab );
00205 glay->addWidget( mDictionaryCombo, row, 1 );
00206 glay->addWidget( new QLabel( mDictionaryCombo, i18n("D&ictionary:"), tab ),
00207 row, 0 );
00208
00209
00210 ++row;
00211 mFccCombo = new KMFolderComboBox( tab );
00212 mFccCombo->showOutboxFolder( false );
00213 glay->addWidget( mFccCombo, row, 1 );
00214 glay->addWidget( new QLabel( mFccCombo, i18n("Sent-mail &folder:"), tab ),
00215 row, 0 );
00216
00217
00218 ++row;
00219 mDraftsCombo = new KMFolderComboBox( tab );
00220 mDraftsCombo->showOutboxFolder( false );
00221 glay->addWidget( mDraftsCombo, row, 1 );
00222 glay->addWidget( new QLabel( mDraftsCombo, i18n("&Drafts folder:"), tab ),
00223 row, 0 );
00224
00225
00226 ++row;
00227 mTransportCheck = new QCheckBox( i18n("Special &transport:"), tab );
00228 glay->addWidget( mTransportCheck, row, 0 );
00229 mTransportCombo = new QComboBox( true, tab );
00230 mTransportCombo->setEnabled( false );
00231 mTransportCombo->insertStringList( KMail::TransportManager::transportNames() );
00232 glay->addWidget( mTransportCombo, row, 1 );
00233 connect( mTransportCheck, SIGNAL(toggled(bool)),
00234 mTransportCombo, SLOT(setEnabled(bool)) );
00235
00236
00237
00238
00239
00240
00241 mSignatureConfigurator = new SignatureConfigurator( tabWidget );
00242 mSignatureConfigurator->layout()->setMargin( KDialog::marginHint() );
00243 tabWidget->addTab( mSignatureConfigurator, i18n("&Signature") );
00244
00245 KConfigGroup geometry( KMKernel::config(), "Geometry" );
00246 if ( geometry.hasKey( "Identity Dialog size" ) )
00247 resize( geometry.readSizeEntry( "Identity Dialog size" ) );
00248 mNameEdit->setFocus();
00249 }
00250
00251 IdentityDialog::~IdentityDialog() {
00252 KConfigGroup geometry( KMKernel::config(), "Geometry" );
00253 geometry.writeEntry( "Identity Dialog size", size() );
00254 }
00255
00256 bool IdentityDialog::checkFolderExists( const QString & folderID,
00257 const QString & msg ) {
00258 KMFolder * folder = kmkernel->folderMgr()->findIdString( folderID );
00259 if ( !folder )
00260 folder = kmkernel->imapFolderMgr()->findIdString( folderID );
00261 if ( !folder )
00262 folder = kmkernel->dimapFolderMgr()->findIdString( folderID );
00263 if ( !folder ) {
00264 KMessageBox::sorry( this, msg );
00265 return false;
00266 }
00267 return true;
00268 }
00269
00270 void IdentityDialog::setIdentity( KMIdentity & ident ) {
00271
00272 setCaption( i18n("Edit Identity \"%1\"").arg( ident.identityName() ) );
00273
00274
00275 mNameEdit->setText( ident.fullName() );
00276 mOrganizationEdit->setText( ident.organization() );
00277 mEmailEdit->setText( ident.emailAddr() );
00278
00279
00280 mPgpKeyRequester->setKeyIDs( Kpgp::KeyIDList() << ident.pgpIdentity() );
00281 mReplyToEdit->setText( ident.replyToAddr() );
00282 mBccEdit->setText( ident.bcc() );
00283 mTransportCheck->setChecked( !ident.transport().isEmpty() );
00284 mTransportCombo->setEditText( ident.transport() );
00285 mTransportCombo->setEnabled( !ident.transport().isEmpty() );
00286 mDictionaryCombo->setCurrentByDictionary( ident.dictionary() );
00287
00288 if ( ident.fcc().isEmpty() ||
00289 !checkFolderExists( ident.fcc(),
00290 i18n("The custom sent-mail folder for identity "
00291 "\"%1\" doesn't exist (anymore). "
00292 "Therefore the default sent-mail folder "
00293 "will be used.")
00294 .arg( ident.identityName() ) ) )
00295 mFccCombo->setFolder( kmkernel->sentFolder() );
00296 else
00297 mFccCombo->setFolder( ident.fcc() );
00298
00299 if ( ident.drafts().isEmpty() ||
00300 !checkFolderExists( ident.drafts(),
00301 i18n("The custom drafts folder for identity "
00302 "\"%1\" doesn't exist (anymore). "
00303 "Therefore the default drafts folder "
00304 "will be used.")
00305 .arg( ident.identityName() ) ) )
00306 mDraftsCombo->setFolder( kmkernel->draftsFolder() );
00307 else
00308 mDraftsCombo->setFolder( ident.drafts() );
00309
00310
00311 mSignatureConfigurator->setSignature( ident.signature() );
00312 }
00313
00314 void IdentityDialog::updateIdentity( KMIdentity & ident ) {
00315
00316 ident.setFullName( mNameEdit->text() );
00317 ident.setOrganization( mOrganizationEdit->text() );
00318 QString email = mEmailEdit->text();
00319 int atCount = email.contains('@');
00320 if ( email.isEmpty() || atCount == 0 )
00321 KMessageBox::sorry( this, "<qt>"+
00322 i18n("Your email address is not valid because it "
00323 "doesn't contain a <emph>@</emph>. "
00324 "You won't create valid messages if you don't "
00325 "change your address.") + "</qt>",
00326 i18n("Invalid Email Address") );
00327 else if ( atCount > 1 ) {
00328 KMessageBox::sorry( this, "<qt>" +
00329 i18n("Your email address is not valid because it "
00330 "contains more than one <emph>@</emph>. "
00331 "You won't create valid messages if you don't "
00332 "change your address.") + "</qt>",
00333 i18n("Invalid Email Address") );
00334 }
00335 ident.setEmailAddr( email );
00336
00337 ident.setPgpIdentity( mPgpKeyRequester->keyIDs().first() );
00338 ident.setReplyToAddr( mReplyToEdit->text() );
00339 ident.setBcc( mBccEdit->text() );
00340 ident.setTransport( ( mTransportCheck->isChecked() ) ?
00341 mTransportCombo->currentText() : QString::null );
00342 ident.setDictionary( mDictionaryCombo->currentDictionary() );
00343 ident.setFcc( mFccCombo->getFolder() ?
00344 mFccCombo->getFolder()->idString() : QString::null );
00345 ident.setDrafts( mDraftsCombo->getFolder() ?
00346 mDraftsCombo->getFolder()->idString() : QString::null );
00347
00348 ident.setSignature( mSignatureConfigurator->signature() );
00349 }
00350
00351 void IdentityDialog::slotUpdateTransportCombo( const QStringList & sl ) {
00352
00353 QString content = mTransportCombo->currentText();
00354
00355 mTransportCombo->clear();
00356 mTransportCombo->insertStringList( sl );
00357
00358 mTransportCombo->setEditText( content );
00359 }
00360
00361 }
00362
00363 #include "identitydialog.moc"