-rw-r--r-- | core/pim/addressbook/TODO | 5 | ||||
-rw-r--r-- | core/pim/addressbook/abtable.cpp | 137 | ||||
-rw-r--r-- | core/pim/addressbook/abtable.h | 12 | ||||
-rw-r--r-- | core/pim/addressbook/addressbook.cpp | 5 | ||||
-rw-r--r-- | core/pim/addressbook/configdlg.cpp | 11 | ||||
-rw-r--r-- | core/pim/addressbook/contacteditor.cpp | 3 | ||||
-rw-r--r-- | core/pim/addressbook/ocontactfields.cpp | 14 |
7 files changed, 122 insertions, 65 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO index f62b075..906b462 100644 --- a/core/pim/addressbook/TODO +++ b/core/pim/addressbook/TODO @@ -9,43 +9,43 @@ Feature requests: - 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: ----------- -- Email-button: A lot of problems.. :( +- 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 ) -- Personal and Business Web-page is not editable 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: --------------- @@ -106,12 +106,13 @@ Fixed/Ready: - 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 diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp index aec390d..55b1ba1 100644 --- a/core/pim/addressbook/abtable.cpp +++ b/core/pim/addressbook/abtable.cpp @@ -16,24 +16,25 @@ ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include <qpe/categoryselect.h> #include <qpe/config.h> #include <qpe/stringutil.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/timestring.h> +#include <qpe/resource.h> #include <opie/orecordlist.h> #include <qasciidict.h> #include <qdatetime.h> #include <qfile.h> #include <qregexp.h> #include <qmessagebox.h> #include "abtable.h" #include <errno.h> @@ -205,35 +206,37 @@ bool AbTable::selectContact( int UID ) ensureCellVisible( 0,0 ); setCurrentCell( 0, 0 ); } setPaintingEnabled( TRUE ); return true; } void AbTable::insertIntoTable( const OContact& cnt, int row ) { // qWarning( "void AbTable::insertIntoTable( const OContact& cnt, %d )", row ); - QString strName, - strContact; + QString strName; + ContactItem contactItem; strName = findContactName( cnt ); - strContact = findContactContact( cnt, row ); + contactItem = findContactContact( cnt, row ); AbTableItem *ati; - ati = new AbTableItem( this, QTableItem::Never, strName, strContact); + ati = new AbTableItem( this, QTableItem::Never, strName, contactItem.value ); contactList.insert( ati, cnt ); setItem( row, 0, ati ); - ati = new AbTableItem( this, QTableItem::Never, strContact, strName); + ati = new AbTableItem( this, QTableItem::Never, contactItem.value, strName); + if ( !contactItem.icon.isNull() ) + ati->setPixmap( contactItem.icon ); setItem( row, 1, ati ); //### cannot do this; table only has two columns at this point // setItem( row, 2, new AbPickItem( this ) ); } void AbTable::columnClicked( int col ) { if ( !sorting() ) @@ -297,32 +300,36 @@ void AbTable::clear() clearCell( r, c ); } } setNumRows( 0 ); setPaintingEnabled( TRUE ); } // Refresh updates column 2 if the contactsettings changed void AbTable::refresh() { // qWarning( "void AbTable::refresh()" ); int rows = numRows(); - QString value; AbTableItem *abi; + ContactItem contactItem; setPaintingEnabled( FALSE ); for ( int r = 0; r < rows; ++r ) { abi = static_cast<AbTableItem*>( item(r, 0) ); - value = findContactContact( contactList[abi], r ); - static_cast<AbTableItem*>( item(r, 1) )->setItem( value, abi->text() ); + contactItem = findContactContact( contactList[abi], r ); + static_cast<AbTableItem*>( item(r, 1) )->setItem( contactItem.value, abi->text() ); + if ( !contactItem.icon.isNull() ) + static_cast<AbTableItem*>( item(r, 1) )-> + setPixmap( contactItem.icon ); + } resort(); setPaintingEnabled( TRUE ); } void AbTable::keyPressEvent( QKeyEvent *e ) { char key = toupper( e->ascii() ); if ( key >= 'A' && key <= 'Z' ) moveTo( key ); @@ -609,139 +616,165 @@ void AbTable::viewportPaintEvent( QPaintEvent* e ) { // qWarning(" void AbTable::viewportPaintEvent( QPaintEvent* e ) -> %d", enablePainting); if ( enablePainting ) QTable::viewportPaintEvent( e ); } void AbTable::rowHeightChanged( int row ) { if ( enablePainting ) QTable::rowHeightChanged( row ); } -QString AbTable::findContactContact( const OContact &entry, int /* row */ ) +ContactItem AbTable::findContactContact( const OContact &entry, int /* row */ ) { - QString value; - value = ""; + + ContactItem item; + + item.value = ""; + for ( QValueList<int>::ConstIterator it = intFields.begin(); it != intFields.end(); ++it ) { switch ( *it ) { default: break; case Qtopia::Title: - value = entry.title(); + item.value = entry.title(); break; case Qtopia::Suffix: - value = entry.suffix(); + item.value = entry.suffix(); break; case Qtopia::FileAs: - value = entry.fileAs(); + item.value = entry.fileAs(); break; case Qtopia::DefaultEmail: - value = entry.defaultEmail(); + item.value = entry.defaultEmail(); + if ( !item.value.isEmpty() ) + item.icon = Resource::loadPixmap( "addressbook/email" ); + break; case Qtopia::Emails: - value = entry.emails(); + item.value = entry.emails(); + if ( !item.value.isEmpty() ) + item.icon = Resource::loadPixmap( "addressbook/email" ); break; case Qtopia::HomeStreet: - value = entry.homeStreet(); + item.value = entry.homeStreet(); break; case Qtopia::HomeCity: - value = entry.homeCity(); + item.value = entry.homeCity(); break; case Qtopia::HomeState: - value = entry.homeState(); + item.value = entry.homeState(); break; case Qtopia::HomeZip: - value = entry.homeZip(); + item.value = entry.homeZip(); break; case Qtopia::HomeCountry: - value = entry.homeCountry(); + item.value = entry.homeCountry(); break; case Qtopia::HomePhone: - value = entry.homePhone(); + item.value = entry.homePhone(); + if ( !item.value.isEmpty() ) + item.icon = Resource::loadPixmap( "addressbook/phonehome" ); break; case Qtopia::HomeFax: - value = entry.homeFax(); + item.value = entry.homeFax(); + if ( !item.value.isEmpty() ) + item.icon = Resource::loadPixmap( "addressbook/faxhome" ); break; case Qtopia::HomeMobile: - value = entry.homeMobile(); + item.value = entry.homeMobile(); + if ( !item.value.isEmpty() ) + item.icon = Resource::loadPixmap( "addressbook/mobilehome" ); break; case Qtopia::HomeWebPage: - value = entry.homeWebpage(); + item.value = entry.homeWebpage(); + if ( !item.value.isEmpty() ) + item.icon = Resource::loadPixmap( "addressbook/webpagehome" ); break; case Qtopia::Company: - value = entry.company(); + item.value = entry.company(); break; case Qtopia::BusinessCity: - value = entry.businessCity(); + item.value = entry.businessCity(); break; case Qtopia::BusinessStreet: - value = entry.businessStreet(); + item.value = entry.businessStreet(); break; case Qtopia::BusinessZip: - value = entry.businessZip(); + item.value = entry.businessZip(); break; case Qtopia::BusinessCountry: - value = entry.businessCountry(); + item.value = entry.businessCountry(); break; case Qtopia::BusinessWebPage: - value = entry.businessWebpage(); + item.value = entry.businessWebpage(); + if ( !item.value.isEmpty() ) + item.icon = Resource::loadPixmap( "addressbook/webpagework" ); break; case Qtopia::JobTitle: - value = entry.jobTitle(); + item.value = entry.jobTitle(); break; case Qtopia::Department: - value = entry.department(); + item.value = entry.department(); break; case Qtopia::Office: - value = entry.office(); + item.value = entry.office(); break; case Qtopia::BusinessPhone: - value = entry.businessPhone(); + item.value = entry.businessPhone(); + if ( !item.value.isEmpty() ) + item.icon = Resource::loadPixmap( "addressbook/phonework" ); break; case Qtopia::BusinessFax: - value = entry.businessFax(); + item.value = entry.businessFax(); + if ( !item.value.isEmpty() ) + item.icon = Resource::loadPixmap( "addressbook/faxwork" ); break; case Qtopia::BusinessMobile: - value = entry.businessMobile(); + item.value = entry.businessMobile(); + if ( !item.value.isEmpty() ) + item.icon = Resource::loadPixmap( "addressbook/mobilework" ); break; case Qtopia::BusinessPager: - value = entry.businessPager(); + item.value = entry.businessPager(); break; case Qtopia::Profession: - value = entry.profession(); + item.value = entry.profession(); break; case Qtopia::Assistant: - value = entry.assistant(); + item.value = entry.assistant(); break; case Qtopia::Manager: - value = entry.manager(); + item.value = entry.manager(); break; case Qtopia::Spouse: - value = entry.spouse(); + item.value = entry.spouse(); break; case Qtopia::Gender: - value = entry.gender(); + item.value = entry.gender(); break; case Qtopia::Birthday: - if ( ! entry.birthday().isNull() ) - value = TimeString::numberDateString( entry.birthday() ); + if ( ! entry.birthday().isNull() ){ + item.value = TimeString::numberDateString( entry.birthday() ); + } break; case Qtopia::Anniversary: - if ( ! entry.anniversary().isNull() ) - value = TimeString::numberDateString( entry.anniversary() ); + if ( ! entry.anniversary().isNull() ){ + item.value = TimeString::numberDateString( entry.anniversary() ); + } break; case Qtopia::Nickname: - value = entry.nickname(); + item.value = entry.nickname(); break; case Qtopia::Children: - value = entry.children(); + item.value = entry.children(); break; case Qtopia::Notes: - value = entry.notes(); + item.value = entry.notes(); break; } - if ( !value.isEmpty() ) + if ( !item.value.isEmpty() ) break; } - return value; + return item; } diff --git a/core/pim/addressbook/abtable.h b/core/pim/addressbook/abtable.h index 9825665..092e86f 100644 --- a/core/pim/addressbook/abtable.h +++ b/core/pim/addressbook/abtable.h @@ -21,40 +21,50 @@ #ifndef ABTABLE_H #define ABTABLE_H #include <qpe/categories.h> #include <opie/ocontact.h> #include <opie/ocontactaccess.h> #include <qmap.h> #include <qtable.h> #include <qstringlist.h> #include <qcombobox.h> +#include <qpixmap.h> class AbTableItem : public QTableItem { public: AbTableItem( QTable *t, EditType et, const QString &s, const QString &secondSortKey); QString entryKey() const; void setEntryKey( const QString & k ); virtual int alignment() const; virtual QString key() const; void setItem( const QString &txt, const QString &secondKey ); private: QString sortKey; }; +// This is a simple container, storing all contact +// information +class ContactItem +{ + public: + QPixmap icon; + QString value; +}; + class AbPickItem : public QTableItem { public: AbPickItem( QTable *t ); QWidget *createEditor() const; void setContentFromEditor( QWidget *w ); private: QGuardedPtr<QComboBox> cb; }; @@ -106,25 +116,25 @@ protected: // int rowPos( int row ) const; // virtual int rowAt( int pos ) const; protected slots: void moveTo( char ); virtual void columnClicked( int col ); void itemClicked(int,int col); void rowHeightChanged( int row ); private: void insertIntoTable( const OContact &cnt, int row ); - QString findContactContact( const OContact &entry, int row ); + ContactItem findContactContact( const OContact &entry, int row ); void fitColumns(); void resizeRows(); void realignTable(); void resort(); void updateVisible(); int lastSortCol; bool asc; QMap<AbTableItem*, OContact> contactList; QValueList<int> intFields; QStringList choicenames; bool enablePainting; diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp index ad8315d..881b839 100644 --- a/core/pim/addressbook/addressbook.cpp +++ b/core/pim/addressbook/addressbook.cpp @@ -192,38 +192,39 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, a->addTo( listTools ); } edit->insertSeparator(); a = new QAction( tr("Import vCard"), QString::null, 0, 0); actionPersonal = a; connect( a, SIGNAL( activated() ), this, SLOT( importvCard() ) ); a->addTo( edit ); edit->insertSeparator(); - a = new QAction( tr("My Personal Details"), QString::null, 0, 0, 0, TRUE ); + a = new QAction( tr("My Personal Details"), Resource::loadPixmap( "addressbook/identity" ), + QString::null, 0, this, 0 ); actionPersonal = a; connect( a, SIGNAL( activated() ), this, SLOT( slotPersonalView() ) ); a->addTo( edit ); #ifdef __DEBUG_RELEASE // Remove this function for public Release ! This is only // for debug purposes .. a = new QAction( tr( "Save all Data"), QString::null, 0, 0 ); connect( a, SIGNAL( activated() ), this , SLOT( slotSave() ) ); a->addTo( edit ); #endif - a = new QAction( tr( "Config" ), Resource::loadPixmap( "today/config" ), QString::null, + a = new QAction( tr( "Config" ), Resource::loadPixmap( "addressbook/configure" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( slotConfig() ) ); a->addTo( edit ); // Create Views listContainer = new QWidget( this ); QVBoxLayout *vb = new QVBoxLayout( listContainer ); m_abView = new AbView( listContainer, m_config.orderList() ); vb->addWidget( m_abView ); // abList->setHScrollBarMode( QScrollView::AlwaysOff ); connect( m_abView, SIGNAL( signalViewSwitched ( int ) ), diff --git a/core/pim/addressbook/configdlg.cpp b/core/pim/addressbook/configdlg.cpp index afba688..f5c0c5b 100644 --- a/core/pim/addressbook/configdlg.cpp +++ b/core/pim/addressbook/configdlg.cpp @@ -1,31 +1,42 @@ #include "configdlg.h" #include "ocontactfields.h" + #include <qcheckbox.h> #include <qradiobutton.h> #include <qlistbox.h> #include <qpushbutton.h> +#include <qiconset.h> + +#include <qpe/resource.h> #include <opie/ocontact.h> ConfigDlg::ConfigDlg( QWidget *parent, const char *name): ConfigDlg_Base(parent, name, true ) { contFields = OContactFields::trfields(); // We add all Fields into the Listbox for (uint i=0; i < contFields.count(); i++) { allFieldListBox->insertItem( contFields[i] ); } + // Set Pics to Buttons and Tabs + m_upButton->setIconSet( QIconSet( Resource::loadPixmap( "addressbook/up" ) ) ); + m_downButton->setIconSet( QIconSet( Resource::loadPixmap( "addressbook/down" ) ) ); + m_addButton->setIconSet( QIconSet( Resource::loadPixmap( "addressbook/add" ) ) ); + m_removeButton->setIconSet( QIconSet( Resource::loadPixmap( "addressbook/sub" ) ) ); + + // Get the translation maps between Field ID and translated strings m_mapStrToID = OContactFields::trFieldsToId(); m_mapIDToStr = OContactFields::idToTrFields(); connect ( m_addButton, SIGNAL( clicked() ), this, SLOT( slotItemAdd() ) ); connect ( m_removeButton, SIGNAL( clicked() ), this, SLOT( slotItemRemove() ) ); connect ( m_upButton, SIGNAL( clicked() ), this, SLOT( slotItemUp() ) ); connect ( m_downButton, SIGNAL( clicked() ), this, SLOT( slotItemDown() ) ); } void ConfigDlg::slotItemUp() { diff --git a/core/pim/addressbook/contacteditor.cpp b/core/pim/addressbook/contacteditor.cpp index 9efb8c0..97573af 100644 --- a/core/pim/addressbook/contacteditor.cpp +++ b/core/pim/addressbook/contacteditor.cpp @@ -539,28 +539,27 @@ void ContactEditor::init() { l = new QLabel( tr("Gender"), container ); gl->addWidget( l, counter, 0 ); cmbGender = new QComboBox( container ); cmbGender->insertItem( "", 0 ); cmbGender->insertItem( tr("Male"), 1); cmbGender->insertItem( tr("Female"), 2); gl->addWidget( cmbGender, counter, 1 ); ++counter; // Create Labels and lineedit fields for every dynamic entry QStringList::ConstIterator it = slDynamicEntries.begin(); - QStringList::ConstIterator trit = trlDynamicEntries.begin(); QMap<QString, int> mapStrToID = OContactFields::untrFieldsToId(); QMap<int, QString> mapIdToStr = OContactFields::idToTrFields(); - for (i = counter; it != slDynamicEntries.end(); i++, ++it, ++trit) { + for (i = counter; it != slDynamicEntries.end(); i++, ++it ) { if (((*it) == "Anniversary") || ((*it) == "Birthday")|| ((*it) == "Gender")) continue; l = new QLabel( mapIdToStr[mapStrToID[*it]].utf8() , container ); listName.append( l ); gl->addWidget( l, i, 0 ); QLineEdit *e = new QLineEdit( container ); listValue.append( e ); gl->addWidget( e, i, 1); } // Fill labels with names.. diff --git a/core/pim/addressbook/ocontactfields.cpp b/core/pim/addressbook/ocontactfields.cpp index 18b68c4..ffb88e8 100644 --- a/core/pim/addressbook/ocontactfields.cpp +++ b/core/pim/addressbook/ocontactfields.cpp @@ -63,57 +63,65 @@ QStringList OContactFields::trdetailsfields( bool sorted ) /*! \internal Returns a translated list of phone field names for a contact. */ QStringList OContactFields::trphonefields( bool sorted ) { QStringList list; QMap<int, QString> mapIdToStr = idToTrFields(); list.append( mapIdToStr[Qtopia::BusinessPhone] ); list.append( mapIdToStr[Qtopia::BusinessFax] ); list.append( mapIdToStr[Qtopia::BusinessMobile] ); + list.append( mapIdToStr[Qtopia::BusinessPager] ); + list.append( mapIdToStr[Qtopia::BusinessWebPage] ); list.append( mapIdToStr[Qtopia::DefaultEmail] ); list.append( mapIdToStr[Qtopia::Emails] ); list.append( mapIdToStr[Qtopia::HomePhone] ); list.append( mapIdToStr[Qtopia::HomeFax] ); list.append( mapIdToStr[Qtopia::HomeMobile] ); + // list.append( mapIdToStr[Qtopia::HomePager] ); + list.append( mapIdToStr[Qtopia::HomeWebPage] ); if (sorted) list.sort(); return list; } /*! \internal Returns a list of phone field names for a contact. */ QStringList OContactFields::untrphonefields( bool sorted ) { QStringList list; QMap<int, QString> mapIdToStr = idToUntrFields(); list.append( mapIdToStr[ Qtopia::BusinessPhone ] ); list.append( mapIdToStr[ Qtopia::BusinessFax ] ); list.append( mapIdToStr[ Qtopia::BusinessMobile ] ); + list.append( mapIdToStr[ Qtopia::BusinessPager ] ); + list.append( mapIdToStr[ Qtopia::BusinessWebPage ] ); list.append( mapIdToStr[ Qtopia::DefaultEmail ] ); list.append( mapIdToStr[ Qtopia::Emails ] ); list.append( mapIdToStr[ Qtopia::HomePhone ] ); list.append( mapIdToStr[ Qtopia::HomeFax ] ); list.append( mapIdToStr[ Qtopia::HomeMobile ] ); + //list.append( mapIdToStr[Qtopia::HomePager] ); + list.append( mapIdToStr[Qtopia::HomeWebPage] ); if (sorted) list.sort(); return list; } /*! \internal Returns a translated list of field names for a contact. */ QStringList OContactFields::trfields( bool sorted ) @@ -130,33 +138,30 @@ QStringList OContactFields::trfields( bool sorted ) list.append( mapIdToStr[Qtopia::JobTitle] ); list.append( mapIdToStr[Qtopia::Department] ); list.append( mapIdToStr[Qtopia::Company] ); list += trphonefields( sorted ); list.append( mapIdToStr[Qtopia::BusinessStreet] ); list.append( mapIdToStr[Qtopia::BusinessCity] ); list.append( mapIdToStr[Qtopia::BusinessState] ); list.append( mapIdToStr[Qtopia::BusinessZip] ); list.append( mapIdToStr[Qtopia::BusinessCountry] ); - list.append( mapIdToStr[Qtopia::BusinessPager] ); - list.append( mapIdToStr[Qtopia::BusinessWebPage] ); list.append( mapIdToStr[Qtopia::HomeStreet] ); list.append( mapIdToStr[Qtopia::HomeCity] ); list.append( mapIdToStr[Qtopia::HomeState] ); list.append( mapIdToStr[Qtopia::HomeZip] ); list.append( mapIdToStr[Qtopia::HomeCountry] ); - list.append( mapIdToStr[Qtopia::HomeWebPage] ); list += trdetailsfields( sorted ); list.append( mapIdToStr[Qtopia::Notes] ); list.append( mapIdToStr[Qtopia::Groups] ); if (sorted) list.sort(); return list; } /*! @@ -177,33 +182,30 @@ QStringList OContactFields::untrfields( bool sorted ) list.append( mapIdToStr[ Qtopia::JobTitle ] ); list.append( mapIdToStr[ Qtopia::Department ] ); list.append( mapIdToStr[ Qtopia::Company ] ); list += untrphonefields( sorted ); list.append( mapIdToStr[ Qtopia::BusinessStreet ] ); list.append( mapIdToStr[ Qtopia::BusinessCity ] ); list.append( mapIdToStr[ Qtopia::BusinessState ] ); list.append( mapIdToStr[ Qtopia::BusinessZip ] ); list.append( mapIdToStr[ Qtopia::BusinessCountry ] ); - list.append( mapIdToStr[ Qtopia::BusinessPager ] ); - list.append( mapIdToStr[ Qtopia::BusinessWebPage ] ); list.append( mapIdToStr[ Qtopia::HomeStreet ] ); list.append( mapIdToStr[ Qtopia::HomeCity ] ); list.append( mapIdToStr[ Qtopia::HomeState ] ); list.append( mapIdToStr[ Qtopia::HomeZip ] ); list.append( mapIdToStr[ Qtopia::HomeCountry ] ); - list.append( mapIdToStr[ Qtopia::HomeWebPage] ); list += untrdetailsfields( sorted ); list.append( mapIdToStr[ Qtopia::Notes ] ); list.append( mapIdToStr[ Qtopia::Groups ] ); if (sorted) list.sort(); return list; } QMap<int, QString> OContactFields::idToTrFields() { |