summaryrefslogtreecommitdiffstats
path: root/kaddressbook/nameeditdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kaddressbook/nameeditdialog.cpp')
-rw-r--r--kaddressbook/nameeditdialog.cpp321
1 files changed, 321 insertions, 0 deletions
diff --git a/kaddressbook/nameeditdialog.cpp b/kaddressbook/nameeditdialog.cpp
new file mode 100644
index 000000000..fc29eda8d
--- /dev/null
+++ b/kaddressbook/nameeditdialog.cpp
@@ -0,0 +1,321 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qlistbox.h>
+#include <qlistview.h>
+#include <qtooltip.h>
+#include <qpushbutton.h>
+#include <qcheckbox.h>
+#include <qstring.h>
+#include <qwhatsthis.h>
+
+#include <kaccelmanager.h>
+#include <kapplication.h>
+#include <kbuttonbox.h>
+#include <kconfig.h>
+#include <klineedit.h>
+#include <klistview.h>
+#include <kcombobox.h>
+#include <klocale.h>
+#include <kdebug.h>
+#include <kiconloader.h>
+#include <kmessagebox.h>
+
+#include "nameeditdialog.h"
+
+NameEditDialog::NameEditDialog( const KABC::Addressee &addr, int type,
+ bool readOnly, QWidget *parent, const char *name )
+ : KDialogBase( Plain, i18n( "Edit Contact Name" ), Help | Ok | Cancel,
+ Ok, parent, name, true ), mAddressee( addr )
+{
+ QWidget *page = plainPage();
+ QGridLayout *layout = new QGridLayout( page );
+ layout->setSpacing( spacingHint() );
+ layout->addColSpacing( 2, 100 );
+ QLabel *label;
+
+ label = new QLabel( i18n( "Honorific prefixes:" ), page );
+ layout->addWidget( label, 0, 0 );
+ mPrefixCombo = new KComboBox( page );
+ mPrefixCombo->setDuplicatesEnabled( false );
+ mPrefixCombo->setEditable( true );
+ mPrefixCombo->setEnabled( !readOnly );
+ label->setBuddy( mPrefixCombo );
+ layout->addMultiCellWidget( mPrefixCombo, 0, 0, 1, 2 );
+
+ QWhatsThis::add( mPrefixCombo, i18n( "The predefined honorific prefixes can be extended in the settings dialog." ) );
+
+ label = new QLabel( i18n( "Given name:" ), page );
+ layout->addWidget( label, 1, 0 );
+ mGivenNameEdit = new KLineEdit( page );
+ mGivenNameEdit->setReadOnly( readOnly );
+ label->setBuddy( mGivenNameEdit );
+ layout->addMultiCellWidget( mGivenNameEdit, 1, 1, 1, 2 );
+
+ label = new QLabel( i18n( "Additional names:" ), page );
+ layout->addWidget( label, 2, 0 );
+ mAdditionalNameEdit = new KLineEdit( page );
+ mAdditionalNameEdit->setReadOnly( readOnly );
+ label->setBuddy( mAdditionalNameEdit );
+ layout->addMultiCellWidget( mAdditionalNameEdit, 2, 2, 1, 2 );
+
+ label = new QLabel( i18n( "Family names:" ), page );
+ layout->addWidget( label, 3, 0 );
+ mFamilyNameEdit = new KLineEdit( page );
+ mFamilyNameEdit->setReadOnly( readOnly );
+ label->setBuddy( mFamilyNameEdit );
+ layout->addMultiCellWidget( mFamilyNameEdit, 3, 3, 1, 2 );
+
+ label = new QLabel( i18n( "Honorific suffixes:" ), page );
+ layout->addWidget( label, 4, 0 );
+ mSuffixCombo = new KComboBox( page );
+ mSuffixCombo->setDuplicatesEnabled( false );
+ mSuffixCombo->setEditable( true );
+ mSuffixCombo->setEnabled( !readOnly );
+ label->setBuddy( mSuffixCombo );
+ layout->addMultiCellWidget( mSuffixCombo, 4, 4, 1, 2 );
+
+ QWhatsThis::add( mSuffixCombo, i18n( "The predefined honorific suffixes can be extended in the settings dialog." ) );
+
+ label = new QLabel( i18n( "Formatted name:" ), page );
+ layout->addWidget( label, 5, 0 );
+
+ mFormattedNameCombo = new KComboBox( page );
+ mFormattedNameCombo->setEnabled( !readOnly );
+ layout->addWidget( mFormattedNameCombo, 5, 1 );
+ connect( mFormattedNameCombo, SIGNAL( activated( int ) ), SLOT( typeChanged( int ) ) );
+
+ mFormattedNameEdit = new KLineEdit( page );
+ mFormattedNameEdit->setEnabled( type == CustomName && !readOnly );
+ layout->addWidget( mFormattedNameEdit, 5, 2 );
+
+ mParseBox = new QCheckBox( i18n( "Parse name automatically" ), page );
+ mParseBox->setEnabled( !readOnly );
+ connect( mParseBox, SIGNAL( toggled(bool) ), SLOT( parseBoxChanged(bool) ) );
+ connect( mParseBox, SIGNAL( toggled(bool) ), SLOT( modified() ) );
+ layout->addMultiCellWidget( mParseBox, 6, 6, 0, 1 );
+
+ // Fill in the values
+ mFamilyNameEdit->setText( addr.familyName() );
+ mGivenNameEdit->setText( addr.givenName() );
+ mAdditionalNameEdit->setText( addr.additionalName() );
+ mFormattedNameEdit->setText( addr.formattedName() );
+
+ // Prefix and suffix combos
+ KConfig config( "kabcrc" );
+ config.setGroup( "General" );
+
+ QStringList sTitle;
+ sTitle += "";
+ sTitle += i18n( "Dr." );
+ sTitle += i18n( "Miss" );
+ sTitle += i18n( "Mr." );
+ sTitle += i18n( "Mrs." );
+ sTitle += i18n( "Ms." );
+ sTitle += i18n( "Prof." );
+ sTitle += config.readListEntry( "Prefixes" );
+ sTitle.sort();
+
+ QStringList sSuffix;
+ sSuffix += "";
+ sSuffix += i18n( "I" );
+ sSuffix += i18n( "II" );
+ sSuffix += i18n( "III" );
+ sSuffix += i18n( "Jr." );
+ sSuffix += i18n( "Sr." );
+ sSuffix += config.readListEntry( "Suffixes" );
+ sSuffix.sort();
+
+ mPrefixCombo->insertStringList( sTitle );
+ mSuffixCombo->insertStringList( sSuffix );
+
+ mPrefixCombo->setCurrentText( addr.prefix() );
+ mSuffixCombo->setCurrentText( addr.suffix() );
+
+ mAddresseeConfig.setAddressee( addr );
+ mParseBox->setChecked( mAddresseeConfig.automaticNameParsing() );
+
+ KAcceleratorManager::manage( this );
+
+ connect( mPrefixCombo, SIGNAL( textChanged( const QString& ) ),
+ this, SLOT( modified() ) );
+ connect( mGivenNameEdit, SIGNAL( textChanged( const QString& ) ),
+ this, SLOT( modified() ) );
+ connect( mAdditionalNameEdit, SIGNAL( textChanged( const QString& ) ),
+ this, SLOT( modified() ) );
+ connect( mFamilyNameEdit, SIGNAL( textChanged( const QString& ) ),
+ this, SLOT( modified() ) );
+ connect( mSuffixCombo, SIGNAL( textChanged( const QString& ) ),
+ this, SLOT( modified() ) );
+ connect( mFormattedNameCombo, SIGNAL( activated( int ) ),
+ this, SLOT( modified() ) );
+ connect( mFormattedNameCombo, SIGNAL( activated( int ) ),
+ this, SLOT( formattedNameTypeChanged() ) );
+ connect( mFormattedNameEdit, SIGNAL( textChanged( const QString& ) ),
+ this, SLOT( modified() ) );
+ connect( mFormattedNameEdit, SIGNAL( textChanged( const QString& ) ),
+ this, SLOT( formattedNameChanged( const QString& ) ) );
+
+ initTypeCombo();
+ mFormattedNameCombo->setCurrentItem( type );
+ mPrefixCombo->lineEdit()->setFocus();
+ mChanged = false;
+}
+
+NameEditDialog::~NameEditDialog()
+{
+}
+
+QString NameEditDialog::familyName() const
+{
+ return mFamilyNameEdit->text();
+}
+
+QString NameEditDialog::givenName() const
+{
+ return mGivenNameEdit->text();
+}
+
+QString NameEditDialog::prefix() const
+{
+ return mPrefixCombo->currentText();
+}
+
+QString NameEditDialog::suffix() const
+{
+ return mSuffixCombo->currentText();
+}
+
+QString NameEditDialog::additionalName() const
+{
+ return mAdditionalNameEdit->text();
+}
+
+QString NameEditDialog::customFormattedName() const
+{
+ return mFormattedNameEdit->text();
+}
+
+int NameEditDialog::formattedNameType() const
+{
+ return mFormattedNameCombo->currentItem();
+}
+
+bool NameEditDialog::changed() const
+{
+ return mChanged;
+}
+
+void NameEditDialog::formattedNameTypeChanged()
+{
+ QString name;
+
+ if ( formattedNameType() == CustomName )
+ name = mCustomFormattedName;
+ else {
+ KABC::Addressee addr;
+ addr.setPrefix( prefix() );
+ addr.setFamilyName( familyName() );
+ addr.setAdditionalName( additionalName() );
+ addr.setGivenName( givenName() );
+ addr.setSuffix( suffix() );
+ addr.setOrganization( mAddressee.organization() );
+
+ name = formattedName( addr, formattedNameType() );
+ }
+
+ mFormattedNameEdit->setText( name );
+}
+
+QString NameEditDialog::formattedName( const KABC::Addressee &addr, int type )
+{
+ QString name;
+
+ switch ( type ) {
+ case SimpleName:
+ name = addr.givenName() + " " + addr.familyName();
+ break;
+ case FullName:
+ name = addr.assembledName();
+ break;
+ case ReverseNameWithComma:
+ name = addr.familyName() + ", " + addr.givenName();
+ break;
+ case ReverseName:
+ name = addr.familyName() + " " + addr.givenName();
+ break;
+ case Organization:
+ name = addr.organization();
+ break;
+ default:
+ name = "";
+ break;
+ }
+
+ return name.simplifyWhiteSpace();
+}
+
+void NameEditDialog::parseBoxChanged( bool value )
+{
+ mAddresseeConfig.setAutomaticNameParsing( value );
+}
+
+void NameEditDialog::typeChanged( int pos )
+{
+ mFormattedNameEdit->setEnabled( pos == 0 );
+}
+
+void NameEditDialog::formattedNameChanged( const QString &name )
+{
+ if ( formattedNameType() == CustomName )
+ mCustomFormattedName = name;
+}
+
+void NameEditDialog::modified()
+{
+ mChanged = true;
+}
+
+void NameEditDialog::initTypeCombo()
+{
+ int pos = mFormattedNameCombo->currentItem();
+
+ mFormattedNameCombo->clear();
+ mFormattedNameCombo->insertItem( i18n( "Custom" ) );
+ mFormattedNameCombo->insertItem( i18n( "Simple Name" ) );
+ mFormattedNameCombo->insertItem( i18n( "Full Name" ) );
+ mFormattedNameCombo->insertItem( i18n( "Reverse Name with Comma" ) );
+ mFormattedNameCombo->insertItem( i18n( "Reverse Name" ) );
+ mFormattedNameCombo->insertItem( i18n( "Organization" ) );
+
+ mFormattedNameCombo->setCurrentItem( pos );
+}
+
+void NameEditDialog::slotHelp()
+{
+ kapp->invokeHelp( "managing-contacts-automatic-nameparsing" );
+}
+
+#include "nameeditdialog.moc"