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 <qhbox.h>
00026
#include <qlabel.h>
00027
#include <qlayout.h>
00028
#include <qlistbox.h>
00029
#include <qpushbutton.h>
00030
#include <qtabwidget.h>
00031
#include <qtextedit.h>
00032
#include <qtoolbutton.h>
00033
#include <qtooltip.h>
00034
00035
#include <kabc/resource.h>
00036
#include <kaccelmanager.h>
00037
#include <kapplication.h>
00038
#include <kconfig.h>
00039
#include <kcombobox.h>
00040
#include <kdebug.h>
00041
#include <kdialogbase.h>
00042
#include <kglobal.h>
00043
#include <kiconloader.h>
00044
#include <klineedit.h>
00045
#include <klocale.h>
00046
#include <kmessagebox.h>
00047
#include <kseparator.h>
00048
#include <ksqueezedtextlabel.h>
00049
#include <kstandarddirs.h>
00050
00051
#include <libkdepim/addresseelineedit.h>
00052
#include <libkdepim/categoryeditdialog.h>
00053
#include <libkdepim/categoryselectdialog.h>
00054
#include <libkdepim/kdateedit.h>
00055
00056
#include "addresseditwidget.h"
00057
#include "advancedcustomfields.h"
00058
#include "core.h"
00059
#include "emaileditwidget.h"
00060
#include "kabprefs.h"
00061
#include "keywidget.h"
00062
#include "nameeditdialog.h"
00063
#include "phoneeditwidget.h"
00064
#include "secrecywidget.h"
00065
00066
#include "addresseeeditorwidget.h"
00067
00068 AddresseeEditorWidget::AddresseeEditorWidget( KAB::Core *core,
bool isExtension,
00069
QWidget *parent,
const char *name )
00070 : AddresseeEditorBase( core, isExtension, parent, name ),
00071 mBlockSignals( false ), mReadOnly( false )
00072 {
00073 kdDebug(5720) <<
"AddresseeEditorWidget()" << endl;
00074
00075 initGUI();
00076 mCategoryDialog = 0;
00077 mCategoryEditDialog = 0;
00078
00079
00080 load();
00081
00082 mDirty =
false;
00083 }
00084
00085 AddresseeEditorWidget::~AddresseeEditorWidget()
00086 {
00087 kdDebug(5720) <<
"~AddresseeEditorWidget()" << endl;
00088 }
00089
00090
void AddresseeEditorWidget::setAddressee(
const KABC::Addressee &addr )
00091 {
00092
if ( mAddressee.uid() == addr.uid() )
00093
return;
00094
00095 mAddressee = addr;
00096
00097
bool readOnly = ( !addr.resource() ?
false : addr.resource()->readOnly() );
00098 setReadOnly( readOnly );
00099
00100 load();
00101 }
00102
00103
const KABC::Addressee &AddresseeEditorWidget::addressee()
00104 {
00105
return mAddressee;
00106 }
00107
00108
void AddresseeEditorWidget::textChanged(
const QString& )
00109 {
00110 emitModified();
00111 }
00112
00113
void AddresseeEditorWidget::initGUI()
00114 {
00115
QVBoxLayout *layout =
new QVBoxLayout(
this );
00116
00117 mTabWidget =
new QTabWidget(
this );
00118 layout->addWidget( mTabWidget );
00119
00120 setupTab1();
00121 setupTab2();
00122 setupAdditionalTabs();
00123 setupCustomFieldsTabs();
00124
00125 connect( mTabWidget, SIGNAL( currentChanged(
QWidget*) ),
00126 SLOT( pageChanged(
QWidget*) ) );
00127 }
00128
00129
void AddresseeEditorWidget::setupTab1()
00130 {
00131
00132
QWidget *tab1 =
new QWidget( mTabWidget );
00133
00134
QGridLayout *layout =
new QGridLayout( tab1, 11, 7 );
00135 layout->setMargin( KDialogBase::marginHint() );
00136 layout->setSpacing( KDialogBase::spacingHint() );
00137
00138
QLabel *label;
00139 KSeparator* bar;
00140
QPushButton *button;
00141
00143
00144
00145
00146 label =
new QLabel( tab1 );
00147 label->setPixmap( KGlobal::iconLoader()->loadIcon(
"personal", KIcon::Desktop,
00148 KIcon::SizeMedium ) );
00149 layout->addMultiCellWidget( label, 0, 1, 0, 0 );
00150
00151
00152 button =
new QPushButton( i18n(
"Edit Name..." ), tab1 );
00153 QToolTip::add( button, i18n(
"Edit the contact's name" ) );
00154 mNameEdit =
new KLineEdit( tab1,
"mNameEdit" );
00155 connect( mNameEdit, SIGNAL( textChanged(
const QString& ) ),
00156 SLOT( nameTextChanged(
const QString& ) ) );
00157 connect( button, SIGNAL( clicked() ), SLOT( nameButtonClicked() ) );
00158 mNameLabel =
new KSqueezedTextLabel( tab1 );
00159
00160
if ( KABPrefs::instance()->mAutomaticNameParsing ) {
00161 mNameLabel->hide();
00162 mNameEdit->show();
00163 }
else {
00164 mNameEdit->hide();
00165 mNameLabel->show();
00166 }
00167
00168 layout->addWidget( button, 0, 1 );
00169 layout->addWidget( mNameEdit, 0, 2 );
00170 layout->addWidget( mNameLabel, 0, 2 );
00171 label =
new QLabel( i18n(
"%1:" ).arg( KABC::Addressee::roleLabel() ), tab1 );
00172 mRoleEdit =
new KLineEdit( tab1 );
00173 connect( mRoleEdit, SIGNAL( textChanged(
const QString& ) ),
00174 SLOT( textChanged(
const QString& ) ) );
00175 label->setBuddy( mRoleEdit );
00176 layout->addWidget( label, 1, 1 );
00177 layout->addWidget( mRoleEdit, 1, 2 );
00178
00179
00180 label =
new QLabel( i18n(
"%1:" ).arg( KABC::Addressee::organizationLabel() ), tab1 );
00181 mOrgEdit =
new KLineEdit( tab1 );
00182 label->setBuddy( mOrgEdit );
00183 connect( mOrgEdit, SIGNAL( textChanged(
const QString& ) ),
00184 SLOT( organizationTextChanged(
const QString& ) ) );
00185 layout->addWidget( label, 2, 1 );
00186 layout->addWidget( mOrgEdit, 2, 2 );
00187
00188
00189 label =
new QLabel( i18n(
"Formatted name:" ), tab1 );
00190 mFormattedNameLabel =
new KSqueezedTextLabel( tab1 );
00191 layout->addWidget( label, 3, 1 );
00192 layout->addWidget( mFormattedNameLabel, 3, 2 );
00193
00194
00195
00196 bar =
new KSeparator( KSeparator::HLine, tab1 );
00197 layout->addMultiCellWidget( bar, 4, 4, 0, 2 );
00198
00200
00201 label =
new QLabel( tab1 );
00202 label->setPixmap( KGlobal::iconLoader()->loadIcon(
"kaddressbook",
00203 KIcon::Desktop, KIcon::SizeMedium ) );
00204 layout->addMultiCellWidget( label, 0, 1, 3, 3 );
00205
00206 mPhoneEditWidget =
new PhoneEditWidget( tab1 );
00207 connect( mPhoneEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) );
00208 layout->addMultiCellWidget( mPhoneEditWidget, 0, 3, 4, 6 );
00209
00210 bar =
new KSeparator( KSeparator::HLine, tab1 );
00211 layout->addMultiCellWidget( bar, 4, 4, 3, 6 );
00212
00214
00215 label =
new QLabel( tab1 );
00216 label->setPixmap( KGlobal::iconLoader()->loadIcon(
"gohome", KIcon::Desktop,
00217 KIcon::SizeMedium ) );
00218 layout->addMultiCellWidget( label, 5, 6, 0, 0 );
00219
00220 mAddressEditWidget =
new AddressEditWidget( tab1 );
00221 connect( mAddressEditWidget, SIGNAL( modified() ), SLOT( emitModified() ) );
00222 layout->addMultiCellWidget( mAddressEditWidget, 5, 9, 1, 2 );
00223
00225
00226 label =
new QLabel( tab1 );
00227 label->setPixmap( KGlobal::iconLoader()->loadIcon(
"email", KIcon::Desktop,
00228 KIcon::SizeMedium ) );
00229 layout->addMultiCellWidget( label, 5, 6, 3, 3 );
00230
00231 mEmailWidget =
new EmailEditWidget( tab1 );
00232 connect( mEmailWidget, SIGNAL( modified() ), SLOT( emitModified() ) );
00233 layout->addMultiCellWidget( mEmailWidget, 5, 6, 4, 6 );
00234
00235
00236 bar =
new KSeparator( KSeparator::HLine, tab1 );
00237 layout->addMultiCellWidget( bar, 7, 7, 3, 6 );
00238
00239 label =
new QLabel( tab1 );
00240 label->setPixmap( KGlobal::iconLoader()->loadIcon(
"homepage", KIcon::Desktop,
00241 KIcon::SizeMedium ) );
00242 layout->addMultiCellWidget( label, 8, 9, 3, 3 );
00243
00244 label =
new QLabel( i18n(
"%1:" ).arg( KABC::Addressee::urlLabel() ), tab1 );
00245 mURLEdit =
new KLineEdit( tab1 );
00246 connect( mURLEdit, SIGNAL( textChanged(
const QString& ) ),
00247 SLOT( textChanged(
const QString& ) ) );
00248 label->setBuddy( mURLEdit );
00249 layout->addWidget( label, 8, 4 );
00250 layout->addMultiCellWidget( mURLEdit, 8, 8, 5, 6 );
00251
00252 label =
new QLabel( i18n(
"&IM address:" ), tab1 );
00253 mIMAddressEdit =
new KLineEdit( tab1 );
00254 connect( mIMAddressEdit, SIGNAL( textChanged(
const QString& ) ),
00255 SLOT( textChanged(
const QString& ) ) );
00256 label->setBuddy( mIMAddressEdit );
00257 layout->addWidget( label, 9, 4 );
00258 layout->addMultiCellWidget( mIMAddressEdit, 9, 9, 5, 6 );
00259
00260 layout->addColSpacing( 6, 50 );
00261
00262 bar =
new KSeparator( KSeparator::HLine, tab1 );
00263 layout->addMultiCellWidget( bar, 10, 10, 0, 6 );
00264
00266
QHBox *categoryBox =
new QHBox( tab1 );
00267 categoryBox->setSpacing( KDialogBase::spacingHint() );
00268
00269
00270 mCategoryButton =
new QPushButton( i18n(
"Select Categories..." ), categoryBox );
00271 connect( mCategoryButton, SIGNAL( clicked() ), SLOT( categoryButtonClicked() ) );
00272
00273 mCategoryEdit =
new KLineEdit( categoryBox );
00274 mCategoryEdit->setReadOnly(
true );
00275 connect( mCategoryEdit, SIGNAL( textChanged(
const QString& ) ),
00276 SLOT( textChanged(
const QString& ) ) );
00277
00278 mSecrecyWidget =
new SecrecyWidget( categoryBox );
00279 connect( mSecrecyWidget, SIGNAL( changed() ), SLOT( emitModified() ) );
00280
00281 layout->addMultiCellWidget( categoryBox, 11, 11, 0, 6 );
00282
00283
00284 layout->activate();
00285
00286 mTabWidget->addTab( tab1, i18n(
"&General" ) );
00287 }
00288
00289
void AddresseeEditorWidget::setupTab2()
00290 {
00291
00292
QWidget *tab2 =
new QWidget( mTabWidget );
00293
00294
QGridLayout *layout =
new QGridLayout( tab2, 6, 6 );
00295 layout->setMargin( KDialogBase::marginHint() );
00296 layout->setSpacing( KDialogBase::spacingHint() );
00297
00298
QLabel *label;
00299 KSeparator* bar;
00300
00302
00303
00304
00305 label =
new QLabel( tab2 );
00306 label->setPixmap( KGlobal::iconLoader()->loadIcon(
"folder", KIcon::Desktop,
00307 KIcon::SizeMedium ) );
00308 layout->addMultiCellWidget( label, 0, 1, 0, 0 );
00309
00310 label =
new QLabel( i18n(
"Department:" ), tab2 );
00311 layout->addWidget( label, 0, 1 );
00312 mDepartmentEdit =
new KLineEdit( tab2 );
00313 connect( mDepartmentEdit, SIGNAL( textChanged(
const QString& ) ),
00314 SLOT( textChanged(
const QString& ) ) );
00315 label->setBuddy( mDepartmentEdit );
00316 layout->addWidget( mDepartmentEdit, 0, 2 );
00317
00318 label =
new QLabel( i18n(
"Office:" ), tab2 );
00319 layout->addWidget( label, 1, 1 );
00320 mOfficeEdit =
new KLineEdit( tab2 );
00321 connect( mOfficeEdit, SIGNAL( textChanged(
const QString& ) ),
00322 SLOT( textChanged(
const QString& ) ) );
00323 label->setBuddy( mOfficeEdit );
00324 layout->addWidget( mOfficeEdit, 1, 2 );
00325
00326 label =
new QLabel( i18n(
"Profession:" ), tab2 );
00327 layout->addWidget( label, 2, 1 );
00328 mProfessionEdit =
new KLineEdit( tab2 );
00329 connect( mProfessionEdit, SIGNAL( textChanged(
const QString& ) ),
00330 SLOT( textChanged(
const QString& ) ) );
00331 label->setBuddy( mProfessionEdit );
00332 layout->addWidget( mProfessionEdit, 2, 2 );
00333
00334 label =
new QLabel( i18n(
"Manager\'s name:" ), tab2 );
00335 layout->addWidget( label, 0, 3 );
00336 mManagerEdit =
new KPIM::AddresseeLineEdit( tab2 );
00337 connect( mManagerEdit, SIGNAL( textChanged(
const QString& ) ),
00338 SLOT( textChanged(
const QString& ) ) );
00339 label->setBuddy( mManagerEdit );
00340 layout->addMultiCellWidget( mManagerEdit, 0, 0, 4, 5 );
00341
00342 label =
new QLabel( i18n(
"Assistant's name:" ), tab2 );
00343 layout->addWidget( label, 1, 3 );
00344 mAssistantEdit =
new KPIM::AddresseeLineEdit( tab2 );
00345 connect( mAssistantEdit, SIGNAL( textChanged(
const QString& ) ),
00346 SLOT( textChanged(
const QString& ) ) );
00347 label->setBuddy( mAssistantEdit );
00348 layout->addMultiCellWidget( mAssistantEdit, 1, 1, 4, 5 );
00349
00350 bar =
new KSeparator( KSeparator::HLine, tab2 );
00351 layout->addMultiCellWidget( bar, 3, 3, 0, 5 );
00352
00354
00355
00356 label =
new QLabel( tab2 );
00357 label->setPixmap( KGlobal::iconLoader()->loadIcon(
"personal", KIcon::Desktop,
00358 KIcon::SizeMedium ) );
00359 layout->addMultiCellWidget( label, 4, 5, 0, 0 );
00360
00361 label =
new QLabel( i18n(
"Nickname:" ), tab2 );
00362 layout->addWidget( label, 4, 1 );
00363 mNicknameEdit =
new KLineEdit( tab2 );
00364 connect( mNicknameEdit, SIGNAL( textChanged(
const QString& ) ),
00365 SLOT( textChanged(
const QString& ) ) );
00366 label->setBuddy( mNicknameEdit );
00367 layout->addWidget( mNicknameEdit, 4, 2 );
00368
00369 label =
new QLabel( i18n(
"Spouse's name:" ), tab2 );
00370 layout->addWidget( label, 5, 1 );
00371 mSpouseEdit =
new KPIM::AddresseeLineEdit( tab2 );
00372 connect( mSpouseEdit, SIGNAL( textChanged(
const QString& ) ),
00373 SLOT( textChanged(
const QString& ) ) );
00374 label->setBuddy( mSpouseEdit );
00375 layout->addWidget( mSpouseEdit, 5, 2 );
00376
00377 label =
new QLabel( i18n(
"Birthdate:" ), tab2 );
00378 layout->addWidget( label, 4, 3 );
00379 mBirthdayPicker =
new KDateEdit( tab2 );
00380 mBirthdayPicker->setHandleInvalid(
true );
00381 connect( mBirthdayPicker, SIGNAL( dateChanged(
QDate ) ),
00382 SLOT( dateChanged(
QDate ) ) );
00383 connect( mBirthdayPicker, SIGNAL( invalidDateEntered() ),
00384 SLOT( invalidDate() ) );
00385 connect( mBirthdayPicker, SIGNAL( textChanged(
const QString& ) ),
00386 SLOT( emitModified() ) );
00387 label->setBuddy( mBirthdayPicker );
00388 layout->addWidget( mBirthdayPicker, 4, 4 );
00389
00390 label =
new QLabel( i18n(
"Anniversary:" ), tab2 );
00391 layout->addWidget( label, 5, 3 );
00392 mAnniversaryPicker =
new KDateEdit( tab2 );
00393 mAnniversaryPicker->setHandleInvalid(
true );
00394 connect( mAnniversaryPicker, SIGNAL( dateChanged(
QDate ) ),
00395 SLOT( dateChanged(
QDate ) ) );
00396 connect( mAnniversaryPicker, SIGNAL( invalidDateEntered() ),
00397 SLOT( invalidDate() ) );
00398 connect( mAnniversaryPicker, SIGNAL( textChanged(
const QString& ) ),
00399 SLOT( emitModified() ) );
00400 label->setBuddy( mAnniversaryPicker );
00401 layout->addWidget( mAnniversaryPicker, 5, 4 );
00402
00403 bar =
new KSeparator( KSeparator::HLine, tab2 );
00404 layout->addMultiCellWidget( bar, 6, 6, 0, 5 );
00405
00407
00408 label =
new QLabel( i18n(
"Note:" ), tab2 );
00409 label->setAlignment( Qt::AlignTop | Qt::AlignLeft );
00410 layout->addWidget( label, 7, 0 );
00411 mNoteEdit =
new QTextEdit( tab2 );
00412 mNoteEdit->setWordWrap( QTextEdit::WidgetWidth );
00413 mNoteEdit->setMinimumSize( mNoteEdit->sizeHint() );
00414 connect( mNoteEdit, SIGNAL( textChanged() ), SLOT( emitModified() ) );
00415 label->setBuddy( mNoteEdit );
00416 layout->addMultiCellWidget( mNoteEdit, 7, 7, 1, 5 );
00417
00418
00419 layout->activate();
00420
00421 mTabWidget->addTab( tab2, i18n(
"&Details" ) );
00422 }
00423
00424
void AddresseeEditorWidget::setupAdditionalTabs()
00425 {
00426 ContactEditorWidgetManager *manager = ContactEditorWidgetManager::self();
00427
00428
00429
for (
int i = 0; i < manager->count(); ++i ) {
00430
QString pageIdentifier = manager->factory( i )->pageIdentifier();
00431
QString pageTitle = manager->factory( i )->pageTitle();
00432
00433
if ( pageIdentifier ==
"misc" )
00434 pageTitle = i18n(
"Misc" );
00435
00436 ContactEditorTabPage *page = mTabPages[ pageIdentifier ];
00437
if ( page == 0 ) {
00438 page =
new ContactEditorTabPage( mTabWidget );
00439 mTabPages.insert( pageIdentifier, page );
00440
00441 mTabWidget->addTab( page, pageTitle );
00442
00443 connect( page, SIGNAL( changed() ), SLOT( emitModified() ) );
00444 }
00445
00446 KAB::ContactEditorWidget *widget
00447 = manager->factory( i )->createWidget( core()->addressBook(),
00448 page );
00449
if ( widget )
00450 page->addWidget( widget );
00451 }
00452
00453
00454
QDictIterator<ContactEditorTabPage> it( mTabPages );
00455
for ( ; it.current(); ++it )
00456 it.current()->updateLayout();
00457 }
00458
00459
void AddresseeEditorWidget::setupCustomFieldsTabs()
00460 {
00461
QStringList activePages = KABPrefs::instance()->mAdvancedCustomFields;
00462
00463
QStringList list = KGlobal::dirs()->findAllResources(
"data",
"kaddressbook/contacteditorpages/*.ui",
true,
true );
00464
for ( QStringList::iterator it = list.begin(); it != list.end(); ++it ) {
00465
if ( activePages.find( (*it).mid( (*it).findRev(
'/') + 1 ) ) == activePages.end() )
00466
continue;
00467
00468 ContactEditorTabPage *page =
new ContactEditorTabPage( mTabWidget );
00469 AdvancedCustomFields *wdg =
new AdvancedCustomFields( *it, core()->addressBook(), page );
00470
if ( wdg ) {
00471 mTabPages.insert( wdg->pageIdentifier(), page );
00472 mTabWidget->addTab( page, wdg->pageTitle() );
00473
00474 page->addWidget( wdg );
00475 page->updateLayout();
00476
00477 connect( page, SIGNAL( changed() ), SLOT( emitModified() ) );
00478 }
else
00479
delete page;
00480 }
00481 }
00482
00483
void AddresseeEditorWidget::load()
00484 {
00485 kdDebug(5720) <<
"AddresseeEditorWidget::load()" << endl;
00486
00487
00488
00489
bool block = signalsBlocked();
00490 blockSignals(
true );
00491 mBlockSignals =
true;
00492
00493 mNameEdit->blockSignals(
true );
00494 mNameEdit->setText( mAddressee.assembledName() );
00495 mNameEdit->blockSignals(
false );
00496
00497
if ( mAddressee.formattedName().isEmpty() ) {
00498 KConfig config(
"kaddressbookrc" );
00499 config.setGroup(
"General" );
00500 mFormattedNameType = config.readNumEntry(
"FormattedNameType", 1 );
00501 mAddressee.setFormattedName( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) );
00502 }
else {
00503
if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::SimpleName ) )
00504 mFormattedNameType = NameEditDialog::SimpleName;
00505
else if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::FullName ) )
00506 mFormattedNameType = NameEditDialog::FullName;
00507
else if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::ReverseNameWithComma ) )
00508 mFormattedNameType = NameEditDialog::ReverseNameWithComma;
00509
else if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::ReverseName ) )
00510 mFormattedNameType = NameEditDialog::ReverseName;
00511
else if ( mAddressee.formattedName() == NameEditDialog::formattedName( mAddressee, NameEditDialog::Organization ) )
00512 mFormattedNameType = NameEditDialog::Organization;
00513
else
00514 mFormattedNameType = NameEditDialog::CustomName;
00515 }
00516
00517 mFormattedNameLabel->setText( mAddressee.formattedName() );
00518
00519 mRoleEdit->setText( mAddressee.role() );
00520 mOrgEdit->setText( mAddressee.organization() );
00521 mURLEdit->setURL( mAddressee.url() );
00522 mURLEdit->home(
false );
00523 mNoteEdit->setText( mAddressee.note() );
00524 mEmailWidget->setEmails( mAddressee.emails() );
00525 mPhoneEditWidget->setPhoneNumbers( mAddressee.phoneNumbers() );
00526 mAddressEditWidget->setAddresses( mAddressee, mAddressee.addresses() );
00527 mBirthdayPicker->setDate( mAddressee.birthday().date() );
00528 mAnniversaryPicker->setDate( QDate::fromString( mAddressee.custom(
00529
"KADDRESSBOOK",
"X-Anniversary" ), Qt::ISODate) );
00530 mNicknameEdit->setText( mAddressee.nickName() );
00531 mCategoryEdit->setText( mAddressee.categories().join(
"," ) );
00532
00533 mSecrecyWidget->setSecrecy( mAddressee.secrecy() );
00534
00535
00536 mIMAddressEdit->setText( mAddressee.custom(
"KADDRESSBOOK",
"X-IMAddress" ) );
00537 mSpouseEdit->setText( mAddressee.custom(
"KADDRESSBOOK",
"X-SpousesName" ) );
00538 mManagerEdit->setText( mAddressee.custom(
"KADDRESSBOOK",
"X-ManagersName" ) );
00539 mAssistantEdit->setText( mAddressee.custom(
"KADDRESSBOOK",
"X-AssistantsName" ) );
00540 mDepartmentEdit->setText( mAddressee.custom(
"KADDRESSBOOK",
"X-Department" ) );
00541 mOfficeEdit->setText( mAddressee.custom(
"KADDRESSBOOK",
"X-Office" ) );
00542 mProfessionEdit->setText( mAddressee.custom(
"KADDRESSBOOK",
"X-Profession" ) );
00543
00544
QDictIterator<ContactEditorTabPage> it( mTabPages );
00545
for ( ; it.current(); ++it )
00546 it.current()->loadContact( &mAddressee );
00547
00548 blockSignals( block );
00549 mBlockSignals =
false;
00550
00551 mDirty =
false;
00552 }
00553
00554
void AddresseeEditorWidget::save()
00555 {
00556
if ( !mDirty )
return;
00557
00558 mAddressee.setRole( mRoleEdit->text() );
00559 mAddressee.setOrganization( mOrgEdit->text() );
00560 mAddressee.setUrl( KURL( mURLEdit->text().stripWhiteSpace() ) );
00561 mAddressee.setNote( mNoteEdit->text() );
00562
if ( mBirthdayPicker->inputIsValid() )
00563 mAddressee.setBirthday(
QDateTime( mBirthdayPicker->date() ) );
00564
else
00565 mAddressee.setBirthday(
QDateTime() );
00566
00567 mAddressee.setNickName( mNicknameEdit->text() );
00568 mAddressee.setCategories( QStringList::split(
",", mCategoryEdit->text() ) );
00569
00570 mAddressee.setSecrecy( mSecrecyWidget->secrecy() );
00571
00572
00573 mAddressee.insertCustom(
"KADDRESSBOOK",
"X-IMAddress", mIMAddressEdit->text() );
00574 mAddressee.insertCustom(
"KADDRESSBOOK",
"X-SpousesName", mSpouseEdit->text() );
00575 mAddressee.insertCustom(
"KADDRESSBOOK",
"X-ManagersName", mManagerEdit->text() );
00576 mAddressee.insertCustom(
"KADDRESSBOOK",
"X-AssistantsName", mAssistantEdit->text() );
00577 mAddressee.insertCustom(
"KADDRESSBOOK",
"X-Department", mDepartmentEdit->text() );
00578 mAddressee.insertCustom(
"KADDRESSBOOK",
"X-Office", mOfficeEdit->text() );
00579 mAddressee.insertCustom(
"KADDRESSBOOK",
"X-Profession", mProfessionEdit->text() );
00580
if ( mAnniversaryPicker->inputIsValid() )
00581 mAddressee.insertCustom(
"KADDRESSBOOK",
"X-Anniversary",
00582 mAnniversaryPicker->date().toString( Qt::ISODate ) );
00583
else
00584 mAddressee.removeCustom(
"KADDRESSBOOK",
"X-Anniversary" );
00585
00586
00587 mAddressee.setEmails( mEmailWidget->emails() );
00588
00589
00590 KABC::PhoneNumber::List phoneNumbers;
00591 KABC::PhoneNumber::List::Iterator phoneIter;
00592 phoneNumbers = mAddressee.phoneNumbers();
00593
for ( phoneIter = phoneNumbers.begin(); phoneIter != phoneNumbers.end();
00594 ++phoneIter )
00595 mAddressee.removePhoneNumber( *phoneIter );
00596
00597 phoneNumbers = mPhoneEditWidget->phoneNumbers();
00598
for ( phoneIter = phoneNumbers.begin(); phoneIter != phoneNumbers.end();
00599 ++phoneIter )
00600 mAddressee.insertPhoneNumber( *phoneIter );
00601
00602
00603 KABC::Address::List addresses;
00604 KABC::Address::List::Iterator addressIter;
00605 addresses = mAddressee.addresses();
00606
for ( addressIter = addresses.begin(); addressIter != addresses.end();
00607 ++addressIter )
00608 mAddressee.removeAddress( *addressIter );
00609
00610 addresses = mAddressEditWidget->addresses();
00611
for ( addressIter = addresses.begin(); addressIter != addresses.end();
00612 ++addressIter )
00613 mAddressee.insertAddress( *addressIter );
00614
00615
QDictIterator<ContactEditorTabPage> it( mTabPages );
00616
for ( ; it.current(); ++it )
00617 it.current()->storeContact( &mAddressee );
00618
00619 mDirty =
false;
00620 }
00621
00622
bool AddresseeEditorWidget::dirty()
00623 {
00624
return mDirty;
00625 }
00626
00627
void AddresseeEditorWidget::nameTextChanged(
const QString &text )
00628 {
00629
00630 AddresseeConfig config( mAddressee );
00631
if ( config.automaticNameParsing() ) {
00632
if ( !mAddressee.formattedName().isEmpty() ) {
00633
QString fn = mAddressee.formattedName();
00634 mAddressee.setNameFromString( text );
00635 mAddressee.setFormattedName( fn );
00636 }
else {
00637
00638 Addressee addr;
00639 addr.setNameFromString( text );
00640 mAddressee.setPrefix( addr.prefix() );
00641 mAddressee.setGivenName( addr.givenName() );
00642 mAddressee.setAdditionalName( addr.additionalName() );
00643 mAddressee.setFamilyName( addr.familyName() );
00644 mAddressee.setSuffix( addr.suffix() );
00645 }
00646 }
00647
00648 nameBoxChanged();
00649
00650 emitModified();
00651 }
00652
00653
void AddresseeEditorWidget::organizationTextChanged(
const QString &text )
00654 {
00655
00656 AddresseeConfig config( mAddressee );
00657
if ( config.automaticNameParsing() )
00658 mAddressee.setOrganization( text );
00659
00660 nameBoxChanged();
00661
00662 emitModified();
00663 }
00664
00665
void AddresseeEditorWidget::nameBoxChanged()
00666 {
00667 KABC::Addressee addr;
00668 AddresseeConfig config( mAddressee );
00669
if ( config.automaticNameParsing() ) {
00670 addr.setNameFromString( mNameEdit->text() );
00671 mNameLabel->hide();
00672 mNameEdit->show();
00673 }
else {
00674 addr = mAddressee;
00675 mNameEdit->hide();
00676 mNameLabel->setText( mNameEdit->text() );
00677 mNameLabel->show();
00678 }
00679
00680
if ( mFormattedNameType != NameEditDialog::CustomName ) {
00681 mFormattedNameLabel->setText( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) );
00682 mAddressee.setFormattedName( NameEditDialog::formattedName( mAddressee, mFormattedNameType ) );
00683 }
00684 }
00685
00686
void AddresseeEditorWidget::nameButtonClicked()
00687 {
00688
00689
NameEditDialog dialog( mAddressee, mFormattedNameType, mReadOnly,
this );
00690
00691
if ( dialog.exec() ) {
00692
if ( dialog.changed() ) {
00693 mAddressee.setFamilyName( dialog.familyName() );
00694 mAddressee.setGivenName( dialog.givenName() );
00695 mAddressee.setPrefix( dialog.prefix() );
00696 mAddressee.setSuffix( dialog.suffix() );
00697 mAddressee.setAdditionalName( dialog.additionalName() );
00698 mFormattedNameType = dialog.formattedNameType();
00699
if ( mFormattedNameType == NameEditDialog::CustomName ) {
00700 mFormattedNameLabel->setText( dialog.customFormattedName() );
00701 mAddressee.setFormattedName( dialog.customFormattedName() );
00702 }
00703
00704
bool block = mNameEdit->signalsBlocked();
00705 mNameEdit->blockSignals(
true );
00706 mNameEdit->setText( mAddressee.assembledName() );
00707 mNameEdit->blockSignals( block );
00708
00709
00710 nameBoxChanged();
00711
00712 emitModified();
00713 }
00714 }
00715 }
00716
00717
void AddresseeEditorWidget::categoryButtonClicked()
00718 {
00719
00720
if ( mCategoryDialog == 0 ) {
00721 mCategoryDialog =
new KPIM::CategorySelectDialog( KABPrefs::instance(),
this );
00722 connect( mCategoryDialog, SIGNAL( categoriesSelected(
const QStringList& ) ),
00723 SLOT(categoriesSelected(
const QStringList& ) ) );
00724 connect( mCategoryDialog, SIGNAL( editCategories() ), SLOT( editCategories() ) );
00725 }
00726
00727
QStringList customCategories = QStringList::split(
",", mCategoryEdit->text() );
00728
00729 mCategoryDialog->setCategories( customCategories );
00730 mCategoryDialog->setSelected( customCategories );
00731 mCategoryDialog->show();
00732 mCategoryDialog->raise();
00733 }
00734
00735
void AddresseeEditorWidget::categoriesSelected(
const QStringList &list )
00736 {
00737 mCategoryEdit->setText( list.join(
"," ) );
00738 }
00739
00740
void AddresseeEditorWidget::editCategories()
00741 {
00742
if ( mCategoryEditDialog == 0 ) {
00743 mCategoryEditDialog =
new KPIM::CategoryEditDialog( KABPrefs::instance(),
this );
00744 connect( mCategoryEditDialog, SIGNAL( categoryConfigChanged() ),
00745 SLOT( categoryButtonClicked() ) );
00746 }
00747
00748 mCategoryEditDialog->show();
00749 mCategoryEditDialog->raise();
00750 }
00751
00752
void AddresseeEditorWidget::emitModified()
00753 {
00754 mDirty =
true;
00755
00756
if ( !mBlockSignals ) {
00757 KABC::Addressee::List list;
00758
00759 save();
00760 list.append( mAddressee );
00761
00762
00763
if ( !isExtension() )
00764 mDirty =
true;
00765
00766 emit modified( list );
00767 }
00768 }
00769
00770
void AddresseeEditorWidget::dateChanged(
QDate )
00771 {
00772 emitModified();
00773 }
00774
00775
void AddresseeEditorWidget::invalidDate()
00776 {
00777 KMessageBox::sorry(
this, i18n(
"You must specify a valid date" ) );
00778 }
00779
00780
void AddresseeEditorWidget::pageChanged(
QWidget *wdg )
00781 {
00782
if ( wdg )
00783 KAcceleratorManager::manage( wdg );
00784 }
00785
00786
QString AddresseeEditorWidget::title()
const
00787
{
00788
return i18n(
"Contact Editor" );
00789 }
00790
00791
QString AddresseeEditorWidget::identifier()
const
00792
{
00793
return "contact_editor";
00794 }
00795
00796
void AddresseeEditorWidget::setInitialFocus()
00797 {
00798 mNameEdit->setFocus();
00799 }
00800
00801
void AddresseeEditorWidget::setReadOnly(
bool readOnly )
00802 {
00803 mReadOnly = readOnly;
00804
00805 mNameEdit->setReadOnly( readOnly );
00806 mRoleEdit->setReadOnly( readOnly );
00807 mOrgEdit->setReadOnly( readOnly );
00808 mPhoneEditWidget->setReadOnly( readOnly );
00809 mAddressEditWidget->setReadOnly( readOnly );
00810 mEmailWidget->setReadOnly( readOnly );
00811 mURLEdit->setReadOnly( readOnly );
00812 mIMAddressEdit->setReadOnly( readOnly );
00813 mCategoryButton->setEnabled( !readOnly );
00814 mSecrecyWidget->setReadOnly( readOnly );
00815 mDepartmentEdit->setReadOnly( readOnly );
00816 mOfficeEdit->setReadOnly( readOnly );
00817 mProfessionEdit->setReadOnly( readOnly );
00818 mManagerEdit->setReadOnly( readOnly );
00819 mAssistantEdit->setReadOnly( readOnly );
00820 mNicknameEdit->setReadOnly( readOnly );
00821 mSpouseEdit->setReadOnly( readOnly );
00822 mBirthdayPicker->setEnabled( !readOnly );
00823 mAnniversaryPicker->setEnabled( !readOnly );
00824 mNoteEdit->setReadOnly( mReadOnly );
00825
00826
QDictIterator<ContactEditorTabPage> it( mTabPages );
00827
for ( ; it.current(); ++it )
00828 it.current()->setReadOnly( readOnly );
00829 }
00830
00831
#include "addresseeeditorwidget.moc"