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 <qlayout.h>
00025 #include <qlabel.h>
00026 #include <qlistbox.h>
00027 #include <qlistview.h>
00028 #include <qtooltip.h>
00029 #include <qpushbutton.h>
00030 #include <qcheckbox.h>
00031 #include <qstring.h>
00032
00033 #include <kaccelmanager.h>
00034 #include <kapplication.h>
00035 #include <kbuttonbox.h>
00036 #include <kconfig.h>
00037 #include <klineedit.h>
00038 #include <klistview.h>
00039 #include <kcombobox.h>
00040 #include <klocale.h>
00041 #include <kdebug.h>
00042 #include <kiconloader.h>
00043 #include <kmessagebox.h>
00044
00045 #include "nameeditdialog.h"
00046
00047 NameEditDialog::NameEditDialog( const KABC::Addressee &addr, int type,
00048 bool readOnly, QWidget *parent, const char *name )
00049 : KDialogBase( Plain, i18n( "Edit Contact Name" ), Help | Ok | Cancel,
00050 Ok, parent, name, true )
00051 {
00052 QWidget *page = plainPage();
00053 QGridLayout *layout = new QGridLayout( page );
00054 layout->setSpacing( spacingHint() );
00055 layout->addColSpacing( 2, 100 );
00056 QLabel *label;
00057
00058 label = new QLabel( i18n( "Honorific prefixes:" ), page );
00059 layout->addWidget( label, 0, 0 );
00060 mPrefixCombo = new KComboBox( page );
00061 mPrefixCombo->setDuplicatesEnabled( false );
00062 mPrefixCombo->setEditable( true );
00063 mPrefixCombo->setEnabled( !readOnly );
00064 label->setBuddy( mPrefixCombo );
00065 layout->addMultiCellWidget( mPrefixCombo, 0, 0, 1, 2 );
00066
00067 label = new QLabel( i18n( "Given name:" ), page );
00068 layout->addWidget( label, 1, 0 );
00069 mGivenNameEdit = new KLineEdit( page );
00070 mGivenNameEdit->setReadOnly( readOnly );
00071 label->setBuddy( mGivenNameEdit );
00072 layout->addMultiCellWidget( mGivenNameEdit, 1, 1, 1, 2 );
00073
00074 label = new QLabel( i18n( "Additional names:" ), page );
00075 layout->addWidget( label, 2, 0 );
00076 mAdditionalNameEdit = new KLineEdit( page );
00077 mAdditionalNameEdit->setReadOnly( readOnly );
00078 label->setBuddy( mAdditionalNameEdit );
00079 layout->addMultiCellWidget( mAdditionalNameEdit, 2, 2, 1, 2 );
00080
00081 label = new QLabel( i18n( "Family names:" ), page );
00082 layout->addWidget( label, 3, 0 );
00083 mFamilyNameEdit = new KLineEdit( page );
00084 mFamilyNameEdit->setReadOnly( readOnly );
00085 label->setBuddy( mFamilyNameEdit );
00086 layout->addMultiCellWidget( mFamilyNameEdit, 3, 3, 1, 2 );
00087
00088 label = new QLabel( i18n( "Honorific suffixes:" ), page );
00089 layout->addWidget( label, 4, 0 );
00090 mSuffixCombo = new KComboBox( page );
00091 mSuffixCombo->setDuplicatesEnabled( false );
00092 mSuffixCombo->setEditable( true );
00093 mSuffixCombo->setEnabled( !readOnly );
00094 label->setBuddy( mSuffixCombo );
00095 layout->addMultiCellWidget( mSuffixCombo, 4, 4, 1, 2 );
00096
00097 mFormattedNameCombo = new KComboBox( page );
00098 mFormattedNameCombo->setEnabled( !readOnly );
00099 layout->addWidget( mFormattedNameCombo, 5, 0 );
00100 connect( mFormattedNameCombo, SIGNAL( activated( int ) ), SLOT( typeChanged( int ) ) );
00101
00102 mFormattedNameEdit = new KLineEdit( page );
00103 mFormattedNameEdit->setEnabled( type == CustomName && !readOnly );
00104 layout->addWidget( mFormattedNameEdit, 5, 1 );
00105
00106 mParseBox = new QCheckBox( i18n( "Parse name automatically" ), page );
00107 mParseBox->setEnabled( !readOnly );
00108 connect( mParseBox, SIGNAL( toggled(bool) ), SLOT( parseBoxChanged(bool) ) );
00109 connect( mParseBox, SIGNAL( toggled(bool) ), SLOT( modified() ) );
00110 layout->addMultiCellWidget( mParseBox, 6, 6, 0, 1 );
00111
00112
00113 mFamilyNameEdit->setText( addr.familyName() );
00114 mGivenNameEdit->setText( addr.givenName() );
00115 mAdditionalNameEdit->setText( addr.additionalName() );
00116 mFormattedNameEdit->setText( addr.formattedName() );
00117
00118
00119 KConfig config( "kabcrc" );
00120 config.setGroup( "General" );
00121
00122 QStringList sTitle;
00123 sTitle += i18n( "Dr." );
00124 sTitle += i18n( "Miss" );
00125 sTitle += i18n( "Mr." );
00126 sTitle += i18n( "Mrs." );
00127 sTitle += i18n( "Ms." );
00128 sTitle += i18n( "Prof." );
00129 sTitle += config.readListEntry( "Prefixes" );
00130 sTitle.sort();
00131
00132 QStringList sSuffix;
00133 sSuffix += i18n( "I" );
00134 sSuffix += i18n( "II" );
00135 sSuffix += i18n( "III" );
00136 sSuffix += i18n( "Jr." );
00137 sSuffix += i18n( "Sr." );
00138 sSuffix += config.readListEntry( "Suffixes" );
00139 sSuffix.sort();
00140
00141 mPrefixCombo->insertStringList( sTitle );
00142 mSuffixCombo->insertStringList( sSuffix );
00143
00144 mPrefixCombo->setCurrentText( addr.prefix() );
00145 mSuffixCombo->setCurrentText( addr.suffix() );
00146
00147 mAddresseeConfig.setAddressee( addr );
00148 mParseBox->setChecked( mAddresseeConfig.automaticNameParsing() );
00149
00150 KAcceleratorManager::manage( this );
00151
00152 connect( mPrefixCombo, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) );
00153 connect( mPrefixCombo, SIGNAL( textChanged( const QString& ) ), SLOT( updateTypeCombo() ) );
00154 connect( mGivenNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) );
00155 connect( mGivenNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( updateTypeCombo() ) );
00156 connect( mAdditionalNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) );
00157 connect( mAdditionalNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( updateTypeCombo() ) );
00158 connect( mFamilyNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) );
00159 connect( mFamilyNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( updateTypeCombo() ) );
00160 connect( mSuffixCombo, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) );
00161 connect( mSuffixCombo, SIGNAL( textChanged( const QString& ) ), SLOT( updateTypeCombo() ) );
00162 connect( mFormattedNameCombo, SIGNAL( activated( int ) ), SLOT( modified() ) );
00163 connect( mFormattedNameEdit, SIGNAL( textChanged( const QString& ) ), SLOT( modified() ) );
00164
00165 updateTypeCombo();
00166 mFormattedNameCombo->setCurrentItem( type );
00167 mPrefixCombo->lineEdit()->setFocus();
00168 mChanged = false;
00169 }
00170
00171 NameEditDialog::~NameEditDialog()
00172 {
00173 }
00174
00175 QString NameEditDialog::familyName() const
00176 {
00177 return mFamilyNameEdit->text();
00178 }
00179
00180 QString NameEditDialog::givenName() const
00181 {
00182 return mGivenNameEdit->text();
00183 }
00184
00185 QString NameEditDialog::prefix() const
00186 {
00187 return mPrefixCombo->currentText();
00188 }
00189
00190 QString NameEditDialog::suffix() const
00191 {
00192 return mSuffixCombo->currentText();
00193 }
00194
00195 QString NameEditDialog::additionalName() const
00196 {
00197 return mAdditionalNameEdit->text();
00198 }
00199
00200 QString NameEditDialog::customFormattedName() const
00201 {
00202 return mFormattedNameEdit->text();
00203 }
00204
00205 int NameEditDialog::formattedNameType() const
00206 {
00207 return mFormattedNameCombo->currentItem();
00208 }
00209
00210 bool NameEditDialog::changed() const
00211 {
00212 return mChanged;
00213 }
00214
00215 QString NameEditDialog::formattedName( const KABC::Addressee &addr, int type )
00216 {
00217 QString name;
00218
00219 switch ( type ) {
00220 case SimpleName:
00221 name = addr.givenName() + " " + addr.familyName();
00222 break;
00223 case FullName:
00224 name = addr.prefix() + " " + addr.givenName() + " " +
00225 addr.additionalName() + " " + addr.familyName() + " " +
00226 addr.suffix();
00227 break;
00228 case ReverseName:
00229 name = addr.familyName() + ", " + addr.givenName();
00230 break;
00231 default:
00232 name = "";
00233 break;
00234 }
00235
00236 return name.simplifyWhiteSpace();
00237 }
00238
00239 void NameEditDialog::parseBoxChanged( bool value )
00240 {
00241 mAddresseeConfig.setAutomaticNameParsing( value );
00242 }
00243
00244 void NameEditDialog::typeChanged( int pos )
00245 {
00246 mFormattedNameEdit->setEnabled( pos == 0 );
00247 }
00248
00249 void NameEditDialog::modified()
00250 {
00251 mChanged = true;
00252 }
00253
00254 void NameEditDialog::updateTypeCombo()
00255 {
00256 KABC::Addressee addr;
00257 addr.setPrefix( mPrefixCombo->currentText() );
00258 addr.setGivenName( mGivenNameEdit->text() );
00259 addr.setAdditionalName( mAdditionalNameEdit->text() );
00260 addr.setFamilyName( mFamilyNameEdit->text() );
00261 addr.setSuffix( mSuffixCombo->currentText() );
00262
00263 int pos = mFormattedNameCombo->currentItem();
00264
00265 mFormattedNameCombo->clear();
00266 mFormattedNameCombo->insertItem( i18n( "Custom" ) );
00267 mFormattedNameCombo->insertItem( formattedName( addr, SimpleName ) );
00268 mFormattedNameCombo->insertItem( formattedName( addr, FullName ) );
00269 mFormattedNameCombo->insertItem( formattedName( addr, ReverseName ) );
00270
00271 mFormattedNameCombo->setCurrentItem( pos );
00272 }
00273
00274 void NameEditDialog::slotHelp()
00275 {
00276 kapp->invokeHelp( "managing-contacts-automatic-nameparsing" );
00277 }
00278
00279 #include "nameeditdialog.moc"