diff options
Diffstat (limited to 'kword/mailmerge/kabc/KWMailMergeTDEABC.cpp')
-rw-r--r-- | kword/mailmerge/kabc/KWMailMergeTDEABC.cpp | 551 |
1 files changed, 551 insertions, 0 deletions
diff --git a/kword/mailmerge/kabc/KWMailMergeTDEABC.cpp b/kword/mailmerge/kabc/KWMailMergeTDEABC.cpp new file mode 100644 index 00000000..dce0f5da --- /dev/null +++ b/kword/mailmerge/kabc/KWMailMergeTDEABC.cpp @@ -0,0 +1,551 @@ +/* + This file is part of the KDE project + Copyright (C) 2003 Tobias Koenig <[email protected]> + Joseph Wenninger <[email protected]> + Ingo Kloecker <[email protected]> + Copyright (C) 2004 Tobias Koenig <[email protected]> + Joseph Wenninger <[email protected]> + Ingo Kloecker <[email protected]> + Dirk Schmidt <[email protected]> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#include <kdebug.h> +#include <tdeglobal.h> +#include <tdelocale.h> +#include <tdeabc/distributionlist.h> +#include <tdeabc/stdaddressbook.h> + +#include "KWMailMergeTDEABC.h" +#include "KWMailMergeTDEABCConfig.h" + +KWMailMergeTDEABC::KWMailMergeTDEABC( TDEInstance *inst, TQObject *parent ) + : KWMailMergeDataSource( inst, parent ) +{ + _addressBook = TDEABC::StdAddressBook::self(); + _iterator = _addressBook->begin(); + + + // init record list + // Using names from kaddressbook. + sampleRecord[ ("KAddressbook identifier") ] = TDEABC::Addressee::uidLabel(); + sampleRecord[ ("Name" ) ] = TDEABC::Addressee::nameLabel(); + sampleRecord[ ("Formatted name" ) ] = TDEABC::Addressee::formattedNameLabel(); + sampleRecord[ ("Family names" ) ] = TDEABC::Addressee::familyNameLabel(); + sampleRecord[ ("Given name" ) ] = TDEABC::Addressee::givenNameLabel(); + sampleRecord[ ("Additional names" ) ] = TDEABC::Addressee::additionalNameLabel(); + sampleRecord[ ("Honorific prefixes" ) ] = TDEABC::Addressee::prefixLabel(); + sampleRecord[ ("Honorific suffixes" ) ] = TDEABC::Addressee::suffixLabel(); + sampleRecord[ ("Nick name" ) ] = TDEABC::Addressee::nickNameLabel(); + sampleRecord[ ("Birthday" ) ] = TDEABC::Addressee::birthdayLabel(); + sampleRecord[ ("Home address: Street" ) ] = TDEABC::Addressee::homeAddressStreetLabel(); + sampleRecord[ ("Home address: Locality" ) ] = TDEABC::Addressee::homeAddressLocalityLabel(); + sampleRecord[ ("Home address: Region" ) ] = TDEABC::Addressee::homeAddressRegionLabel(); + sampleRecord[ ("Home address: Postal code" ) ] = TDEABC::Addressee::homeAddressPostalCodeLabel(); + sampleRecord[ ("Home address: Country" ) ] = TDEABC::Addressee::homeAddressCountryLabel(); + sampleRecord[ ("Home address: Label" ) ] = TDEABC::Addressee::homeAddressLabelLabel(); + sampleRecord[ ("Business address: Street" ) ] = TDEABC::Addressee::businessAddressStreetLabel(); + sampleRecord[ ("Business address: Locality" ) ] = TDEABC::Addressee::businessAddressLocalityLabel(); + sampleRecord[ ("Business address: Region" ) ] = TDEABC::Addressee::businessAddressRegionLabel(); + sampleRecord[ ("Business address: Postal code" ) ] = TDEABC::Addressee::businessAddressPostalCodeLabel(); + sampleRecord[ ("Business address: Country" ) ] = TDEABC::Addressee::businessAddressCountryLabel(); + sampleRecord[ ("Business address: Label" ) ] = TDEABC::Addressee::businessAddressLabelLabel(); + sampleRecord[ ("Home phone" ) ] = TDEABC::Addressee::homePhoneLabel(); + sampleRecord[ ("Business phone" ) ] = TDEABC::Addressee::businessPhoneLabel(); + sampleRecord[ ("Mobile phone" ) ] = TDEABC::Addressee::mobilePhoneLabel(); + sampleRecord[ ("Home fax" ) ] = TDEABC::Addressee::homeFaxLabel(); + sampleRecord[ ("Business fax" ) ] = TDEABC::Addressee::businessFaxLabel(); + sampleRecord[ ("Car phone" ) ] = TDEABC::Addressee::carPhoneLabel(); + sampleRecord[ ("ISDN" ) ] = TDEABC::Addressee::isdnLabel(); + sampleRecord[ ("Pager" ) ] = TDEABC::Addressee::pagerLabel(); + sampleRecord[ ("Email" ) ] = TDEABC::Addressee::emailLabel(); + sampleRecord[ ("Mailer" ) ] = TDEABC::Addressee::mailerLabel(); + sampleRecord[ ("Time zone" ) ] = TDEABC::Addressee::timeZoneLabel(); + sampleRecord[ ("Geographic position" ) ] = TDEABC::Addressee::geoLabel(); + sampleRecord[ ("Title" ) ] = TDEABC::Addressee::titleLabel(); + sampleRecord[ ("Role" ) ] = TDEABC::Addressee::roleLabel(); + sampleRecord[ ("Organization" ) ] = TDEABC::Addressee::organizationLabel(); + sampleRecord[ ("Note" ) ] = TDEABC::Addressee::noteLabel(); + sampleRecord[ ("productId" ) ] = TDEABC::Addressee::productIdLabel(); + sampleRecord[ ("Revision" ) ] = TDEABC::Addressee::revisionLabel(); + sampleRecord[ ("sortString" ) ] = TDEABC::Addressee::sortStringLabel(); + sampleRecord[ ("URL" ) ] = TDEABC::Addressee::urlLabel(); + sampleRecord[ ("Secrecy" ) ] = TDEABC::Addressee::secrecyLabel(); + sampleRecord[ ("Preferred address: Street" ) ] = TQString( "preferedAddressStreet" ); + sampleRecord[ ("Preferred address: Locality" ) ] = TQString( "preferedAddressLocality" ); + sampleRecord[ ("Preferred address: Region" ) ] = TQString( "preferedAddressRegion" ); + sampleRecord[ ("Preferred address: Postal code" ) ] = TQString( "preferedAddressPostalCode" ); + sampleRecord[ ("Preferred address: Country" ) ] = TQString( "preferedAddressCountry" ); + sampleRecord[ ("Preferred address: Label" ) ] = TQString( "preferedAddressLabel" ); +} + + +KWMailMergeTDEABC::~KWMailMergeTDEABC() +{ + ; +} + + +void KWMailMergeTDEABC::addEntry( const TQString &uid ) +{ + _individualUIDs.append( uid ); + makeUIDsExclusive(); +} + + +void KWMailMergeTDEABC::addList( const TQString &id ) +{ + _lists.append( id ); + parseList( id ); + makeUIDsExclusive(); +} + + +void KWMailMergeTDEABC::clear() +{ + _exclusiveUIDs.clear(); + _individualUIDs.clear(); + _listUIDs.clear(); + _lists.clear(); +} + + +int KWMailMergeTDEABC::getNumRecords() const +{ + kdDebug() << "KWMailMergeTDEABC::getNumRecords(): " << _exclusiveUIDs.count() << endl; + return _exclusiveUIDs.count(); +} + + +TQString KWMailMergeTDEABC::getValue( const TQString &name, int record ) const +{ + kdDebug() << "KWMailMergeTDEABC::getValue(" << name << ", " << record << ")" << endl; + if ( record < 0 ) + return name; + + // This doesn't ever happen, right? So why is it there? Dirk Schmidt + if ( record == -1 && _iterator == _addressBook->end() ) + return ""; + + // + // Set the iterator to the asked Addressee. + // + bool uidAvailable = false; + if ( record != -1 ) + { + int counter = 0; + + for ( _UIDIterator = _exclusiveUIDs.begin(); _UIDIterator != _exclusiveUIDs.end() + && counter < record; _UIDIterator++ ) + { + counter++; + } + + for ( _iterator = _addressBook->begin(); _iterator != _addressBook->end(); ++_iterator ) + { + + if( _iterator->uid() == *_UIDIterator ) + { + uidAvailable = true; + break; + } + } + } + + if( !uidAvailable ) + { + return ( i18n ( "KAddressbook entry '%1' not available." ).arg( *_UIDIterator ) ); + } + + + TDEABC::Addressee addr = *_iterator; + _iterator++; // Don't know why. Could be removed? Dirk Schmidt + + + // + // Return the asked variable. + // + if ( name == "KAddressbook identifier" ) + return addr.uid(); + if ( name == "Name" ) + return addr.name(); + if ( name == "Formatted name" ) + return addr.formattedName(); + if ( name == "Family names" ) + return addr.familyName(); + if ( name == "Given name" ) + return addr.givenName(); + if ( name == "Additional names" ) + return addr.additionalName(); + if ( name == "Honorific prefixes" ) + return addr.prefix(); + if ( name == "Honorific suffixes" ) + return addr.suffix(); + if ( name == "Nick name" ) + return addr.nickName(); + if ( name == "Birthday" ) + return TDEGlobal::locale()->formatDate( addr.birthday().date() ); + + if ( name == "Home address: Street" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Home ); + return a.street(); + } + if ( name == "Home address: Locality" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Home ); + return a.locality(); + } + if ( name == "Home address: Region" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Home ); + return a.region(); + } + if ( name == "Home address: Postal code" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Home ); + return a.postalCode(); + } + if ( name == "Home address: Country" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Home ); + return a.country(); + } + if ( name == "Home address: Label" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Home ); + return a.label(); + } + + if ( name == "Business address: Street" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Work ); + return a.street(); + } + if ( name == "Business address: Locality" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Work ); + return a.locality(); + } + if ( name == "Business address: Region" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Work ); + return a.region(); + } + if ( name == "Business address: Postal code" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Work ); + return a.postalCode(); + } + if ( name == "Business address: Country" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Work ); + return a.country(); + } + if ( name == "Business address: Label" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Work ); + return a.label(); + } + + if ( name == "Prefered address: Street" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Pref ); + return a.street(); + } + + if ( name == "Prefered address: Locality" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Pref ); + return a.locality(); + } + if ( name == "Prefered address: Region" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Pref ); + return a.region(); + } + if ( name == "Prefered address: Postal code" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Pref ); + return a.postalCode(); + } + if ( name == "Prefered address: Country" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Pref ); + return a.country(); + } + if ( name == "Prefered address: Label" ) + { + TDEABC::Address a = addr.address( TDEABC::Address::Pref ); + return a.label(); + } + + if ( name == "Home phone" ) + { + TDEABC::PhoneNumber phone = addr.phoneNumber( TDEABC::PhoneNumber::Home ); + return phone.number(); + } + if ( name == "Business phone" ) + { + TDEABC::PhoneNumber phone = addr.phoneNumber( TDEABC::PhoneNumber::Work ); + return phone.number(); + } + if ( name == "Mobile phone" ) + { + TDEABC::PhoneNumber phone = addr.phoneNumber( TDEABC::PhoneNumber::Cell ); + return phone.number(); + } + if ( name == "Home fax" ) + { + TDEABC::PhoneNumber phone = addr.phoneNumber( TDEABC::PhoneNumber::Home | TDEABC::PhoneNumber::Fax ); + return phone.number(); + } + if ( name == "Business fax" ) + { + TDEABC::PhoneNumber phone = addr.phoneNumber( TDEABC::PhoneNumber::Work | TDEABC::PhoneNumber::Fax ); + return phone.number(); + } + if ( name == "Car phone" ) + { + TDEABC::PhoneNumber phone = addr.phoneNumber( TDEABC::PhoneNumber::Car ); + return phone.number(); + } + if ( name == "ISDN" ) + { + TDEABC::PhoneNumber phone = addr.phoneNumber( TDEABC::PhoneNumber::Isdn ); + return phone.number(); + } + if ( name == "Pager" ) + { + TDEABC::PhoneNumber phone = addr.phoneNumber( TDEABC::PhoneNumber::Pager ); + return phone.number(); + } + + if ( name == "Email" ) + return addr.preferredEmail(); + if ( name == "Mailer" ) + return addr.mailer(); + if ( name == "Time zone" ) + { + TDEABC::TimeZone zone = addr.timeZone(); + return TQString::number( zone.offset() ); + } + if ( name == "Geographic position" ) + { + TDEABC::Geo geo = addr.geo(); + TQString lat; + TQString longi; + if( geo.latitude()<0 ) + lat = TQString( i18n("%1 South") ).arg( -geo.latitude() ); + else + lat = TQString( i18n("%1 North") ).arg( geo.latitude() ); + + if( geo.longitude()<0 ) + // There is something going wrong, because "W" is replaced by "q ". + // Needs fix. + longi = TQString( i18n("%1 West") ).arg( -geo.longitude() ); + else + longi = TQString( i18n("%1 East") ).arg( geo.longitude() ); + + return i18n( "Geographic coordinates", "%1, %2" ).arg ( lat, longi ); + } + + if ( name == "Title" ) + return addr.title(); + if ( name == "Role" ) + return addr.role(); + if ( name == "Organization" ) + return addr.organization(); + if ( name == "Note" ) + return addr.note(); + if ( name == "productId" ) + return addr.productId(); + if ( name == "Revision" ) + return TDEGlobal::locale()->formatDate( addr.revision().date() ); + if ( name == "sortString" ) + return addr.sortString(); + if ( name == "URL" ) + return addr.url().url(); + if ( name == "Secrecy" ) + { + TDEABC::Secrecy secrecy = addr.secrecy(); + return TDEABC::Secrecy::typeLabel( secrecy.type() ); + } + + return ( i18n("Unkown mail merge variable: %1").arg ( name ) ) ; +} + + +TQStringList KWMailMergeTDEABC::lists() const +{ + return _lists; +} + + +void KWMailMergeTDEABC::load( TQDomElement& parentElem ) +{ + clear(); + TQDomNode contentNode=parentElem.namedItem("CONTENT"); + if( contentNode.isNull() ) + return; + for( TQDomNode rec=contentNode.firstChild(); !rec.isNull(); rec=rec.nextSibling() ) + { + if( rec.nodeName()== "RECORD" ) + { + for( TQDomElement recEnt=rec.firstChild().toElement(); !recEnt.isNull(); + recEnt=recEnt.nextSibling().toElement() ) + { + addEntry( recEnt.attribute( TQString::fromLatin1("uid") ) ); + } + } + else if( rec.nodeName() == "LIST" ) + { + for( TQDomElement recEnt=rec.firstChild().toElement(); !recEnt.isNull(); + recEnt=recEnt.nextSibling().toElement() ) + { + addList( recEnt.attribute( TQString::fromLatin1("listid") ) ); + } + } + else + kdDebug() << "rec.nodeName(): " << rec.nodeName() << endl; + } +} + + +void KWMailMergeTDEABC::makeUIDsExclusive() +{ + _exclusiveUIDs = _individualUIDs + _listUIDs; + _exclusiveUIDs.sort(); + kdDebug() << "KWMailMergeTDEABC::makeUIDsExclusive(): before: " << _exclusiveUIDs.join(",") + << endl; + TQString uid; + for( TQStringList::Iterator it=_exclusiveUIDs.begin(); + it!=_exclusiveUIDs.end(); ++it ) + { + if( *it == uid ) + { + it = _exclusiveUIDs.remove( it ); + } + uid = *it; + } + kdDebug() << "KWMailMergeTDEABC::makeUIDsExclusive(): after: " << _exclusiveUIDs.join(",") + << endl; +} + + +void KWMailMergeTDEABC::parseList( const TQString& listName ) +{ + if( listName.isEmpty() ) + return; + + kdDebug() << "KWMailMergeTDEABC::parseList: " << listName << endl; + TDEABC::DistributionListManager dlm ( _addressBook ); + dlm.load(); + + TQStringList::Iterator listIt; + + TDEABC::DistributionList* list = dlm.list( listName ); + TDEABC::DistributionList::Entry::List entries = list->entries(); + + TDEABC::DistributionList::Entry::List::Iterator itemIt; + for ( itemIt = entries.begin(); itemIt != entries.end(); ++itemIt ) + { + kdDebug() << "WMailMergeTDEABC::parseList: Listentry UID: " << + (*itemIt).addressee.uid() << endl; + _listUIDs.append( (*itemIt).addressee.uid() ); + } +} + + +void KWMailMergeTDEABC::refresh( bool ) +{ + kdDebug() << "KWMailMergeTDEABC::refresh()" << endl; + _iterator = _addressBook->begin(); + _UIDIterator = _individualUIDs.begin(); + +} + + +void KWMailMergeTDEABC::save( TQDomDocument& doc, TQDomElement& parent) +{ + TQDomElement cont=doc.createElement(TQString::fromLatin1("CONTENT")); + parent.appendChild(cont); + + TQValueList<TQString>::ConstIterator it = _individualUIDs.begin(); + for( ; it != _individualUIDs.end(); ++it ) + { + TQDomElement rec=doc.createElement(TQString::fromLatin1("RECORD")); + cont.appendChild(rec); + TQDomElement recEnt=doc.createElement(TQString::fromLatin1("ITEM")); + recEnt.setAttribute(TQString::fromLatin1("uid"),*it); + rec.appendChild(recEnt); + } + + it = _lists.begin(); + for( ; !(it == _lists.end()); ++it ) + { + TQDomElement rec=doc.createElement(TQString::fromLatin1("LIST")); + cont.appendChild(rec); + TQDomElement recEnt=doc.createElement(TQString::fromLatin1("ITEM")); + recEnt.setAttribute(TQString::fromLatin1("listid"),*it); + rec.appendChild(recEnt); + } +} + +bool KWMailMergeTDEABC::showConfigDialog( TQWidget* par, int action ) +{ + bool ret=false; + if (action == KWSLCreate ) + { + clear(); + } + + //if (action==KWSLOpen) + { + KWMailMergeTDEABCConfig *dia=new KWMailMergeTDEABCConfig( par, this ); + + ret=( dia->exec() == TQDialog::Accepted ); + kdDebug() << "KWMailMergeTDEABCConfig::Accepted " << ret << endl; + delete dia; + } + refresh(false); + + return ret; +} + + +TQStringList KWMailMergeTDEABC::singleRecords() const +{ + return _individualUIDs; +} + + + +extern "C" +{ + KWORD_MAILMERGE_EXPORT KWMailMergeDataSource *create_kwmailmerge_kabc( TDEInstance *inst, TQObject *parent ) + { + return new KWMailMergeTDEABC( inst, parent ); + } +} + + + + +#include "KWMailMergeTDEABC.moc" + + |