-rw-r--r-- | core/pim/addressbook/TODO | 21 | ||||
-rw-r--r-- | core/pim/addressbook/contacteditor.cpp | 107 | ||||
-rw-r--r-- | core/pim/addressbook/contacteditor.h | 8 | ||||
-rw-r--r-- | core/pim/addressbook/ocontactfields.cpp | 4 | ||||
-rw-r--r-- | core/pim/addressbook/version.h | 2 |
5 files changed, 82 insertions, 60 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO index 719b720..a0d50a3 100644 --- a/core/pim/addressbook/TODO +++ b/core/pim/addressbook/TODO @@ -5,68 +5,62 @@ Feature requests: ----------------- - Dial by mobile phone by tapping the number.. (Maybe using gsmtool. And we may add a library class for this) - dial with dtmfdial in case it's installed and there's no mobile - 3rd column for 2. Contact - Implementing additional Views (Phonebook, ...) - Birthday & Anniversary Reminder - Beaming of multiple contacts (current list/ by search or by category) - Configure the letter-picker: lastname/fullname search - User center of the joypad to switch back from card to listview ! - Cursor-UP/Down: Should additionally scroll cardview if it is too large (behaviour should be selectable by configuration) Known Bugs: ----------- -- Default Email-button: A lot of problems: - If on second tab: The combo chooser is on the top left of the screen ! :( -- Default Email-Button: Sometimes not hiding the textfields completely 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 - Category is on the wrong position after changing to personal and back to normal ( Temporarily workaround: Category is never deactivated.. :S ) - Fix handling of 3 Firstnames Important: ---------- -- If new contact is added (contacteditor closed): focus (table, card) to - this entry ! -- 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 - The picker (alphabetical sort widget) should be placed verticaly or horizontally (configurable) - Find a smart solution for activating/deactivating the "send email" event +- If new contact is added (contacteditor closed): focus (table, card) to + this entry ! +- After search (Started with Return): KeyFocus should be on Tabelle + +ContactEditor: +- Redesign of Contacteditor Should be Fixed (not absolute sure, need further validation): ------------------------------------------------------------- Fixed/Ready: ------- - 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 - Advanced handling of cursor keys (search..) - Mail-Icon is missing - Use opie-mail insted of qt-mail if possible. - Font menu is invisible using german translation @@ -104,16 +98,19 @@ Fixed/Ready: - VCARD: Import of Anniversary does not work correctly (currently disabled) - Name order selected in "contacteditor" not used in list view. - OK-Key does not switch from Detailview (ablable) to Listview - Receiving of beams should open a dialog - Fix start of opie-mail - Implement Button Pics - Add a dialog to accept and optionally edit received contacts by IRDA. - Language not English (tested with german opie-translation): 1. Configure nicht übersetzt (alles leer). 2. Contacteditor nur teilweise übersetzt. 3. Kategorie-Picker geht nicht. - Plugin for Today for Birthdays and Anniversaries - Implement a picker/combo for the default email. - Overview window cleanup needed.. - Store last settings of combo-boxes - Personal and Business Web-page is not editable +- Default Email-button: A lot of problems: + If on second tab: The combo chooser is on the top left of the screen ! :( +- Default Email-Button: Sometimes not hiding the textfields completely diff --git a/core/pim/addressbook/contacteditor.cpp b/core/pim/addressbook/contacteditor.cpp index b60f2dd..d1338f6 100644 --- a/core/pim/addressbook/contacteditor.cpp +++ b/core/pim/addressbook/contacteditor.cpp @@ -149,49 +149,67 @@ void ContactEditor::init() { 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 ); + // Chooser 1 cmbChooserField1 = new QComboBox( FALSE, container ); cmbChooserField1->setMaximumWidth( 90 ); gl->addWidget( cmbChooserField1, 3, 0 ); - txtChooserField1 = new QLineEdit( container ); - gl->addWidget( txtChooserField1, 3, 1 ); - + // Textfield for chooser 1. + // Now use Widgetstack to contain the textfield and the default-email combo ! + m_widgetStack1 = new QWidgetStack( container ); + txtChooserField1 = new QLineEdit( m_widgetStack1 ); + m_widgetStack1 -> addWidget( txtChooserField1, TextField ); + gl->addWidget( m_widgetStack1, 3, 1 ); + m_widgetStack1 -> raiseWidget( TextField ); + + // Chooser 2 cmbChooserField2 = new QComboBox( FALSE, container ); cmbChooserField2->setMaximumWidth( 90 ); gl->addWidget( cmbChooserField2, 4, 0 ); - txtChooserField2 = new QLineEdit( container ); - gl->addWidget( txtChooserField2, 4, 1 ); - + // Textfield for chooser 2 + // Now use WidgetStack to contain the textfield and the default-email combo! + m_widgetStack2 = new QWidgetStack( container ); + txtChooserField2 = new QLineEdit( m_widgetStack2 ); + m_widgetStack2 -> addWidget( txtChooserField2, TextField ); + gl->addWidget( m_widgetStack2, 4, 1 ); + m_widgetStack2 -> raiseWidget( TextField ); + + // Chooser 3 cmbChooserField3 = new QComboBox( FALSE, container ); cmbChooserField3->setMaximumWidth( 90 ); gl->addWidget( cmbChooserField3, 5, 0 ); - txtChooserField3 = new QLineEdit( container ); - gl->addWidget( txtChooserField3, 5, 1 ); + // Textfield for chooser 2 + // Now use WidgetStack to contain the textfield and the default-email combo! + m_widgetStack3 = new QWidgetStack( container ); + txtChooserField3 = new QLineEdit( m_widgetStack3 ); + m_widgetStack3 -> addWidget( txtChooserField3, TextField ); + gl->addWidget( m_widgetStack3, 5, 1 ); + m_widgetStack3 -> raiseWidget( TextField ); l = new QLabel( tr( "File As" ), container ); gl->addWidget( l, 6, 0 ); cmbFileAs = new QComboBox( TRUE, container ); gl->addWidget( cmbFileAs, 6, 1 ); labCat = new QLabel( tr( "Category" ), container ); gl->addWidget( labCat, 7, 0 ); cmbCat = new CategorySelect( container ); gl->addWidget( cmbCat, 7, 1 ); labCat->show(); cmbCat->show(); btnNote = new QPushButton( tr( "Notes..." ), container ); gl->addWidget( btnNote, 8, 1 ); @@ -444,37 +462,43 @@ void ContactEditor::init() { cmbCountry->insertItem( tr ( "Vanuatu" ) ); cmbCountry->insertItem( tr ( "Venezuela" ) ); cmbCountry->insertItem( tr ( "Vietnam" ) ); cmbCountry->insertItem( tr ( "Virgin Islands" ) ); cmbCountry->insertItem( tr ( "Western Sahara" ) ); cmbCountry->insertItem( tr ( "Yemen" ) ); cmbCountry->insertItem( tr ( "Yugoslavia" ) ); cmbCountry->insertItem( tr ( "Zambia" ) ); cmbCountry->insertItem( tr ( "Zimbabwe" ) ); if (cmbCountry->listBox()!=0) cmbCountry->listBox()->sort(); cmbCountry->setMaximumWidth( 135 ); gl->addMultiCellWidget( cmbCountry, 5, 5, 1, 2 ); + // Chooser 4 cmbChooserField4 = new QComboBox( FALSE, container ); cmbChooserField4->setMaximumWidth( 90 ); gl->addWidget( cmbChooserField4, 6, 0 ); - txtChooserField4 = new QLineEdit( container ); - gl->addMultiCellWidget( txtChooserField4, 6, 6, 1, 2 ); + // Textfield for chooser 2 + // Now use WidgetStack to contain the textfield and the default-email combo! + m_widgetStack4 = new QWidgetStack( container ); + txtChooserField4 = new QLineEdit( m_widgetStack4 ); + m_widgetStack4 -> addWidget( txtChooserField4, TextField ); + gl->addMultiCellWidget( m_widgetStack4, 6, 6, 1, 2 ); + m_widgetStack4 -> raiseWidget( TextField ); QSpacerItem *space = new QSpacerItem(1,1, QSizePolicy::Maximum, QSizePolicy::MinimumExpanding ); gl->addItem( space, 7, 0 ); 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 ); @@ -687,83 +711,84 @@ void ContactEditor::populateDefaultEmailCmb(){ 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 ) { +bool ContactEditor::cmbChooserChange( int index, QWidgetStack* inputStack, int widgetPos ) { QString type = slChooserNames[index]; qWarning("ContactEditor::cmbChooserChange -> Type: %s, WidgetPos: %d", type.latin1(), widgetPos ); if ( !initializing ) contactfields.setFieldOrder( widgetPos-1, index ); // Create and connect combobox for selecting the default email if ( type == "Default Email"){ qWarning("Choosing default-email (defaultEmailChooserPosition= %d) ", defaultEmailChooserPosition); - // More than one defaul-email chooser is not allowed ! + // More than one default-email chooser is not allowed ! if ( ( defaultEmailChooserPosition != -1 ) && defaultEmailChooserPosition != widgetPos && !initializing){ chooserError( widgetPos ); return true; } - if ( cmbDefaultEmail ){ - delete cmbDefaultEmail; - cmbDefaultEmail = 0l; + QComboBox* cmbo = ( QComboBox* ) inputStack -> widget( Combo ); + if ( cmbo ){ + inputStack->raiseWidget( TextField ); + inputStack -> removeWidget( cmbo ); + delete cmbo; } - cmbDefaultEmail = new QComboBox(inputWid->parentWidget()); - cmbDefaultEmail->setGeometry(inputWid->frameGeometry()); /* :SX */ - - QRect rect = inputWid->frameGeometry(); - qWarning("Geometrie: X=%d, Y=%d, Left=%d, Top=%d, Right=%d, Bottom=%d", - rect.x(), rect.y(), rect.left(), rect.top(), rect.right(), rect.bottom()); - QPoint pnt = inputWid->pos(); - qWarning("Position : X=%d, Y=%d", pnt.x(), pnt.y() ); - - connect( cmbDefaultEmail,SIGNAL( activated(int) ), - SLOT( defaultEmailChanged(int) ) ); + cmbo = new QComboBox( inputStack ); + cmbo -> insertStringList( emails ); - cmbDefaultEmail->clear(); - cmbDefaultEmail->insertStringList( emails ); - cmbDefaultEmail->show(); + inputStack -> addWidget( cmbo, Combo ); + inputStack -> raiseWidget( Combo ); defaultEmailChooserPosition = widgetPos; + cmbDefaultEmail = cmbo; + + connect( cmbo,SIGNAL( activated(int) ), + SLOT( defaultEmailChanged(int) ) ); // 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(); + QComboBox* cmbo = ( QComboBox* ) inputStack -> widget( Combo ); + if ( cmbo ){ + inputStack->raiseWidget( TextField ); + inputStack -> removeWidget( cmbo ); + cmbDefaultEmail = 0l; + delete cmbo; + } } // 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 ) { @@ -789,49 +814,43 @@ void ContactEditor::chooserError( int index ) 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]; + QString type = slChooserNames[index]; // :SX 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"){ + }else if (type == "Emails"){ qDebug("emails"); QString de; emails = QStringList::split (",", textChanged ); populateDefaultEmailCmb(); } slChooserValues[index] = textChanged; } void ContactEditor::slotChooser1Change( const QString &textChanged ) { qWarning("ContactEditor::slotChooser1Change( %s )", textChanged.latin1()); chooserChange( textChanged, cmbChooserField1->currentItem(), txtChooserField1, 1); } @@ -906,67 +925,67 @@ void ContactEditor::slotZipChange( const QString &textChanged ) { 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) ){ - + if ( !cmbChooserChange( cmbChooserField1->currentItem(), m_widgetStack1, 1) ){ + txtChooserField1->setText( slChooserValues[index] ); txtChooserField1->setFocus(); } } void ContactEditor::slotCmbChooser2Change( int index ) { qWarning("ContactEditor::slotCmbChooser2Change( %d )", index); - if ( !cmbChooserChange( cmbChooserField2->currentItem(), txtChooserField2, 2) ){ + if ( !cmbChooserChange( cmbChooserField2->currentItem(), m_widgetStack2, 2) ){ txtChooserField2->setText( slChooserValues[index] ); txtChooserField2->setFocus(); } } void ContactEditor::slotCmbChooser3Change( int index ) { qWarning("ContactEditor::slotCmbChooser3Change( %d )", index); - if ( !cmbChooserChange( cmbChooserField3->currentItem(), txtChooserField3, 3) ){ + if ( !cmbChooserChange( cmbChooserField3->currentItem(), m_widgetStack3, 3) ){ txtChooserField3->setText( slChooserValues[index] ); txtChooserField3->setFocus(); } } void ContactEditor::slotCmbChooser4Change( int index ) { qWarning("ContactEditor::slotCmbChooser4Change( %d )", index); - if ( !cmbChooserChange( cmbChooserField4->currentItem(), txtChooserField4, 4) ){ + if ( !cmbChooserChange( cmbChooserField4->currentItem(), m_widgetStack4, 4) ){ txtChooserField4->setText( slChooserValues[index] ); txtChooserField4->setFocus(); } } void ContactEditor::slotAddressTypeChange( int index ) { if ( !initializing ) contactfields.setFieldOrder( 4, index ); if ( index == 0 ) { diff --git a/core/pim/addressbook/contacteditor.h b/core/pim/addressbook/contacteditor.h index 95f9f2d..703e702 100644 --- a/core/pim/addressbook/contacteditor.h +++ b/core/pim/addressbook/contacteditor.h @@ -16,32 +16,33 @@ * 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 <opie/ocontact.h> #include <qpe/datebookmonth.h> #include <qdialog.h> #include <qlist.h> #include <qmap.h> #include <qstringlist.h> +#include <qwidgetstack.h> #include "ocontactfields.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; @@ -93,36 +94,37 @@ class ContactEditor : public QDialog { 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: + enum StackWidgets { TextField = 1, Combo }; int defaultEmailChooserPosition; void populateDefaultEmailCmb(); void chooserChange( const QString&, int , QLineEdit*, int ); - bool cmbChooserChange( int , QLineEdit*, int ); + bool cmbChooserChange( int , QWidgetStack*, int ); OContactFields contactfields; bool useFullName; OContact ent; QDialog *dlgNote; QDialog *dlgName; QList<QLineEdit> listValue; QList<QLabel> listName; QStringList slDynamicEntries; QStringList trlDynamicEntries; bool m_personalView; @@ -141,32 +143,36 @@ class ContactEditor : public QDialog { 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; QLineEdit *txtChooserField4; + QWidgetStack* m_widgetStack1; + QWidgetStack* m_widgetStack2; + QWidgetStack* m_widgetStack3; + QWidgetStack* m_widgetStack4; QComboBox *cmbChooserField1; QComboBox *cmbChooserField2; QComboBox *cmbChooserField3; QComboBox *cmbChooserField4; QComboBox *cmbDefaultEmail; QComboBox *cmbFileAs; CategorySelect *cmbCat; QLabel *labCat; QScrollView *svAddress; QLineEdit *txtAddress; //QLineEdit *txtAddress2; //QLineEdit *txtPOBox; QLineEdit *txtCity; QLineEdit *txtState; QLineEdit *txtZip; diff --git a/core/pim/addressbook/ocontactfields.cpp b/core/pim/addressbook/ocontactfields.cpp index ffb88e8..831a596 100644 --- a/core/pim/addressbook/ocontactfields.cpp +++ b/core/pim/addressbook/ocontactfields.cpp @@ -407,50 +407,50 @@ void OContactFields::loadFromRecord( const OContact &cnt ){ fieldOrder = cnt.customField( CONTACT_FIELD_ORDER_NAME ); qDebug("fieldOrder from contact>%s<",fieldOrder.latin1()); if (fieldOrder.isEmpty()){ fieldOrder = globalFieldOrder; } qDebug("effective fieldOrder in loadFromRecord >%s<",fieldOrder.latin1()); } void OContactFields::setFieldOrder( int num, int index ){ qDebug("qcontactfields setfieldorder pos %i -> %i",num,index); - fieldOrder[num] = QString::number( index )[0]; + fieldOrder[num] = QString::number( index, 16 )[0]; // We will store this new fieldorder globally to // remember it for contacts which have none globalFieldOrder = fieldOrder; changedFieldOrder = true; qDebug("fieldOrder >%s<",fieldOrder.latin1()); } int OContactFields::getFieldOrder( int num, int defIndex ){ qDebug("ocontactfields getFieldOrder"); qDebug("fieldOrder >%s<",fieldOrder.latin1()); // Get index of combo as char.. QChar poschar = fieldOrder[num]; bool ok; int ret = 0; // Convert char to number.. if ( !( poschar == QChar::null ) ) - ret = QString( poschar ).toInt(&ok, 10); + ret = QString( poschar ).toInt(&ok, 16); else ok = false; // Return default value if index for // num was not set or if anything else happened.. if ( !ok ) ret = defIndex; qDebug("returning >%i<",ret); return ret; } diff --git a/core/pim/addressbook/version.h b/core/pim/addressbook/version.h index 3c1e5ee..3becfdc 100644 --- a/core/pim/addressbook/version.h +++ b/core/pim/addressbook/version.h @@ -1,10 +1,10 @@ #ifndef _VERSION_H_ #define _VERSION_H_ #define MAINVERSION "0" #define SUBVERSION "2" -#define PATCHVERSION "1" +#define PATCHVERSION "2" #define APPNAME "OPIE_ADDRESSBOOK" #endif |