-rw-r--r-- | libopie2/opiepim/ocontact.cpp | 235 |
1 files changed, 145 insertions, 90 deletions
diff --git a/libopie2/opiepim/ocontact.cpp b/libopie2/opiepim/ocontact.cpp index f1a22a7..fa5313f 100644 --- a/libopie2/opiepim/ocontact.cpp +++ b/libopie2/opiepim/ocontact.cpp @@ -1,9 +1,9 @@ /* This file is part of the Opie Project - Copyright (C) The Main Author <main-author@whereever.org> + Copyright (C) Stefan Eilers <eilers.stefan@epost.de> =. Copyright (C) The Opie Team <opie-devel@handhelds.org> .=l. .>+-= _;:, .> :=|. This program is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU Library General Public @@ -24,47 +24,31 @@ -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/********************************************************************** -** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. -** Copyright (C) 2002-2003 by Stefan Eilers (eilers.stefan@epost.de) -** -** 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 -** packaging 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. -** -** See http://www.trolltech.com/gpl/ for GPL licensing information. -** -** Contact info@trolltech.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ - #define QTOPIA_INTERNAL_CONTACT_MRE -#include <opie2/ocontact.h> +#include "ocontact.h" + +/* OPIE */ #include <opie2/opimresolver.h> #include <opie2/oconversion.h> - #include <qpe/stringutil.h> #include <qpe/timestring.h> #include <qpe/config.h> +/* QT */ #include <qobject.h> #include <qregexp.h> #include <qstylesheet.h> #include <qfileinfo.h> #include <qmap.h> +/* STD */ #include <stdio.h> /*! \class Contact contact.h \brief The Contact class holds the data of an address book entry. @@ -73,51 +57,50 @@ \ingroup qtopiaemb \ingroup qtopiadesktop */ -namespace Opie { +namespace Opie +{ /*! Creates a new, empty contact. */ -OContact::OContact() - : OPimRecord(), mMap(), d( 0 ) -{ -} +OContact::OContact():OPimRecord(), mMap(), d( 0 ) +{} /*! \internal Creates a new contact. The properties of the contact are set from \a fromMap. */ -OContact::OContact( const QMap<int, QString> &fromMap ) : - OPimRecord(), mMap( fromMap ), d( 0 ) +OContact::OContact( const QMap<int, QString> &fromMap ):OPimRecord(), mMap( fromMap ), d( 0 ) { QString cats = mMap[ Qtopia::AddressCategory ]; if ( !cats.isEmpty() ) setCategories( idsFromString( cats ) ); QString uidStr = find( Qtopia::AddressUid ); - if ( uidStr.isEmpty() || (uidStr.toInt() == 0) ){ + if ( uidStr.isEmpty() || ( uidStr.toInt() == 0 ) ) + { qWarning( "Invalid UID found. Generate new one.." ); setUid( uidGen().generate() ); - }else + } + else setUid( uidStr.toInt() ); // if ( !uidStr.isEmpty() ) // setUid( uidStr.toInt() ); } /*! Destroys a contact. */ OContact::~OContact() -{ -} +{} /*! \fn void OContact::setTitle( const QString &str ) Sets the title of the contact to \a str. */ /*! \fn void OContact::setFirstName( const QString &str ) @@ -478,202 +461,243 @@ QString OContact::toRichText() const text += "<b><h3><img src=\"addressbook/AddressBook\"> " + Qtopia::escapeString(value) + "</h3></b>"; if ( !(value = jobTitle()).isEmpty() ) text += Qtopia::escapeString(value) + " "; comp = company(); - if ( !(value = department()).isEmpty() ) { + if ( !( value = department() ).isEmpty() ) + { text += Qtopia::escapeString(value); if ( comp ) text += ", " + Qtopia::escapeString(comp); - }else if ( comp ) + } + else if ( comp ) text += "<br>" + Qtopia::escapeString(comp); text += "<br><hr>"; // defailt email QString defEmail = defaultEmail(); - if ( !defEmail.isEmpty() ){ + if ( !defEmail.isEmpty() ) + { text += "<b><img src=\"addressbook/email\"> " + QObject::tr("Default Email: ") + "</b>" + Qtopia::escapeString(defEmail); marker = true; } // business address if ( !businessStreet().isEmpty() || !businessCity().isEmpty() || - !businessZip().isEmpty() || !businessCountry().isEmpty() ) { + !businessZip().isEmpty() || !businessCountry().isEmpty() ) + { text += QObject::tr( "<br><b>Work Address:</b>" ); marker = true; } - if ( !(value = businessStreet()).isEmpty() ){ + if ( !( value = businessStreet() ).isEmpty() ) + { text += "<br>" + Qtopia::escapeString(value); marker = true; } - switch( addressformat ){ - case Zip_City_State:{ // Zip_Code City, State + switch ( addressformat ) + { + case Zip_City_State: + { // Zip_Code City, State state = businessState(); - if ( !(value = businessZip()).isEmpty() ){ + if ( !( value = businessZip() ).isEmpty() ) + { text += "<br>" + Qtopia::escapeString(value) + " "; marker = true; } - if ( !(value = businessCity()).isEmpty() ) { + if ( !( value = businessCity() ).isEmpty() ) + { marker = true; if ( businessZip().isEmpty() && !businessStreet().isEmpty() ) text += "<br>"; text += Qtopia::escapeString(value); if ( state ) text += ", " + Qtopia::escapeString(state); - } else if ( !state.isEmpty() ){ + } + else if ( !state.isEmpty() ) + { text += "<br>" + Qtopia::escapeString(state); marker = true; } break; } - case City_State_Zip:{ // City, State Zip_Code + case City_State_Zip: + { // City, State Zip_Code state = businessState(); - if ( !(value = businessCity()).isEmpty() ) { + if ( !( value = businessCity() ).isEmpty() ) + { marker = true; text += "<br>" + Qtopia::escapeString(value); if ( state ) text += ", " + Qtopia::escapeString(state); - } else if ( !state.isEmpty() ){ + } + else if ( !state.isEmpty() ) + { text += "<br>" + Qtopia::escapeString(state); marker = true; } - if ( !(value = businessZip()).isEmpty() ){ + if ( !( value = businessZip() ).isEmpty() ) + { text += " " + Qtopia::escapeString(value); marker = true; } break; } } - if ( !(value = businessCountry()).isEmpty() ){ + if ( !( value = businessCountry() ).isEmpty() ) + { text += "<br>" + Qtopia::escapeString(value); marker = true; } // rest of Business data str = office(); - if ( !str.isEmpty() ){ + if ( !str.isEmpty() ) + { text += "<br><b>" + QObject::tr("Office: ") + "</b>" + Qtopia::escapeString(str); marker = true; } str = businessWebpage(); - if ( !str.isEmpty() ){ + if ( !str.isEmpty() ) + { text += "<br><b><img src=\"addressbook/webpagework\"> " + QObject::tr("Business Web Page: ") + "</b>" + Qtopia::escapeString(str); marker = true; } str = businessPhone(); - if ( !str.isEmpty() ){ + if ( !str.isEmpty() ) + { text += "<br><b><img src=\"addressbook/phonework\"> " + QObject::tr("Business Phone: ") + "</b>" + Qtopia::escapeString(str); marker = true; } str = businessFax(); - if ( !str.isEmpty() ){ + if ( !str.isEmpty() ) + { text += "<br><b><img src=\"addressbook/faxwork\"> " + QObject::tr("Business Fax: ") + "</b>" + Qtopia::escapeString(str); marker = true; } str = businessMobile(); - if ( !str.isEmpty() ){ + if ( !str.isEmpty() ) + { text += "<br><b><img src=\"addressbook/mobilework\"> " + QObject::tr("Business Mobile: ") + "</b>" + Qtopia::escapeString(str); marker = true; } str = businessPager(); - if ( !str.isEmpty() ){ + if ( !str.isEmpty() ) + { text += "<br><b>" + QObject::tr("Business Pager: ") + "</b>" + Qtopia::escapeString(str); marker = true; } // text += "<br>"; // home address if ( !homeStreet().isEmpty() || !homeCity().isEmpty() || - !homeZip().isEmpty() || !homeCountry().isEmpty() ) { + !homeZip().isEmpty() || !homeCountry().isEmpty() ) + { text += QObject::tr( "<br><b>Home Address:</b>" ); marker = true; } - if ( !(value = homeStreet()).isEmpty() ){ + if ( !( value = homeStreet() ).isEmpty() ) + { text += "<br>" + Qtopia::escapeString(value); marker = true; } - switch( addressformat ){ - case Zip_City_State:{ // Zip_Code City, State + switch ( addressformat ) + { + case Zip_City_State: + { // Zip_Code City, State state = homeState(); - if ( !(value = homeZip()).isEmpty() ){ + if ( !( value = homeZip() ).isEmpty() ) + { text += "<br>" + Qtopia::escapeString(value) + " "; marker = true; } - if ( !(value = homeCity()).isEmpty() ) { + if ( !( value = homeCity() ).isEmpty() ) + { marker = true; if ( homeZip().isEmpty() && !homeStreet().isEmpty() ) text += "<br>"; text += Qtopia::escapeString(value); if ( !state.isEmpty() ) text += ", " + Qtopia::escapeString(state); - } else if (!state.isEmpty()) { + } + else if ( !state.isEmpty() ) + { text += "<br>" + Qtopia::escapeString(state); marker = true; } break; } - case City_State_Zip:{ // City, State Zip_Code + case City_State_Zip: + { // City, State Zip_Code state = homeState(); - if ( !(value = homeCity()).isEmpty() ) { + if ( !( value = homeCity() ).isEmpty() ) + { marker = true; text += "<br>" + Qtopia::escapeString(value); if ( state ) text += ", " + Qtopia::escapeString(state); - } else if ( !state.isEmpty() ){ + } + else if ( !state.isEmpty() ) + { text += "<br>" + Qtopia::escapeString(state); marker = true; } - if ( !(value = homeZip()).isEmpty() ){ + if ( !( value = homeZip() ).isEmpty() ) + { text += " " + Qtopia::escapeString(value); marker = true; } break; } } - if ( !(value = homeCountry()).isEmpty() ){ + if ( !( value = homeCountry() ).isEmpty() ) + { text += "<br>" + Qtopia::escapeString(value); marker = true; } // rest of Home data str = homeWebpage(); - if ( !str.isEmpty() ){ + if ( !str.isEmpty() ) + { text += "<br><b><img src=\"addressbook/webpagehome\"> " + QObject::tr("Home Web Page: ") + "</b>" + Qtopia::escapeString(str); marker = true; } str = homePhone(); - if ( !str.isEmpty() ){ + if ( !str.isEmpty() ) + { text += "<br><b><img src=\"addressbook/phonehome\"> " + QObject::tr("Home Phone: ") + "</b>" + Qtopia::escapeString(str); marker = true; } str = homeFax(); - if ( !str.isEmpty() ){ + if ( !str.isEmpty() ) + { text += "<br><b><img src=\"addressbook/faxhome\"> " + QObject::tr("Home Fax: ") + "</b>" + Qtopia::escapeString(str); marker = true; } str = homeMobile(); - if ( !str.isEmpty() ){ + if ( !str.isEmpty() ) + { text += "<br><b><img src=\"addressbook/mobilehome\"> " + QObject::tr("Home Mobile: ") + "</b>" + Qtopia::escapeString(str); marker = true; } if ( marker ) @@ -694,30 +718,33 @@ QString OContact::toRichText() const + Qtopia::escapeString(str); str = manager(); if ( !str.isEmpty() ) text += "<br><b>" + QObject::tr("Manager: ") + "</b>" + Qtopia::escapeString(str); str = gender(); - if ( !str.isEmpty() && str.toInt() != 0 ) { + if ( !str.isEmpty() && str.toInt() != 0 ) + { text += "<br>"; if ( str.toInt() == 1 ) str = QObject::tr( "Male" ); else if ( str.toInt() == 2 ) str = QObject::tr( "Female" ); text += "<b>" + QObject::tr("Gender: ") + "</b>" + str; } str = spouse(); if ( !str.isEmpty() ) text += "<br><b>" + QObject::tr("Spouse: ") + "</b>" + Qtopia::escapeString(str); - if ( birthday().isValid() ){ + if ( birthday().isValid() ) + { str = TimeString::numberDateString( birthday() ); text += "<br><b>" + QObject::tr("Birthday: ") + "</b>" + Qtopia::escapeString(str); } - if ( anniversary().isValid() ){ + if ( anniversary().isValid() ) + { str = TimeString::numberDateString( anniversary() ); text += "<br><b>" + QObject::tr("Anniversary: ") + "</b>" + Qtopia::escapeString(str); } str = children(); if ( !str.isEmpty() ) @@ -727,19 +754,21 @@ QString OContact::toRichText() const str = nickname(); if ( !str.isEmpty() ) text += "<br><b>" + QObject::tr("Nickname: ") + "</b>" + Qtopia::escapeString(str); // categories - if ( categoryNames("Contacts").count() ){ + if ( categoryNames( "Contacts" ).count() ) + { text += "<br><b>" + QObject::tr( "Category:") + "</b> "; text += categoryNames("Contacts").join(", "); } // notes last - if ( !(value = notes()).isEmpty() ) { + if ( !( value = notes() ).isEmpty() ) + { text += "<br><hr><b>" + QObject::tr( "Notes:") + "</b> "; QRegExp reg("\n"); //QString tmp = Qtopia::escapeString(value); QString tmp = QStyleSheet::convertFromPlainText(value); //tmp.replace( reg, "<br>" ); @@ -834,28 +863,32 @@ QString OContact::fullName() const QString firstName = find( Qtopia::FirstName ); QString middleName = find( Qtopia::MiddleName ); QString lastName = find( Qtopia::LastName ); QString suffix = find( Qtopia::Suffix ); QString name = title; - if ( !firstName.isEmpty() ) { + if ( !firstName.isEmpty() ) + { if ( !name.isEmpty() ) name += " "; name += firstName; } - if ( !middleName.isEmpty() ) { + if ( !middleName.isEmpty() ) + { if ( !name.isEmpty() ) name += " "; name += middleName; } - if ( !lastName.isEmpty() ) { + if ( !lastName.isEmpty() ) + { if ( !name.isEmpty() ) name += " "; name += lastName; } - if ( !suffix.isEmpty() ) { + if ( !suffix.isEmpty() ) + { if ( !name.isEmpty() ) name += " "; name += suffix; } return name.simplifyWhiteSpace(); } @@ -897,13 +930,14 @@ QStringList OContact::childrenList() const */ QStringList OContact::emailList() const { QString emailStr = emails(); QStringList r; - if ( !emailStr.isEmpty() ) { + if ( !emailStr.isEmpty() ) + { qDebug(" emailstr "); QStringList l = QStringList::split( emailSeparator(), emailStr ); for ( QStringList::ConstIterator it = l.begin();it != l.end();++it ) r += (*it).simplifyWhiteSpace(); } @@ -943,16 +977,18 @@ void OContact::setFileAs() */ void OContact::save( QString &buf ) const { static const QStringList SLFIELDS = fields(); // I'm expecting "<Contact " in front of this... for ( QMap<int, QString>::ConstIterator it = mMap.begin(); - it != mMap.end(); ++it ) { + it != mMap.end(); ++it ) + { const QString &value = it.data(); int key = it.key(); - if ( !value.isEmpty() ) { + if ( !value.isEmpty() ) + { if ( key == Qtopia::AddressCategory || key == Qtopia::AddressUid) continue; key -= Qtopia::AddressCategory+1; buf += SLFIELDS[key]; buf += "=\"" + Qtopia::escapeString(value) + "\" "; @@ -1058,14 +1094,16 @@ void OContact::setChildren( const QString &str ) bool OContact::match( const QRegExp &r ) const { setLastHitField( -1 ); bool match; match = false; QMap<int, QString>::ConstIterator it; - for ( it = mMap.begin(); it != mMap.end(); ++it ) { - if ( (*it).find( r ) > -1 ) { + for ( it = mMap.begin(); it != mMap.end(); ++it ) + { + if ( ( *it ).find( r ) > -1 ) + { setLastHitField( it.key() ); match = true; break; } } return match; @@ -1073,19 +1111,20 @@ bool OContact::match( const QRegExp &r ) const QString OContact::toShortText() const { return ( fullName() ); } + + QString OContact::type() const { return QString::fromLatin1( "OContact" ); } - class QString OContact::recordField( int pos ) const { QStringList SLFIELDS = fields(); // ?? why this ? (se) return SLFIELDS[pos]; } @@ -1096,13 +1135,14 @@ class QString OContact::recordField( int pos ) const /*! \fn void OContact::setBirthday( const QDate& date ) Sets the birthday for the contact to \a date. If date is null the current stored date will be removed. */ void OContact::setBirthday( const QDate &v ) { - if ( v.isNull() ){ + if ( v.isNull() ) + { qWarning( "Remove Birthday"); replace( Qtopia::Birthday, QString::null ); return; } if ( v.isValid() ) @@ -1114,22 +1154,24 @@ void OContact::setBirthday( const QDate &v ) /*! \fn void OContact::setAnniversary( const QDate &date ) Sets the anniversary of the contact to \a date. If date is null, the current stored date will be removed. */ void OContact::setAnniversary( const QDate &v ) { - if ( v.isNull() ){ + if ( v.isNull() ) + { qWarning( "Remove Anniversary"); replace( Qtopia::Anniversary, QString::null ); return; } if ( v.isValid() ) replace( Qtopia::Anniversary, OConversion::dateToString( v ) ); } + /*! \fn QDate OContact::birthday() const Returns the birthday of the contact. */ QDate OContact::birthday() const { QString str = find( Qtopia::Birthday ); @@ -1160,13 +1202,14 @@ void OContact::insertEmail( const QString &v ) { //qDebug("insertEmail %s", v.latin1()); QString e = v.simplifyWhiteSpace(); QString def = defaultEmail(); // if no default, set it as the default email and don't insert - if ( def.isEmpty() ) { + if ( def.isEmpty() ) + { setDefaultEmail( e ); // will insert into the list for us return; } // otherwise, insert assuming doesn't already exist QString emailsStr = find( Qtopia::Emails ); @@ -1175,12 +1218,13 @@ void OContact::insertEmail( const QString &v ) if ( !emailsStr.isEmpty() ) emailsStr += emailSeparator(); emailsStr += e; replace( Qtopia::Emails, emailsStr ); } + void OContact::removeEmail( const QString &v ) { QString e = v.simplifyWhiteSpace(); QString def = defaultEmail(); QString emailsStr = find( Qtopia::Emails ); QStringList emails = emailList(); @@ -1194,45 +1238,56 @@ void OContact::removeEmail( const QString &v ) emails.remove( e ); // reset the string emailsStr = emails.join(emailSeparator()); // Sharp's brain dead separator replace( Qtopia::Emails, emailsStr ); // if default, then replace the default email with the first one - if ( def == e ) { + if ( def == e ) + { //qDebug("removeEmail is default; setting new default"); if ( !emails.count() ) clearEmails(); else // setDefaultEmail will remove e from the list setDefaultEmail( emails.first() ); } } + + void OContact::clearEmails() { mMap.remove( Qtopia::DefaultEmail ); mMap.remove( Qtopia::Emails ); } + + void OContact::setDefaultEmail( const QString &v ) { QString e = v.simplifyWhiteSpace(); //qDebug("OContact::setDefaultEmail %s", e.latin1()); replace( Qtopia::DefaultEmail, e ); if ( !e.isEmpty() ) insertEmail( e ); } + void OContact::insertEmails( const QStringList &v ) { for ( QStringList::ConstIterator it = v.begin(); it != v.end(); ++it ) insertEmail( *it ); } -int OContact::rtti() { + + +int OContact::rtti() +{ return OPimResolver::AddressBook; } + + void OContact::setUid( int i ) { OPimRecord::setUid(i); replace( Qtopia::AddressUid , QString::number(i)); } } |