00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <qcheckbox.h>
00025
#include <qlabel.h>
00026
#include <qlayout.h>
00027
#include <qpainter.h>
00028
#include <qpushbutton.h>
00029
#include <qstring.h>
00030
#include <qtoolbutton.h>
00031
#include <qtooltip.h>
00032
00033
#include <kaccelmanager.h>
00034
#include <kconfig.h>
00035
#include <kcombobox.h>
00036
#include <kdebug.h>
00037
#include <kdialog.h>
00038
#include <kiconloader.h>
00039
#include <klineedit.h>
00040
#include <klocale.h>
00041
#include <kmessagebox.h>
00042
00043
#include "emaileditwidget.h"
00044
00045
class EmailItem :
public QListBoxText
00046 {
00047
public:
00048 EmailItem(
QListBox *parent,
const QString &text,
bool preferred )
00049 :
QListBoxText( parent, text ), mPreferred( preferred )
00050 {}
00051
00052
void setPreferred(
bool preferred ) { mPreferred = preferred; }
00053
bool preferred()
const {
return mPreferred; }
00054
00055
void setText(
const QString &text )
00056 {
00057 QListBoxText::setText( text );
00058 }
00059
00060
protected:
00061
virtual void paint(
QPainter *p )
00062 {
00063
if ( mPreferred ) {
00064
QFont font = p->font();
00065 font.setBold(
true );
00066 p->setFont( font );
00067 }
00068
00069 QListBoxText::paint( p );
00070 }
00071
00072
private:
00073
bool mPreferred;
00074 };
00075
00076 EmailEditWidget::EmailEditWidget(
QWidget *parent,
const char *name )
00077 :
QWidget( parent, name )
00078 {
00079
QGridLayout *topLayout =
new QGridLayout(
this, 2, 2, KDialog::marginHint(),
00080 KDialog::spacingHint() );
00081
00082
QLabel *label =
new QLabel( i18n(
"Email:" ),
this );
00083 topLayout->addWidget( label, 0, 0 );
00084
00085 mEmailEdit =
new KLineEdit(
this );
00086 connect( mEmailEdit, SIGNAL( textChanged(
const QString& ) ),
00087 SLOT( textChanged(
const QString& ) ) );
00088 connect( mEmailEdit, SIGNAL( textChanged(
const QString& ) ),
00089 SIGNAL( modified() ) );
00090 label->setBuddy( mEmailEdit );
00091 topLayout->addWidget( mEmailEdit, 0, 1 );
00092
00093 mEditButton =
new QPushButton( i18n(
"Edit Email Addresses..." ),
this);
00094 connect( mEditButton, SIGNAL( clicked() ), SLOT( edit() ) );
00095 topLayout->addMultiCellWidget( mEditButton, 1, 1, 0, 1 );
00096
00097 topLayout->activate();
00098 }
00099
00100 EmailEditWidget::~EmailEditWidget()
00101 {
00102 }
00103
00104
void EmailEditWidget::setReadOnly(
bool readOnly )
00105 {
00106 mEmailEdit->setReadOnly( readOnly );
00107 mEditButton->setEnabled( !readOnly );
00108 }
00109
00110
void EmailEditWidget::setEmails(
const QStringList &list )
00111 {
00112 mEmailList = list;
00113
00114
bool blocked = mEmailEdit->signalsBlocked();
00115 mEmailEdit->blockSignals(
true );
00116
if ( list.count() > 0 )
00117 mEmailEdit->setText( list[ 0 ] );
00118
else
00119 mEmailEdit->setText(
"" );
00120 mEmailEdit->blockSignals( blocked );
00121 }
00122
00123
QStringList EmailEditWidget::emails()
00124 {
00125
if ( mEmailEdit->text().isEmpty() ) {
00126
if ( mEmailList.count() > 0 )
00127 mEmailList.remove( mEmailList.begin() );
00128 }
else {
00129
if ( mEmailList.count() > 0 )
00130 mEmailList.remove( mEmailList.begin() );
00131
00132 mEmailList.prepend( mEmailEdit->text() );
00133 }
00134
00135
return mEmailList;
00136 }
00137
00138
void EmailEditWidget::edit()
00139 {
00140 EmailEditDialog dlg( mEmailList,
this );
00141
00142
if ( dlg.exec() ) {
00143
if ( dlg.changed() ) {
00144 mEmailList = dlg.emails();
00145 mEmailEdit->setText( mEmailList[ 0 ] );
00146 emit modified();
00147 }
00148 }
00149 }
00150
00151
void EmailEditWidget::textChanged(
const QString &text )
00152 {
00153
if ( mEmailList.count() > 0 )
00154 mEmailList.remove( mEmailList.begin() );
00155
00156 mEmailList.prepend( text );
00157 }
00158
00159
00160 EmailEditDialog::EmailEditDialog(
const QStringList &list,
QWidget *parent,
00161
const char *name )
00162 : KDialogBase( KDialogBase::Plain, i18n( "Edit Email Addresses" ),
00163 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Help,
00164 parent, name, true ), mIsEdit( false )
00165 {
00166
QWidget *page = plainPage();
00167
00168 QGridLayout *topLayout =
new QGridLayout( page, 4, 3, marginHint(),
00169 spacingHint() );
00170
00171 QLabel *label =
new QLabel( i18n(
"Email address:" ), page );
00172 topLayout->addWidget( label, 0, 0 );
00173
00174 mEmailEdit =
new KLineEdit( page );
00175 label->setBuddy( mEmailEdit );
00176 topLayout->addWidget( mEmailEdit, 0, 1 );
00177 connect( mEmailEdit, SIGNAL( textChanged(
const QString& ) ),
00178 SLOT( emailChanged() ) );
00179
00180 mAddButton =
new QPushButton( i18n(
"Add" ), page );
00181 mAddButton->setEnabled(
false );
00182 connect( mAddButton, SIGNAL( clicked() ), SLOT( add() ) );
00183 topLayout->addWidget( mAddButton, 0, 2 );
00184
00185 mEmailListBox =
new QListBox( page );
00186
00187
00188 mEmailListBox->setMinimumHeight( mEmailListBox->sizeHint().height() + 30 );
00189 connect( mEmailListBox, SIGNAL( highlighted(
int ) ),
00190 SLOT( selectionChanged(
int ) ) );
00191 connect( mEmailListBox, SIGNAL( selected(
int ) ),
00192 SLOT( edit() ) );
00193 topLayout->addMultiCellWidget( mEmailListBox, 1, 3, 0, 1 );
00194
00195 mEditButton =
new QPushButton( i18n(
"Change" ), page );
00196 connect( mEditButton, SIGNAL( clicked() ), SLOT( edit() ) );
00197 topLayout->addWidget( mEditButton, 1, 2 );
00198
00199 mRemoveButton =
new QPushButton( i18n(
"Remove" ), page );
00200 connect( mRemoveButton, SIGNAL( clicked() ), SLOT( remove() ) );
00201 topLayout->addWidget( mRemoveButton, 2, 2 );
00202
00203 mStandardButton =
new QPushButton( i18n(
"Set Standard" ), page );
00204 connect( mStandardButton, SIGNAL( clicked() ), SLOT( standard() ) );
00205 topLayout->addWidget( mStandardButton, 3, 2 );
00206
00207 topLayout->activate();
00208
00209
QStringList items = list;
00210
if ( items.remove(
"" ) > 0 )
00211 mChanged =
true;
00212
else
00213 mChanged =
false;
00214
00215 QStringList::Iterator it;
00216
bool preferred =
true;
00217
for ( it = items.begin(); it != items.end(); ++it ) {
00218
new EmailItem( mEmailListBox, *it, preferred );
00219 preferred =
false;
00220 }
00221
00222
00223 selectionChanged( -1 );
00224 mEmailEdit->setFocus();
00225 KAcceleratorManager::manage(
this );
00226
00227 actionButton( Ok )->setDefault(
true );
00228 }
00229
00230 EmailEditDialog::~EmailEditDialog()
00231 {
00232 }
00233
00234
QStringList EmailEditDialog::emails()
const
00235
{
00236
QStringList emails;
00237
00238
for ( uint i = 0; i < mEmailListBox->count(); ++i ) {
00239 EmailItem *item = static_cast<EmailItem*>( mEmailListBox->item( i ) );
00240
if ( item->preferred() )
00241 emails.prepend( item->text() );
00242
else
00243 emails.append( item->text() );
00244 }
00245
00246
return emails;
00247 }
00248
00249
void EmailEditDialog::add()
00250 {
00251
00252
for ( uint i = 0; i < mEmailListBox->count(); ++i ) {
00253
if ( mEmailListBox->text( i ) == mEmailEdit->text() ) {
00254 mEmailEdit->clear();
00255 mEmailEdit->setFocus();
00256
return;
00257 }
00258 }
00259
00260
if ( !mIsEdit ) {
00261
new EmailItem( mEmailListBox, mEmailEdit->text(),
00262 (mEmailListBox->count() == 0) );
00263 }
else {
00264 EmailItem *item = static_cast<EmailItem*>( mEmailListBox->item( mEditPos ) );
00265 item->setText( mEmailEdit->text() );
00266 mIsEdit =
false;
00267 mEmailListBox->triggerUpdate(
true );
00268 }
00269
00270 mEmailEdit->clear();
00271 mEmailEdit->setFocus();
00272
00273 mChanged =
true;
00274 }
00275
00276
void EmailEditDialog::edit()
00277 {
00278 mIsEdit =
true;
00279 mEditPos = mEmailListBox->currentItem();
00280 mEmailEdit->setText( mEmailListBox->currentText() );
00281 mEmailEdit->setFocus();
00282 }
00283
00284
void EmailEditDialog::remove()
00285 {
00286
QString address = mEmailListBox->currentText();
00287
00288
QString text = i18n(
"<qt>Are you sure that you want to remove the email address <b>%1</b>?</qt>" ).arg( address );
00289
QString caption = i18n(
"Confirm Remove" );
00290
00291
if ( KMessageBox::warningContinueCancel(
this, text, caption, KGuiItem( i18n(
"&Delete"),
"editdelete") ) == KMessageBox::Continue) {
00292 EmailItem *item = static_cast<EmailItem*>( mEmailListBox->item( mEmailListBox->currentItem() ) );
00293
00294
bool preferred = item->preferred();
00295 mEmailListBox->removeItem( mEmailListBox->currentItem() );
00296 mEmailEdit->clear();
00297
if ( preferred ) {
00298 item = dynamic_cast<EmailItem*>( mEmailListBox->item( 0 ) );
00299
if ( item )
00300 item->setPreferred(
true );
00301 }
00302 mChanged =
true;
00303 }
00304 }
00305
00306
bool EmailEditDialog::changed()
const
00307
{
00308
return mChanged;
00309 }
00310
00311
void EmailEditDialog::standard()
00312 {
00313
for ( uint i = 0; i < mEmailListBox->count(); ++i ) {
00314 EmailItem *item = static_cast<EmailItem*>( mEmailListBox->item( i ) );
00315
if ( (
int)i == mEmailListBox->currentItem() )
00316 item->setPreferred(
true );
00317
else
00318 item->setPreferred(
false );
00319 }
00320
00321 mEmailListBox->triggerUpdate(
true );
00322
00323 mChanged =
true;
00324 }
00325
00326
void EmailEditDialog::selectionChanged(
int index )
00327 {
00328
bool value = ( index >= 0 );
00329
00330 mRemoveButton->setEnabled( value );
00331 mEditButton->setEnabled( value );
00332 mStandardButton->setEnabled( value );
00333 }
00334
00335
void EmailEditDialog::emailChanged()
00336 {
00337
bool state = mEmailEdit->text().contains(
'@' );
00338
00339 mAddButton->setEnabled( state );
00340
00341
if ( state ) {
00342 actionButton( Ok )->setDefault(
false );
00343 }
else {
00344 actionButton( Ok )->setDefault(
true );
00345 }
00346
00347 mAddButton->setDefault( state );
00348 }
00349
00350
#include "emaileditwidget.moc"