summaryrefslogtreecommitdiff
path: root/core
authortux_mike <tux_mike>2002-03-26 17:46:06 (UTC)
committer tux_mike <tux_mike>2002-03-26 17:46:06 (UTC)
commitdbbbe1c0600422e4bd2d6a6aba271476f457ed97 (patch) (side-by-side diff)
tree692c9a3453a158b685de2f1f794b7cdb8c2eccef /core
parente91f77a9ebf359c0fbf4f8d1a0de50bf0dcf81d8 (diff)
downloadopie-dbbbe1c0600422e4bd2d6a6aba271476f457ed97.zip
opie-dbbbe1c0600422e4bd2d6a6aba271476f457ed97.tar.gz
opie-dbbbe1c0600422e4bd2d6a6aba271476f457ed97.tar.bz2
Mike Crawford <mike@tuxnami.org> Source files for the new input screen.
Diffstat (limited to 'core') (more/less context) (show whitespace changes)
-rw-r--r--core/pim/addressbook/contacteditor.cpp1397
-rw-r--r--core/pim/addressbook/contacteditor.h158
2 files changed, 1555 insertions, 0 deletions
diff --git a/core/pim/addressbook/contacteditor.cpp b/core/pim/addressbook/contacteditor.cpp
new file mode 100644
index 0000000..0c90510
--- a/dev/null
+++ b/core/pim/addressbook/contacteditor.cpp
@@ -0,0 +1,1397 @@
+
+#include "contacteditor.h"
+#include "addresspicker.h"
+
+#include <qpe/categoryselect.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/qpedialog.h>
+
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qtabwidget.h>
+#include <qlayout.h>
+#include <qlineedit.h>
+#include <qmultilineedit.h>
+#include <qscrollview.h>
+#include <qtoolbutton.h>
+#include <qpushbutton.h>
+#include <qmainwindow.h>
+#include <qvaluelist.h>
+
+static inline bool containsAlphaNum( const QString &str );
+static inline bool constainsWhiteSpace( const QString &str );
+
+// helper functions, convert our comma delimited list to proper
+// file format...
+void parseEmailFrom( const QString &txt, QString &strDefaultEmail,
+ QString &strAll );
+
+// helper convert from file format to comma delimited...
+void parseEmailTo( const QString &strDefaultEmail,
+ const QString &strOtherEmail, QString &strBack );
+
+ContactEditor::ContactEditor( const Contact &entry,
+ const QValueList<int> *newOrderedValues,
+ QStringList *slNewOrdered,
+ QWidget *parent = 0,
+ const char *name = 0,
+ WFlags fl = 0 )
+ : QDialog( parent, name, TRUE, fl ),
+ orderedValues( newOrderedValues ),
+ slOrdered( slNewOrdered )
+{
+
+ init();
+ initMap();
+ setEntry( entry );
+ qDebug("finish");
+}
+
+ContactEditor::~ContactEditor() {
+}
+
+void ContactEditor::init() {
+
+ useFullName = TRUE;
+
+ int i = 0;
+
+ slHomeAddress = new QStringList;
+ slBusinessAddress = new QStringList;
+ slChooserNames = new QStringList;
+ slChooserValues = new QStringList;
+
+ slDynamicEntries = new QStringList;
+
+ //*slDynamicEntries = *slOrdered;
+
+ for (i = 0; i <= 6; i++) {
+ slHomeAddress->append( "" );
+ slBusinessAddress->append( "" );
+ }
+
+ {
+ hasGender = FALSE;
+ hasTitle = FALSE;
+ hasCompany = FALSE;
+ hasNotes = FALSE;
+ hasStreet = FALSE;
+ hasStreet2 = FALSE;
+ hasPOBox = FALSE;
+ hasCity = FALSE;
+ hasState = FALSE;
+ hasZip = FALSE;
+ hasCountry = FALSE;
+
+ QStringList::ConstIterator it = slOrdered->begin();
+ for ( i = 0; it != slOrdered->end(); i++, ++it ) {
+
+ if ( (*it).right( 3 ) == tr( "Fax" ) ) {
+ slChooserNames->append( *it );
+ slChooserValues->append( tr( "" ) );
+ //slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 5 ) == tr( "Phone" ) ) {
+ slChooserNames->append( *it );
+ slChooserValues->append( "" );
+ //slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 2 ) == tr( "IM" ) ) {
+ slChooserNames->append( *it );
+ slChooserValues->append( "" );
+ //slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 6 ) == tr( "Mobile" ) ) {
+ slChooserNames->append( *it );
+ slChooserValues->append( "" );
+ //slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 4 ) == tr( "Page" ) ) {
+ slChooserNames->append( *it );
+ slChooserValues->append( "" );
+ //slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 5 ) == tr( "Pager" ) ) {
+ slChooserNames->append( *it );
+ slChooserValues->append( "" );
+ //slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "Default Email" ) ) {
+ slChooserNames->append( *it );
+ slChooserValues->append( "" );
+ //slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "Emails" ) ) {
+ slChooserNames->append( *it );
+ slChooserValues->append( "" );
+ //slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "Name Title" ) ) {
+ //slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "First Name" ) ) {
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "Middle Name" ) ) {
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "Last Name" ) ) {
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "Suffix" ) ) {
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "File As" ) ) {
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "Gender" ) ) {
+ hasGender = TRUE;
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "Job Title" ) ) {
+ hasTitle = TRUE;
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "Company" ) ) {
+ hasCompany = TRUE;
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "Notes" ) ) {
+ hasNotes = TRUE;
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( *it == tr( "Groups" ) ) {
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 6 ) == tr( "Street" ) ) {
+ hasStreet = TRUE;
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 8 ) == tr( "Street 2" ) ) {
+ hasStreet2 = TRUE;
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 8 ) == tr( "P.O. Box" ) ) {
+ hasPOBox = TRUE;
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 4 ) == tr( "City" ) ) {
+ hasCity = TRUE;
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 5 ) == tr( "State" ) ) {
+ hasState = TRUE;
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 3 ) == tr( "Zip" ) ) {
+ hasZip = TRUE;
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ if ( (*it).right( 7 ) == tr( "Country" ) ) {
+ hasCountry = TRUE;
+ // slDynamicEntries->remove( it );
+ continue;
+ }
+
+ slDynamicEntries->append( *it );
+ }
+ }
+
+ QVBoxLayout *vb = new QVBoxLayout( this );
+
+ tabMain = new QTabWidget( this );
+ vb->addWidget( tabMain );
+
+ QWidget *tabViewport = new QWidget ( tabMain );
+
+ vb = new QVBoxLayout( tabViewport );
+
+ svGeneral = new QScrollView( tabViewport );
+ vb->addWidget( svGeneral, 0, 0 );
+ svGeneral->setResizePolicy( QScrollView::AutoOneFit );
+ svGeneral->setFrameStyle( QFrame::NoFrame );
+
+ QWidget *container = new QWidget( svGeneral->viewport() );
+ svGeneral->addChild( container );
+
+ QGridLayout *gl = new QGridLayout( container );
+ gl->setResizeMode( QLayout::FreeResize );
+
+ btnFullName = new QPushButton( tr( "Full Name..." ), container );
+ gl->addWidget( btnFullName, 0, 0 );
+ txtFullName = new QLineEdit( container );
+ gl->addWidget( txtFullName, 0, 1 );
+
+ QLabel *l = new QLabel( tr( "Job Title" ), container );
+ gl->addWidget( l, 1, 0 );
+ txtJobTitle = new QLineEdit( container );
+ gl->addWidget( txtJobTitle, 1, 1 );
+
+ l = new QLabel( tr( "Organization" ), container );
+ gl->addWidget( l, 2, 0 );
+ txtOrganization = new QLineEdit( container );
+ gl->addWidget( txtOrganization, 2, 1 );
+
+ cmbChooserField1 = new QComboBox( FALSE, container );
+ cmbChooserField1->setMaximumWidth( 100 );
+ gl->addWidget( cmbChooserField1, 3, 0 );
+ txtChooserField1 = new QLineEdit( container );
+ gl->addWidget( txtChooserField1, 3, 1 );
+
+ cmbChooserField2 = new QComboBox( FALSE, container );
+ cmbChooserField2->setMaximumWidth( 100 );
+ gl->addWidget( cmbChooserField2, 4, 0 );
+ txtChooserField2 = new QLineEdit( container );
+ gl->addWidget( txtChooserField2, 4, 1 );
+
+ cmbChooserField3 = new QComboBox( FALSE, container );
+ cmbChooserField3->setMaximumWidth( 100 );
+ gl->addWidget( cmbChooserField3, 5, 0 );
+ txtChooserField3 = new QLineEdit( container );
+ gl->addWidget( txtChooserField3, 5, 1 );
+
+ l = new QLabel( tr( "File As" ), container );
+ gl->addWidget( l, 6, 0 );
+ cmbFileAs = new QComboBox( TRUE, container );
+ gl->addWidget( cmbFileAs, 6, 1 );
+
+ l = new QLabel( tr( "Category" ), container );
+ gl->addWidget( l, 7, 0 );
+ cmbCat = new CategorySelect( container );
+ gl->addWidget( cmbCat, 7, 1 );
+
+ btnNote = new QPushButton( tr( "Notes..." ), container );
+ gl->addWidget( btnNote, 8, 1 );
+
+ tabMain->insertTab( tabViewport, tr( "General" ) );
+
+ tabViewport = new QWidget ( tabMain );
+
+ vb = new QVBoxLayout( tabViewport );
+
+ svAddress = new QScrollView( tabViewport );
+ vb->addWidget( svAddress, 0, 0 );
+ svAddress->setResizePolicy( QScrollView::AutoOneFit );
+ svAddress->setFrameStyle( QFrame::NoFrame );
+
+ container = new QWidget( svAddress->viewport() );
+ svAddress->addChild( container );
+
+ gl = new QGridLayout( container, 5, 3, 0, 1 );
+
+ cmbAddress = new QComboBox( FALSE, container );
+ cmbAddress->insertItem( tr( "Business" ) );
+ cmbAddress->insertItem( tr( "Home" ) );
+ gl->addMultiCellWidget( cmbAddress, 0, 0, 0, 1 );
+
+ l = new QLabel( tr( "Address" ), container );
+ gl->addWidget( l, 1, 0 );
+ txtAddress = new QLineEdit( container );
+ gl->addMultiCellWidget( txtAddress, 1, 1, 1, 2 );
+/*
+ l = new QLabel( tr( "Address 2" ), container );
+ gl->addWidget( l, 2, 0 );
+ txtAddress2 = new QLineEdit( container );
+ gl->addMultiCellWidget( txtAddress2, 2, 2, 1, 2 );
+
+ l = new QLabel( tr( "P.O. Box" ), container );
+ gl->addWidget( l, 3, 0 );
+ txtPOBox = new QLineEdit( container );
+ gl->addMultiCellWidget( txtPOBox, 3, 3, 1, 2 );
+*/
+ l = new QLabel( tr( "City" ), container );
+ gl->addWidget( l, 2, 0 );
+ txtCity = new QLineEdit( container );
+ gl->addMultiCellWidget( txtCity, 2, 2, 1, 2 );
+
+ l = new QLabel( tr( "State" ), container );
+ gl->addWidget( l, 3, 0 );
+ txtState = new QLineEdit( container );
+ gl->addMultiCellWidget( txtState, 3, 3, 1, 2 );
+
+ l = new QLabel( tr( "Zip Code" ), container );
+ gl->addWidget( l, 4, 0 );
+ txtZip = new QLineEdit( container );
+ gl->addMultiCellWidget( txtZip, 4, 4, 1, 2 );
+
+ l = new QLabel( tr( "Country" ), container );
+ gl->addWidget( l, 5, 0 );
+ cmbCountry = new QComboBox( TRUE, container );
+ cmbCountry->insertItem( tr( "" ) );
+ cmbCountry->insertItem( tr( "United States" ) );
+ cmbCountry->insertItem( tr( "United Kingdom" ) );
+ cmbCountry->insertItem( tr( "Japan" ) );
+ cmbCountry->insertItem( tr( "France" ) );
+ cmbCountry->insertItem( tr( "Germany" ) );
+ cmbCountry->insertItem( tr( "Norway" ) );
+ cmbCountry->insertItem( tr( "Canada" ) );
+
+ gl->addMultiCellWidget( cmbCountry, 5, 5, 1, 2 );
+
+ tabMain->insertTab( tabViewport, tr( "Address" ) );
+
+ tabViewport = new QWidget ( tabMain );
+
+ vb = new QVBoxLayout( tabViewport );
+
+ svDetails = new QScrollView( tabViewport );
+ vb->addWidget( svDetails, 0, 0 );
+ svDetails->setResizePolicy( QScrollView::AutoOneFit );
+ svDetails->setFrameStyle( QFrame::NoFrame );
+
+ container = new QWidget( svDetails->viewport() );
+ svDetails->addChild( container );
+
+ gl = new QGridLayout( container, 1, 2, 0, 1 );
+
+ QStringList::ConstIterator it = slDynamicEntries->begin();
+ for (i = 0; it != slDynamicEntries->end(); i++, ++it) {
+ l = new QLabel( *it, container );
+ listName.append( l );
+ gl->addWidget( l, i, 0 );
+ QLineEdit *e = new QLineEdit( container );
+ listValue.append( e );
+ gl->addWidget( e, i, 1);
+ }
+
+ l = new QLabel( tr("Gender"), container );
+ gl->addWidget( l, slDynamicEntries->count(), 0 );
+ cmbGender = new QComboBox( container );
+ cmbGender->insertItem( "", 0 );
+ cmbGender->insertItem( tr("Male"), 1);
+ cmbGender->insertItem( tr("Female"), 2);
+ gl->addWidget( cmbGender, slDynamicEntries->count(), 1 );
+
+ tabMain->insertTab( tabViewport, tr( "Details" ) );
+
+ dlgNote = new QDialog( this, "Note Dialog", TRUE );
+ dlgNote->setCaption( tr("Enter Note") );
+ QVBoxLayout *vbNote = new QVBoxLayout( dlgNote );
+ txtNote = new QMultiLineEdit( dlgNote );
+ vbNote->addWidget( txtNote );
+ connect( btnNote, SIGNAL(clicked()), this, SLOT(slotNote()) );
+
+ dlgName = new QDialog( this, "Name Dialog", TRUE );
+ dlgName->setCaption( tr("Edit Name") );
+ gl = new QGridLayout( dlgName, 4, 2, 0, 1 );
+
+ l = new QLabel( tr("First Name"), dlgName );
+ gl->addWidget( l, 0, 0 );
+ txtFirstName = new QLineEdit( dlgName );
+ gl->addWidget( txtFirstName, 0, 1 );
+
+ l = new QLabel( tr("Middle Name"), dlgName );
+ gl->addWidget( l, 1, 0 );
+ txtMiddleName = new QLineEdit( dlgName );
+ gl->addWidget( txtMiddleName, 1, 1 );
+
+ l = new QLabel( tr("Last Name"), dlgName );
+ 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 );
+
+ cmbChooserField1->insertStringList( *slChooserNames );
+ cmbChooserField2->insertStringList( *slChooserNames );
+ cmbChooserField3->insertStringList( *slChooserNames );
+
+ cmbChooserField1->setCurrentItem( 1 );
+ cmbChooserField2->setCurrentItem( 2 );
+ cmbChooserField3->setCurrentItem( 3 );
+
+ connect( btnFullName, SIGNAL(clicked()), this, SLOT(slotName()) );
+
+ connect( txtFullName, SIGNAL(textChanged(const QString &)), this, SLOT(slotFullNameChange(const QString &)) );
+
+ connect( txtChooserField1, SIGNAL(textChanged(const QString &)), this, SLOT(slotChooser1Change(const QString &)) );
+ connect( txtChooserField2, SIGNAL(textChanged(const QString &)), this, SLOT(slotChooser2Change(const QString &)) );
+ connect( txtChooserField3, SIGNAL(textChanged(const QString &)), this, SLOT(slotChooser3Change(const QString &)) );
+ connect( txtAddress, SIGNAL(textChanged(const QString &)), this, SLOT(slotAddressChange(const QString &)) );
+ //connect( txtAddress2, SIGNAL(textChanged(const QString &)), this, SLOT(slotAddress2Change(const QString &)) );
+ //connect( txtPOBox, SIGNAL(textChanged(const QString &)), this, SLOT(slotPOBoxChange(const QString &)) );
+ connect( txtCity, SIGNAL(textChanged(const QString &)), this, SLOT(slotCityChange(const QString &)) );
+ connect( txtState, SIGNAL(textChanged(const QString &)), this, SLOT(slotStateChange(const QString &)) );
+ connect( txtZip, SIGNAL(textChanged(const QString &)), this, SLOT(slotZipChange(const QString &)) );
+ connect( cmbCountry, SIGNAL(textChanged(const QString &)), this, SLOT(slotCountryChange(const QString &)) );
+ connect( cmbCountry, SIGNAL(activated(const QString &)), this, SLOT(slotCountryChange(const QString &)) );
+ connect( cmbChooserField1, SIGNAL(activated(int)), this, SLOT(slotCmbChooser1Change(int)) );
+ connect( cmbChooserField2, SIGNAL(activated(int)), this, SLOT(slotCmbChooser2Change(int)) );
+ connect( cmbChooserField3, SIGNAL(activated(int)), this, SLOT(slotCmbChooser3Change(int)) );
+ connect( cmbAddress, SIGNAL(activated(int)), this, SLOT(slotAddressTypeChange(int)) );
+ new QPEDialogListener(this);
+}
+
+void ContactEditor::initMap()
+{
+ /*
+ // since the fields and the XML fields exist, create a map
+ // between them...
+ Config cfg1( "AddressBook" );
+ Config cfg2( "AddressBook" );
+ QString strCfg1,
+ strCfg2;
+ int i;
+
+ // This stuff better exist...
+ cfg1.setGroup( "AddressFields" );
+o cfg2.setGroup( "XMLFields" );
+ i = 0;
+ strCfg1 = cfg1.readEntry( "Field" + QString::number(i), QString::null );
+ strCfg2 = cfg2.readEntry( "XMLField" + QString::number(i++),
+ QString::null );
+ while ( !strCfg1.isNull() && !strCfg2.isNull() ) {
+ mapField.insert( strCfg1, strCfg2 );
+ strCfg1 = cfg1.readEntry( "Field" + QString::number(i),
+ QString::null );
+ strCfg2 = cfg2.readEntry( "XMLField" + QString::number(i++),
+ QString::null );
+ }
+ */
+}
+
+void ContactEditor::slotChooser1Change( const QString &textChanged ) {
+
+ int index = cmbChooserField1->currentItem();
+
+ (*slChooserValues)[index] = textChanged;
+
+}
+
+void ContactEditor::slotChooser2Change( const QString &textChanged ) {
+
+ int index = cmbChooserField2->currentItem();
+
+ (*slChooserValues)[index] = textChanged;
+
+}
+
+void ContactEditor::slotChooser3Change( const QString &textChanged ) {
+
+ int index = cmbChooserField3->currentItem();
+
+ (*slChooserValues)[index] = textChanged;
+
+}
+
+void ContactEditor::slotAddressChange( const QString &textChanged ) {
+
+ qDebug((*slBusinessAddress)[0]);
+ qDebug((*slHomeAddress)[0]);
+ qDebug(textChanged);
+ if ( cmbAddress->currentItem() == 0 ) {
+ (*slBusinessAddress)[0] = textChanged;
+ } else {
+ (*slHomeAddress)[0] = textChanged;
+ }
+}
+
+void ContactEditor::slotAddress2Change( const QString &textChanged ) {
+
+ qDebug((*slBusinessAddress)[1]);
+ qDebug((*slHomeAddress)[1]);
+ qDebug(textChanged);
+
+ if ( cmbAddress->currentItem() == 0 ) {
+ (*slBusinessAddress)[1] = textChanged;
+ } else {
+ (*slHomeAddress)[1] = textChanged;
+ }
+}
+
+void ContactEditor::slotPOBoxChange( const QString &textChanged ) {
+
+ qDebug((*slBusinessAddress)[2]);
+ qDebug((*slHomeAddress)[2]);
+ qDebug(textChanged);
+ if ( cmbAddress->currentItem() == 0 ) {
+ (*slBusinessAddress)[2] = textChanged;
+ } else {
+ (*slHomeAddress)[2] = textChanged;
+ }
+}
+
+void ContactEditor::slotCityChange( const QString &textChanged ) {
+
+ qDebug((*slBusinessAddress)[3]);
+ qDebug((*slHomeAddress)[3]);
+ qDebug(textChanged);
+ if ( cmbAddress->currentItem() == 0 ) {
+ (*slBusinessAddress)[3] = textChanged;
+ } else {
+ (*slHomeAddress)[3] = textChanged;
+ }
+}
+
+void ContactEditor::slotStateChange( const QString &textChanged ) {
+
+
+ qDebug((*slBusinessAddress)[4]);
+ qDebug((*slHomeAddress)[4]);
+ qDebug(textChanged);
+ if ( cmbAddress->currentItem() == 0 ) {
+ (*slBusinessAddress)[4] = textChanged;
+ } else {
+ (*slHomeAddress)[4] = textChanged;
+ }
+}
+
+void ContactEditor::slotZipChange( const QString &textChanged ) {
+
+ qDebug((*slBusinessAddress)[5]);
+ qDebug((*slHomeAddress)[5]);
+ qDebug(textChanged);
+ if ( cmbAddress->currentItem() == 0 ) {
+ (*slBusinessAddress)[5] = textChanged;
+ } else {
+ (*slHomeAddress)[5] = textChanged;
+ }
+}
+
+void ContactEditor::slotCountryChange( const QString &textChanged ) {
+
+ qDebug((*slBusinessAddress)[6]);
+ qDebug((*slHomeAddress)[6]);
+ qDebug(textChanged);
+ if ( cmbAddress->currentItem() == 0 ) {
+ (*slBusinessAddress)[6] = textChanged;
+ } else {
+ (*slHomeAddress)[6] = textChanged;
+ }
+}
+
+void ContactEditor::slotCmbChooser1Change( int index ) {
+
+ txtChooserField1->setText( (*slChooserValues)[index] );
+
+}
+
+void ContactEditor::slotCmbChooser2Change( int index ) {
+
+ txtChooserField2->setText( (*slChooserValues)[index] );
+
+}
+
+void ContactEditor::slotCmbChooser3Change( int index ) {
+
+ txtChooserField3->setText( (*slChooserValues)[index] );
+
+}
+
+void ContactEditor::slotAddressTypeChange( int index ) {
+
+ qDebug((*slBusinessAddress)[0]);
+ qDebug((*slBusinessAddress)[1]);
+ qDebug((*slBusinessAddress)[2]);
+qDebug((*slBusinessAddress)[3]);
+qDebug((*slBusinessAddress)[4]);
+qDebug((*slBusinessAddress)[5]);
+qDebug((*slBusinessAddress)[6]);
+
+
+
+ if ( index == 0 ) {
+
+ txtAddress->setText( (*slBusinessAddress)[0] );
+ //txtAddress2->setText( (*slBusinessAddress)[1] );
+ //txtPOBox->setText( (*slBusinessAddress)[2] );
+ txtCity->setText( (*slBusinessAddress)[3] );
+ txtState->setText( (*slBusinessAddress)[4] );
+ txtZip->setText( (*slBusinessAddress)[5] );
+ QLineEdit *txtTmp = cmbCountry->lineEdit();
+ txtTmp->setText( (*slBusinessAddress)[6] );
+
+ } else {
+
+ txtAddress->setText( (*slHomeAddress)[0] );
+ //txtAddress2->setText( (*slHomeAddress)[1] );
+ //txtPOBox->setText( (*slHomeAddress)[2] );
+ txtCity->setText( (*slHomeAddress)[3] );
+ txtState->setText( (*slHomeAddress)[4] );
+ txtZip->setText( (*slHomeAddress)[5] );
+ QLineEdit *txtTmp = cmbCountry->lineEdit();
+ txtTmp->setText( (*slHomeAddress)[6] );
+
+ }
+
+}
+
+void ContactEditor::slotFullNameChange( const QString &textChanged ) {
+
+ 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->setCurrentItem( index );
+
+ useFullName = TRUE;
+
+}
+
+void ContactEditor::loadFields() {
+
+ QStringList::ConstIterator it;
+ QListIterator<QLabel> lit( listName );
+ for ( it = slDynamicEntries->begin(); *lit; ++lit, ++it) {
+ (*lit)->setText( *it );
+ }
+}
+
+void ContactEditor::accept() {
+
+ if ( isEmpty() ) {
+ cleanupFields();
+ reject();
+ } else {
+ saveEntry();
+ cleanupFields();
+ QDialog::accept();
+ }
+
+}
+
+void ContactEditor::slotNote() {
+
+ dlgNote->showMaximized();
+ if ( !dlgNote->exec() ) {
+ txtNote->setText( ent.notes() );
+ }
+}
+
+void ContactEditor::slotName() {
+
+ if (useFullName = TRUE) {
+ 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) );
+ }
+
+ dlgName->showMaximized();
+ if ( dlgName->exec() ) {
+ txtFullName->setText( txtFirstName->text() + " " + txtMiddleName->text() + " " + txtLastName->text() + " " + txtSuffix->text() );
+ slotFullNameChange( txtFullName->text() );
+ useFullName = FALSE;
+ }
+
+}
+
+void ContactEditor::setNameFocus() {
+
+ txtFullName->setFocus();
+
+}
+
+bool ContactEditor::isEmpty() {
+ // Test and see if the record should be saved.
+ // More strict than the original qtopia, needs name or fileas to save
+
+ QString t = txtFullName->text();
+ if ( !t.isEmpty() && containsAlphaNum( t ) )
+ return false;
+
+ t = cmbFileAs->currentText();
+ if ( !t.isEmpty() && containsAlphaNum( t ) )
+ return false;
+
+ return true;
+
+}
+
+QString ContactEditor::parseName( const QString fullName, int type ) {
+
+ QString simplifiedName( fullName.simplifyWhiteSpace() );
+ QString strFirstName;
+ QString strMiddleName;
+ QString strLastName;
+ QString strSuffix;
+ QString strTitle;
+ int commapos;
+ int spCount;
+ int spPos;
+ int spPos2;
+
+
+ commapos = simplifiedName.find( ',', 0, TRUE);
+ spCount = simplifiedName.contains( ' ', TRUE );
+
+ if ( commapos == -1 ) {
+
+ switch (spCount) {
+ case 0:
+ return simplifiedName;
+
+ case 1:
+ spPos = simplifiedName.find( ' ', 0, TRUE );
+ strFirstName = simplifiedName.left( spPos );
+ strLastName = simplifiedName.mid( spPos + 1 );
+ break;
+
+ 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;
+
+ 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) - spPos );
+ strSuffix = simplifiedName.mid( spPos + 1 );
+ break;
+
+ 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) - spPos );
+ spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE );
+ strLastName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos );
+ strSuffix = simplifiedName.mid( spPos2 + 1 );
+ break;
+
+ 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) - spPos );
+ 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;
+
+ 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;
+
+ 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) - spPos );
+ strSuffix = simplifiedName.mid( spPos + 1 );
+ break;
+
+ 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) - spPos );
+ spPos2 = simplifiedName.find( ' ', spPos + 1, TRUE );
+ strMiddleName = simplifiedName.mid( spPos + 1, (spPos2 - 1) - spPos );
+ strSuffix = simplifiedName.mid( spPos2 + 1 );
+ break;
+
+ 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;
+ }
+ }
+
+ switch (type) {
+ case NAME_FL:
+ return strFirstName + " " + strLastName;
+
+ case NAME_LF:
+ return strLastName + ", " + strFirstName;
+
+ case NAME_LFM:
+ return strLastName + ", " + strFirstName + " " + strMiddleName;
+
+ case NAME_FMLS:
+ return strFirstName + " " + strMiddleName + " " + strLastName + " " + strSuffix;
+
+ case NAME_F:
+ return strFirstName;
+
+ case NAME_M:
+ return strMiddleName;
+
+ case NAME_L:
+ return strLastName;
+
+ case NAME_S:
+ return strSuffix;
+
+ }
+}
+
+void ContactEditor::cleanupFields() {
+
+ QStringList::Iterator it = slChooserValues->begin();
+ for ( int i = 0; it != slChooserValues->end(); i++, ++it ) {
+ (*it) = "";
+ }
+
+ for ( int i = 0; i < 7; i++ ) {
+ (*slHomeAddress)[i] = "";
+ (*slBusinessAddress)[i] = "";
+ }
+
+ QStringList::ConstIterator cit;
+ QListIterator<QLineEdit> itLE( listValue );
+ for ( cit = slDynamicEntries->begin(); cit != slDynamicEntries->end(); ++cit, ++itLE) {
+ (*itLE)->setText( "" );
+ }
+
+ txtFirstName->setText("");
+ txtMiddleName->setText("");
+ txtLastName->setText("");
+ txtSuffix->setText("");
+ txtNote->setText("");
+ txtFullName->setText("");
+ txtJobTitle->setText("");
+ txtOrganization->setText("");
+ txtChooserField1->setText("");
+ txtChooserField2->setText("");
+ txtChooserField3->setText("");
+ txtAddress->setText("");
+ //txtAddress2->setText("");
+ txtCity->setText("");
+ //txtPOBox->setText("");
+ txtState->setText("");
+ txtZip->setText("");
+ QLineEdit *txtTmp = cmbCountry->lineEdit();
+ txtTmp->setText("");
+ txtTmp = cmbFileAs->lineEdit();
+ txtTmp->setText("");
+
+}
+
+void ContactEditor::setEntry( const Contact &entry ) {
+
+ cleanupFields();
+
+ ent = entry;
+
+ useFullName = FALSE;
+ txtFirstName->setText( ent.firstName() );
+ 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();
+
+ txtFullName->setText( tmpString->simplifyWhiteSpace() );
+
+ cmbFileAs->setEditText( ent.fileAs() );
+
+ if (hasTitle)
+ txtJobTitle->setText( ent.jobTitle() );
+
+ if (hasCompany)
+ txtOrganization->setText( ent.company() );
+
+ if (hasNotes)
+ txtNote->setText( ent.notes() );
+
+ if (hasStreet) {
+ (*slHomeAddress)[0] = ent.homeStreet();
+ (*slBusinessAddress)[0] = ent.businessStreet();
+ }
+/*
+ if (hasStreet2) {
+ (*slHomeAddress)[1] = ent.homeStreet2();
+ (*slBusinessAddress)[1] = ent.businessStreet2();
+ }
+
+ if (hasPOBox) {
+ (*slHomeAddress)[2] = ent.homePOBox();
+ (*slBusinessAddress)[2] = ent.businessPOBox();
+ }
+*/
+ if (hasCity) {
+ (*slHomeAddress)[3] = ent.homeCity();
+ (*slBusinessAddress)[3] = ent.homeCity();
+ }
+
+ if (hasState) {
+ (*slHomeAddress)[4] = ent.homeState();
+ (*slBusinessAddress)[4] = ent.businessState();
+ }
+
+ if (hasZip) {
+ (*slHomeAddress)[5] = ent.homeZip();
+ (*slBusinessAddress)[5] = ent.businessZip();
+ }
+
+ QStringList::ConstIterator it;
+ QListIterator<QLineEdit> itLE( listValue );
+ for ( it = slDynamicEntries->begin(); it != slDynamicEntries->end(); ++it, ++itLE) {
+ if ( *it == "Department" )
+ (*itLE)->setText( ent.department() );
+
+ if ( *it == "Company" )
+ (*itLE)->setText( ent.company() );
+
+ if ( *it == "Office" )
+ (*itLE)->setText( ent.office() );
+
+ if ( *it == "Profession" )
+ (*itLE)->setText( ent.profession() );
+
+ if ( *it == "Assistant" )
+ (*itLE)->setText( ent.assistant() );
+
+ if ( *it == "Manager" )
+ (*itLE)->setText( ent.manager() );
+
+ if ( *it == "Spouse" )
+ (*itLE)->setText( ent.spouse() );
+
+ if ( *it == "Birthday" )
+ (*itLE)->setText( ent.birthday() );
+
+ if ( *it == "Anniversary" )
+ (*itLE)->setText( ent.anniversary() );
+
+ if ( *it == "Nickname" )
+ (*itLE)->setText( ent.nickname() );
+
+ if ( *it == "Children" )
+ (*itLE)->setText( ent.children() );
+
+ }
+
+ QStringList::Iterator itV;
+ for ( it = slChooserNames->begin(), itV = slChooserValues->begin(); it != slChooserNames->end(); ++it, ++itV ) {
+
+ if ( *it == "Business Phone" )
+ *itV = ent.businessPhone();
+/*
+ if ( *it == "Business 2 Phone" )
+ *itV = ent.business2Phone();
+*/
+ if ( *it == "Business Fax" )
+ *itV = ent.businessFax();
+
+ if ( *it == "Business Mobile" )
+ *itV = ent.businessMobile();
+/*
+ if ( *it == "Company Phone" )
+ *itV = ent.companyPhone();
+*/
+ if ( *it == "Default Email" )
+ *itV = ent.defaultEmail();
+
+ if ( *it == "Emails" )
+ *itV = ent.emails();
+
+ if ( *it == "Home Phone" )
+ *itV = ent.homePhone();
+/*
+ if ( *it == "Home 2 Phone" )
+ *itV = ent.home2Phone();
+*/
+ if ( *it == "Home Fax" )
+ *itV = ent.homeFax();
+
+ if ( *it == "Home Mobile" )
+ *itV = ent.homeMobile();
+/*
+ if ( *it == "Car Phone" )
+ *itV = ent.carPhone();
+
+ if ( *it == "ISDN Phone" )
+ *itV = ent.ISDNPhone();
+
+ if ( *it == "Other Phone" )
+ *itV = ent.otherPhone();
+*/
+ if ( *it == "Business Pager" )
+ *itV = ent.businessPager();
+/*
+ if ( *it == "Home Pager")
+ *itV = ent.homePager();
+
+ if ( *it == "AIM IM" )
+ *itV = ent.AIMIM();
+
+ if ( *it == "ICQ IM" )
+ *itV = ent.ICQIM();
+
+ if ( *it == "Jabber IM" )
+ *itV = ent.jabberIM();
+
+ if ( *it == "MSN IM" )
+ *itV = ent.MSNIM();
+
+ if ( *it == "Yahoo IM" )
+ *itV = ent.yahooIM();
+*/
+ if ( *it == "Home Web Page" )
+ *itV = ent.homeWebpage();
+ if ( *it == "Business Web Page" )
+ *itV = ent.businessWebpage();
+
+
+ }
+
+ cmbCat->setCategories( ent.categories(), "Contacts", tr("Contacts") );
+
+ QString gender = ent.gender();
+ cmbGender->setCurrentItem( gender.toInt() );
+
+ txtNote->setText( ent.notes() );
+
+}
+
+void ContactEditor::saveEntry() {
+
+ if ( useFullName == TRUE ) {
+ 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 ) );
+
+ useFullName = FALSE;
+ }
+
+ /*if ( ent.firstName() != txtFirstName->text() ||
+ ent.lastName != txtLastName->text() ||
+ ent.middleName != txtMiddleName->text() ) {
+ */
+ ent.setFirstName( txtFirstName->text() );
+ ent.setLastName( txtLastName->text() );
+ ent.setMiddleName( txtMiddleName->text() );
+
+ //}
+
+ ent.setFileAs( cmbFileAs->currentText() );
+
+ ent.setCategories( cmbCat->currentCategories() );
+
+ if (hasTitle)
+ ent.setJobTitle( txtJobTitle->text() );
+
+ if (hasCompany)
+ ent.setCompany( txtOrganization->text() );
+
+ if (hasNotes)
+ ent.setNotes( txtNote->text() );
+
+ if (hasStreet) {
+ ent.setHomeStreet( (*slHomeAddress)[0] );
+ ent.setBusinessStreet( (*slBusinessAddress)[0] );
+ }
+/*
+ if (hasStreet2) {
+ ent.setHomeStreet2( (*slHomeAddress)[1] );
+ ent.setBusinessStreet2( (*slBusinessAddress)[1] );
+ }
+
+ if (hasPOBox) {
+ ent.setHomePOBox( (*slHomeAddress)[2] );
+ ent.setBusinessPOBox( (*slBusinessAddress)[2] );
+ }
+*/
+ if (hasCity) {
+ ent.setHomeCity( (*slHomeAddress)[3] );
+ ent.setBusinessCity( (*slBusinessAddress)[3] );
+ }
+
+ if (hasState) {
+ ent.setHomeState( (*slHomeAddress)[4] );
+ ent.setBusinessState( (*slBusinessAddress)[4] );
+ }
+
+ if (hasZip) {
+ ent.setHomeZip( (*slHomeAddress)[5] );
+ ent.setBusinessZip( (*slBusinessAddress)[5] );
+ }
+
+ QStringList::ConstIterator it;
+ QListIterator<QLineEdit> itLE( listValue );
+ for ( it = slDynamicEntries->begin(); it != slDynamicEntries->end(); ++it, ++itLE) {
+ if ( *it == "Department" )
+ ent.setDepartment( (*itLE)->text() );
+
+ if ( *it == "Company" )
+ ent.setCompany( (*itLE)->text() );
+
+ if ( *it == "Office" )
+ ent.setOffice( (*itLE)->text() );
+
+ if ( *it == "Profession" )
+ ent.setProfession( (*itLE)->text() );
+
+ if ( *it == "Assistant" )
+ ent.setAssistant( (*itLE)->text() );
+
+ if ( *it == "Manager" )
+ ent.setManager( (*itLE)->text() );
+
+ if ( *it == "Spouse" )
+ ent.setSpouse( (*itLE)->text() );
+
+ if ( *it == "Birthday" )
+ ent.setBirthday( (*itLE)->text() );
+
+ if ( *it == "Anniversary" )
+ ent.setAnniversary( (*itLE)->text() );
+
+ if ( *it == "Nickname" )
+ ent.setNickname( (*itLE)->text() );
+
+ if ( *it == "Children" )
+ ent.setChildren( (*itLE)->text() );
+
+ }
+
+ QStringList::ConstIterator itV;
+ for ( it = slChooserNames->begin(), itV = slChooserValues->begin(); it != slChooserNames->end(); ++it, ++itV ) {
+
+ if ( *it == "Business Phone" )
+ ent.setBusinessPhone( *itV );
+/*
+ if ( *it == "Business 2 Phone" )
+ ent.setBusiness2Phone( *itV );
+*/
+ if ( *it == "Business Fax" )
+ ent.setBusinessFax( *itV );
+
+ if ( *it == "Business Mobile" )
+ ent.setBusinessMobile( *itV );
+/*
+ if ( *it == "Company Phone" )
+ ent.setCompanyPhone( *itV );
+*/
+ if ( *it == "Default Email" )
+ ent.setDefaultEmail( *itV );
+
+ if ( *it == "Emails" )
+ ent.setEmails( *itV );
+
+ if ( *it == "Home Phone" )
+ ent.setHomePhone( *itV );
+/*
+ if ( *it == "Home 2 Phone" )
+ ent.setHome2Phone( *itV );
+*/
+ if ( *it == "Home Fax" )
+ ent.setHomeFax( *itV );
+
+ if ( *it == "Home Mobile" )
+ ent.setHomeMobile( *itV );
+/*
+ if ( *it == "Car Phone" )
+ ent.setCarPhone( *itV );
+
+ if ( *it == "ISDN Phone" )
+ ent.setISDNPhone( *itV );
+
+ if ( *it == "Other Phone" )
+ ent.setOtherPhone( *itV );
+*/
+ if ( *it == "Business Pager" )
+ ent.setBusinessPager( *itV );
+/*
+ if ( *it == "Home Pager" )
+ ent.setHomePager( *itV );
+
+ if ( *it == "AIM IM" )
+ ent.setAIMIM( *itV );
+
+ if ( *it == "ICQ IM" )
+ ent.setICQIM( *itV );
+
+ if ( *it == "Jabber IM" )
+ ent.setJabberIM( *itV );
+
+ if ( *it == "MSN IM" )
+ ent.setMSNIM( *itV );
+
+ if ( *it == "Yahoo IM" )
+ ent.setYahooIM( *itV );
+*/
+ if ( *it == "Home Web Page" )
+ ent.setHomeWebpage( *itV );
+ if ( *it == "Business Web Page" )
+ ent.setBusinessWebpage( *itV );
+
+
+ }
+
+ int gender = cmbGender->currentItem();
+ ent.setGender( QString::number( gender ) );
+
+ QString str = txtNote->text();
+ if ( !str.isNull() )
+ ent.setNotes( str );
+
+}
+
+void parseEmailFrom( const QString &txt, QString &strDefaultEmail,
+ QString &strAll )
+{
+ int where,
+ start;
+ if ( txt.isEmpty() )
+ return;
+ // find the first
+ where = txt.find( ',' );
+ if ( where < 0 ) {
+ strDefaultEmail = txt;
+ strAll = txt;
+ } else {
+ strDefaultEmail = txt.left( where ).stripWhiteSpace();
+ strAll = strDefaultEmail;
+ while ( where > -1 ) {
+ strAll.append(" ");
+ start = where;
+ where = txt.find( ',', where + 1 );
+ if ( where > - 1 )
+ strAll.append( txt.mid(start + 1, where - start - 1).stripWhiteSpace() );
+ else // grab until the end...
+ strAll.append( txt.right(txt.length() - start - 1).stripWhiteSpace() );
+ }
+ }
+}
+
+void parseEmailTo( const QString &strDefaultEmail,
+ const QString &strOtherEmail, QString &strBack )
+{
+ // create a comma dilimeted set of emails...
+ // use the power of short circuiting...
+ bool foundDefault = false;
+ QString strTmp;
+ int start = 0;
+ int where;
+ // start at the beginng.
+ strBack = strDefaultEmail;
+ where = 0;
+ while ( where > -1 ) {
+ start = where;
+ where = strOtherEmail.find( ' ', where + 1 );
+ if ( where > 0 ) {
+ strTmp = strOtherEmail.mid( start, where - start ).stripWhiteSpace();
+ } else
+ strTmp = strOtherEmail.right( strOtherEmail.length() - start ).stripWhiteSpace();
+ if ( foundDefault || strTmp != strDefaultEmail ) {
+ strBack.append( ", " );
+ strBack.append( strTmp );
+ } else
+ foundDefault = true;
+ }
+}
+
+
+static inline bool containsAlphaNum( const QString &str )
+{
+ int i,
+ count = str.length();
+ for ( i = 0; i < count; i++ )
+ if ( !str[i].isSpace() )
+ return TRUE;
+ return FALSE;
+}
+
+static inline bool constainsWhiteSpace( const QString &str )
+{
+ int i,
+ count = str.length();
+ for (i = 0; i < count; i++ )
+ if ( str[i].isSpace() )
+ return TRUE;
+ return FALSE;
+}
+
diff --git a/core/pim/addressbook/contacteditor.h b/core/pim/addressbook/contacteditor.h
new file mode 100644
index 0000000..a799672
--- a/dev/null
+++ b/core/pim/addressbook/contacteditor.h
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2002 Michael R. Crawford <mike@tuxnami.org>
+ *
+ * This file is an add-on for the OPIE Palmtop Environment
+ *
+ * This file may be distributed and/or modified under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation and appearing in the file LICENSE.GPL included in the pacakaging
+ * of this file.
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *
+ * This is a rewrite of the abeditor.h file, modified to provide a more
+ * intuitive interface to TrollTech's original Address Book editor. This
+ * is made to operate exactly in interface with the exception of name.
+ *
+ */
+
+#ifndef CONTACTEDITOR_H
+#define CONTACTEDITOR_H
+
+#include <qpe/contact.h>
+
+#include <qdialog.h>
+#include <qlist.h>
+#include <qmap.h>
+#include <qstringlist.h>
+
+const int NAME_LF = 0;
+const int NAME_LFM = 1;
+const int NAME_FL = 2;
+const int NAME_FMLS = 3;
+
+const int NAME_F = 4;
+const int NAME_M = 5;
+const int NAME_L = 6;
+const int NAME_S = 7;
+
+
+class QScrollView;
+class QTabWidget;
+class QMultiLineEdit;
+class QLineEdit;
+class QComboBox;
+class QPushButton;
+class CategorySelect;
+class QLabel;
+
+class ContactEditor : public QDialog {
+ Q_OBJECT
+
+ public:
+ ContactEditor( const Contact &entry,
+ const QValueList<int> *newOrderedValues,
+ QStringList *slNewOrdered,
+ QWidget *parent = 0,
+ const char *name = 0,
+ WFlags fl = 0 );
+ ~ContactEditor();
+ void loadFields();
+ void setNameFocus();
+ Contact entry() const { return ent; }
+
+ public slots:
+ void slotNote();
+ void slotName();
+ void setEntry(const Contact &entry);
+
+ protected slots:
+ void accept();
+
+ private:
+ void init();
+ void initMap();
+ void saveEntry();
+ bool isEmpty();
+ void cleanupFields();
+ QString parseName( QString fullName, int type );
+
+ private slots:
+ void slotChooser1Change( const QString &textChanged );
+ void slotChooser2Change( const QString &textChanged );
+ void slotChooser3Change( const QString &textChanged );
+ void slotCmbChooser1Change( int index );
+ void slotCmbChooser2Change( int index );
+ void slotCmbChooser3Change( int index );
+ void slotAddressTypeChange( int index );
+ void slotAddressChange( const QString &textChanged );
+ void slotAddress2Change( const QString &textChanged );
+ void slotPOBoxChange( const QString &textChanged );
+ void slotCityChange( const QString &textChanged );
+ void slotStateChange( const QString &textChanged );
+ void slotZipChange( const QString &textChanged );
+ void slotCountryChange( const QString &textChanged );
+ void slotFullNameChange( const QString &textChanged );
+
+ private:
+ bool useFullName, hasGender, hasTitle, hasCompany, hasNotes, hasStreet, hasStreet2, hasPOBox, hasCity, hasState, hasZip, hasCountry;
+
+ Contact ent;
+
+ QDialog *dlgNote;
+ QDialog *dlgName;
+
+ QList<QLineEdit> listValue;
+ QList<QLabel> listName;
+ const QValueList<int> *orderedValues;
+ QStringList *slOrdered;
+ QStringList *slDynamicEntries;
+
+ QStringList *slHomeAddress;
+ QStringList *slBusinessAddress;
+ QStringList *slChooserNames;
+ QStringList *slChooserValues;
+
+ QMultiLineEdit *txtNote;
+ QLabel *lblNote;
+
+ //QLineEdit *txtTitle;
+ QLineEdit *txtFirstName;
+ QLineEdit *txtMiddleName;
+ QLineEdit *txtLastName;
+ QLineEdit *txtSuffix;
+
+ QTabWidget *tabMain;
+ QScrollView *svGeneral;
+ QPushButton *btnFullName;
+ QPushButton *btnNote;
+ QLineEdit *txtFullName;
+ QLineEdit *txtJobTitle;
+ QLineEdit *txtOrganization;
+ QLineEdit *txtChooserField1;
+ QLineEdit *txtChooserField2;
+ QLineEdit *txtChooserField3;
+ QComboBox *cmbChooserField1;
+ QComboBox *cmbChooserField2;
+ QComboBox *cmbChooserField3;
+ QComboBox *cmbFileAs;
+ CategorySelect *cmbCat;
+
+ QScrollView *svAddress;
+ QLineEdit *txtAddress;
+ //QLineEdit *txtAddress2;
+ //QLineEdit *txtPOBox;
+ QLineEdit *txtCity;
+ QLineEdit *txtState;
+ QLineEdit *txtZip;
+ QComboBox *cmbAddress;
+ QComboBox *cmbCountry;
+
+ QScrollView *svDetails;
+ QComboBox *cmbGender;
+
+};
+
+#endif