-rw-r--r-- | core/pim/addressbook/TODO | 2 | ||||
-rw-r--r-- | core/pim/addressbook/contacteditor.cpp | 235 | ||||
-rw-r--r-- | core/pim/addressbook/version.h | 4 |
3 files changed, 79 insertions, 162 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO index a0d50a3..106747e 100644 --- a/core/pim/addressbook/TODO +++ b/core/pim/addressbook/TODO @@ -28,9 +28,8 @@ Urgent: -------- - Category is on the wrong position after changing to personal and back to normal ( Temporarily workaround: Category is never deactivated.. :S ) -- Fix handling of 3 Firstnames Important: ---------- @@ -113,4 +112,5 @@ Fixed/Ready: - Personal and Business Web-page is not editable - Default Email-button: A lot of problems: If on second tab: The combo chooser is on the top left of the screen ! :( - Default Email-Button: Sometimes not hiding the textfields completely +- Fix handling of 3 Firstnames diff --git a/core/pim/addressbook/contacteditor.cpp b/core/pim/addressbook/contacteditor.cpp index d1338f6..7bc5bde 100644 --- a/core/pim/addressbook/contacteditor.cpp +++ b/core/pim/addressbook/contacteditor.cpp @@ -156,63 +156,68 @@ void ContactEditor::init() { gl->addWidget( l, 1, 0 ); txtJobTitle = new QLineEdit( container ); gl->addWidget( txtJobTitle, 1, 1 ); - l = new QLabel( tr( "Organization" ), container ); + l = new QLabel( tr("Suffix"), container ); gl->addWidget( l, 2, 0 ); + txtSuffix = new QLineEdit( container ); + gl->addWidget( txtSuffix, 2, 1 ); + + l = new QLabel( tr( "Organization" ), container ); + gl->addWidget( l, 3, 0 ); txtOrganization = new QLineEdit( container ); - gl->addWidget( txtOrganization, 2, 1 ); + gl->addWidget( txtOrganization, 3, 1 ); // Chooser 1 cmbChooserField1 = new QComboBox( FALSE, container ); cmbChooserField1->setMaximumWidth( 90 ); - gl->addWidget( cmbChooserField1, 3, 0 ); + gl->addWidget( cmbChooserField1, 4, 0 ); // Textfield for chooser 1. // Now use Widgetstack to contain the textfield and the default-email combo ! m_widgetStack1 = new QWidgetStack( container ); txtChooserField1 = new QLineEdit( m_widgetStack1 ); m_widgetStack1 -> addWidget( txtChooserField1, TextField ); - gl->addWidget( m_widgetStack1, 3, 1 ); + gl->addWidget( m_widgetStack1, 4, 1 ); m_widgetStack1 -> raiseWidget( TextField ); // Chooser 2 cmbChooserField2 = new QComboBox( FALSE, container ); cmbChooserField2->setMaximumWidth( 90 ); - gl->addWidget( cmbChooserField2, 4, 0 ); + gl->addWidget( cmbChooserField2, 5, 0 ); // Textfield for chooser 2 // Now use WidgetStack to contain the textfield and the default-email combo! m_widgetStack2 = new QWidgetStack( container ); txtChooserField2 = new QLineEdit( m_widgetStack2 ); m_widgetStack2 -> addWidget( txtChooserField2, TextField ); - gl->addWidget( m_widgetStack2, 4, 1 ); + gl->addWidget( m_widgetStack2, 5, 1 ); m_widgetStack2 -> raiseWidget( TextField ); // Chooser 3 cmbChooserField3 = new QComboBox( FALSE, container ); cmbChooserField3->setMaximumWidth( 90 ); - gl->addWidget( cmbChooserField3, 5, 0 ); + gl->addWidget( cmbChooserField3, 6, 0 ); // Textfield for chooser 2 // Now use WidgetStack to contain the textfield and the default-email combo! m_widgetStack3 = new QWidgetStack( container ); txtChooserField3 = new QLineEdit( m_widgetStack3 ); m_widgetStack3 -> addWidget( txtChooserField3, TextField ); - gl->addWidget( m_widgetStack3, 5, 1 ); + gl->addWidget( m_widgetStack3, 6, 1 ); m_widgetStack3 -> raiseWidget( TextField ); l = new QLabel( tr( "File As" ), container ); - gl->addWidget( l, 6, 0 ); + gl->addWidget( l, 7, 0 ); cmbFileAs = new QComboBox( TRUE, container ); - gl->addWidget( cmbFileAs, 6, 1 ); + gl->addWidget( cmbFileAs, 7, 1 ); labCat = new QLabel( tr( "Category" ), container ); - gl->addWidget( labCat, 7, 0 ); + gl->addWidget( labCat, 8, 0 ); cmbCat = new CategorySelect( container ); - gl->addWidget( cmbCat, 7, 1 ); + gl->addWidget( cmbCat, 8, 1 ); labCat->show(); cmbCat->show(); btnNote = new QPushButton( tr( "Notes..." ), container ); - gl->addWidget( btnNote, 8, 1 ); + gl->addWidget( btnNote, 9, 1 ); tabMain->insertTab( tabViewport, tr( "General" ) ); tabViewport = new QWidget ( tabMain ); @@ -617,12 +622,12 @@ void ContactEditor::init() { gl->addWidget( l, 2, 0 ); txtLastName = new QLineEdit( dlgName ); gl->addWidget( txtLastName, 2, 1 ); - l = new QLabel( tr("Suffix"), dlgName ); - gl->addWidget( l, 3, 0 ); - txtSuffix = new QLineEdit( dlgName ); - gl->addWidget( txtSuffix, 3, 1 ); +// l = new QLabel( tr("Suffix"), dlgName ); +// gl->addWidget( l, 3, 0 ); +// txtSuffix = new QLineEdit( dlgName ); +// gl->addWidget( txtSuffix, 3, 1 ); space = new QSpacerItem(1,1, QSizePolicy::Maximum, QSizePolicy::MinimumExpanding ); gl->addItem( space, 4, 0 ); @@ -1014,16 +1019,18 @@ void ContactEditor::slotAddressTypeChange( int index ) { } void ContactEditor::slotFullNameChange( const QString &textChanged ) { + qWarning( "ContactEditor::slotFullNameChange( %s )", textChanged.latin1() ); + int index = cmbFileAs->currentItem(); cmbFileAs->clear(); - cmbFileAs->insertItem( parseName( textChanged, 0 ) ); - cmbFileAs->insertItem( parseName( textChanged, 1 ) ); - cmbFileAs->insertItem( parseName( textChanged, 2 ) ); - cmbFileAs->insertItem( parseName( textChanged, 3 ) ); + cmbFileAs->insertItem( parseName( textChanged, NAME_FL ) ); + cmbFileAs->insertItem( parseName( textChanged, NAME_FMLS ) ); + cmbFileAs->insertItem( parseName( textChanged, NAME_LF ) ); + cmbFileAs->insertItem( parseName( textChanged, NAME_LFM ) ); cmbFileAs->setCurrentItem( index ); useFullName = true; @@ -1057,9 +1064,9 @@ void ContactEditor::slotName() { if (useFullName) { txtFirstName->setText( parseName(txtFullName->text(), NAME_F) ); txtMiddleName->setText( parseName(txtFullName->text(), NAME_M) ); txtLastName->setText( parseName(txtFullName->text(), NAME_L) ); - txtSuffix->setText( parseName(txtFullName->text(), NAME_S) ); + // txtSuffix->setText( parseName(txtFullName->text(), NAME_S) ); } dlgName->showMaximized(); if ( dlgName->exec() ) { @@ -1101,155 +1108,60 @@ QString ContactEditor::parseName( const QString fullName, int type ) { QString strLastName; QString strSuffix; QString strTitle; int commapos; - int spCount; - int spPos; - int spPos2; + bool haveLastName = false; + qWarning("Fullname: %s", simplifiedName.latin1()); commapos = simplifiedName.find( ',', 0, TRUE); - spCount = simplifiedName.contains( ' ', TRUE ); + if ( commapos >= 0 ) { + qWarning(" Commapos: %d", commapos ); - if ( commapos == -1 ) { - - switch (spCount) { - case 0: - //return simplifiedName; - if (txtLastName->text() != "") { - strLastName = simplifiedName; - break; - } - if (txtMiddleName->text() != "") { - strMiddleName = simplifiedName; - break; - } - if (txtSuffix->text() != "") { - strSuffix = simplifiedName; - break; - } - strFirstName = simplifiedName; - break; + // A comma (",") separates the lastname from one or + // many first names. Thus, remove the lastname from the + // String and parse the firstnames. - case 1: - spPos = simplifiedName.find( ' ', 0, TRUE ); - strFirstName = simplifiedName.left( spPos ); - strLastName = simplifiedName.mid( spPos + 1 ); - break; + strLastName = simplifiedName.left( commapos ); + simplifiedName= simplifiedName.mid( commapos + 1 ); + haveLastName = true; + qWarning("Fullname without ',': %s", simplifiedName.latin1()); - case 2: - spPos = simplifiedName.find( ' ', 0, TRUE ); - strFirstName = simplifiedName.left( spPos ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strMiddleName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - strLastName = simplifiedName.mid( spPos2 + 1 ); - break; + // If we have any lastname, we should now split all first names. + // The first one will be the used as first, the rest as "middle names" - case 3: - spPos = simplifiedName.find( ' ', 0, TRUE ); - strFirstName = simplifiedName.left( spPos ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strMiddleName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - spPos = simplifiedName.find( ' ', spPos2 + 1, TRUE ); - strLastName = simplifiedName.mid( spPos2 + 1, (spPos - 1) - spPos2 ); - strSuffix = simplifiedName.mid( spPos + 1 ); - break; + QStringList allFirstNames = QStringList::split(" ", simplifiedName); + QStringList::Iterator it = allFirstNames.begin(); + strFirstName = *it++; + QStringList allSecondNames; + for ( ; it != allFirstNames.end(); ++it ) + allSecondNames.append( *it ); - case 4: - spPos = simplifiedName.find( ' ', 0, TRUE ); - strTitle = simplifiedName.left( spPos ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strFirstName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - spPos = simplifiedName.find( ' ', spPos2 + 1, TRUE ); - strMiddleName = simplifiedName.mid( spPos2 + 1, (spPos - 1) - spPos2 ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strLastName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - strSuffix = simplifiedName.mid( spPos2 + 1 ); - break; + strMiddleName = allSecondNames.join(" "); - default: - spPos = simplifiedName.find( ' ', 0, TRUE ); - strTitle = simplifiedName.left( spPos ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strFirstName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - spPos = simplifiedName.find( ' ', spPos2 + 1, TRUE ); - strMiddleName = simplifiedName.mid( spPos2 + 1, (spPos - 1) - spPos2 ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strLastName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - strSuffix = simplifiedName.mid( spPos2 + 1 ); - break; - } } else { - simplifiedName.replace( commapos, 1, " " ); - simplifiedName = simplifiedName.simplifyWhiteSpace(); - - switch (spCount) { - case 0: - //return simplifiedName; - if (txtLastName->text() != "") { - strLastName = simplifiedName; - break; - } - if (txtMiddleName->text() != "") { - strMiddleName = simplifiedName; - break; - } - if (txtSuffix->text() != "") { - strSuffix = simplifiedName; - break; - } - strFirstName = simplifiedName; - break; - - case 1: - spPos = simplifiedName.find( ' ', 0, TRUE ); - strLastName = simplifiedName.left( spPos ); - strFirstName = simplifiedName.mid( spPos + 1 ); - break; - case 2: - spPos = simplifiedName.find( ' ', 0, TRUE ); - strLastName = simplifiedName.left( spPos ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strFirstName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - strMiddleName = simplifiedName.mid( spPos2 + 1 ); - break; + // No comma separator used: We use the first word as firstname, the + // last as second/lastname and everything in the middle as middlename - case 3: - spPos = simplifiedName.find( ' ', 0, TRUE ); - strLastName = simplifiedName.left( spPos ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strFirstName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - spPos = simplifiedName.find( ' ', spPos2 + 1, TRUE ); - strMiddleName = simplifiedName.mid( spPos2 + 1, (spPos - 1) - spPos2 ); - strSuffix = simplifiedName.mid( spPos + 1 ); - break; + QStringList allNames = QStringList::split(" ", simplifiedName); + QStringList::Iterator it = allNames.begin(); + strFirstName = *it++; + QStringList allSecondNames; + for ( ; it != --allNames.end(); ++it ) + allSecondNames.append( *it ); - case 4: - spPos = simplifiedName.find( ' ', 0, TRUE ); - strLastName = simplifiedName.left( spPos ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strTitle = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - spPos = simplifiedName.find( ' ', spPos2 + 1, TRUE ); - strFirstName = simplifiedName.mid( spPos2 + 1, (spPos - 1) - spPos2 ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strMiddleName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - strSuffix = simplifiedName.mid( spPos2 + 1 ); - break; + strMiddleName = allSecondNames.join(" "); + strLastName = *(--allNames.end()); - default: - spPos = simplifiedName.find( ' ', 0, TRUE ); - strLastName = simplifiedName.left( spPos ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strTitle = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - spPos = simplifiedName.find( ' ', spPos2 + 1, TRUE ); - strFirstName = simplifiedName.mid( spPos2 + 1, (spPos - 1) - spPos ); - spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE ); - strMiddleName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos ); - strSuffix = simplifiedName.mid( spPos2 + 1 ); - break; - } } + + qWarning(" strFirstName: %s", strFirstName.latin1()); + qWarning(" strMiddleName: %s", strMiddleName.latin1()); + qWarning(" strLastName: %s", strLastName.latin1()); + qWarning(" strSuffix: %s", strSuffix.latin1()); + qWarning(" strTitle: %s", strTitle.latin1()); + switch (type) { case NAME_FL: return strFirstName + " " + strLastName; @@ -1335,13 +1247,18 @@ void ContactEditor::setEntry( const OContact &entry ) { txtMiddleName->setText( ent.middleName() ); txtLastName->setText( ent.lastName() ); txtSuffix->setText( ent.suffix() ); - QString *tmpString = new QString; - *tmpString = ent.firstName() + " " + ent.middleName() + - + " " + ent.lastName() + " " + ent.suffix(); +// QString *tmpString = new QString; +// *tmpString = ent.firstName() + " " + ent.middleName() + +// + " " + ent.lastName() + " " + ent.suffix(); +// txtFullName->setText( tmpString->simplifyWhiteSpace() ); - txtFullName->setText( tmpString->simplifyWhiteSpace() ); + // Lastnames with multiple words need to be protected by a comma ! + if ( ent.lastName().contains( ' ', TRUE ) ) + txtFullName->setText( ent.lastName() + ", " + ent.firstName() + " " + ent.middleName() ); + else + txtFullName->setText( ent.firstName() + " " + ent.middleName() + " " + ent.lastName() ); cmbFileAs->setEditText( ent.fileAs() ); // if (hasTitle) @@ -1550,9 +1467,9 @@ void ContactEditor::saveEntry() { if ( useFullName ) { txtFirstName->setText( parseName( txtFullName->text(), NAME_F ) ); txtMiddleName->setText( parseName( txtFullName->text(), NAME_M ) ); txtLastName->setText( parseName( txtFullName->text(), NAME_L ) ); - txtSuffix->setText( parseName( txtFullName->text(), NAME_S ) ); + // txtSuffix->setText( parseName( txtFullName->text(), NAME_S ) ); useFullName = false; } diff --git a/core/pim/addressbook/version.h b/core/pim/addressbook/version.h index 3becfdc..c2ead05 100644 --- a/core/pim/addressbook/version.h +++ b/core/pim/addressbook/version.h @@ -1,10 +1,10 @@ #ifndef _VERSION_H_ #define _VERSION_H_ #define MAINVERSION "0" -#define SUBVERSION "2" -#define PATCHVERSION "2" +#define SUBVERSION "3" +#define PATCHVERSION "0" #define APPNAME "OPIE_ADDRESSBOOK" #endif |