From dbbbe1c0600422e4bd2d6a6aba271476f457ed97 Mon Sep 17 00:00:00 2001 From: tux_mike Date: Tue, 26 Mar 2002 17:46:06 +0000 Subject: Mike Crawford Source files for the new input screen. --- (limited to 'core/pim/addressbook') 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 +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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 *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 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 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 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 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 + * + * 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 + +#include +#include +#include +#include + +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 *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 listValue; + QList listName; + const QValueList *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 -- cgit v0.9.0.2