-rw-r--r-- | core/pim/addressbook/TODO | 2 | ||||
-rw-r--r-- | core/pim/addressbook/contacteditor.cpp | 166 | ||||
-rw-r--r-- | core/pim/addressbook/contacteditor.h | 2 |
3 files changed, 157 insertions, 13 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO index 1eb537f..76247c1 100644 --- a/core/pim/addressbook/TODO +++ b/core/pim/addressbook/TODO @@ -33,16 +33,18 @@ ContactEditor: - Category is on the wrong position after changing to personal and back to normal ( Temporarily workaround: Category is never deactivated.. :S ) - Personal and Business Web-page is not editable Important: ---------- +- If new contact is added (contacteditor closed): focus (table, card) to + this entry ! - Implement a picker/combo for the default email. - After search (Started with Return): KeyFocus should be on Tabelle - "What's this" should be added (Deleyed after Feature Freeze) Less important: --------------- - Reload if contacts were changed externally diff --git a/core/pim/addressbook/contacteditor.cpp b/core/pim/addressbook/contacteditor.cpp index c5ad0c4..37e3a54 100644 --- a/core/pim/addressbook/contacteditor.cpp +++ b/core/pim/addressbook/contacteditor.cpp @@ -41,16 +41,17 @@ #include <qpushbutton.h> #include <qmainwindow.h> #include <qvaluelist.h> #include <qpopupmenu.h> #include <qlistbox.h> #include <qhbox.h> #include <qaction.h> #include <qiconset.h> +#include <qmessagebox.h> #include <assert.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... @@ -640,82 +641,199 @@ void ContactEditor::init() { new QPEDialogListener(this); setPersonalView ( m_personalView ); } void ContactEditor::defaultEmailChanged(int i){ qDebug("defaultEmailChanged"); + int index = cmbChooserField1->currentItem(); slChooserValues[index] = cmbDefaultEmail->text(i); + defaultEmail = cmbDefaultEmail->text(i); + qDebug ("Changed to: %s", defaultEmail.latin1()); + } void ContactEditor::populateDefaultEmailCmb(){ + + // if the default-email combo was not selected and therfore not created + // we get a lot of trouble.. Therfore create an invisible one.. + if ( !cmbDefaultEmail ){ + cmbDefaultEmail = new QComboBox(this); + cmbDefaultEmail -> hide(); + } cmbDefaultEmail->clear(); cmbDefaultEmail->insertStringList(emails); + // cmbDefaultEmail->show(); + + // Select default email in combo.. + bool found = false; for ( int i = 0; i < cmbDefaultEmail->count(); i++){ - qDebug(" populateDefaultEmailCmb text >%s< defaultEmail >%s<",cmbDefaultEmail->text( i ).latin1(),defaultEmail.latin1()); + qDebug(" populateDefaultEmailCmb text >%s< defaultEmail >%s<", + cmbDefaultEmail->text( i ).latin1(), defaultEmail.latin1()); + if ( cmbDefaultEmail->text( i ).stripWhiteSpace() == defaultEmail.stripWhiteSpace() ){ cmbDefaultEmail->setCurrentItem( i ); qDebug("set"); + found = true; } } + + // If the current default email is not found in the list, we choose the + // first one.. + if ( !found ) + defaultEmail = cmbDefaultEmail->text(0); } -void ContactEditor::chooserChange( const QString &textChanged, int index, QLineEdit *inputWid, int widgetPos ) { +// Called when any combobox was changed. +// "true" returned if the change was chandled by this function, else it should +// be handled by something else.. +bool ContactEditor::cmbChooserChange( int index, QLineEdit *inputWid, int widgetPos ) { QString type = slChooserNames[index]; - qDebug("ContactEditor::chooserChange( type=>%s<, textChanged=>%s< index=%i, widgetPos=%i",type.latin1(),textChanged.latin1(), index, widgetPos ); + qWarning("ContactEditor::cmbChooserChange -> Type: %s", type.latin1() ); + + // Create and connect combobox for selecting the default email if ( type == "Default Email"){ - defaultEmail = textChanged; + qWarning("Choosing default-email "); + + // More than one defaul-email chooser is not allowed ! + if ( ( defaultEmailChooserPosition != -1 ) && + defaultEmailChooserPosition != widgetPos ){ + chooserError( widgetPos ); + return true; + } + if (cmbDefaultEmail){ delete cmbDefaultEmail; cmbDefaultEmail = 0l; } cmbDefaultEmail = new QComboBox(inputWid->parentWidget()); cmbDefaultEmail->setGeometry(inputWid->frameGeometry()); - cmbDefaultEmail->show(); - populateDefaultEmailCmb(); + connect(cmbDefaultEmail,SIGNAL(activated(int)), SLOT(defaultEmailChanged(int))); + + cmbDefaultEmail->clear(); + cmbDefaultEmail->insertStringList( emails ); + cmbDefaultEmail->show(); + defaultEmailChooserPosition = widgetPos; + + // Set current default email + populateDefaultEmailCmb(); + + + } else { + // Something else was selected: Hide combo.. + qWarning(" Hiding default-email combo" ); + if ( defaultEmailChooserPosition == widgetPos ){ + defaultEmailChooserPosition = -1; + if ( cmbDefaultEmail ) + cmbDefaultEmail->hide(); + + } + + // Caller should initialize the responsible textfield, therefore + // "false" is returned + return false; + } + + // Everything is worked off .. + return true; + +} + +// Currently accessed when we select default-email more than once ! +void ContactEditor::chooserError( int index ) +{ + qWarning("ContactEditor::chooserError( %d )", index); + QMessageBox::warning( this, "Chooser Error", + "Multiple selection of this\n" + "Item is not allowed !\n\n" + "First deselect the previous one !", + "&OK", 0, 0, + 0, 0 ); + + // Reset the selected Chooser. Unfortunately the chooser + // generates no signal, therfore we have to + // call the cmbChooserChange function manually.. + switch( index ){ + case 1: + cmbChooserField1 -> setCurrentItem( 0 ); + slotCmbChooser1Change( 0 ); + break; + case 2: + cmbChooserField2 -> setCurrentItem( 0 ); + slotCmbChooser2Change( 0 ); + break; + case 3: + cmbChooserField3 -> setCurrentItem( 0 ); + slotCmbChooser3Change( 0 ); + break; + case 4: + cmbChooserField4 -> setCurrentItem( 0 ); + slotCmbChooser4Change( 0 ); + break; + } +} + +// Called when something was changed in a textfield (shouldn't it called textchanged? (se)) +void ContactEditor::chooserChange( const QString &textChanged, int index, + QLineEdit* , int widgetPos ) { + + QString type = slChooserNames[index]; + qDebug("ContactEditor::chooserChange( type=>%s<, textChanged=>%s< index=%i, widgetPos=%i", + type.latin1(),textChanged.latin1(), index, widgetPos ); + + if ( type == "Default Email"){ + qWarning ("??? Wozu??: %s", textChanged.latin1()); + defaultEmail = textChanged; + + populateDefaultEmailCmb(); + }else if (defaultEmailChooserPosition == widgetPos){ qDebug("cmbDefaultEmail->hide()"); + if (cmbDefaultEmail) cmbDefaultEmail->hide(); widgetPos=-1; + }else if (type == "Emails"){ qDebug("emails"); + QString de; emails = QStringList::split (",", textChanged ); - if ( cmbDefaultEmail ) populateDefaultEmailCmb(); } - - slChooserValues[index] = textChanged; } void ContactEditor::slotChooser1Change( const QString &textChanged ) { + qWarning("ContactEditor::slotChooser1Change( %s )", textChanged.latin1()); chooserChange( textChanged, cmbChooserField1->currentItem(), txtChooserField1, 1); } void ContactEditor::slotChooser2Change( const QString &textChanged ) { + qWarning("ContactEditor::slotChooser2Change( %s )", textChanged.latin1()); chooserChange( textChanged, cmbChooserField2->currentItem(), txtChooserField2, 2); } void ContactEditor::slotChooser3Change( const QString &textChanged ) { + qWarning("ContactEditor::slotChooser3Change( %s )", textChanged.latin1()); chooserChange( textChanged, cmbChooserField3->currentItem(), txtChooserField3, 3); } void ContactEditor::slotChooser4Change( const QString &textChanged ) { + qWarning("ContactEditor::slotChooser4Change( %s )", textChanged.latin1()); chooserChange( textChanged, cmbChooserField4->currentItem(), txtChooserField4, 4); } void ContactEditor::slotAddressChange( const QString &textChanged ) { if ( cmbAddress->currentItem() == 0 ) { slBusinessAddress[0] = textChanged; } else { @@ -775,40 +893,59 @@ void ContactEditor::slotCountryChange( const QString &textChanged ) { slBusinessAddress[6] = textChanged; } else { slHomeAddress[6] = textChanged; } } void ContactEditor::slotCmbChooser1Change( int index ) { + qWarning("ContactEditor::slotCmbChooser1Change( %d )", index); + + if ( !cmbChooserChange( cmbChooserField1->currentItem(), txtChooserField1, 1) ){ txtChooserField1->setText( slChooserValues[index] ); txtChooserField1->setFocus(); + + } + } void ContactEditor::slotCmbChooser2Change( int index ) { + qWarning("ContactEditor::slotCmbChooser2Change( %d )", index); + + if ( !cmbChooserChange( cmbChooserField2->currentItem(), txtChooserField2, 2) ){ txtChooserField2->setText( slChooserValues[index] ); txtChooserField2->setFocus(); + + } } void ContactEditor::slotCmbChooser3Change( int index ) { + qWarning("ContactEditor::slotCmbChooser3Change( %d )", index); + + if ( !cmbChooserChange( cmbChooserField3->currentItem(), txtChooserField3, 3) ){ txtChooserField3->setText( slChooserValues[index] ); txtChooserField3->setFocus(); } +} void ContactEditor::slotCmbChooser4Change( int index ) { + qWarning("ContactEditor::slotCmbChooser4Change( %d )", index); + + if ( !cmbChooserChange( cmbChooserField4->currentItem(), txtChooserField4, 4) ){ txtChooserField4->setText( slChooserValues[index] ); txtChooserField4->setFocus(); } +} void ContactEditor::slotAddressTypeChange( int index ) { if ( index == 0 ) { txtAddress->setText( slBusinessAddress[0] ); //txtAddress2->setText( (*slBusinessAddress)[1] ); //txtPOBox->setText( (*slBusinessAddress)[2] ); @@ -1443,24 +1580,27 @@ void ContactEditor::saveEntry() { ent.setBusinessFax( *itV ); if ( ( *it == "Business Mobile" ) || ( *it == "Work Mobile" ) ) ent.setBusinessMobile( *itV ); if ( *it == "Emails" ){ QString allemail; QString defaultmail; - parseEmailFrom( *itV, defaultmail, allemail ); - // ent.clearEmails(); -// ent.setDefaultEmail( defaultmail ); + parseEmailFrom( emails.join(","), defaultmail, allemail ); + if ( defaultEmail.isEmpty() ){ + qWarning("Default email was not set by user!"); + qWarning("Using first email in list: %s", defaultmail.latin1()); + ent.setDefaultEmail( defaultmail ); + } ent.setEmails( allemail ); } if ( *it == "Default Email") - ent.setDefaultEmail( *itV ); + ent.setDefaultEmail( defaultEmail /* *itV */ ); if ( *it == "Home Phone" ) ent.setHomePhone( *itV ); if ( *it == "Home Fax" ) ent.setHomeFax( *itV ); if ( *it == "Home Mobile" ) diff --git a/core/pim/addressbook/contacteditor.h b/core/pim/addressbook/contacteditor.h index bcef679..4fa48d1 100644 --- a/core/pim/addressbook/contacteditor.h +++ b/core/pim/addressbook/contacteditor.h @@ -73,16 +73,17 @@ class ContactEditor : public QDialog { private: void init(); void saveEntry(); bool isEmpty(); void cleanupFields(); void updateDatePicker(); QString parseName( QString fullName, int type ); + void chooserError( int index ); private slots: void slotChooser1Change( const QString &textChanged ); void slotChooser2Change( const QString &textChanged ); void slotChooser3Change( const QString &textChanged ); void slotChooser4Change( const QString &textChanged ); void slotCmbChooser1Change( int index ); void slotCmbChooser2Change( int index ); void slotCmbChooser3Change( int index ); @@ -101,16 +102,17 @@ class ContactEditor : public QDialog { void slotRemoveBirthday(); void slotRemoveAnniversary(); void defaultEmailChanged(int); private: int defaultEmailChooserPosition; void populateDefaultEmailCmb(); void chooserChange( const QString&, int , QLineEdit*, int ); + bool cmbChooserChange( int , QLineEdit*, int ); bool useFullName; OContact ent; QDialog *dlgNote; QDialog *dlgName; |