summaryrefslogtreecommitdiff
authoreilers <eilers>2003-01-04 14:24:36 (UTC)
committer eilers <eilers>2003-01-04 14:24:36 (UTC)
commit4a9e13d7b9220b45cbbbdfab5f2ea56ea415d6a7 (patch) (side-by-side diff)
tree00babfde2cfd15687cb87d73800e75630afdab0b
parent851c182383c34fd4925677713bb5f6fd603c86a0 (diff)
downloadopie-4a9e13d7b9220b45cbbbdfab5f2ea56ea415d6a7.zip
opie-4a9e13d7b9220b45cbbbdfab5f2ea56ea415d6a7.tar.gz
opie-4a9e13d7b9220b45cbbbdfab5f2ea56ea415d6a7.tar.bz2
Hope I fixed the default-email bugs..
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/addressbook/TODO2
-rw-r--r--core/pim/addressbook/contacteditor.cpp224
-rw-r--r--core/pim/addressbook/contacteditor.h2
3 files changed, 186 insertions, 42 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
@@ -17,48 +17,50 @@ Known Bugs:
-----------
Bugs but not in addressbook:
-----------------------------
- VCARD: If umlaut (äöüß) in address, the parser gets confused..
- Exporting and reimporting of Jobtitle was reported to fail (Could not reproduce this ! (se))
Urgent:
--------
ContactEditor:
- Contact-Editor is temporarely reenabled. Wait for replacement.
- Redesign of Contacteditor
- Store last settings of combo-boxes
- 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
- Overview window cleanup needed..
- The picker (alphabetical sort widget) should be
placed verticaly or horizontally (configurable)
- Find a smart solution for activating/deactivating the "send email" event
Should be Fixed (not absolute sure, need further validation):
-------------------------------------------------------------
Fixed:
-------
- Syncing: abtable not reloaded after sync.
- Find widget should be replaced by something like
qpdf has.
- Adding a configuration dialog
- Picker: Activated letter schould be more visible
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
@@ -25,48 +25,49 @@
#include <qpe/categoryselect.h>
#include <qpe/qpeapplication.h>
#include <qpe/qpedialog.h>
#include <qpe/timeconversion.h>
#include <opie/ocontact.h>
#include <qpe/resource.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>
#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...
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 OContact &entry,
QWidget *parent,
const char *name,
WFlags fl )
: QDialog( parent, name, TRUE, fl ),
m_personalView ( false )
{
@@ -623,115 +624,232 @@ void ContactEditor::init() {
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( cmbChooserField4, SIGNAL(activated(int)),
this, SLOT(slotCmbChooser4Change(int)) );
connect( cmbAddress, SIGNAL(activated(int)),
this, SLOT(slotAddressTypeChange(int)) );
new QPEDialogListener(this);
setPersonalView ( m_personalView );
}
void ContactEditor::defaultEmailChanged(int i){
- qDebug("defaultEmailChanged");
+ 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->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());
- if ( cmbDefaultEmail->text( i ).stripWhiteSpace() == defaultEmail.stripWhiteSpace() ){
- cmbDefaultEmail->setCurrentItem( i );
- qDebug("set");
+ 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);
+}
+
+// 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];
+ qWarning("ContactEditor::cmbChooserChange -> Type: %s", type.latin1() );
+
+ // Create and connect combobox for selecting the default email
+ if ( type == "Default Email"){
+ 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());
+
+ 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;
+ }
}
-void ContactEditor::chooserChange( const QString &textChanged, int index, QLineEdit *inputWid, int widgetPos ) {
+// 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 );
+ qDebug("ContactEditor::chooserChange( type=>%s<, textChanged=>%s< index=%i, widgetPos=%i",
+ type.latin1(),textChanged.latin1(), index, widgetPos );
+
if ( type == "Default Email"){
- defaultEmail = textChanged;
- 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)));
- defaultEmailChooserPosition = widgetPos;
+ qWarning ("??? Wozu??: %s", textChanged.latin1());
+ defaultEmail = textChanged;
+
+ populateDefaultEmailCmb();
+
}else if (defaultEmailChooserPosition == widgetPos){
- qDebug("cmbDefaultEmail->hide()");
- if (cmbDefaultEmail) cmbDefaultEmail->hide();
- widgetPos=-1;
+ qDebug("cmbDefaultEmail->hide()");
+
+ if (cmbDefaultEmail) cmbDefaultEmail->hide();
+ widgetPos=-1;
+
}else if (type == "Emails"){
- qDebug("emails");
- QString de;
- emails = QStringList::split (",", textChanged );
+ qDebug("emails");
+
+ QString de;
+ emails = QStringList::split (",", textChanged );
- if ( cmbDefaultEmail )
- populateDefaultEmailCmb();
+ 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 {
slHomeAddress[0] = textChanged;
}
}
void ContactEditor::slotAddress2Change( const QString &textChanged ) {
if ( cmbAddress->currentItem() == 0 ) {
slBusinessAddress[1] = textChanged;
} else {
slHomeAddress[1] = textChanged;
}
}
void ContactEditor::slotPOBoxChange( const QString &textChanged ) {
if ( cmbAddress->currentItem() == 0 ) {
@@ -759,71 +877,90 @@ void ContactEditor::slotStateChange( const QString &textChanged ) {
slHomeAddress[4] = textChanged;
}
}
void ContactEditor::slotZipChange( const QString &textChanged ) {
if ( cmbAddress->currentItem() == 0 ) {
slBusinessAddress[5] = textChanged;
} else {
slHomeAddress[5] = textChanged;
}
}
void ContactEditor::slotCountryChange( const QString &textChanged ) {
if ( cmbAddress->currentItem() == 0 ) {
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();
+
+ }
- 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();
+ 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();
+ 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();
+ 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] );
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();
@@ -1427,56 +1564,59 @@ void ContactEditor::saveEntry() {
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" ) || ( *it == "Work Phone" ) )
ent.setBusinessPhone( *itV );
if ( ( *it == "Business Fax" ) || ( *it == "Work Fax" ) )
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" )
ent.setHomeMobile( *itV );
if ( ( *it == "Business Pager" ) || ( *it == "Work Pager" ) )
ent.setBusinessPager( *itV );
if ( *it == "Home Web Page" )
ent.setHomeWebpage( *itV );
if ( ( *it == "Business WebPage" ) || ( *it == "Work Web Page" ) )
ent.setBusinessWebpage( *itV );
}
int gender = cmbGender->currentItem();
ent.setGender( QString::number( gender ) );
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
@@ -57,76 +57,78 @@ class ContactEditor : public QDialog {
ContactEditor( const OContact &entry,
QWidget *parent = 0,
const char *name = 0,
WFlags fl = 0 );
~ContactEditor();
void setNameFocus();
void setPersonalView( bool personal = true );
OContact entry() const { return ent; }
public slots:
void slotNote();
void slotName();
void setEntry(const OContact &entry);
protected slots:
void accept();
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 );
void slotCmbChooser4Change( 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 );
void slotAnniversaryDateChanged( int year, int month, int day);
void slotBirthdayDateChanged( int year, int month, int day);
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;
QList<QLineEdit> listValue;
QList<QLabel> listName;
QStringList slDynamicEntries;
QStringList trlDynamicEntries;
bool m_personalView;
QStringList slHomeAddress;
QStringList slBusinessAddress;
QStringList slChooserNames;
QStringList slChooserValues;
QStringList emails;
QString defaultEmail;
QMultiLineEdit *txtNote;