Git commit c75473ef870e054b48a38051769095146334bc2a by Tobias Koenig.
Committed on 03/03/2013 at 19:03.
Pushed by tokoe into branch 'master'.
Do no auto-generate the code of the Addressee class
We haven't changed the Addressee class for a long time,
so the overhead of using a script to generate it isn't
justified anymore.
M +3 -20 kabc/CMakeLists.txt
M +0 -1 kabc/Mainpage.dox
M +0 -2 kabc/Messages.sh
A +2032 -0 kabc/addressee.cpp [License: GENERATED FILE] *
A +992 -0 kabc/addressee.h [License: LGPL (v2+)]
A +632 -0 kabc/field.cpp [License: LGPL (v2+)]
D +0 -1136 kabc/scripts/addressee.src.cpp
D +0 -500 kabc/scripts/addressee.src.h
D +0 -32 kabc/scripts/createisomap.pl
D +0 -5 kabc/scripts/doxygen-preprocess-addressee.sh
D +0 -83 kabc/scripts/entrylist
D +0 -395 kabc/scripts/field.src.cpp
D +0 -224 kabc/scripts/makeaddressee
The files marked with a * at the end have a non valid license. Please read:=
http://techbase.kde.org/Policies/Licensing_Policy and use the headers whic=
h are listed at that page.
http://commits.kde.org/kdepimlibs/c75473ef870e054b48a38051769095146334bc2a
diff --git a/kabc/CMakeLists.txt b/kabc/CMakeLists.txt
index 5b82caa..b3907c6 100644
--- a/kabc/CMakeLists.txt
+++ b/kabc/CMakeLists.txt
@@ -30,33 +30,16 @@ if(NOT KDEPIM_NO_KRESOURCES)
add_subdirectory(plugins)
endif()
add_subdirectory(tests)
-file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts)
-
-add_custom_command(
- OUTPUT
- ${CMAKE_CURRENT_BINARY_DIR}/field.cpp
- ${CMAKE_CURRENT_BINARY_DIR}/addressee.h
- ${CMAKE_CURRENT_BINARY_DIR}/addressee.cpp
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/scripts
- COMMAND ${PERL_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/makeaddre=
ssee
- DEPENDS
- scripts/makeaddressee
- scripts/addressee.src.cpp
- scripts/addressee.src.h
- scripts/entrylist
- scripts/field.src.cpp
-)
=
########### next target ###############
=
set(kabc_LIB_SRCS
address.cpp
- ${CMAKE_CURRENT_BINARY_DIR}/addressee.cpp
- ${CMAKE_CURRENT_BINARY_DIR}/addressee.h
- ${CMAKE_CURRENT_BINARY_DIR}/field.cpp
+ addressee.cpp
contactgroup.cpp
contactgrouptool.cpp
errorhandler.cpp
+ field.cpp
geo.cpp
key.cpp
ldapdn.cpp
@@ -125,7 +108,7 @@ install(FILES countrytransl.map DESTINATION ${DATA_INST=
ALL_DIR}/kabc)
install(FILES
kabc_export.h
address.h
- ${CMAKE_CURRENT_BINARY_DIR}/addressee.h
+ addressee.h
addresseedialog.h
addresseelist.h
contactgroup.h
diff --git a/kabc/Mainpage.dox b/kabc/Mainpage.dox
index 6ee8d00..587f24e 100644
--- a/kabc/Mainpage.dox
+++ b/kabc/Mainpage.dox
@@ -31,5 +31,4 @@ KPilot etc. It is meant as replacement for libkab (in kde=
base/kab).
LICENCE: LGPL
*/
// DOXYGEN_REFERENCES =3D kdecore kdeui kresources
-// DOXYGEN_EXCLUDE =3D scripts
// DOXYGEN_TOOLTIP =3D "An API for the KDE Addressbook."
diff --git a/kabc/Messages.sh b/kabc/Messages.sh
index b09261a..6e8db52 100644
--- a/kabc/Messages.sh
+++ b/kabc/Messages.sh
@@ -1,4 +1,2 @@
#! /usr/bin/env bash
-cd scripts && perl ./makeaddressee && cd ..
$XGETTEXT *.cpp -o $podir/kabc.pot
-rm -f addressee.cpp addressee.h field.cpp
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
new file mode 100644
index 0000000..8b79325
--- /dev/null
+++ b/kabc/addressee.cpp
@@ -0,0 +1,2032 @@
+/*** Warning! This file has been generated by the script makeaddressee ***/
+/*
+ This file is part of libkabc.
+ Copyright (c) 2001 Cornelius Schumacher
+ Copyright (c) 2003 Carsten Pfeiffer
+ Copyright (c) 2005 Ingo Kloecker
+
+ 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 Lice=
nse
+ 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
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+#include "addresseehelper.h"
+#include "field.h"
+#ifndef KDEPIM_NO_KRESOURCES
+#include "resource.h"
+#endif
+#include "sortmode.h"
+
+#include "addressee.h"
+
+using namespace KABC;
+
+static bool matchBinaryPattern( int value, int pattern );
+
+template
+static bool listEquals( const QList&, const QList& );
+static bool listEquals( const QStringList&, const QStringList& );
+static bool emailsEquals( const QStringList&, const QStringList& );
+
+class Addressee::Private : public QSharedData
+{
+ public:
+ Private()
+ : mUid( KRandom::randomString( 10 ) ),
+#ifndef KDEPIM_NO_KRESOURCES
+ mResource( 0 ),
+#endif
+ mEmpty( true ), mChanged( false )
+ {
+ }
+
+ Private( const Private &other )
+ : QSharedData( other )
+#ifndef KDEPIM_NO_KRESOURCES
+ ,mResource( 0 )
+#endif
+ {
+ mUid =3D other.mUid;
+ mName =3D other.mName;
+ mFormattedName =3D other.mFormattedName;
+ mFamilyName =3D other.mFamilyName;
+ mGivenName =3D other.mGivenName;
+ mAdditionalName =3D other.mAdditionalName;
+ mPrefix =3D other.mPrefix;
+ mSuffix =3D other.mSuffix;
+ mNickName =3D other.mNickName;
+ mBirthday =3D other.mBirthday;
+ mMailer =3D other.mMailer;
+ mTimeZone =3D other.mTimeZone;
+ mGeo =3D other.mGeo;
+ mTitle =3D other.mTitle;
+ mRole =3D other.mRole;
+ mOrganization =3D other.mOrganization;
+ mDepartment =3D other.mDepartment;
+ mNote =3D other.mNote;
+ mProductId =3D other.mProductId;
+ mRevision =3D other.mRevision;
+ mSortString =3D other.mSortString;
+ mUrl =3D other.mUrl;
+ mSecrecy =3D other.mSecrecy;
+ mLogo =3D other.mLogo;
+ mPhoto =3D other.mPhoto;
+ mSound =3D other.mSound;
+
+ mPhoneNumbers =3D other.mPhoneNumbers;
+ mAddresses =3D other.mAddresses;
+ mKeys =3D other.mKeys;
+ mEmails =3D other.mEmails;
+ mCategories =3D other.mCategories;
+ mCustom =3D other.mCustom;
+
+#ifndef KDEPIM_NO_KRESOURCES
+ mResource =3D other.mResource;
+#endif
+ mEmpty =3D other.mEmpty;
+ mChanged =3D other.mChanged;
+ }
+
+ ~Private()
+ {
+ }
+
+ QString mUid;
+ QString mName;
+ QString mFormattedName;
+ QString mFamilyName;
+ QString mGivenName;
+ QString mAdditionalName;
+ QString mPrefix;
+ QString mSuffix;
+ QString mNickName;
+ QDateTime mBirthday;
+ QString mMailer;
+ TimeZone mTimeZone;
+ Geo mGeo;
+ QString mTitle;
+ QString mRole;
+ QString mOrganization;
+ QString mDepartment;
+ QString mNote;
+ QString mProductId;
+ QDateTime mRevision;
+ QString mSortString;
+ KUrl mUrl;
+ Secrecy mSecrecy;
+ Picture mLogo;
+ Picture mPhoto;
+ Sound mSound;
+
+ PhoneNumber::List mPhoneNumbers;
+ Address::List mAddresses;
+ Key::List mKeys;
+ QStringList mEmails;
+ QStringList mCategories;
+ QStringList mCustom;
+
+#ifndef KDEPIM_NO_KRESOURCES
+ Resource *mResource;
+#endif
+
+ bool mEmpty :1;
+ bool mChanged :1;
+
+ static KABC::SortMode *mSortMode;
+};
+
+KABC::SortMode *Addressee::Private::mSortMode =3D 0;
+
+Addressee::Addressee()
+ : d( new Private )
+{
+}
+
+Addressee::~Addressee()
+{
+}
+
+Addressee::Addressee( const Addressee &other )
+ : d( other.d )
+{
+}
+
+Addressee& Addressee::operator=3D( const Addressee &other )
+{
+ if ( this !=3D &other )
+ d =3D other.d;
+
+ return *this;
+}
+
+bool Addressee::operator=3D=3D( const Addressee &addressee ) const
+{
+ if ( d->mUid !=3D addressee.d->mUid ) {
+ kDebug() << "uid differs";
+ return false;
+ }
+
+ if ( d->mName !=3D addressee.d->mName &&
+ !( d->mName.isEmpty() && addressee.d->mName.isEmpty() ) ) {
+ kDebug(5700) << "name differs";
+ return false;
+ }
+
+ if ( d->mFormattedName !=3D addressee.d->mFormattedName &&
+ !( d->mFormattedName.isEmpty() && addressee.d->mFormattedName.isEmpty=
() ) ) {
+ kDebug(5700) << "formattedName differs";
+ return false;
+ }
+
+ if ( d->mFamilyName !=3D addressee.d->mFamilyName &&
+ !( d->mFamilyName.isEmpty() && addressee.d->mFamilyName.isEmpty() ) )=
{
+ kDebug(5700) << "familyName differs";
+ return false;
+ }
+
+ if ( d->mGivenName !=3D addressee.d->mGivenName &&
+ !( d->mGivenName.isEmpty() && addressee.d->mGivenName.isEmpty() ) ) {
+ kDebug(5700) << "givenName differs";
+ return false;
+ }
+
+ if ( d->mAdditionalName !=3D addressee.d->mAdditionalName &&
+ !( d->mAdditionalName.isEmpty() && addressee.d->mAdditionalName.isEmp=
ty() ) ) {
+ kDebug(5700) << "additionalName differs";
+ return false;
+ }
+
+ if ( d->mPrefix !=3D addressee.d->mPrefix &&
+ !( d->mPrefix.isEmpty() && addressee.d->mPrefix.isEmpty() ) ) {
+ kDebug(5700) << "prefix differs";
+ return false;
+ }
+
+ if ( d->mSuffix !=3D addressee.d->mSuffix &&
+ !( d->mSuffix.isEmpty() && addressee.d->mSuffix.isEmpty() ) ) {
+ kDebug(5700) << "suffix differs";
+ return false;
+ }
+
+ if ( d->mNickName !=3D addressee.d->mNickName &&
+ !( d->mNickName.isEmpty() && addressee.d->mNickName.isEmpty() ) ) {
+ kDebug(5700) << "nickName differs";
+ return false;
+ }
+
+ if ( d->mBirthday !=3D addressee.d->mBirthday ) {
+ kDebug(5700) << "birthday differs";
+ return false;
+ }
+
+ if ( d->mMailer !=3D addressee.d->mMailer &&
+ !( d->mMailer.isEmpty() && addressee.d->mMailer.isEmpty() ) ) {
+ kDebug(5700) << "mailer differs";
+ return false;
+ }
+
+ if ( d->mTimeZone !=3D addressee.d->mTimeZone ) {
+ kDebug(5700) << "timeZone differs";
+ return false;
+ }
+
+ if ( d->mGeo !=3D addressee.d->mGeo ) {
+ kDebug(5700) << "geo differs";
+ return false;
+ }
+
+ if ( d->mTitle !=3D addressee.d->mTitle &&
+ !( d->mTitle.isEmpty() && addressee.d->mTitle.isEmpty() ) ) {
+ kDebug(5700) << "title differs";
+ return false;
+ }
+
+ if ( d->mRole !=3D addressee.d->mRole &&
+ !( d->mRole.isEmpty() && addressee.d->mRole.isEmpty() ) ) {
+ kDebug(5700) << "role differs";
+ return false;
+ }
+
+ if ( d->mOrganization !=3D addressee.d->mOrganization &&
+ !( d->mOrganization.isEmpty() && addressee.d->mOrganization.isEmpty()=
) ) {
+ kDebug(5700) << "organization differs";
+ return false;
+ }
+
+ if ( d->mDepartment !=3D addressee.d->mDepartment &&
+ !( d->mDepartment.isEmpty() && addressee.d->mDepartment.isEmpty() ) )=
{
+ kDebug(5700) << "department differs";
+ return false;
+ }
+
+ if ( d->mNote !=3D addressee.d->mNote &&
+ !( d->mNote.isEmpty() && addressee.d->mNote.isEmpty() ) ) {
+ kDebug(5700) << "note differs";
+ return false;
+ }
+
+ if ( d->mProductId !=3D addressee.d->mProductId &&
+ !( d->mProductId.isEmpty() && addressee.d->mProductId.isEmpty() ) ) {
+ kDebug(5700) << "productId differs";
+ return false;
+ }
+
+ if ( d->mSortString !=3D addressee.d->mSortString &&
+ !( d->mSortString.isEmpty() && addressee.d->mSortString.isEmpty() ) )=
{
+ kDebug(5700) << "sortString differs";
+ return false;
+ }
+
+ if ( d->mSecrecy !=3D addressee.d->mSecrecy ) {
+ kDebug(5700) << "secrecy differs";
+ return false;
+ }
+
+ if ( d->mLogo !=3D addressee.d->mLogo ) {
+ kDebug(5700) << "logo differs";
+ return false;
+ }
+
+ if ( d->mPhoto !=3D addressee.d->mPhoto ) {
+ kDebug(5700) << "photo differs";
+ return false;
+ }
+
+ if ( d->mSound !=3D addressee.d->mSound ) {
+ kDebug(5700) << "sound differs";
+ return false;
+ }
+
+ if ( ( d->mUrl.isValid() || addressee.d->mUrl.isValid() ) &&
+ ( d->mUrl !=3D addressee.d->mUrl ) ) {
+ kDebug() << "url differs";
+ return false;
+ }
+
+ if ( !listEquals( d->mPhoneNumbers, addressee.d->mPhoneNumbers ) ) {
+ kDebug() << "phoneNumbers differs";
+ return false;
+ }
+
+ if ( !listEquals( d->mAddresses, addressee.d->mAddresses ) ) {
+ kDebug() << "addresses differs";
+ return false;
+ }
+
+ if ( !listEquals( d->mKeys, addressee.d->mKeys ) ) {
+ kDebug() << "keys differs";
+ return false;
+ }
+
+ if ( !emailsEquals( d->mEmails, addressee.d->mEmails ) ) {
+ kDebug() << "emails differs";
+ return false;
+ }
+
+ if ( !listEquals( d->mCategories, addressee.d->mCategories ) ) {
+ kDebug() << "categories differs";
+ return false;
+ }
+
+ if ( !listEquals( d->mCustom, addressee.d->mCustom ) ) {
+ kDebug() << "custom differs";
+ return false;
+ }
+
+ return true;
+}
+
+bool Addressee::operator!=3D( const Addressee &a ) const
+{
+ return !( a =3D=3D *this );
+}
+
+bool Addressee::isEmpty() const
+{
+ return d->mEmpty;
+}
+
+void Addressee::setUid( const QString &id )
+{
+ if ( id =3D=3D d->mUid )
+ return;
+
+ d->mEmpty =3D false;
+ d->mUid =3D id;
+}
+
+QString Addressee::uid() const
+{
+ return d->mUid;
+}
+
+QString Addressee::uidLabel()
+{
+ return i18n( "Unique Identifier" );
+}
+
+void Addressee::setName( const QString &name )
+{
+ if ( name =3D=3D d->mName )
+ return;
+
+ d->mEmpty =3D false;
+ d->mName =3D name;
+}
+
+QString Addressee::name() const
+{
+ return d->mName;
+}
+
+QString Addressee::nameLabel()
+{
+ return i18n( "Name" );
+}
+
+
+void Addressee::setFormattedName( const QString &formattedName )
+{
+ if ( formattedName =3D=3D d->mFormattedName )
+ return;
+
+ d->mEmpty =3D false;
+ d->mFormattedName =3D formattedName;
+}
+
+QString Addressee::formattedName() const
+{
+ return d->mFormattedName;
+}
+
+QString Addressee::formattedNameLabel()
+{
+ return i18n( "Formatted Name" );
+}
+
+
+void Addressee::setFamilyName( const QString &familyName )
+{
+ if ( familyName =3D=3D d->mFamilyName )
+ return;
+
+ d->mEmpty =3D false;
+ d->mFamilyName =3D familyName;
+}
+
+QString Addressee::familyName() const
+{
+ return d->mFamilyName;
+}
+
+QString Addressee::familyNameLabel()
+{
+ return i18n( "Family Name" );
+}
+
+
+void Addressee::setGivenName( const QString &givenName )
+{
+ if ( givenName =3D=3D d->mGivenName )
+ return;
+
+ d->mEmpty =3D false;
+ d->mGivenName =3D givenName;
+}
+
+QString Addressee::givenName() const
+{
+ return d->mGivenName;
+}
+
+QString Addressee::givenNameLabel()
+{
+ return i18n( "Given Name" );
+}
+
+
+void Addressee::setAdditionalName( const QString &additionalName )
+{
+ if ( additionalName =3D=3D d->mAdditionalName )
+ return;
+
+ d->mEmpty =3D false;
+ d->mAdditionalName =3D additionalName;
+}
+
+QString Addressee::additionalName() const
+{
+ return d->mAdditionalName;
+}
+
+QString Addressee::additionalNameLabel()
+{
+ return i18n( "Additional Names" );
+}
+
+
+void Addressee::setPrefix( const QString &prefix )
+{
+ if ( prefix =3D=3D d->mPrefix )
+ return;
+
+ d->mEmpty =3D false;
+ d->mPrefix =3D prefix;
+}
+
+QString Addressee::prefix() const
+{
+ return d->mPrefix;
+}
+
+QString Addressee::prefixLabel()
+{
+ return i18n( "Honorific Prefixes" );
+}
+
+
+void Addressee::setSuffix( const QString &suffix )
+{
+ if ( suffix =3D=3D d->mSuffix )
+ return;
+
+ d->mEmpty =3D false;
+ d->mSuffix =3D suffix;
+}
+
+QString Addressee::suffix() const
+{
+ return d->mSuffix;
+}
+
+QString Addressee::suffixLabel()
+{
+ return i18n( "Honorific Suffixes" );
+}
+
+
+void Addressee::setNickName( const QString &nickName )
+{
+ if ( nickName =3D=3D d->mNickName )
+ return;
+
+ d->mEmpty =3D false;
+ d->mNickName =3D nickName;
+}
+
+QString Addressee::nickName() const
+{
+ return d->mNickName;
+}
+
+QString Addressee::nickNameLabel()
+{
+ return i18n( "Nick Name" );
+}
+
+
+void Addressee::setBirthday( const QDateTime &birthday )
+{
+ if ( birthday =3D=3D d->mBirthday )
+ return;
+
+ d->mEmpty =3D false;
+ d->mBirthday =3D birthday;
+}
+
+QDateTime Addressee::birthday() const
+{
+ return d->mBirthday;
+}
+
+QString Addressee::birthdayLabel()
+{
+ return i18n( "Birthday" );
+}
+
+
+QString Addressee::homeAddressStreetLabel()
+{
+ return i18n( "Home Address Street" );
+}
+
+
+QString Addressee::homeAddressPostOfficeBoxLabel()
+{
+ return i18n( "Home Address Post Office Box" );
+}
+
+
+QString Addressee::homeAddressLocalityLabel()
+{
+ return i18n( "Home Address City" );
+}
+
+
+QString Addressee::homeAddressRegionLabel()
+{
+ return i18n( "Home Address State" );
+}
+
+
+QString Addressee::homeAddressPostalCodeLabel()
+{
+ return i18n( "Home Address Zip Code" );
+}
+
+
+QString Addressee::homeAddressCountryLabel()
+{
+ return i18n( "Home Address Country" );
+}
+
+
+QString Addressee::homeAddressLabelLabel()
+{
+ return i18n( "Home Address Label" );
+}
+
+
+QString Addressee::businessAddressStreetLabel()
+{
+ return i18n( "Business Address Street" );
+}
+
+
+QString Addressee::businessAddressPostOfficeBoxLabel()
+{
+ return i18n( "Business Address Post Office Box" );
+}
+
+
+QString Addressee::businessAddressLocalityLabel()
+{
+ return i18n( "Business Address City" );
+}
+
+
+QString Addressee::businessAddressRegionLabel()
+{
+ return i18n( "Business Address State" );
+}
+
+
+QString Addressee::businessAddressPostalCodeLabel()
+{
+ return i18n( "Business Address Zip Code" );
+}
+
+
+QString Addressee::businessAddressCountryLabel()
+{
+ return i18n( "Business Address Country" );
+}
+
+
+QString Addressee::businessAddressLabelLabel()
+{
+ return i18n( "Business Address Label" );
+}
+
+
+QString Addressee::homePhoneLabel()
+{
+ return i18n( "Home Phone" );
+}
+
+
+QString Addressee::businessPhoneLabel()
+{
+ return i18n( "Business Phone" );
+}
+
+
+QString Addressee::mobilePhoneLabel()
+{
+ return i18n( "Mobile Phone" );
+}
+
+
+QString Addressee::homeFaxLabel()
+{
+ return i18n( "Home Fax" );
+}
+
+
+QString Addressee::businessFaxLabel()
+{
+ return i18n( "Business Fax" );
+}
+
+
+QString Addressee::carPhoneLabel()
+{
+ return i18n( "Car Phone" );
+}
+
+
+QString Addressee::isdnLabel()
+{
+ return i18n( "ISDN" );
+}
+
+
+QString Addressee::pagerLabel()
+{
+ return i18n( "Pager" );
+}
+
+
+QString Addressee::emailLabel()
+{
+ return i18n( "Email Address" );
+}
+
+
+void Addressee::setMailer( const QString &mailer )
+{
+ if ( mailer =3D=3D d->mMailer )
+ return;
+
+ d->mEmpty =3D false;
+ d->mMailer =3D mailer;
+}
+
+QString Addressee::mailer() const
+{
+ return d->mMailer;
+}
+
+QString Addressee::mailerLabel()
+{
+ return i18n( "Mail Client" );
+}
+
+
+void Addressee::setTimeZone( const TimeZone &timeZone )
+{
+ if ( timeZone =3D=3D d->mTimeZone )
+ return;
+
+ d->mEmpty =3D false;
+ d->mTimeZone =3D timeZone;
+}
+
+TimeZone Addressee::timeZone() const
+{
+ return d->mTimeZone;
+}
+
+QString Addressee::timeZoneLabel()
+{
+ return i18n( "Time Zone" );
+}
+
+
+void Addressee::setGeo( const Geo &geo )
+{
+ if ( geo =3D=3D d->mGeo )
+ return;
+
+ d->mEmpty =3D false;
+ d->mGeo =3D geo;
+}
+
+Geo Addressee::geo() const
+{
+ return d->mGeo;
+}
+
+QString Addressee::geoLabel()
+{
+ return i18n( "Geographic Position" );
+}
+
+
+void Addressee::setTitle( const QString &title )
+{
+ if ( title =3D=3D d->mTitle )
+ return;
+
+ d->mEmpty =3D false;
+ d->mTitle =3D title;
+}
+
+QString Addressee::title() const
+{
+ return d->mTitle;
+}
+
+QString Addressee::titleLabel()
+{
+ return i18nc( "a person's title", "Title" );
+}
+
+
+void Addressee::setRole( const QString &role )
+{
+ if ( role =3D=3D d->mRole )
+ return;
+
+ d->mEmpty =3D false;
+ d->mRole =3D role;
+}
+
+QString Addressee::role() const
+{
+ return d->mRole;
+}
+
+QString Addressee::roleLabel()
+{
+ return i18nc( "of a person in an organization", "Role" );
+}
+
+
+void Addressee::setOrganization( const QString &organization )
+{
+ if ( organization =3D=3D d->mOrganization )
+ return;
+
+ d->mEmpty =3D false;
+ d->mOrganization =3D organization;
+}
+
+QString Addressee::organization() const
+{
+ return d->mOrganization;
+}
+
+QString Addressee::organizationLabel()
+{
+ return i18n( "Organization" );
+}
+
+
+void Addressee::setDepartment( const QString &department )
+{
+ if ( department =3D=3D d->mDepartment )
+ return;
+
+ d->mEmpty =3D false;
+ d->mDepartment =3D department;
+}
+
+QString Addressee::department() const
+{
+ return d->mDepartment;
+}
+
+QString Addressee::departmentLabel()
+{
+ return i18n( "Department" );
+}
+
+
+void Addressee::setNote( const QString ¬e )
+{
+ if ( note =3D=3D d->mNote )
+ return;
+
+ d->mEmpty =3D false;
+ d->mNote =3D note;
+}
+
+QString Addressee::note() const
+{
+ return d->mNote;
+}
+
+QString Addressee::noteLabel()
+{
+ return i18n( "Note" );
+}
+
+
+void Addressee::setProductId( const QString &productId )
+{
+ if ( productId =3D=3D d->mProductId )
+ return;
+
+ d->mEmpty =3D false;
+ d->mProductId =3D productId;
+}
+
+QString Addressee::productId() const
+{
+ return d->mProductId;
+}
+
+QString Addressee::productIdLabel()
+{
+ return i18n( "Product Identifier" );
+}
+
+
+void Addressee::setRevision( const QDateTime &revision )
+{
+ if ( revision =3D=3D d->mRevision )
+ return;
+
+ d->mEmpty =3D false;
+ d->mRevision =3D revision;
+}
+
+QDateTime Addressee::revision() const
+{
+ return d->mRevision;
+}
+
+QString Addressee::revisionLabel()
+{
+ return i18n( "Revision Date" );
+}
+
+
+void Addressee::setSortString( const QString &sortString )
+{
+ if ( sortString =3D=3D d->mSortString )
+ return;
+
+ d->mEmpty =3D false;
+ d->mSortString =3D sortString;
+}
+
+QString Addressee::sortString() const
+{
+ return d->mSortString;
+}
+
+QString Addressee::sortStringLabel()
+{
+ return i18n( "Sort String" );
+}
+
+
+void Addressee::setUrl( const KUrl &url )
+{
+ if ( url =3D=3D d->mUrl )
+ return;
+
+ d->mEmpty =3D false;
+ d->mUrl =3D url;
+}
+
+KUrl Addressee::url() const
+{
+ return d->mUrl;
+}
+
+QString Addressee::urlLabel()
+{
+ return i18n( "Homepage" );
+}
+
+
+void Addressee::setSecrecy( const Secrecy &secrecy )
+{
+ if ( secrecy =3D=3D d->mSecrecy )
+ return;
+
+ d->mEmpty =3D false;
+ d->mSecrecy =3D secrecy;
+}
+
+Secrecy Addressee::secrecy() const
+{
+ return d->mSecrecy;
+}
+
+QString Addressee::secrecyLabel()
+{
+ return i18n( "Security Class" );
+}
+
+
+void Addressee::setLogo( const Picture &logo )
+{
+ if ( logo =3D=3D d->mLogo )
+ return;
+
+ d->mEmpty =3D false;
+ d->mLogo =3D logo;
+}
+
+Picture Addressee::logo() const
+{
+ return d->mLogo;
+}
+
+QString Addressee::logoLabel()
+{
+ return i18n( "Logo" );
+}
+
+
+void Addressee::setPhoto( const Picture &photo )
+{
+ if ( photo =3D=3D d->mPhoto )
+ return;
+
+ d->mEmpty =3D false;
+ d->mPhoto =3D photo;
+}
+
+Picture Addressee::photo() const
+{
+ return d->mPhoto;
+}
+
+QString Addressee::photoLabel()
+{
+ return i18n( "Photo" );
+}
+
+
+void Addressee::setSound( const Sound &sound )
+{
+ if ( sound =3D=3D d->mSound )
+ return;
+
+ d->mEmpty =3D false;
+ d->mSound =3D sound;
+}
+
+Sound Addressee::sound() const
+{
+ return d->mSound;
+}
+
+QString Addressee::soundLabel()
+{
+ return i18n( "Sound" );
+}
+
+
+void Addressee::setNameFromString( const QString &s )
+{
+ QString str =3D s;
+ //remove enclosing quotes from string
+ if ( str.length() > 1 &&
+ s[ 0 ] =3D=3D QLatin1Char( '"' ) &&
+ s[ s.length() - 1 ] =3D=3D QLatin1Char( '"' ) ) {
+ str =3D s.mid( 1, s.length() - 2 );
+ }
+
+ setFormattedName( str );
+ setName( str );
+
+ // clear all name parts
+ setPrefix( QString() );
+ setGivenName( QString() );
+ setAdditionalName( QString() );
+ setFamilyName( QString() );
+ setSuffix( QString() );
+
+ if ( str.isEmpty() )
+ return;
+
+ static QString spaceStr =3D QString::fromLatin1( " " );
+ static QString emptyStr =3D QString::fromLatin1( "" );
+ AddresseeHelper *helper =3D AddresseeHelper::self();
+
+ int i =3D str.indexOf( QLatin1Char( ',' ) );
+ if ( i < 0 ) {
+ QStringList parts =3D str.split( spaceStr );
+ int leftOffset =3D 0;
+ int rightOffset =3D parts.count() - 1;
+
+ QString suffix;
+ while ( rightOffset >=3D 0 ) {
+ if ( helper->containsSuffix( parts[ rightOffset ] ) ) {
+ suffix.prepend( parts[ rightOffset ] + ( suffix.isEmpty() ? emptyS=
tr : spaceStr ) );
+ rightOffset--;
+ } else
+ break;
+ }
+ setSuffix( suffix );
+
+ if ( rightOffset < 0 )
+ return;
+
+ if ( rightOffset - 1 >=3D 0 && helper->containsPrefix( parts[ rightOff=
set - 1 ].toLower() ) ) {
+ setFamilyName( parts[ rightOffset - 1 ] + spaceStr + parts[ rightOff=
set ] );
+ rightOffset--;
+ } else {
+ if ( helper->tradeAsFamilyName() )
+ setFamilyName( parts[ rightOffset ] );
+ else
+ setGivenName( parts[ rightOffset ] );
+ }
+
+ QString prefix;
+ while ( leftOffset < rightOffset ) {
+ if ( helper->containsTitle( parts[ leftOffset ] ) ) {
+ prefix.append( ( prefix.isEmpty() ? emptyStr : spaceStr ) + parts[=
leftOffset ] );
+ leftOffset++;
+ } else
+ break;
+ }
+ setPrefix( prefix );
+
+ if ( leftOffset < rightOffset ) {
+ setGivenName( parts[ leftOffset ] );
+ leftOffset++;
+ }
+
+ QString additionalName;
+ while ( leftOffset < rightOffset ) {
+ additionalName.append( ( additionalName.isEmpty() ? emptyStr : space=
Str ) + parts[ leftOffset ] );
+ leftOffset++;
+ }
+ setAdditionalName( additionalName );
+ } else {
+ QString part1 =3D str.left( i );
+ QString part2 =3D str.mid( i + 1 );
+
+ QStringList parts =3D part1.split( spaceStr );
+ int leftOffset =3D 0;
+ int rightOffset =3D parts.count() - 1;
+
+ if ( parts.count() > 0 ) {
+
+ QString suffix;
+ while ( rightOffset >=3D 0 ) {
+ if ( helper->containsSuffix( parts[ rightOffset ] ) ) {
+ suffix.prepend( parts[ rightOffset ] + ( suffix.isEmpty() ? empt=
yStr : spaceStr ) );
+ rightOffset--;
+ } else
+ break;
+ }
+ setSuffix( suffix );
+
+ if ( rightOffset - 1 >=3D 0 && helper->containsPrefix( parts[ rightO=
ffset - 1 ].toLower() ) ) {
+ setFamilyName( parts[ rightOffset - 1 ] + spaceStr + parts[ rightO=
ffset ] );
+ rightOffset--;
+ } else
+ setFamilyName( parts[ rightOffset ] );
+
+ QString prefix;
+ while ( leftOffset < rightOffset ) {
+ if ( helper->containsTitle( parts[ leftOffset ] ) ) {
+ prefix.append( ( prefix.isEmpty() ? emptyStr : spaceStr ) + part=
s[ leftOffset ] );
+ leftOffset++;
+ } else
+ break;
+ }
+ } else {
+ setPrefix( QString() );
+ setFamilyName( QString() );
+ setSuffix( QString() );
+ }
+
+ parts =3D part2.split( spaceStr );
+
+ leftOffset =3D 0;
+ rightOffset =3D parts.count();
+
+ if ( parts.count() > 0 ) {
+
+ QString prefix;
+ while ( leftOffset < rightOffset ) {
+ if ( helper->containsTitle( parts[ leftOffset ] ) ) {
+ prefix.append( ( prefix.isEmpty() ? emptyStr : spaceStr ) + part=
s[ leftOffset ] );
+ leftOffset++;
+ } else
+ break;
+ }
+ setPrefix( prefix );
+
+ if ( leftOffset < rightOffset ) {
+ setGivenName( parts[ leftOffset ] );
+ leftOffset++;
+ }
+
+ QString additionalName;
+ while ( leftOffset < rightOffset ) {
+ additionalName.append( ( additionalName.isEmpty() ? emptyStr : spa=
ceStr ) + parts[ leftOffset ] );
+ leftOffset++;
+ }
+ setAdditionalName( additionalName );
+ } else {
+ setGivenName( QString() );
+ setAdditionalName( QString() );
+ }
+ }
+}
+
+QString Addressee::realName() const
+{
+ QString n( formattedName() );
+ if ( !n.isEmpty() )
+ return n;
+
+ n =3D assembledName();
+ if ( !n.isEmpty() )
+ return n;
+
+ n =3D name();
+ if ( !n.isEmpty() )
+ return n;
+
+ return organization();
+}
+
+QString Addressee::assembledName() const
+{
+ const QString name =3D prefix() + QLatin1Char( ' ' ) +
+ givenName() + QLatin1Char( ' ' ) +
+ additionalName() + QLatin1Char( ' ' ) +
+ familyName() + QLatin1Char( ' ' ) +
+ suffix();
+
+ return name.simplified();
+}
+
+QString Addressee::fullEmail( const QString &email ) const
+{
+ QString e;
+ if ( email.isNull() ) {
+ e =3D preferredEmail();
+ } else {
+ e =3D email;
+ }
+ if ( e.isEmpty() ) return QString();
+
+ QString text;
+ if ( realName().isEmpty() )
+ text =3D e;
+ else {
+ QRegExp needQuotes( QLatin1String( "[^ 0-9A-Za-z\\x0080-\\xFFFF]" ) );
+ if ( realName().indexOf( needQuotes ) !=3D -1 ) {
+ QString name =3D realName();
+ name.replace( QLatin1String( "\"" ), QLatin1String( "\\\"" ) );
+ text =3D QLatin1String( "\"" ) + name + QLatin1String( "\" <" ) + e =
+ QLatin1Char( '>' );
+ } else
+ text =3D realName() + QLatin1String( " <" ) + e + QLatin1Char( '>' );
+ }
+
+ return text;
+}
+
+void Addressee::insertEmail( const QString &email, bool preferred )
+{
+ if ( email.simplified().isEmpty() )
+ return;
+
+ if ( d->mEmails.contains( email ) ) {
+ if ( !preferred || d->mEmails.first() =3D=3D email )
+ return;
+
+ d->mEmails.removeAll( email );
+ d->mEmails.prepend( email );
+ } else {
+ d->mEmpty =3D false;
+ if ( preferred ) {
+ d->mEmails.prepend( email );
+ } else {
+ d->mEmails.append( email );
+ }
+ }
+}
+
+void Addressee::removeEmail( const QString &email )
+{
+ if ( d->mEmails.contains( email ) ) {
+ d->mEmails.removeAll( email );
+ }
+}
+
+QString Addressee::preferredEmail() const
+{
+ if ( d->mEmails.count() =3D=3D 0 )
+ return QString();
+ else
+ return d->mEmails.first();
+}
+
+QStringList Addressee::emails() const
+{
+ return d->mEmails;
+}
+
+void Addressee::setEmails( const QStringList& emails )
+{
+ d->mEmails =3D emails;
+}
+void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber )
+{
+ d->mEmpty =3D false;
+
+ PhoneNumber::List::Iterator it;
+ for ( it =3D d->mPhoneNumbers.begin(); it !=3D d->mPhoneNumbers.end(); +=
+it ) {
+ if ( ( *it ).id() =3D=3D phoneNumber.id() ) {
+ *it =3D phoneNumber;
+ return;
+ }
+ }
+ if ( !phoneNumber.number().simplified().isEmpty() )
+ d->mPhoneNumbers.append( phoneNumber );
+}
+
+void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber )
+{
+ PhoneNumber::List::Iterator it;
+ for ( it =3D d->mPhoneNumbers.begin(); it !=3D d->mPhoneNumbers.end(); +=
+it ) {
+ if ( ( *it ).id() =3D=3D phoneNumber.id() ) {
+ d->mPhoneNumbers.erase( it );
+ return;
+ }
+ }
+}
+
+PhoneNumber Addressee::phoneNumber( PhoneNumber::Type type ) const
+{
+ PhoneNumber phoneNumber( QString(), type );
+ PhoneNumber::List::ConstIterator it;
+ for ( it =3D d->mPhoneNumbers.constBegin(); it !=3D d->mPhoneNumbers.con=
stEnd(); ++it ) {
+ if ( matchBinaryPattern( ( *it ).type(), type ) ) {
+ if ( ( *it ).type() & PhoneNumber::Pref ) {
+ return ( *it );
+ } else if ( phoneNumber.number().isEmpty() ) {
+ phoneNumber =3D ( *it );
+ }
+ }
+ }
+
+ return phoneNumber;
+}
+
+PhoneNumber::List Addressee::phoneNumbers() const
+{
+ return d->mPhoneNumbers;
+}
+
+PhoneNumber::List Addressee::phoneNumbers( PhoneNumber::Type type ) const
+{
+ PhoneNumber::List list;
+
+ PhoneNumber::List::ConstIterator it;
+ PhoneNumber::List::ConstIterator end( d->mPhoneNumbers.constEnd() );
+ for ( it =3D d->mPhoneNumbers.constBegin(); it !=3D end; ++it ) {
+ if ( matchBinaryPattern( ( *it ).type(), type ) ) {
+ list.append( *it );
+ }
+ }
+ return list;
+}
+
+PhoneNumber Addressee::findPhoneNumber( const QString &id ) const
+{
+ PhoneNumber::List::ConstIterator it;
+ PhoneNumber::List::ConstIterator end( d->mPhoneNumbers.constEnd() );
+ for ( it =3D d->mPhoneNumbers.constBegin(); it !=3D end; ++it ) {
+ if ( ( *it ).id() =3D=3D id ) {
+ return *it;
+ }
+ }
+ return PhoneNumber();
+}
+
+void Addressee::insertKey( const Key &key )
+{
+ d->mEmpty =3D false;
+
+ Key::List::Iterator it;
+ for ( it =3D d->mKeys.begin(); it !=3D d->mKeys.end(); ++it ) {
+ if ( ( *it ).id() =3D=3D key.id() ) {
+ *it =3D key;
+ return;
+ }
+ }
+ d->mKeys.append( key );
+}
+
+void Addressee::removeKey( const Key &key )
+{
+ Key::List::Iterator it;
+ for ( it =3D d->mKeys.begin(); it !=3D d->mKeys.end(); ++it ) {
+ if ( ( *it ).id() =3D=3D key.id() ) {
+ d->mKeys.removeAll( key );
+ return;
+ }
+ }
+}
+
+Key Addressee::key( Key::Type type, QString customTypeString ) const
+{
+ Key::List::ConstIterator it;
+ Key::List::ConstIterator end( d->mKeys.constEnd() );
+ for ( it =3D d->mKeys.constBegin(); it !=3D end; ++it ) {
+ if ( ( *it ).type() =3D=3D type ) {
+ if ( type =3D=3D Key::Custom ) {
+ if ( customTypeString.isEmpty() ) {
+ return *it;
+ } else {
+ if ( ( *it ).customTypeString() =3D=3D customTypeString )
+ return ( *it );
+ }
+ } else {
+ return *it;
+ }
+ }
+ }
+ return Key( QString(), type );
+}
+
+void Addressee::setKeys( const Key::List& list )
+{
+ d->mKeys =3D list;
+}
+
+Key::List Addressee::keys() const
+{
+ return d->mKeys;
+}
+
+Key::List Addressee::keys( Key::Type type, QString customTypeString ) const
+{
+ Key::List list;
+
+ Key::List::ConstIterator it;
+ Key::List::ConstIterator end( d->mKeys.constEnd() );
+ for ( it =3D d->mKeys.constBegin(); it !=3D end; ++it ) {
+ if ( ( *it ).type() =3D=3D type ) {
+ if ( type =3D=3D Key::Custom ) {
+ if ( customTypeString.isEmpty() ) {
+ list.append( *it );
+ } else {
+ if ( ( *it ).customTypeString() =3D=3D customTypeString )
+ list.append( *it );
+ }
+ } else {
+ list.append( *it );
+ }
+ }
+ }
+ return list;
+}
+
+Key Addressee::findKey( const QString &id ) const
+{
+ Key::List::ConstIterator it;
+ Key::List::ConstIterator end( d->mKeys.constEnd() );
+ for ( it =3D d->mKeys.constBegin(); it !=3D end; ++it ) {
+ if ( ( *it ).id() =3D=3D id ) {
+ return *it;
+ }
+ }
+ return Key();
+}
+
+QString Addressee::toString() const
+{
+ QString str;
+
+ str +=3D QLatin1String( "Addressee {\n" );
+ str +=3D QString::fromLatin1( " Uid: %1\n" ).arg( uid() );
+
+ str +=3D QString::fromLatin1( " Name: %1\n" ).arg( name() );
+ str +=3D QString::fromLatin1( " FormattedName: %1\n" ).arg( formattedNa=
me() );
+ str +=3D QString::fromLatin1( " FamilyName: %1\n" ).arg( familyName() );
+ str +=3D QString::fromLatin1( " GivenName: %1\n" ).arg( givenName() );
+ str +=3D QString::fromLatin1( " AdditionalName: %1\n" ).arg( additional=
Name() );
+ str +=3D QString::fromLatin1( " Prefix: %1\n" ).arg( prefix() );
+ str +=3D QString::fromLatin1( " Suffix: %1\n" ).arg( suffix() );
+ str +=3D QString::fromLatin1( " NickName: %1\n" ).arg( nickName() );
+ str +=3D QString::fromLatin1( " Birthday: %1\n" ).arg( birthday().toStr=
ing() );
+ str +=3D QString::fromLatin1( " Mailer: %1\n" ).arg( mailer() );
+ str +=3D QString::fromLatin1( " TimeZone: %1\n" ).arg( timeZone().toStr=
ing() );
+ str +=3D QString::fromLatin1( " Geo: %1\n" ).arg( geo().toString() );
+ str +=3D QString::fromLatin1( " Title: %1\n" ).arg( title() );
+ str +=3D QString::fromLatin1( " Role: %1\n" ).arg( role() );
+ str +=3D QString::fromLatin1( " Organization: %1\n" ).arg( organization=
() );
+ str +=3D QString::fromLatin1( " Department: %1\n" ).arg( department() );
+ str +=3D QString::fromLatin1( " Note: %1\n" ).arg( note() );
+ str +=3D QString::fromLatin1( " ProductId: %1\n" ).arg( productId() );
+ str +=3D QString::fromLatin1( " Revision: %1\n" ).arg( revision().toStr=
ing() );
+ str +=3D QString::fromLatin1( " SortString: %1\n" ).arg( sortString() );
+ str +=3D QString::fromLatin1( " Url: %1\n" ).arg( url().url() );
+ str +=3D QString::fromLatin1( " Secrecy: %1\n" ).arg( secrecy().toStrin=
g() );
+ str +=3D QString::fromLatin1( " Logo: %1\n" ).arg( logo().toString() );
+ str +=3D QString::fromLatin1( " Photo: %1\n" ).arg( photo().toString() =
);
+ str +=3D QString::fromLatin1( " Sound: %1\n" ).arg( sound().toString() =
);
+
+ str +=3D QLatin1String( " Emails {\n" );
+ const QStringList e =3D emails();
+ QStringList::ConstIterator it;
+ for ( it =3D e.begin(); it !=3D e.end(); ++it ) {
+ str +=3D QString::fromLatin1( " %1\n" ).arg( *it );
+ }
+ str +=3D QLatin1String( " }\n" );
+
+ str +=3D QLatin1String( " PhoneNumbers {\n" );
+ const PhoneNumber::List p =3D phoneNumbers();
+ PhoneNumber::List::ConstIterator it2;
+ for ( it2 =3D p.begin(); it2 !=3D p.end(); ++it2 ) {
+ str +=3D ( *it2 ).toString();
+ }
+ str +=3D QLatin1String( " }\n" );
+
+ str +=3D QLatin1String( " Addresses {\n" );
+ const Address::List a =3D addresses();
+ Address::List::ConstIterator it3;
+ for ( it3 =3D a.begin(); it3 !=3D a.end(); ++it3 ) {
+ str +=3D ( *it3 ).toString();
+ }
+ str +=3D QLatin1String( " }\n" );
+
+ str +=3D QLatin1String( " Keys {\n" );
+ const Key::List k =3D keys();
+ Key::List::ConstIterator it4;
+ for ( it4 =3D k.begin(); it4 !=3D k.end(); ++it4 ) {
+ str +=3D ( *it4 ).toString();
+ }
+ str +=3D QLatin1String( " }\n" );
+
+ str +=3D QLatin1String( "}\n" );
+
+ return str;
+}
+
+
+void Addressee::insertAddress( const Address &address )
+{
+ if ( address.isEmpty() )
+ return;
+
+ d->mEmpty =3D false;
+
+ Address::List::Iterator it;
+ for ( it =3D d->mAddresses.begin(); it !=3D d->mAddresses.end(); ++it ) {
+ if ( ( *it ).id() =3D=3D address.id() ) {
+ *it =3D address;
+ return;
+ }
+ }
+
+ d->mAddresses.append( address );
+}
+
+void Addressee::removeAddress( const Address &address )
+{
+ Address::List::Iterator it;
+ for ( it =3D d->mAddresses.begin(); it !=3D d->mAddresses.end(); ++it ) {
+ if ( ( *it ).id() =3D=3D address.id() ) {
+ d->mAddresses.erase( it );
+ return;
+ }
+ }
+}
+
+Address Addressee::address( Address::Type type ) const
+{
+ Address address( type );
+ Address::List::ConstIterator it;
+ Address::List::ConstIterator end( d->mAddresses.constEnd() );
+ for ( it =3D d->mAddresses.constBegin(); it !=3D end; ++it ) {
+ if ( matchBinaryPattern( ( *it ).type(), type ) ) {
+ if ( ( *it ).type() & Address::Pref ) {
+ return ( *it );
+ } else if ( address.isEmpty() ) {
+ address =3D ( *it );
+ }
+ }
+ }
+
+ return address;
+}
+
+Address::List Addressee::addresses() const
+{
+ return d->mAddresses;
+}
+
+Address::List Addressee::addresses( Address::Type type ) const
+{
+ Address::List list;
+
+ Address::List::ConstIterator it;
+ Address::List::ConstIterator end( d->mAddresses.constEnd() );
+ for ( it =3D d->mAddresses.constBegin(); it !=3D end; ++it ) {
+ if ( matchBinaryPattern( ( *it ).type(), type ) ) {
+ list.append( *it );
+ }
+ }
+
+ return list;
+}
+
+Address Addressee::findAddress( const QString &id ) const
+{
+ Address::List::ConstIterator it;
+ Address::List::ConstIterator end( d->mAddresses.constEnd() );
+ for ( it =3D d->mAddresses.constBegin(); it !=3D end; ++it ) {
+ if ( ( *it ).id() =3D=3D id ) {
+ return *it;
+ }
+ }
+ return Address();
+}
+
+void Addressee::insertCategory( const QString &c )
+{
+ d->mEmpty =3D false;
+
+ if ( d->mCategories.contains( c ) )
+ return;
+
+ d->mCategories.append( c );
+}
+
+void Addressee::removeCategory( const QString &category )
+{
+ if ( d->mCategories.contains( category ) ) {
+ d->mCategories.removeAll( category );
+ }
+}
+
+bool Addressee::hasCategory( const QString &category ) const
+{
+ return d->mCategories.contains( category );
+}
+
+void Addressee::setCategories( const QStringList &c )
+{
+ d->mEmpty =3D false;
+
+ d->mCategories =3D c;
+}
+
+QStringList Addressee::categories() const
+{
+ return d->mCategories;
+}
+
+void Addressee::insertCustom( const QString &app, const QString &name,
+ const QString &value )
+{
+ if ( value.isEmpty() || name.isEmpty() || app.isEmpty() ) {
+ return;
+ }
+
+ d->mEmpty =3D false;
+
+ QString qualifiedName =3D app + QLatin1Char( '-' ) + name + QLatin1Char(=
':' );
+
+ QStringList::Iterator it;
+ QStringList::Iterator end( d->mCustom.end() );
+ for ( it =3D d->mCustom.begin(); it !=3D end; ++it ) {
+ if ( ( *it ).startsWith( qualifiedName ) ) {
+ ( *it ) =3D qualifiedName + value;
+ return;
+ }
+ }
+
+ d->mCustom.append( qualifiedName + value );
+}
+
+void Addressee::removeCustom( const QString &app, const QString &name )
+{
+ const QString qualifiedName =3D app + QLatin1Char( '-' ) + name + QLatin=
1Char( ':' );
+
+ QStringList::Iterator it;
+ for ( it =3D d->mCustom.begin(); it !=3D d->mCustom.end(); ++it ) {
+ if ( ( *it ).startsWith( qualifiedName ) ) {
+ d->mCustom.erase( it );
+ return;
+ }
+ }
+}
+
+QString Addressee::custom( const QString &app, const QString &name ) const
+{
+ QString qualifiedName =3D app + QLatin1Char( '-' ) + name + QLatin1Char(=
':' );
+ QString value;
+
+ QStringList::ConstIterator it;
+ QStringList::ConstIterator end( d->mCustom.constEnd() );
+ for ( it =3D d->mCustom.constBegin(); it !=3D end; ++it ) {
+ if ( ( *it ).startsWith( qualifiedName ) ) {
+ value =3D ( *it ).mid( ( *it ).indexOf( QLatin1Char( ':' ) ) + 1 );
+ break;
+ }
+ }
+
+ return value;
+}
+
+void Addressee::setCustoms( const QStringList &l )
+{
+ d->mEmpty =3D false;
+ d->mCustom =3D l;
+}
+
+QStringList Addressee::customs() const
+{
+ return d->mCustom;
+}
+
+void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullN=
ame,
+ QString &email )
+{
+ // This is a simplified version of KPIM::splitAddress().
+
+ fullName.clear();
+ email.clear();
+ if ( rawEmail.isEmpty() )
+ return; // KPIM::AddressEmpty;
+
+ // The code works on 8-bit strings, so convert the input to UTF-8.
+ QByteArray address =3D rawEmail.toUtf8();
+
+ QByteArray displayName;
+ QByteArray addrSpec;
+ QByteArray comment;
+
+ // The following is a primitive parser for a mailbox-list (cf. RFC 2822).
+ // The purpose is to extract a displayable string from the mailboxes.
+ // Comments in the addr-spec are not handled. No error checking is done.
+
+ enum { TopLevel, InComment, InAngleAddress } context =3D TopLevel;
+ bool inQuotedString =3D false;
+ int commentLevel =3D 0;
+ bool stop =3D false;
+
+ for ( char* p =3D address.data(); *p && !stop; ++p ) {
+ switch ( context ) {
+ case TopLevel : {
+ switch ( *p ) {
+ case '"' : inQuotedString =3D !inQuotedString;
+ displayName +=3D *p;
+ break;
+ case '(' : if ( !inQuotedString ) {
+ context =3D InComment;
+ commentLevel =3D 1;
+ }
+ else
+ displayName +=3D *p;
+ break;
+ case '<' : if ( !inQuotedString ) {
+ context =3D InAngleAddress;
+ }
+ else
+ displayName +=3D *p;
+ break;
+ case '\\' : // quoted character
+ displayName +=3D *p;
+ ++p; // skip the '\'
+ if ( *p )
+ displayName +=3D *p;
+ else
+ //return KPIM::UnexpectedEnd;
+ goto ABORT_PARSING;
+ break;
+ case ',' : if ( !inQuotedString ) {
+ //if ( allowMultipleAddresses )
+ // stop =3D true;
+ //else
+ // return KPIM::UnexpectedComma;
+ goto ABORT_PARSING;
+ }
+ else
+ displayName +=3D *p;
+ break;
+ default : displayName +=3D *p;
+ }
+ break;
+ }
+ case InComment : {
+ switch ( *p ) {
+ case '(' : ++commentLevel;
+ comment +=3D *p;
+ break;
+ case ')' : --commentLevel;
+ if ( commentLevel =3D=3D 0 ) {
+ context =3D TopLevel;
+ comment +=3D ' '; // separate the text of several comme=
nts
+ }
+ else
+ comment +=3D *p;
+ break;
+ case '\\' : // quoted character
+ comment +=3D *p;
+ ++p; // skip the '\'
+ if ( *p )
+ comment +=3D *p;
+ else
+ //return KPIM::UnexpectedEnd;
+ goto ABORT_PARSING;
+ break;
+ default : comment +=3D *p;
+ }
+ break;
+ }
+ case InAngleAddress : {
+ switch ( *p ) {
+ case '"' : inQuotedString =3D !inQuotedString;
+ addrSpec +=3D *p;
+ break;
+ case '>' : if ( !inQuotedString ) {
+ context =3D TopLevel;
+ }
+ else
+ addrSpec +=3D *p;
+ break;
+ case '\\' : // quoted character
+ addrSpec +=3D *p;
+ ++p; // skip the '\'
+ if ( *p )
+ addrSpec +=3D *p;
+ else
+ //return KPIM::UnexpectedEnd;
+ goto ABORT_PARSING;
+ break;
+ default : addrSpec +=3D *p;
+ }
+ break;
+ }
+ } // switch ( context )
+ }
+
+ABORT_PARSING:
+ displayName =3D displayName.trimmed();
+ comment =3D comment.trimmed();
+ addrSpec =3D addrSpec.trimmed();
+
+ fullName =3D QString::fromUtf8( displayName );
+ email =3D QString::fromUtf8( addrSpec );
+
+ // check for errors
+ if ( inQuotedString )
+ return; // KPIM::UnbalancedQuote;
+ if ( context =3D=3D InComment )
+ return; // KPIM::UnbalancedParens;
+ if ( context =3D=3D InAngleAddress )
+ return; // KPIM::UnclosedAngleAddr;
+
+ if ( addrSpec.isEmpty() ) {
+ if ( displayName.isEmpty() )
+ return; // KPIM::NoAddressSpec;
+ else {
+ //addrSpec =3D displayName;
+ //displayName.truncate( 0 );
+ // Address of the form "foo@bar" or "foo@bar (Name)".
+ email =3D fullName;
+ fullName =3D QString::fromUtf8( comment );
+ }
+ }
+
+ email =3D email.toLower();
+ // Check that we do not have any extra characters on the end of the
+ // strings
+ unsigned int len =3D fullName.length();
+ if ( fullName[ 0 ] =3D=3D QLatin1Char( '"' ) && fullName[ len - 1 ] =3D=
=3D QLatin1Char( '"' ) ) {
+ fullName =3D fullName.mid( 1, len - 2 );
+ }
+}
+
+#ifndef KDEPIM_NO_KRESOURCES
+void Addressee::setResource( Resource *resource )
+{
+ d->mResource =3D resource;
+}
+
+Resource *Addressee::resource() const
+{
+ return d->mResource;
+}
+#endif
+
+void Addressee::setChanged( bool value )
+{
+ d->mChanged =3D value;
+}
+
+bool Addressee::changed() const
+{
+ return d->mChanged;
+}
+
+void Addressee::setSortMode( KABC::SortMode *mode )
+{
+ Private::mSortMode =3D mode;
+}
+
+bool Addressee::operator< ( const Addressee &addr ) const
+{
+ if ( !Private::mSortMode )
+ return false;
+ else
+ return Private::mSortMode->lesser( *this, addr );
+}
+
+QString Addressee::mimeType()
+{
+ return QLatin1String( "text/directory" );
+}
+
+QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a )
+{
+ s << a.d->mUid;
+
+ s << a.d->mName;
+ s << a.d->mFormattedName;
+ s << a.d->mFamilyName;
+ s << a.d->mGivenName;
+ s << a.d->mAdditionalName;
+ s << a.d->mPrefix;
+ s << a.d->mSuffix;
+ s << a.d->mNickName;
+ s << a.d->mBirthday;
+ s << a.d->mMailer;
+ s << a.d->mTimeZone;
+ s << a.d->mGeo;
+ s << a.d->mTitle;
+ s << a.d->mRole;
+ s << a.d->mOrganization;
+ s << a.d->mDepartment;
+ s << a.d->mNote;
+ s << a.d->mProductId;
+ s << a.d->mRevision;
+ s << a.d->mSortString;
+ s << a.d->mUrl;
+ s << a.d->mSecrecy;
+ s << a.d->mLogo;
+ s << a.d->mPhoto;
+ s << a.d->mSound;
+ s << a.d->mPhoneNumbers;
+ s << a.d->mAddresses;
+ s << a.d->mEmails;
+ s << a.d->mCategories;
+ s << a.d->mCustom;
+ s << a.d->mKeys;
+ return s;
+}
+
+QDataStream &KABC::operator>>( QDataStream &s, Addressee &a )
+{
+ s >> a.d->mUid;
+
+ s >> a.d->mName;
+ s >> a.d->mFormattedName;
+ s >> a.d->mFamilyName;
+ s >> a.d->mGivenName;
+ s >> a.d->mAdditionalName;
+ s >> a.d->mPrefix;
+ s >> a.d->mSuffix;
+ s >> a.d->mNickName;
+ s >> a.d->mBirthday;
+ s >> a.d->mMailer;
+ s >> a.d->mTimeZone;
+ s >> a.d->mGeo;
+ s >> a.d->mTitle;
+ s >> a.d->mRole;
+ s >> a.d->mOrganization;
+ s >> a.d->mDepartment;
+ s >> a.d->mNote;
+ s >> a.d->mProductId;
+ s >> a.d->mRevision;
+ s >> a.d->mSortString;
+ s >> a.d->mUrl;
+ s >> a.d->mSecrecy;
+ s >> a.d->mLogo;
+ s >> a.d->mPhoto;
+ s >> a.d->mSound;
+ s >> a.d->mPhoneNumbers;
+ s >> a.d->mAddresses;
+ s >> a.d->mEmails;
+ s >> a.d->mCategories;
+ s >> a.d->mCustom;
+ s >> a.d->mKeys;
+
+ a.d->mEmpty =3D false;
+
+ return s;
+}
+
+bool matchBinaryPattern( int value, int pattern )
+{
+ /**
+ We want to match all telephonnumbers/addresses which have the bits in =
the
+ pattern set. More are allowed.
+ if pattern =3D=3D 0 we have a special handling, then we want only thos=
e with
+ exactly no bit set.
+ */
+ if ( pattern =3D=3D 0 )
+ return ( value =3D=3D 0 );
+ else
+ return ( pattern =3D=3D ( pattern & value ) );
+}
+
+template
+bool listEquals( const QList &list, const QList &pattern )
+{
+ if ( list.count() !=3D pattern.count() )
+ return false;
+ const int numberOfElement( list.count() );
+ for ( int i =3D 0; i < numberOfElement; ++i ) {
+ if ( !pattern.contains( list[ i ] ) ) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool listEquals( const QStringList &list, const QStringList &pattern )
+{
+ if ( list.count() !=3D pattern.count() )
+ return false;
+
+ const int numberOfElement( list.count() );
+ for ( int i =3D 0; i < numberOfElement; ++i ) {
+ if ( !pattern.contains( list[ i ] ) ) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool emailsEquals( const QStringList &list, const QStringList &pattern )
+{
+ if ( list.count() !=3D pattern.count() )
+ return false;
+
+ if ( list.isEmpty() )
+ return true;
+
+ if ( list.first() !=3D pattern.first() )
+ return false;
+
+ QStringList::ConstIterator it;
+ QStringList::ConstIterator end( list.constEnd() );
+ for ( it =3D list.constBegin(); it !=3D end; ++it ) {
+ if ( !pattern.contains( *it ) ) {
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/kabc/addressee.h b/kabc/addressee.h
new file mode 100644
index 0000000..b184bc1
--- /dev/null
+++ b/kabc/addressee.h
@@ -0,0 +1,992 @@
+/*
+ This file is part of libkabc.
+ Copyright (c) 2001 Cornelius Schumacher
+ 2013 Tobias Koenig
+
+ 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 Lice=
nse
+ 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.
+*/
+
+#ifndef KABC_ADDRESSEE_H
+#define KABC_ADDRESSEE_H
+
+#include
+#include
+#include
+
+#include
+
+#include "kabc/address.h"
+#include "kabc/geo.h"
+#include "kabc/key.h"
+#include "kabc/phonenumber.h"
+#include "kabc/picture.h"
+#include "kabc/secrecy.h"
+#include "kabc/sound.h"
+#include "kabc/timezone.h"
+#include "kabc/addresseelist.h" // for typedef QList List;
+
+namespace KABC {
+
+#ifndef KDEPIM_NO_KRESOURCES
+class Resource;
+#endif
+class SortMode;
+
+/**
+ @short address book entry
+
+ This class represents an entry in the address book.
+
+ The data of this class is implicitly shared. You can pass this class by =
value.
+
+ If you need the name of a field for presenting it to the user you should=
use
+ the functions ending in Label(). They return a translated string which c=
an be
+ used as label for the corresponding field.
+
+ About the name fields:
+
+ givenName() is the first name and familyName() the last name. In some
+ countries the family name comes first, that's the reason for the
+ naming. formattedName() is the full name with the correct formatting.
+ It is used as an override, when the correct formatting can't be generated
+ from the other name fields automatically.
+
+ realName() returns a fully formatted name(). It uses formattedName, if s=
et,
+ otherwise it constucts the name from the name fields. As fallback, if
+ nothing else is set it uses name().
+
+ name() is the NAME type of RFC2426. It can be used as internal name for =
the
+ data enty, but shouldn't be used for displaying the data to the user.
+ */
+class KABC_EXPORT Addressee
+{
+ friend KABC_EXPORT QDataStream &operator<<( QDataStream &, const Address=
ee & );
+ friend KABC_EXPORT QDataStream &operator>>( QDataStream &, Addressee & );
+
+ public:
+ /**
+ A list of addressee objects
+ */
+ typedef AddresseeList List;
+ /**
+ A map from unique identifier to addressee.
+
+ @see uid()
+ */
+ typedef QMap Map;
+
+ /**
+ Construct an empty address book entry.
+ */
+ Addressee();
+
+ /**
+ Destroys the address book entry.
+ */
+ ~Addressee();
+
+ /**
+ Copy constructor.
+ */
+ Addressee( const Addressee & );
+
+ /**
+ Assignment operator.
+
+ @return a reference to @c this
+ */
+ Addressee &operator=3D( const Addressee & );
+
+ /**
+ Equality operator.
+
+ @return @c true if @c this and the given addressee are equal,
+ otherwise @c false
+ */
+ bool operator=3D=3D( const Addressee & ) const;
+
+ /**
+ Not-equal operator.
+
+ @return @c true if @c this and the given addressee are not equal,
+ otherwise @c false
+ */
+ bool operator!=3D( const Addressee & ) const;
+
+ /**
+ Return, if the address book entry is empty.
+ */
+ bool isEmpty() const;
+
+ /**
+ Set unique identifier.
+
+ @param uid the KABC unique identifier
+ */
+ void setUid( const QString &uid );
+
+ /**
+ Return unique identifier.
+ */
+ QString uid() const;
+
+ /**
+ Return translated label for uid field.
+ */
+ static QString uidLabel();
+
+ /**
+ Set name.
+ */
+ void setName( const QString &name );
+
+ /**
+ Return name.
+ */
+ QString name() const;
+
+ /**
+ Return translated label for name field.
+ */
+ static QString nameLabel();
+
+ /**
+ Set formatted name.
+ */
+ void setFormattedName( const QString &formattedName );
+
+ /**
+ Return formatted name.
+ */
+ QString formattedName() const;
+
+ /**
+ Return translated label for formattedName field.
+ */
+ static QString formattedNameLabel();
+
+ /**
+ Set family name.
+ */
+ void setFamilyName( const QString &familyName );
+
+ /**
+ Return family name.
+ */
+ QString familyName() const;
+
+ /**
+ Return translated label for familyName field.
+ */
+ static QString familyNameLabel();
+
+ /**
+ Set given name.
+ */
+ void setGivenName( const QString &givenName );
+
+ /**
+ Return given name.
+ */
+ QString givenName() const;
+
+ /**
+ Return translated label for givenName field.
+ */
+ static QString givenNameLabel();
+
+ /**
+ Set additional names.
+ */
+ void setAdditionalName( const QString &additionalName );
+
+ /**
+ Return additional names.
+ */
+ QString additionalName() const;
+
+ /**
+ Return translated label for additionalName field.
+ */
+ static QString additionalNameLabel();
+
+ /**
+ Set honorific prefixes.
+ */
+ void setPrefix( const QString &prefix );
+
+ /**
+ Return honorific prefixes.
+ */
+ QString prefix() const;
+
+ /**
+ Return translated label for prefix field.
+ */
+ static QString prefixLabel();
+
+ /**
+ Set honorific suffixes.
+ */
+ void setSuffix( const QString &suffix );
+
+ /**
+ Return honorific suffixes.
+ */
+ QString suffix() const;
+
+ /**
+ Return translated label for suffix field.
+ */
+ static QString suffixLabel();
+
+ /**
+ Set nick name.
+ */
+ void setNickName( const QString &nickName );
+
+ /**
+ Return nick name.
+ */
+ QString nickName() const;
+
+ /**
+ Return translated label for nickName field.
+ */
+ static QString nickNameLabel();
+
+ /**
+ Set birthday.
+ */
+ void setBirthday( const QDateTime &birthday );
+
+ /**
+ Return birthday.
+ */
+ QDateTime birthday() const;
+
+ /**
+ Return translated label for birthday field.
+ */
+ static QString birthdayLabel();
+
+ /**
+ Return translated label for homeAddressStreet field.
+ */
+ static QString homeAddressStreetLabel();
+
+ /**
+ Return translated label for homeAddressPostOfficeBox field.
+ */
+ static QString homeAddressPostOfficeBoxLabel();
+
+ /**
+ Return translated label for homeAddressLocality field.
+ */
+ static QString homeAddressLocalityLabel();
+
+ /**
+ Return translated label for homeAddressRegion field.
+ */
+ static QString homeAddressRegionLabel();
+
+ /**
+ Return translated label for homeAddressPostalCode field.
+ */
+ static QString homeAddressPostalCodeLabel();
+
+ /**
+ Return translated label for homeAddressCountry field.
+ */
+ static QString homeAddressCountryLabel();
+
+ /**
+ Return translated label for homeAddressLabel field.
+ */
+ static QString homeAddressLabelLabel();
+
+ /**
+ Return translated label for businessAddressStreet field.
+ */
+ static QString businessAddressStreetLabel();
+
+ /**
+ Return translated label for businessAddressPostOfficeBox field.
+ */
+ static QString businessAddressPostOfficeBoxLabel();
+
+ /**
+ Return translated label for businessAddressLocality field.
+ */
+ static QString businessAddressLocalityLabel();
+
+ /**
+ Return translated label for businessAddressRegion field.
+ */
+ static QString businessAddressRegionLabel();
+
+ /**
+ Return translated label for businessAddressPostalCode field.
+ */
+ static QString businessAddressPostalCodeLabel();
+
+ /**
+ Return translated label for businessAddressCountry field.
+ */
+ static QString businessAddressCountryLabel();
+
+ /**
+ Return translated label for businessAddressLabel field.
+ */
+ static QString businessAddressLabelLabel();
+
+ /**
+ Return translated label for homePhone field.
+ */
+ static QString homePhoneLabel();
+
+ /**
+ Return translated label for businessPhone field.
+ */
+ static QString businessPhoneLabel();
+
+ /**
+ Return translated label for mobilePhone field.
+ */
+ static QString mobilePhoneLabel();
+
+ /**
+ Return translated label for homeFax field.
+ */
+ static QString homeFaxLabel();
+
+ /**
+ Return translated label for businessFax field.
+ */
+ static QString businessFaxLabel();
+
+ /**
+ Return translated label for carPhone field.
+ */
+ static QString carPhoneLabel();
+
+ /**
+ Return translated label for isdn field.
+ */
+ static QString isdnLabel();
+
+ /**
+ Return translated label for pager field.
+ */
+ static QString pagerLabel();
+
+ /**
+ Return translated label for email field.
+ */
+ static QString emailLabel();
+
+ /**
+ Set mail client.
+ */
+ void setMailer( const QString &mailer );
+
+ /**
+ Return mail client.
+ */
+ QString mailer() const;
+
+ /**
+ Return translated label for mailer field.
+ */
+ static QString mailerLabel();
+
+ /**
+ Set time zone.
+ */
+ void setTimeZone( const TimeZone &timeZone );
+
+ /**
+ Return time zone.
+ */
+ TimeZone timeZone() const;
+
+ /**
+ Return translated label for timeZone field.
+ */
+ static QString timeZoneLabel();
+
+ /**
+ Set geographic position.
+ */
+ void setGeo( const Geo &geo );
+
+ /**
+ Return geographic position.
+ */
+ Geo geo() const;
+
+ /**
+ Return translated label for geo field.
+ */
+ static QString geoLabel();
+
+ /**
+ Set title.
+ */
+ void setTitle( const QString &title );
+
+ /**
+ Return title.
+ */
+ QString title() const;
+
+ /**
+ Return translated label for title field.
+ */
+ static QString titleLabel();
+
+ /**
+ Set role.
+ */
+ void setRole( const QString &role );
+
+ /**
+ Return role.
+ */
+ QString role() const;
+
+ /**
+ Return translated label for role field.
+ */
+ static QString roleLabel();
+
+ /**
+ Set organization.
+ */
+ void setOrganization( const QString &organization );
+
+ /**
+ Return organization.
+ */
+ QString organization() const;
+
+ /**
+ Return translated label for organization field.
+ */
+ static QString organizationLabel();
+
+ /**
+ Set department.
+ */
+ void setDepartment( const QString &department );
+
+ /**
+ Return department.
+ */
+ QString department() const;
+
+ /**
+ Return translated label for department field.
+ */
+ static QString departmentLabel();
+
+ /**
+ Set note.
+ */
+ void setNote( const QString ¬e );
+
+ /**
+ Return note.
+ */
+ QString note() const;
+
+ /**
+ Return translated label for note field.
+ */
+ static QString noteLabel();
+
+ /**
+ Set product identifier.
+ */
+ void setProductId( const QString &productId );
+
+ /**
+ Return product identifier.
+ */
+ QString productId() const;
+
+ /**
+ Return translated label for productId field.
+ */
+ static QString productIdLabel();
+
+ /**
+ Set revision date.
+ */
+ void setRevision( const QDateTime &revision );
+
+ /**
+ Return revision date.
+ */
+ QDateTime revision() const;
+
+ /**
+ Return translated label for revision field.
+ */
+ static QString revisionLabel();
+
+ /**
+ Set sort string.
+ */
+ void setSortString( const QString &sortString );
+
+ /**
+ Return sort string.
+ */
+ QString sortString() const;
+
+ /**
+ Return translated label for sortString field.
+ */
+ static QString sortStringLabel();
+
+ /**
+ Set homepage.
+ */
+ void setUrl( const KUrl &url );
+
+ /**
+ Return homepage.
+ */
+ KUrl url() const;
+
+ /**
+ Return translated label for url field.
+ */
+ static QString urlLabel();
+
+ /**
+ Set security class.
+ */
+ void setSecrecy( const Secrecy &secrecy );
+
+ /**
+ Return security class.
+ */
+ Secrecy secrecy() const;
+
+ /**
+ Return translated label for secrecy field.
+ */
+ static QString secrecyLabel();
+
+ /**
+ Set logo.
+ */
+ void setLogo( const Picture &logo );
+
+ /**
+ Return logo.
+ */
+ Picture logo() const;
+
+ /**
+ Return translated label for logo field.
+ */
+ static QString logoLabel();
+
+ /**
+ Set photo.
+ */
+ void setPhoto( const Picture &photo );
+
+ /**
+ Return photo.
+ */
+ Picture photo() const;
+
+ /**
+ Return translated label for photo field.
+ */
+ static QString photoLabel();
+
+ /**
+ Set sound.
+ */
+ void setSound( const Sound &sound );
+
+ /**
+ Return sound.
+ */
+ Sound sound() const;
+
+ /**
+ Return translated label for sound field.
+ */
+ static QString soundLabel();
+
+ /**
+ Set name fields by parsing the given string and trying to associate =
the
+ parts of the string with according fields. This function should prob=
ably
+ be a bit more clever.
+ */
+ void setNameFromString( const QString & );
+
+ /**
+ Return the name of the addressee. This is calculated from all the na=
me
+ fields.
+ */
+ QString realName() const;
+
+ /**
+ Return the name that consists of all name parts.
+ */
+ QString assembledName() const;
+
+ /**
+ Return email address including real name.
+
+ @param email Email address to be used to construct the full email st=
ring.
+ If this is QString() the preferred email address is use=
d.
+ */
+ QString fullEmail( const QString &email=3DQString() ) const;
+
+ /**
+ Insert an email address. If the email address already exists in this
+ addressee it is not duplicated.
+
+ @param email Email address
+ @param preferred Set to true, if this is the preferred email address=
of
+ the addressee.
+ */
+ void insertEmail( const QString &email, bool preferred=3Dfalse );
+
+ /**
+ Remove email address. If the email address doesn't exist, nothing ha=
ppens.
+
+ @param email Email address to remove
+ */
+ void removeEmail( const QString &email );
+
+ /**
+ Return preferred email address. This is the first email address or t=
he
+ last one added with insertEmail() with a set preferred parameter.
+ */
+ QString preferredEmail() const;
+
+ /**
+ Return list of all email addresses.
+ */
+ QStringList emails() const;
+
+ /**
+ Set the emails to @p list.
+ The first email address gets the preferred one!
+ @param list The list of email addresses.
+ */
+ void setEmails( const QStringList& list);
+
+ /**
+ Insert a phone number. If a phone number with the same id already ex=
ists
+ in this addressee it is not duplicated.
+
+ @param phoneNumber The telephone number to insert to the addressee
+ */
+ void insertPhoneNumber( const PhoneNumber &phoneNumber );
+
+ /**
+ Remove phone number. If no phone number with the given id exists for=
this
+ addresse nothing happens.
+
+ @param phoneNumber The telephone number to remove from the addressee
+ */
+ void removePhoneNumber( const PhoneNumber &phoneNumber );
+
+ /**
+ Return phone number, which matches the given type.
+
+ @param type The type of phone number to get
+ */
+ PhoneNumber phoneNumber( PhoneNumber::Type type ) const;
+
+ /**
+ Return list of all phone numbers.
+ */
+ PhoneNumber::List phoneNumbers() const;
+
+ /**
+ Return list of phone numbers with a special type.
+
+ @param type The type of phone number to get
+ */
+ PhoneNumber::List phoneNumbers( PhoneNumber::Type type ) const;
+
+ /**
+ Return phone number with the given id.
+
+ @param id The identifier of the phone number to look for.
+ See PhoneNumber::id()
+ */
+ PhoneNumber findPhoneNumber( const QString &id ) const;
+
+ /**
+ Insert a key. If a key with the same id already exists
+ in this addressee it is not duplicated.
+
+ @param key The key to insert
+ */
+ void insertKey( const Key &key );
+
+ /**
+ Remove a key. If no key with the given id exists for this
+ addresse nothing happens.
+
+ @param key The key to remove
+ */
+ void removeKey( const Key &key );
+
+ /**
+ Return key, which matches the given type.
+ If @p type =3D=3D Key::Custom you can specify a string
+ that should match. If you leave the string empty, the first
+ key with a custom value is returned.
+
+ @param type The type of key to look for
+ @param customTypeString A string to match custom keys against when
+ @p type is @c Key::Custom
+ */
+ Key key( Key::Type type, QString customTypeString =3D QString() ) cons=
t;
+
+ /**
+ Return list of all keys.
+ */
+ Key::List keys() const;
+
+ /**
+ Set the list of keys
+ @param keys The keys to be set.
+ */
+ void setKeys( const Key::List& keys);
+
+ /**
+ Return list of keys with a special type.
+ If @p type =3D=3D Key::Custom you can specify a string
+ that should match. If you leave the string empty, all custom
+ keys will be returned.
+
+ @param type The type of key to look for
+ @param customTypeString A string to match custom keys against when
+ @p type is @c Key::Custom
+ */
+ Key::List keys( Key::Type type, QString customTypeString =3D QString()=
) const;
+
+ /**
+ Return key with the given id.
+
+ @param id The identifier of the key to look for. See Key::id()
+ */
+ Key findKey( const QString &id ) const;
+
+ /**
+ Insert an address. If an address with the same id already exists
+ in this addressee it is not duplicated.
+
+ @param address The address to insert
+ */
+ void insertAddress( const Address &address );
+
+ /**
+ Remove address. If no address with the given id exists for this
+ addresse nothing happens.
+
+ @param address The address to remove
+ */
+ void removeAddress( const Address &address );
+
+ /**
+ Return address, which matches the given type.
+
+ @param type The type of address to look for
+ */
+ Address address( Address::Type type ) const;
+
+ /**
+ Return list of all addresses.
+ */
+ Address::List addresses() const;
+
+ /**
+ Return list of addresses with a special type.
+
+ @param type The type of addresses to look for
+ */
+ Address::List addresses( Address::Type type ) const;
+
+ /**
+ Return address with the given id.
+
+ @param id The identifier of the address to look for. See Address::id=
()
+ */
+ Address findAddress( const QString &id ) const;
+
+ /**
+ Insert category. If the category already exists it is not duplicated.
+ */
+ void insertCategory( const QString & );
+
+ /**
+ Remove category.
+ */
+ void removeCategory( const QString & );
+
+ /**
+ Return, if addressee has the given category.
+ */
+ bool hasCategory( const QString & ) const;
+
+ /**
+ Set categories to given value.
+ */
+ void setCategories( const QStringList & );
+
+ /**
+ Return list of all set categories.
+ */
+ QStringList categories() const;
+
+ /**
+ Insert custom entry. The entry is identified by the name of the inse=
rting
+ application and a unique name. If an entry with the given app and na=
me
+ already exists its value is replaced with the new given value.
+
+ An empty value isn't allowed (nothing happens if this is called with
+ any of the three arguments being empty)
+
+ @param app Name of the application inserting this custom entry
+ @param name Name of this application specific custom entry
+ @param value Value of this application specific custom entry
+ */
+ void insertCustom( const QString &app, const QString &name,
+ const QString &value );
+
+ /**
+ Remove custom entry.
+
+ @param app Name of the application which has inserted this custom en=
try
+ @param name Name of this application specific custom entry
+ */
+ void removeCustom( const QString &app, const QString &name );
+
+ /**
+ Return value of custom entry, identified by app and entry name.
+
+ @param app Name of the application which has inserted this custom en=
try
+ @param name Name of this application specific custom entry
+ */
+ QString custom( const QString &app, const QString &name ) const;
+
+ /**
+ Set all custom entries.
+ */
+ void setCustoms( const QStringList & );
+
+ /**
+ Return list of all custom entries.
+ */
+ QStringList customs() const;
+
+ /**
+ Parse full email address. The result is given back in fullName and e=
mail.
+
+ @param rawEmail The input string to parse for name and email
+ @param fullName The name part of the @p rawEmail input, if it contai=
ned one
+ @param email The email part of the @p rawEmail input, if it containe=
d one
+ */
+ static void parseEmailAddress( const QString &rawEmail, QString &fullN=
ame,
+ QString &email );
+
+ /**
+ Returns string representation of the addressee.
+ */
+ QString toString() const;
+
+#ifndef KDEPIM_NO_KRESOURCES
+ /**
+ Set resource where the addressee is from.
+
+ @param resource The Resource the addressee is from
+ */
+ void setResource( Resource *resource );
+
+ /**
+ Return pointer to resource.
+ */
+ Resource *resource() const;
+#endif
+
+ /**
+ Mark addressee as changed.
+
+ @param value Sets the status indicating changed data
+ */
+ void setChanged( bool value );
+
+ /**
+ Return whether the addressee is changed.
+ */
+ bool changed() const;
+
+ /**
+ Sets the sort mode implementation.
+
+ Comparing to addressee objects is delegated to an instance
+ of a subclass of KABC::SortMode.
+
+ @param mode The sort mode implementator to use
+ */
+ static void setSortMode( KABC::SortMode *mode );
+
+ /**
+ Return whether this addressee is "less-than" a given one
+
+ @param addr The addressee object to compare with
+
+ @see setSortMode()
+ */
+ bool operator< ( const Addressee &addr ) const;
+
+ /**
+ Returns the MIME type used for Addressees
+ */
+ static QString mimeType();
+
+ private:
+ class Private;
+ QSharedDataPointer d;
+};
+#ifdef MAKE_KABC_LIB
+KDE_DUMMY_QHASH_FUNCTION( Addressee )
+#endif
+
+KABC_EXPORT QDataStream &operator<<( QDataStream &, const Addressee & );
+KABC_EXPORT QDataStream &operator>>( QDataStream &, Addressee & );
+
+}
+
+#define KABC_ADDRESSEE_METATYPE_DEFINED 1
+Q_DECLARE_METATYPE( KABC::Addressee )
+
+#endif
diff --git a/kabc/field.cpp b/kabc/field.cpp
new file mode 100644
index 0000000..42e8c46
--- /dev/null
+++ b/kabc/field.cpp
@@ -0,0 +1,632 @@
+/*
+ This file is part of libkabc.
+ Copyright (c) 2002 Cornelius Schumacher
+
+ 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 Lice=
nse
+ 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
+#include
+#include
+#include
+#include
+
+#include "field.h"
+
+using namespace KABC;
+
+class Field::Private
+{
+ public:
+ Private( int fieldId, int category =3D 0,
+ const QString &label =3D QString(),
+ const QString &key =3D QString(),
+ const QString &app =3D QString() )
+ : mFieldId( fieldId ), mCategory( category ), mLabel( label ),
+ mKey( key ), mApp( app ) {}
+
+ enum FieldId
+ {
+ CustomField,
+ FormattedName,
+ FamilyName,
+ GivenName,
+ AdditionalName,
+ Prefix,
+ Suffix,
+ NickName,
+ Birthday,
+ HomeAddressStreet,
+ HomeAddressPostOfficeBox,
+ HomeAddressLocality,
+ HomeAddressRegion,
+ HomeAddressPostalCode,
+ HomeAddressCountry,
+ HomeAddressLabel,
+ BusinessAddressStreet,
+ BusinessAddressPostOfficeBox,
+ BusinessAddressLocality,
+ BusinessAddressRegion,
+ BusinessAddressPostalCode,
+ BusinessAddressCountry,
+ BusinessAddressLabel,
+ HomePhone,
+ BusinessPhone,
+ MobilePhone,
+ HomeFax,
+ BusinessFax,
+ CarPhone,
+ Isdn,
+ Pager,
+ Email,
+ Mailer,
+ Title,
+ Role,
+ Organization,
+ Department,
+ Note,
+ Url
+ };
+
+ int fieldId() { return mFieldId; }
+ int category() { return mCategory; }
+
+ QString label() { return mLabel; }
+ QString key() { return mKey; }
+ QString app() { return mApp; }
+
+ static Field::List mAllFields;
+ static Field::List mDefaultFields;
+ static Field::List mCustomFields;
+
+ private:
+ int mFieldId;
+ int mCategory;
+
+ QString mLabel;
+ QString mKey;
+ QString mApp;
+};
+
+Field::List Field::Private::mAllFields;
+Field::List Field::Private::mDefaultFields;
+Field::List Field::Private::mCustomFields;
+
+Field::Field( Private *p )
+ : d( p )
+{
+}
+
+Field::~Field()
+{
+ delete d;
+}
+
+QString Field::label()
+{
+ switch ( d->fieldId() ) {
+ case Private::FormattedName:
+ return Addressee::formattedNameLabel();
+ case Private::FamilyName:
+ return Addressee::familyNameLabel();
+ case Private::GivenName:
+ return Addressee::givenNameLabel();
+ case Private::AdditionalName:
+ return Addressee::additionalNameLabel();
+ case Private::Prefix:
+ return Addressee::prefixLabel();
+ case Private::Suffix:
+ return Addressee::suffixLabel();
+ case Private::NickName:
+ return Addressee::nickNameLabel();
+ case Private::Birthday:
+ return Addressee::birthdayLabel();
+ case Private::HomeAddressStreet:
+ return Addressee::homeAddressStreetLabel();
+ case Private::HomeAddressPostOfficeBox:
+ return Addressee::homeAddressPostOfficeBoxLabel();
+ case Private::HomeAddressLocality:
+ return Addressee::homeAddressLocalityLabel();
+ case Private::HomeAddressRegion:
+ return Addressee::homeAddressRegionLabel();
+ case Private::HomeAddressPostalCode:
+ return Addressee::homeAddressPostalCodeLabel();
+ case Private::HomeAddressCountry:
+ return Addressee::homeAddressCountryLabel();
+ case Private::HomeAddressLabel:
+ return Addressee::homeAddressLabelLabel();
+ case Private::BusinessAddressStreet:
+ return Addressee::businessAddressStreetLabel();
+ case Private::BusinessAddressPostOfficeBox:
+ return Addressee::businessAddressPostOfficeBoxLabel();
+ case Private::BusinessAddressLocality:
+ return Addressee::businessAddressLocalityLabel();
+ case Private::BusinessAddressRegion:
+ return Addressee::businessAddressRegionLabel();
+ case Private::BusinessAddressPostalCode:
+ return Addressee::businessAddressPostalCodeLabel();
+ case Private::BusinessAddressCountry:
+ return Addressee::businessAddressCountryLabel();
+ case Private::BusinessAddressLabel:
+ return Addressee::businessAddressLabelLabel();
+ case Private::HomePhone:
+ return Addressee::homePhoneLabel();
+ case Private::BusinessPhone:
+ return Addressee::businessPhoneLabel();
+ case Private::MobilePhone:
+ return Addressee::mobilePhoneLabel();
+ case Private::HomeFax:
+ return Addressee::homeFaxLabel();
+ case Private::BusinessFax:
+ return Addressee::businessFaxLabel();
+ case Private::CarPhone:
+ return Addressee::carPhoneLabel();
+ case Private::Isdn:
+ return Addressee::isdnLabel();
+ case Private::Pager:
+ return Addressee::pagerLabel();
+ case Private::Email:
+ return Addressee::emailLabel();
+ case Private::Mailer:
+ return Addressee::mailerLabel();
+ case Private::Title:
+ return Addressee::titleLabel();
+ case Private::Role:
+ return Addressee::roleLabel();
+ case Private::Organization:
+ return Addressee::organizationLabel();
+ case Private::Department:
+ return Addressee::departmentLabel();
+ case Private::Note:
+ return Addressee::noteLabel();
+ case Private::Url:
+ return Addressee::urlLabel();
+ case Private::CustomField:
+ return d->label();
+ default:
+ return i18n( "Unknown Field" );
+ }
+}
+
+int Field::category()
+{
+ return d->category();
+}
+
+QString Field::categoryLabel( int category )
+{
+ switch ( category ) {
+ case All:
+ return i18n( "All" );
+ case Frequent:
+ return i18n( "Frequent" );
+ case Address:
+ return i18nc( "street/postal","Address" );
+ case Email:
+ return i18n( "Email" );
+ case Personal:
+ return i18n( "Personal" );
+ case Organization:
+ return i18n( "Organization" );
+ case CustomCategory:
+ return i18n( "Custom" );
+ default:
+ return i18n( "Undefined" );
+ }
+}
+
+QString Field::value( const KABC::Addressee &a )
+{
+ switch ( d->fieldId() ) {
+ case Private::FormattedName:
+ return a.formattedName();
+ case Private::FamilyName:
+ return a.familyName();
+ case Private::GivenName:
+ return a.givenName();
+ case Private::AdditionalName:
+ return a.additionalName();
+ case Private::Prefix:
+ return a.prefix();
+ case Private::Suffix:
+ return a.suffix();
+ case Private::NickName:
+ return a.nickName();
+ case Private::Mailer:
+ return a.mailer();
+ case Private::Title:
+ return a.title();
+ case Private::Role:
+ return a.role();
+ case Private::Organization:
+ return a.organization();
+ case Private::Department:
+ return a.department();
+ case Private::Note:
+ return a.note();
+ case Private::Email:
+ return a.preferredEmail();
+ case Private::Birthday:
+ if ( a.birthday().isValid() )
+ return a.birthday().date().toString( Qt::ISODate );
+ else
+ return QString();
+ case Private::Url:
+ return a.url().prettyUrl();
+ case Private::HomePhone:
+ {
+ PhoneNumber::List::ConstIterator it;
+
+ {
+ // check for preferred number
+ const PhoneNumber::List list =3D a.phoneNumbers( PhoneNumber::Home=
| PhoneNumber::Pref );
+ for ( it =3D list.begin(); it !=3D list.end(); ++it ) {
+ if ( ( ( *it ).type() & ~( PhoneNumber::Pref ) ) =3D=3D PhoneNum=
ber::Home ) {
+ return ( *it ).number();
+ }
+ }
+ }
+
+ {
+ // check for normal home number
+ const PhoneNumber::List list =3D a.phoneNumbers( PhoneNumber::Home=
);
+ for ( it =3D list.begin(); it !=3D list.end(); ++it ) {
+ if ( ( ( *it ).type() & ~(PhoneNumber::Pref) ) =3D=3D PhoneNumbe=
r::Home ) {
+ return ( *it ).number();
+ }
+ }
+ }
+
+ return QString();
+ }
+ case Private::BusinessPhone:
+ {
+ PhoneNumber::List::ConstIterator it;
+
+ {
+ // check for preferred number
+ const PhoneNumber::List list =3D a.phoneNumbers( PhoneNumber::Work=
| PhoneNumber::Pref );
+ for ( it =3D list.begin(); it !=3D list.end(); ++it ) {
+ if ( ( ( *it ).type() & ~(PhoneNumber::Pref) ) =3D=3D PhoneNumbe=
r::Work ) {
+ return ( *it ).number();
+ }
+ }
+ }
+
+ {
+ // check for normal work number
+ const PhoneNumber::List list =3D a.phoneNumbers( PhoneNumber::Work=
);
+ for ( it =3D list.begin(); it !=3D list.end(); ++it ) {
+ if ( ( ( *it ).type() & ~(PhoneNumber::Pref) ) =3D=3D PhoneNumbe=
r::Work ) {
+ return ( *it ).number();
+ }
+ }
+ }
+
+ return QString();
+ }
+ case Private::MobilePhone:
+ return a.phoneNumber( PhoneNumber::Cell ).number();
+ case Private::HomeFax:
+ return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number(=
);
+ case Private::BusinessFax:
+ return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number(=
);
+ case Private::CarPhone:
+ return a.phoneNumber( PhoneNumber::Car ).number();
+ case Private::Isdn:
+ return a.phoneNumber( PhoneNumber::Isdn ).number();
+ case Private::Pager:
+ return a.phoneNumber( PhoneNumber::Pager ).number();
+ case Private::HomeAddressStreet:
+ return a.address( Address::Home ).street();
+ case Private::HomeAddressPostOfficeBox:
+ return a.address( Address::Home ).postOfficeBox();
+ case Private::HomeAddressLocality:
+ return a.address( Address::Home ).locality();
+ case Private::HomeAddressRegion:
+ return a.address( Address::Home ).region();
+ case Private::HomeAddressPostalCode:
+ return a.address( Address::Home ).postalCode();
+ case Private::HomeAddressCountry:
+ return a.address( Address::Home ).country();
+ case Private::BusinessAddressStreet:
+ return a.address( Address::Work ).street();
+ case Private::BusinessAddressPostOfficeBox:
+ return a.address( Address::Work ).postOfficeBox();
+ case Private::BusinessAddressLocality:
+ return a.address( Address::Work ).locality();
+ case Private::BusinessAddressRegion:
+ return a.address( Address::Work ).region();
+ case Private::BusinessAddressPostalCode:
+ return a.address( Address::Work ).postalCode();
+ case Private::BusinessAddressCountry:
+ return a.address( Address::Work ).country();
+ case Private::CustomField:
+ return a.custom( d->app(), d->key() );
+ default:
+ return QString();
+ }
+}
+
+bool Field::setValue( KABC::Addressee &a, const QString &value )
+{
+ switch ( d->fieldId() ) {
+ case Private::FormattedName:
+ a.setFormattedName( value );
+ return true;
+ case Private::FamilyName:
+ a.setFamilyName( value );
+ return true;
+ case Private::GivenName:
+ a.setGivenName( value );
+ return true;
+ case Private::AdditionalName:
+ a.setAdditionalName( value );
+ return true;
+ case Private::Prefix:
+ a.setPrefix( value );
+ return true;
+ case Private::Suffix:
+ a.setSuffix( value );
+ return true;
+ case Private::NickName:
+ a.setNickName( value );
+ return true;
+ case Private::Mailer:
+ a.setMailer( value );
+ return true;
+ case Private::Title:
+ a.setTitle( value );
+ return true;
+ case Private::Role:
+ a.setRole( value );
+ return true;
+ case Private::Organization:
+ a.setOrganization( value );
+ return true;
+ case Private::Department:
+ a.setDepartment( value );
+ return true;
+ case Private::Note:
+ a.setNote( value );
+ return true;
+ case Private::Birthday:
+ a.setBirthday( QDateTime::fromString( value, Qt::ISODate ) );
+ return true;
+ case Private::CustomField:
+ a.insertCustom( d->app(), d->key(), value );
+ return true;
+ default:
+ return false;
+ }
+}
+
+QString Field::sortKey( const KABC::Addressee &a )
+{
+ switch ( d->fieldId() ) {
+ case Private::FormattedName:
+ return a.formattedName();
+ case Private::FamilyName:
+ return a.familyName();
+ case Private::GivenName:
+ return a.givenName();
+ case Private::AdditionalName:
+ return a.additionalName();
+ case Private::Prefix:
+ return a.prefix();
+ case Private::Suffix:
+ return a.suffix();
+ case Private::NickName:
+ return a.nickName();
+ case Private::Mailer:
+ return a.mailer();
+ case Private::Title:
+ return a.title();
+ case Private::Role:
+ return a.role();
+ case Private::Organization:
+ return a.organization();
+ case Private::Department:
+ return a.department();
+ case Private::Note:
+ return a.note();
+ case Private::Birthday:
+ if ( a.birthday().isValid() ) {
+ QDate date =3D a.birthday().date();
+ QString key;
+ key.sprintf( "%02d-%02d", date.month(), date.day() );
+ return key;
+ } else
+ return QLatin1String( "00-00" );
+ default:
+ return value( a ).toLower();
+ }
+}
+
+bool Field::isCustom()
+{
+ return d->fieldId() =3D=3D Private::CustomField;
+}
+
+Field::List Field::allFields()
+{
+ if ( Private::mAllFields.isEmpty() ) {
+ createField( Private::FormattedName, Frequent );
+ createField( Private::FamilyName, Frequent );
+ createField( Private::GivenName, Frequent );
+ createField( Private::AdditionalName );
+ createField( Private::Prefix );
+ createField( Private::Suffix );
+ createField( Private::NickName, Personal );
+ createField( Private::Birthday, Personal );
+ createField( Private::HomeAddressStreet, Address|Personal );
+ createField( Private::HomeAddressPostOfficeBox, Address|Personal );
+ createField( Private::HomeAddressLocality, Address|Personal );
+ createField( Private::HomeAddressRegion, Address|Personal );
+ createField( Private::HomeAddressPostalCode, Address|Personal );
+ createField( Private::HomeAddressCountry, Address|Personal );
+ createField( Private::HomeAddressLabel, Address|Personal );
+ createField( Private::BusinessAddressStreet, Address|Organization );
+ createField( Private::BusinessAddressPostOfficeBox, Address|Organizati=
on );
+ createField( Private::BusinessAddressLocality, Address|Organization );
+ createField( Private::BusinessAddressRegion, Address|Organization );
+ createField( Private::BusinessAddressPostalCode, Address|Organization =
);
+ createField( Private::BusinessAddressCountry, Address|Organization );
+ createField( Private::BusinessAddressLabel, Address|Organization );
+ createField( Private::HomePhone, Personal|Frequent );
+ createField( Private::BusinessPhone, Organization|Frequent );
+ createField( Private::MobilePhone, Frequent );
+ createField( Private::HomeFax );
+ createField( Private::BusinessFax );
+ createField( Private::CarPhone );
+ createField( Private::Isdn );
+ createField( Private::Pager );
+ createField( Private::Email, Email|Frequent );
+ createField( Private::Mailer, Email );
+ createField( Private::Title, Organization );
+ createField( Private::Role, Organization );
+ createField( Private::Organization, Organization );
+ createField( Private::Department, Organization );
+ createField( Private::Note );
+ createField( Private::Url );
+ }
+
+ return Private::mAllFields;
+}
+
+Field::List Field::defaultFields()
+{
+ if ( Private::mDefaultFields.isEmpty() ) {
+ createDefaultField( Private::FormattedName );
+ createDefaultField( Private::Email );
+ }
+
+ return Private::mDefaultFields;
+}
+
+void Field::createField( int id, int category )
+{
+ Private::mAllFields.append( new Field( new Private( id, category ) ) );
+}
+
+void Field::createDefaultField( int id, int category )
+{
+ Private::mDefaultFields.append( new Field( new Private( id, category ) )=
);
+}
+
+void Field::deleteFields()
+{
+ Field::List::ConstIterator it;
+
+ for ( it =3D Private::mAllFields.constBegin(); it !=3D Private::mAllFiel=
ds.constEnd(); ++it ) {
+ delete ( *it );
+ }
+ Private::mAllFields.clear();
+
+ for ( it =3D Private::mDefaultFields.constBegin(); it !=3D Private::mDef=
aultFields.constEnd(); ++it ) {
+ delete ( *it );
+ }
+ Private::mDefaultFields.clear();
+
+ for ( it =3D Private::mCustomFields.constBegin(); it !=3D Private::mCust=
omFields.constEnd(); ++it ) {
+ delete ( *it );
+ }
+ Private::mCustomFields.clear();
+}
+
+void Field::saveFields( const QString &identifier,
+ const Field::List &fields )
+{
+ KConfigGroup cg( KGlobal::config(), "KABCFields" );
+
+ saveFields( cg, identifier, fields );
+}
+
+void Field::saveFields( KConfigGroup &cfg, const QString &identifier,
+ const Field::List &fields )
+{
+ QList fieldIds;
+
+ int custom =3D 0;
+ Field::List::ConstIterator it;
+ for ( it =3D fields.begin(); it !=3D fields.end(); ++it ) {
+ fieldIds.append( ( *it )->d->fieldId() );
+ if ( ( *it )->isCustom() ) {
+ QStringList customEntry;
+ customEntry << ( *it )->d->label();
+ customEntry << ( *it )->d->key();
+ customEntry << ( *it )->d->app();
+ cfg.writeEntry( QLatin1String( "KABC_CustomEntry_" ) + identifier + =
QLatin1Char( '_' ) +
+ QString::number( custom++ ), customEntry );
+ }
+ }
+
+ cfg.writeEntry( identifier, fieldIds );
+}
+
+Field::List Field::restoreFields( const QString &identifier )
+{
+ KConfigGroup cg( KGlobal::config(), "KABCFields" );
+
+ return restoreFields( cg, identifier );
+}
+
+Field::List Field::restoreFields( const KConfigGroup &cfg, const QString &=
identifier )
+{
+ const QList fieldIds =3D cfg.readEntry( identifier,QList() );
+
+ Field::List fields;
+
+ int custom =3D 0;
+ QList::ConstIterator it;
+ for ( it =3D fieldIds.begin(); it !=3D fieldIds.end(); ++it ) {
+ Private *f =3D 0;
+ if ( ( *it ) =3D=3D Private::CustomField ) {
+ QStringList customEntry =3D cfg.readEntry( QLatin1String( "KABC_Cust=
omEntry_" ) +
+ identifier + QLatin1Char( '=
_' ) +
+ QString::number( custom++ )=
,QStringList() );
+ f =3D new Private( *it, CustomCategory, customEntry[ 0 ],
+ customEntry[ 1 ], customEntry[ 2 ] );
+ } else {
+ f =3D new Private( *it );
+ }
+ fields.append( new Field( f ) );
+ }
+
+ return fields;
+}
+
+bool Field::equals( Field *field )
+{
+ bool sameId =3D ( d->fieldId() =3D=3D field->d->fieldId() );
+
+ if ( !sameId ) return false;
+
+ if ( d->fieldId() !=3D Private::CustomField ) return true;
+
+ return d->key() =3D=3D field->d->key();
+}
+
+Field *Field::createCustomField( const QString &label, int category,
+ const QString &key, const QString &app )
+{
+ Field *field =3D new Field( new Private( Private::CustomField,
+ category | CustomCategory,
+ label, key, app ) );
+ Private::mCustomFields.append( field );
+
+ return field;
+}
diff --git a/kabc/scripts/addressee.src.cpp b/kabc/scripts/addressee.src.cpp
deleted file mode 100644
index 99c0eb1..0000000
--- a/kabc/scripts/addressee.src.cpp
+++ /dev/null
@@ -1,1136 +0,0 @@
-/*
- This file is part of libkabc.
- Copyright (c) 2001 Cornelius Schumacher
- Copyright (c) 2003 Carsten Pfeiffer
- Copyright (c) 2005 Ingo Kloecker
-
- 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 Lice=
nse
- 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
-#include
-#include
-
-#include
-#include
-#include
-#include
-
-#include "addresseehelper.h"
-#include "field.h"
-#ifndef KDEPIM_NO_KRESOURCES
-#include "resource.h"
-#endif
-#include "sortmode.h"
-
-#include "addressee.h"
-
-using namespace KABC;
-
-static bool matchBinaryPattern( int value, int pattern );
-
-template
-static bool listEquals( const QList&, const QList& );
-static bool listEquals( const QStringList&, const QStringList& );
-static bool emailsEquals( const QStringList&, const QStringList& );
-
-class Addressee::Private : public QSharedData
-{
- public:
- Private()
- : mUid( KRandom::randomString( 10 ) ),
-#ifndef KDEPIM_NO_KRESOURCES
- mResource( 0 ),
-#endif
- mEmpty( true ), mChanged( false )
- {
- }
-
- Private( const Private &other )
- : QSharedData( other )
-#ifndef KDEPIM_NO_KRESOURCES
- ,mResource( 0 )
-#endif
- {
- mUid =3D other.mUid;
- --VARIABLES_ASSIGNMENT--
-
- mPhoneNumbers =3D other.mPhoneNumbers;
- mAddresses =3D other.mAddresses;
- mKeys =3D other.mKeys;
- mEmails =3D other.mEmails;
- mCategories =3D other.mCategories;
- mCustom =3D other.mCustom;
-
-#ifndef KDEPIM_NO_KRESOURCES
- mResource =3D other.mResource;
-#endif
- mEmpty =3D other.mEmpty;
- mChanged =3D other.mChanged;
- }
-
- ~Private()
- {
- }
-
- QString mUid;
- --VARIABLES--
-
- PhoneNumber::List mPhoneNumbers;
- Address::List mAddresses;
- Key::List mKeys;
- QStringList mEmails;
- QStringList mCategories;
- QStringList mCustom;
-
-#ifndef KDEPIM_NO_KRESOURCES
- Resource *mResource;
-#endif
-
- bool mEmpty :1;
- bool mChanged :1;
-
- static KABC::SortMode *mSortMode;
-};
-
-KABC::SortMode *Addressee::Private::mSortMode =3D 0;
-
-Addressee::Addressee()
- : d( new Private )
-{
-}
-
-Addressee::~Addressee()
-{
-}
-
-Addressee::Addressee( const Addressee &other )
- : d( other.d )
-{
-}
-
-Addressee& Addressee::operator=3D( const Addressee &other )
-{
- if ( this !=3D &other )
- d =3D other.d;
-
- return *this;
-}
-
-bool Addressee::operator=3D=3D( const Addressee &a ) const
-{
- if ( d->mUid !=3D a.d->mUid ) {
- kDebug() << "uid differs";
- return false;
- }
- --EQUALSTEST--
- if ( ( d->mUrl.isValid() || a.d->mUrl.isValid() ) &&
- ( d->mUrl !=3D a.d->mUrl ) ) {
- kDebug() << "url differs";
- return false;
- }
- if ( !listEquals( d->mPhoneNumbers, a.d->mPhoneNumbers ) ) {
- kDebug() << "phoneNumbers differs";
- return false;
- }
- if ( !listEquals( d->mAddresses, a.d->mAddresses ) ) {
- kDebug() << "addresses differs";
- return false;
- }
- if ( !listEquals( d->mKeys, a.d->mKeys ) ) {
- kDebug() << "keys differs";
- return false;
- }
- if ( !emailsEquals( d->mEmails, a.d->mEmails ) ) {
- kDebug() << "emails differs";
- return false;
- }
- if ( !listEquals( d->mCategories, a.d->mCategories ) ) {
- kDebug() << "categories differs";
- return false;
- }
- if ( !listEquals( d->mCustom, a.d->mCustom ) ) {
- kDebug() << "custom differs";
- return false;
- }
-
- return true;
-}
-
-bool Addressee::operator!=3D( const Addressee &a ) const
-{
- return !( a =3D=3D *this );
-}
-
-bool Addressee::isEmpty() const
-{
- return d->mEmpty;
-}
-
-void Addressee::setUid( const QString &id )
-{
- if ( id =3D=3D d->mUid ) return;
- d->mEmpty =3D false;
- d->mUid =3D id;
-}
-
-QString Addressee::uid() const
-{
- return d->mUid;
-}
-
-QString Addressee::uidLabel()
-{
- return i18n( "Unique Identifier" );
-}
-
---DEFINITIONS--
-
-void Addressee::setNameFromString( const QString &s )
-{
- QString str =3D s;
- //remove enclosing quotes from string
- if ( str.length() > 1 &&
- s[ 0 ] =3D=3D QLatin1Char( '"' ) &&
- s[ s.length() - 1 ] =3D=3D QLatin1Char( '"' ) ) {
- str =3D s.mid( 1, s.length() - 2 );
- }
-
- setFormattedName( str );
- setName( str );
-
- // clear all name parts
- setPrefix( QString() );
- setGivenName( QString() );
- setAdditionalName( QString() );
- setFamilyName( QString() );
- setSuffix( QString() );
-
- if ( str.isEmpty() )
- return;
-
- static QString spaceStr =3D QString::fromLatin1( " " );
- static QString emptyStr =3D QString::fromLatin1( "" );
- AddresseeHelper *helper =3D AddresseeHelper::self();
-
- int i =3D str.indexOf( QLatin1Char( ',' ) );
- if ( i < 0 ) {
- QStringList parts =3D str.split( spaceStr );
- int leftOffset =3D 0;
- int rightOffset =3D parts.count() - 1;
-
- QString suffix;
- while ( rightOffset >=3D 0 ) {
- if ( helper->containsSuffix( parts[ rightOffset ] ) ) {
- suffix.prepend( parts[ rightOffset ] + ( suffix.isEmpty() ? emptyS=
tr : spaceStr ) );
- rightOffset--;
- } else
- break;
- }
- setSuffix( suffix );
-
- if ( rightOffset < 0 )
- return;
-
- if ( rightOffset - 1 >=3D 0 && helper->containsPrefix( parts[ rightOff=
set - 1 ].toLower() ) ) {
- setFamilyName( parts[ rightOffset - 1 ] + spaceStr + parts[ rightOff=
set ] );
- rightOffset--;
- } else {
- if ( helper->tradeAsFamilyName() )
- setFamilyName( parts[ rightOffset ] );
- else
- setGivenName( parts[ rightOffset ] );
- }
-
- QString prefix;
- while ( leftOffset < rightOffset ) {
- if ( helper->containsTitle( parts[ leftOffset ] ) ) {
- prefix.append( ( prefix.isEmpty() ? emptyStr : spaceStr ) + parts[=
leftOffset ] );
- leftOffset++;
- } else
- break;
- }
- setPrefix( prefix );
-
- if ( leftOffset < rightOffset ) {
- setGivenName( parts[ leftOffset ] );
- leftOffset++;
- }
-
- QString additionalName;
- while ( leftOffset < rightOffset ) {
- additionalName.append( ( additionalName.isEmpty() ? emptyStr : space=
Str ) + parts[ leftOffset ] );
- leftOffset++;
- }
- setAdditionalName( additionalName );
- } else {
- QString part1 =3D str.left( i );
- QString part2 =3D str.mid( i + 1 );
-
- QStringList parts =3D part1.split( spaceStr );
- int leftOffset =3D 0;
- int rightOffset =3D parts.count() - 1;
-
- if ( parts.count() > 0 ) {
-
- QString suffix;
- while ( rightOffset >=3D 0 ) {
- if ( helper->containsSuffix( parts[ rightOffset ] ) ) {
- suffix.prepend( parts[ rightOffset ] + ( suffix.isEmpty() ? empt=
yStr : spaceStr ) );
- rightOffset--;
- } else
- break;
- }
- setSuffix( suffix );
-
- if ( rightOffset - 1 >=3D 0 && helper->containsPrefix( parts[ rightO=
ffset - 1 ].toLower() ) ) {
- setFamilyName( parts[ rightOffset - 1 ] + spaceStr + parts[ rightO=
ffset ] );
- rightOffset--;
- } else
- setFamilyName( parts[ rightOffset ] );
-
- QString prefix;
- while ( leftOffset < rightOffset ) {
- if ( helper->containsTitle( parts[ leftOffset ] ) ) {
- prefix.append( ( prefix.isEmpty() ? emptyStr : spaceStr ) + part=
s[ leftOffset ] );
- leftOffset++;
- } else
- break;
- }
- } else {
- setPrefix( QString() );
- setFamilyName( QString() );
- setSuffix( QString() );
- }
-
- parts =3D part2.split( spaceStr );
-
- leftOffset =3D 0;
- rightOffset =3D parts.count();
-
- if ( parts.count() > 0 ) {
-
- QString prefix;
- while ( leftOffset < rightOffset ) {
- if ( helper->containsTitle( parts[ leftOffset ] ) ) {
- prefix.append( ( prefix.isEmpty() ? emptyStr : spaceStr ) + part=
s[ leftOffset ] );
- leftOffset++;
- } else
- break;
- }
- setPrefix( prefix );
-
- if ( leftOffset < rightOffset ) {
- setGivenName( parts[ leftOffset ] );
- leftOffset++;
- }
-
- QString additionalName;
- while ( leftOffset < rightOffset ) {
- additionalName.append( ( additionalName.isEmpty() ? emptyStr : spa=
ceStr ) + parts[ leftOffset ] );
- leftOffset++;
- }
- setAdditionalName( additionalName );
- } else {
- setGivenName( QString() );
- setAdditionalName( QString() );
- }
- }
-}
-
-QString Addressee::realName() const
-{
- QString n( formattedName() );
- if ( !n.isEmpty() )
- return n;
-
- n =3D assembledName();
- if ( !n.isEmpty() )
- return n;
-
- n =3D name();
- if ( !n.isEmpty() )
- return n;
-
- return organization();
-}
-
-QString Addressee::assembledName() const
-{
- const QString name =3D prefix() + QLatin1Char( ' ' ) +
- givenName() + QLatin1Char( ' ' ) +
- additionalName() + QLatin1Char( ' ' ) +
- familyName() + QLatin1Char( ' ' ) +
- suffix();
-
- return name.simplified();
-}
-
-QString Addressee::fullEmail( const QString &email ) const
-{
- QString e;
- if ( email.isNull() ) {
- e =3D preferredEmail();
- } else {
- e =3D email;
- }
- if ( e.isEmpty() ) return QString();
-
- QString text;
- if ( realName().isEmpty() )
- text =3D e;
- else {
- QRegExp needQuotes( QLatin1String( "[^ 0-9A-Za-z\\x0080-\\xFFFF]" ) );
- if ( realName().indexOf( needQuotes ) !=3D -1 ) {
- QString name =3D realName();
- name.replace( QLatin1String( "\"" ), QLatin1String( "\\\"" ) );
- text =3D QLatin1String( "\"" ) + name + QLatin1String( "\" <" ) + e =
+ QLatin1Char( '>' );
- } else
- text =3D realName() + QLatin1String( " <" ) + e + QLatin1Char( '>' );
- }
-
- return text;
-}
-
-void Addressee::insertEmail( const QString &email, bool preferred )
-{
- if ( email.simplified().isEmpty() )
- return;
-
- if ( d->mEmails.contains( email ) ) {
- if ( !preferred || d->mEmails.first() =3D=3D email )
- return;
-
- d->mEmails.removeAll( email );
- d->mEmails.prepend( email );
- } else {
- d->mEmpty =3D false;
- if ( preferred ) {
- d->mEmails.prepend( email );
- } else {
- d->mEmails.append( email );
- }
- }
-}
-
-void Addressee::removeEmail( const QString &email )
-{
- if ( d->mEmails.contains( email ) ) {
- d->mEmails.removeAll( email );
- }
-}
-
-QString Addressee::preferredEmail() const
-{
- if ( d->mEmails.count() =3D=3D 0 )
- return QString();
- else
- return d->mEmails.first();
-}
-
-QStringList Addressee::emails() const
-{
- return d->mEmails;
-}
-
-void Addressee::setEmails( const QStringList& emails )
-{
- d->mEmails =3D emails;
-}
-void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber )
-{
- d->mEmpty =3D false;
-
- PhoneNumber::List::Iterator it;
- for ( it =3D d->mPhoneNumbers.begin(); it !=3D d->mPhoneNumbers.end(); +=
+it ) {
- if ( ( *it ).id() =3D=3D phoneNumber.id() ) {
- *it =3D phoneNumber;
- return;
- }
- }
- if ( !phoneNumber.number().simplified().isEmpty() )
- d->mPhoneNumbers.append( phoneNumber );
-}
-
-void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber )
-{
- PhoneNumber::List::Iterator it;
- for ( it =3D d->mPhoneNumbers.begin(); it !=3D d->mPhoneNumbers.end(); +=
+it ) {
- if ( ( *it ).id() =3D=3D phoneNumber.id() ) {
- d->mPhoneNumbers.erase( it );
- return;
- }
- }
-}
-
-PhoneNumber Addressee::phoneNumber( PhoneNumber::Type type ) const
-{
- PhoneNumber phoneNumber( QString(), type );
- PhoneNumber::List::ConstIterator it;
- for ( it =3D d->mPhoneNumbers.constBegin(); it !=3D d->mPhoneNumbers.con=
stEnd(); ++it ) {
- if ( matchBinaryPattern( ( *it ).type(), type ) ) {
- if ( ( *it ).type() & PhoneNumber::Pref ) {
- return ( *it );
- } else if ( phoneNumber.number().isEmpty() ) {
- phoneNumber =3D ( *it );
- }
- }
- }
-
- return phoneNumber;
-}
-
-PhoneNumber::List Addressee::phoneNumbers() const
-{
- return d->mPhoneNumbers;
-}
-
-PhoneNumber::List Addressee::phoneNumbers( PhoneNumber::Type type ) const
-{
- PhoneNumber::List list;
-
- PhoneNumber::List::ConstIterator it;
- PhoneNumber::List::ConstIterator end( d->mPhoneNumbers.constEnd() );
- for ( it =3D d->mPhoneNumbers.constBegin(); it !=3D end; ++it ) {
- if ( matchBinaryPattern( ( *it ).type(), type ) ) {
- list.append( *it );
- }
- }
- return list;
-}
-
-PhoneNumber Addressee::findPhoneNumber( const QString &id ) const
-{
- PhoneNumber::List::ConstIterator it;
- PhoneNumber::List::ConstIterator end( d->mPhoneNumbers.constEnd() );
- for ( it =3D d->mPhoneNumbers.constBegin(); it !=3D end; ++it ) {
- if ( ( *it ).id() =3D=3D id ) {
- return *it;
- }
- }
- return PhoneNumber();
-}
-
-void Addressee::insertKey( const Key &key )
-{
- d->mEmpty =3D false;
-
- Key::List::Iterator it;
- for ( it =3D d->mKeys.begin(); it !=3D d->mKeys.end(); ++it ) {
- if ( ( *it ).id() =3D=3D key.id() ) {
- *it =3D key;
- return;
- }
- }
- d->mKeys.append( key );
-}
-
-void Addressee::removeKey( const Key &key )
-{
- Key::List::Iterator it;
- for ( it =3D d->mKeys.begin(); it !=3D d->mKeys.end(); ++it ) {
- if ( ( *it ).id() =3D=3D key.id() ) {
- d->mKeys.removeAll( key );
- return;
- }
- }
-}
-
-Key Addressee::key( Key::Type type, QString customTypeString ) const
-{
- Key::List::ConstIterator it;
- Key::List::ConstIterator end( d->mKeys.constEnd() );
- for ( it =3D d->mKeys.constBegin(); it !=3D end; ++it ) {
- if ( ( *it ).type() =3D=3D type ) {
- if ( type =3D=3D Key::Custom ) {
- if ( customTypeString.isEmpty() ) {
- return *it;
- } else {
- if ( ( *it ).customTypeString() =3D=3D customTypeString )
- return ( *it );
- }
- } else {
- return *it;
- }
- }
- }
- return Key( QString(), type );
-}
-
-void Addressee::setKeys( const Key::List& list )
-{
- d->mKeys =3D list;
-}
-
-Key::List Addressee::keys() const
-{
- return d->mKeys;
-}
-
-Key::List Addressee::keys( Key::Type type, QString customTypeString ) const
-{
- Key::List list;
-
- Key::List::ConstIterator it;
- Key::List::ConstIterator end( d->mKeys.constEnd() );
- for ( it =3D d->mKeys.constBegin(); it !=3D end; ++it ) {
- if ( ( *it ).type() =3D=3D type ) {
- if ( type =3D=3D Key::Custom ) {
- if ( customTypeString.isEmpty() ) {
- list.append( *it );
- } else {
- if ( ( *it ).customTypeString() =3D=3D customTypeString )
- list.append( *it );
- }
- } else {
- list.append( *it );
- }
- }
- }
- return list;
-}
-
-Key Addressee::findKey( const QString &id ) const
-{
- Key::List::ConstIterator it;
- Key::List::ConstIterator end( d->mKeys.constEnd() );
- for ( it =3D d->mKeys.constBegin(); it !=3D end; ++it ) {
- if ( ( *it ).id() =3D=3D id ) {
- return *it;
- }
- }
- return Key();
-}
-
-QString Addressee::toString() const
-{
- QString str;
-
- str +=3D QLatin1String( "Addressee {\n" );
- str +=3D QString::fromLatin1( " Uid: %1\n" ).arg( uid() );
-
- --DEBUG--
-
- str +=3D QLatin1String( " Emails {\n" );
- const QStringList e =3D emails();
- QStringList::ConstIterator it;
- for ( it =3D e.begin(); it !=3D e.end(); ++it ) {
- str +=3D QString::fromLatin1( " %1\n" ).arg( *it );
- }
- str +=3D QLatin1String( " }\n" );
-
- str +=3D QLatin1String( " PhoneNumbers {\n" );
- const PhoneNumber::List p =3D phoneNumbers();
- PhoneNumber::List::ConstIterator it2;
- for ( it2 =3D p.begin(); it2 !=3D p.end(); ++it2 ) {
- str +=3D ( *it2 ).toString();
- }
- str +=3D QLatin1String( " }\n" );
-
- str +=3D QLatin1String( " Addresses {\n" );
- const Address::List a =3D addresses();
- Address::List::ConstIterator it3;
- for ( it3 =3D a.begin(); it3 !=3D a.end(); ++it3 ) {
- str +=3D ( *it3 ).toString();
- }
- str +=3D QLatin1String( " }\n" );
-
- str +=3D QLatin1String( " Keys {\n" );
- const Key::List k =3D keys();
- Key::List::ConstIterator it4;
- for ( it4 =3D k.begin(); it4 !=3D k.end(); ++it4 ) {
- str +=3D ( *it4 ).toString();
- }
- str +=3D QLatin1String( " }\n" );
-
- str +=3D QLatin1String( "}\n" );
-
- return str;
-}
-
-
-void Addressee::insertAddress( const Address &address )
-{
- if ( address.isEmpty() )
- return;
-
- d->mEmpty =3D false;
-
- Address::List::Iterator it;
- for ( it =3D d->mAddresses.begin(); it !=3D d->mAddresses.end(); ++it ) {
- if ( ( *it ).id() =3D=3D address.id() ) {
- *it =3D address;
- return;
- }
- }
-
- d->mAddresses.append( address );
-}
-
-void Addressee::removeAddress( const Address &address )
-{
- Address::List::Iterator it;
- for ( it =3D d->mAddresses.begin(); it !=3D d->mAddresses.end(); ++it ) {
- if ( ( *it ).id() =3D=3D address.id() ) {
- d->mAddresses.erase( it );
- return;
- }
- }
-}
-
-Address Addressee::address( Address::Type type ) const
-{
- Address address( type );
- Address::List::ConstIterator it;
- Address::List::ConstIterator end( d->mAddresses.constEnd() );
- for ( it =3D d->mAddresses.constBegin(); it !=3D end; ++it ) {
- if ( matchBinaryPattern( ( *it ).type(), type ) ) {
- if ( ( *it ).type() & Address::Pref ) {
- return ( *it );
- } else if ( address.isEmpty() ) {
- address =3D ( *it );
- }
- }
- }
-
- return address;
-}
-
-Address::List Addressee::addresses() const
-{
- return d->mAddresses;
-}
-
-Address::List Addressee::addresses( Address::Type type ) const
-{
- Address::List list;
-
- Address::List::ConstIterator it;
- Address::List::ConstIterator end( d->mAddresses.constEnd() );
- for ( it =3D d->mAddresses.constBegin(); it !=3D end; ++it ) {
- if ( matchBinaryPattern( ( *it ).type(), type ) ) {
- list.append( *it );
- }
- }
-
- return list;
-}
-
-Address Addressee::findAddress( const QString &id ) const
-{
- Address::List::ConstIterator it;
- Address::List::ConstIterator end( d->mAddresses.constEnd() );
- for ( it =3D d->mAddresses.constBegin(); it !=3D end; ++it ) {
- if ( ( *it ).id() =3D=3D id ) {
- return *it;
- }
- }
- return Address();
-}
-
-void Addressee::insertCategory( const QString &c )
-{
- d->mEmpty =3D false;
-
- if ( d->mCategories.contains( c ) )
- return;
-
- d->mCategories.append( c );
-}
-
-void Addressee::removeCategory( const QString &category )
-{
- if ( d->mCategories.contains( category ) ) {
- d->mCategories.removeAll( category );
- }
-}
-
-bool Addressee::hasCategory( const QString &category ) const
-{
- return d->mCategories.contains( category );
-}
-
-void Addressee::setCategories( const QStringList &c )
-{
- d->mEmpty =3D false;
-
- d->mCategories =3D c;
-}
-
-QStringList Addressee::categories() const
-{
- return d->mCategories;
-}
-
-void Addressee::insertCustom( const QString &app, const QString &name,
- const QString &value )
-{
- if ( value.isEmpty() || name.isEmpty() || app.isEmpty() ) {
- return;
- }
-
- d->mEmpty =3D false;
-
- QString qualifiedName =3D app + QLatin1Char( '-' ) + name + QLatin1Char(=
':' );
-
- QStringList::Iterator it;
- QStringList::Iterator end( d->mCustom.end() );
- for ( it =3D d->mCustom.begin(); it !=3D end; ++it ) {
- if ( ( *it ).startsWith( qualifiedName ) ) {
- ( *it ) =3D qualifiedName + value;
- return;
- }
- }
-
- d->mCustom.append( qualifiedName + value );
-}
-
-void Addressee::removeCustom( const QString &app, const QString &name )
-{
- const QString qualifiedName =3D app + QLatin1Char( '-' ) + name + QLatin=
1Char( ':' );
-
- QStringList::Iterator it;
- for ( it =3D d->mCustom.begin(); it !=3D d->mCustom.end(); ++it ) {
- if ( ( *it ).startsWith( qualifiedName ) ) {
- d->mCustom.erase( it );
- return;
- }
- }
-}
-
-QString Addressee::custom( const QString &app, const QString &name ) const
-{
- QString qualifiedName =3D app + QLatin1Char( '-' ) + name + QLatin1Char(=
':' );
- QString value;
-
- QStringList::ConstIterator it;
- QStringList::ConstIterator end( d->mCustom.constEnd() );
- for ( it =3D d->mCustom.constBegin(); it !=3D end; ++it ) {
- if ( ( *it ).startsWith( qualifiedName ) ) {
- value =3D ( *it ).mid( ( *it ).indexOf( QLatin1Char( ':' ) ) + 1 );
- break;
- }
- }
-
- return value;
-}
-
-void Addressee::setCustoms( const QStringList &l )
-{
- d->mEmpty =3D false;
- d->mCustom =3D l;
-}
-
-QStringList Addressee::customs() const
-{
- return d->mCustom;
-}
-
-void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullN=
ame,
- QString &email )
-{
- // This is a simplified version of KPIM::splitAddress().
-
- fullName.clear();
- email.clear();
- if ( rawEmail.isEmpty() )
- return; // KPIM::AddressEmpty;
-
- // The code works on 8-bit strings, so convert the input to UTF-8.
- QByteArray address =3D rawEmail.toUtf8();
-
- QByteArray displayName;
- QByteArray addrSpec;
- QByteArray comment;
-
- // The following is a primitive parser for a mailbox-list (cf. RFC 2822).
- // The purpose is to extract a displayable string from the mailboxes.
- // Comments in the addr-spec are not handled. No error checking is done.
-
- enum { TopLevel, InComment, InAngleAddress } context =3D TopLevel;
- bool inQuotedString =3D false;
- int commentLevel =3D 0;
- bool stop =3D false;
-
- for ( char* p =3D address.data(); *p && !stop; ++p ) {
- switch ( context ) {
- case TopLevel : {
- switch ( *p ) {
- case '"' : inQuotedString =3D !inQuotedString;
- displayName +=3D *p;
- break;
- case '(' : if ( !inQuotedString ) {
- context =3D InComment;
- commentLevel =3D 1;
- }
- else
- displayName +=3D *p;
- break;
- case '<' : if ( !inQuotedString ) {
- context =3D InAngleAddress;
- }
- else
- displayName +=3D *p;
- break;
- case '\\' : // quoted character
- displayName +=3D *p;
- ++p; // skip the '\'
- if ( *p )
- displayName +=3D *p;
- else
- //return KPIM::UnexpectedEnd;
- goto ABORT_PARSING;
- break;
- case ',' : if ( !inQuotedString ) {
- //if ( allowMultipleAddresses )
- // stop =3D true;
- //else
- // return KPIM::UnexpectedComma;
- goto ABORT_PARSING;
- }
- else
- displayName +=3D *p;
- break;
- default : displayName +=3D *p;
- }
- break;
- }
- case InComment : {
- switch ( *p ) {
- case '(' : ++commentLevel;
- comment +=3D *p;
- break;
- case ')' : --commentLevel;
- if ( commentLevel =3D=3D 0 ) {
- context =3D TopLevel;
- comment +=3D ' '; // separate the text of several comme=
nts
- }
- else
- comment +=3D *p;
- break;
- case '\\' : // quoted character
- comment +=3D *p;
- ++p; // skip the '\'
- if ( *p )
- comment +=3D *p;
- else
- //return KPIM::UnexpectedEnd;
- goto ABORT_PARSING;
- break;
- default : comment +=3D *p;
- }
- break;
- }
- case InAngleAddress : {
- switch ( *p ) {
- case '"' : inQuotedString =3D !inQuotedString;
- addrSpec +=3D *p;
- break;
- case '>' : if ( !inQuotedString ) {
- context =3D TopLevel;
- }
- else
- addrSpec +=3D *p;
- break;
- case '\\' : // quoted character
- addrSpec +=3D *p;
- ++p; // skip the '\'
- if ( *p )
- addrSpec +=3D *p;
- else
- //return KPIM::UnexpectedEnd;
- goto ABORT_PARSING;
- break;
- default : addrSpec +=3D *p;
- }
- break;
- }
- } // switch ( context )
- }
-
-ABORT_PARSING:
- displayName =3D displayName.trimmed();
- comment =3D comment.trimmed();
- addrSpec =3D addrSpec.trimmed();
-
- fullName =3D QString::fromUtf8( displayName );
- email =3D QString::fromUtf8( addrSpec );
-
- // check for errors
- if ( inQuotedString )
- return; // KPIM::UnbalancedQuote;
- if ( context =3D=3D InComment )
- return; // KPIM::UnbalancedParens;
- if ( context =3D=3D InAngleAddress )
- return; // KPIM::UnclosedAngleAddr;
-
- if ( addrSpec.isEmpty() ) {
- if ( displayName.isEmpty() )
- return; // KPIM::NoAddressSpec;
- else {
- //addrSpec =3D displayName;
- //displayName.truncate( 0 );
- // Address of the form "foo@bar" or "foo@bar (Name)".
- email =3D fullName;
- fullName =3D QString::fromUtf8( comment );
- }
- }
-
- email =3D email.toLower();
- // Check that we do not have any extra characters on the end of the
- // strings
- unsigned int len =3D fullName.length();
- if ( fullName[ 0 ] =3D=3D QLatin1Char( '"' ) && fullName[ len - 1 ] =3D=
=3D QLatin1Char( '"' ) ) {
- fullName =3D fullName.mid( 1, len - 2 );
- }
-}
-
-#ifndef KDEPIM_NO_KRESOURCES
-void Addressee::setResource( Resource *resource )
-{
- d->mResource =3D resource;
-}
-
-Resource *Addressee::resource() const
-{
- return d->mResource;
-}
-#endif
-
-void Addressee::setChanged( bool value )
-{
- d->mChanged =3D value;
-}
-
-bool Addressee::changed() const
-{
- return d->mChanged;
-}
-
-void Addressee::setSortMode( KABC::SortMode *mode )
-{
- Private::mSortMode =3D mode;
-}
-
-bool Addressee::operator< ( const Addressee &addr ) const
-{
- if ( !Private::mSortMode )
- return false;
- else
- return Private::mSortMode->lesser( *this, addr );
-}
-
-QString Addressee::mimeType()
-{
- return QLatin1String( "text/directory" );
-}
-
-QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a )
-{
- s << a.d->mUid;
-
- --STREAMOUT--
- s << a.d->mPhoneNumbers;
- s << a.d->mAddresses;
- s << a.d->mEmails;
- s << a.d->mCategories;
- s << a.d->mCustom;
- s << a.d->mKeys;
- return s;
-}
-
-QDataStream &KABC::operator>>( QDataStream &s, Addressee &a )
-{
- s >> a.d->mUid;
-
- --STREAMIN--
- s >> a.d->mPhoneNumbers;
- s >> a.d->mAddresses;
- s >> a.d->mEmails;
- s >> a.d->mCategories;
- s >> a.d->mCustom;
- s >> a.d->mKeys;
-
- a.d->mEmpty =3D false;
-
- return s;
-}
-
-bool matchBinaryPattern( int value, int pattern )
-{
- /**
- We want to match all telephonnumbers/addresses which have the bits in =
the
- pattern set. More are allowed.
- if pattern =3D=3D 0 we have a special handling, then we want only thos=
e with
- exactly no bit set.
- */
- if ( pattern =3D=3D 0 )
- return ( value =3D=3D 0 );
- else
- return ( pattern =3D=3D ( pattern & value ) );
-}
-
-template
-bool listEquals( const QList &list, const QList &pattern )
-{
- if ( list.count() !=3D pattern.count() )
- return false;
- const int numberOfElement( list.count() );
- for ( int i =3D 0; i < numberOfElement; ++i ) {
- if ( !pattern.contains( list[ i ] ) ) {
- return false;
- }
- }
-
- return true;
-}
-
-bool listEquals( const QStringList &list, const QStringList &pattern )
-{
- if ( list.count() !=3D pattern.count() )
- return false;
-
- const int numberOfElement( list.count() );
- for ( int i =3D 0; i < numberOfElement; ++i ) {
- if ( !pattern.contains( list[ i ] ) ) {
- return false;
- }
- }
-
- return true;
-}
-
-bool emailsEquals( const QStringList &list, const QStringList &pattern )
-{
- if ( list.count() !=3D pattern.count() )
- return false;
-
- if ( list.isEmpty() )
- return true;
-
- if ( list.first() !=3D pattern.first() )
- return false;
-
- QStringList::ConstIterator it;
- QStringList::ConstIterator end( list.constEnd() );
- for ( it =3D list.constBegin(); it !=3D end; ++it ) {
- if ( !pattern.contains( *it ) ) {
- return false;
- }
- }
-
- return true;
-}
diff --git a/kabc/scripts/addressee.src.h b/kabc/scripts/addressee.src.h
deleted file mode 100644
index db438e3..0000000
--- a/kabc/scripts/addressee.src.h
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- This file is part of libkabc.
- Copyright (c) 2001 Cornelius Schumacher
-
- 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 Lice=
nse
- 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.
-*/
-
-#ifndef KABC_ADDRESSEE_SRC_H
-#define KABC_ADDRESSEE_SRC_H
-
-#include
-#include
-#include
-
-#include
-
-#include "kabc/address.h"
-#include "kabc/geo.h"
-#include "kabc/key.h"
-#include "kabc/phonenumber.h"
-#include "kabc/picture.h"
-#include "kabc/secrecy.h"
-#include "kabc/sound.h"
-#include "kabc/timezone.h"
-#include "kabc/addresseelist.h" // for typedef QList List;
-
-namespace KABC {
-
-#ifndef KDEPIM_NO_KRESOURCES
-class Resource;
-#endif
-class SortMode;
-
-/**
- @short address book entry
-
- This class represents an entry in the address book.
-
- The data of this class is implicitly shared. You can pass this class by =
value.
-
- If you need the name of a field for presenting it to the user you should=
use
- the functions ending in Label(). They return a translated string which c=
an be
- used as label for the corresponding field.
-
- About the name fields:
-
- givenName() is the first name and familyName() the last name. In some
- countries the family name comes first, that's the reason for the
- naming. formattedName() is the full name with the correct formatting.
- It is used as an override, when the correct formatting can't be generated
- from the other name fields automatically.
-
- realName() returns a fully formatted name(). It uses formattedName, if s=
et,
- otherwise it constucts the name from the name fields. As fallback, if
- nothing else is set it uses name().
-
- name() is the NAME type of RFC2426. It can be used as internal name for =
the
- data enty, but shouldn't be used for displaying the data to the user.
- */
-class KABC_EXPORT Addressee
-{
- friend KABC_EXPORT QDataStream &operator<<( QDataStream &, const Address=
ee & );
- friend KABC_EXPORT QDataStream &operator>>( QDataStream &, Addressee & );
-
- public:
- /**
- A list of addressee objects
- */
- typedef AddresseeList List;
- /**
- A map from unique identifier to addressee.
-
- @see uid()
- */
- typedef QMap Map;
-
- /**
- Construct an empty address book entry.
- */
- Addressee();
-
- /**
- Destroys the address book entry.
- */
- ~Addressee();
-
- /**
- Copy constructor.
- */
- Addressee( const Addressee & );
-
- /**
- Assignment operator.
-
- @return a reference to @c this
- */
- Addressee &operator=3D( const Addressee & );
-
- /**
- Equality operator.
-
- @return @c true if @c this and the given addressee are equal,
- otherwise @c false
- */
- bool operator=3D=3D( const Addressee & ) const;
-
- /**
- Not-equal operator.
-
- @return @c true if @c this and the given addressee are not equal,
- otherwise @c false
- */
- bool operator!=3D( const Addressee & ) const;
-
- /**
- Return, if the address book entry is empty.
- */
- bool isEmpty() const;
-
- /**
- Set unique identifier.
-
- @param uid the KABC unique identifier
- */
- void setUid( const QString &uid );
- /**
- Return unique identifier.
- */
- QString uid() const;
- /**
- Return translated label for uid field.
- */
- static QString uidLabel();
-
- --DECLARATIONS--
- /**
- Set name fields by parsing the given string and trying to associate =
the
- parts of the string with according fields. This function should prob=
ably
- be a bit more clever.
- */
- void setNameFromString( const QString & );
-
- /**
- Return the name of the addressee. This is calculated from all the na=
me
- fields.
- */
- QString realName() const;
-
- /**
- Return the name that consists of all name parts.
- */
- QString assembledName() const;
-
- /**
- Return email address including real name.
-
- @param email Email address to be used to construct the full email st=
ring.
- If this is QString() the preferred email address is use=
d.
- */
- QString fullEmail( const QString &email=3DQString() ) const;
-
- /**
- Insert an email address. If the email address already exists in this
- addressee it is not duplicated.
-
- @param email Email address
- @param preferred Set to true, if this is the preferred email address=
of
- the addressee.
- */
- void insertEmail( const QString &email, bool preferred=3Dfalse );
-
- /**
- Remove email address. If the email address doesn't exist, nothing ha=
ppens.
-
- @param email Email address to remove
- */
- void removeEmail( const QString &email );
-
- /**
- Return preferred email address. This is the first email address or t=
he
- last one added with insertEmail() with a set preferred parameter.
- */
- QString preferredEmail() const;
-
- /**
- Return list of all email addresses.
- */
- QStringList emails() const;
-
- /**
- Set the emails to @p list.
- The first email address gets the preferred one!
- @param list The list of email addresses.
- */
- void setEmails( const QStringList& list);
-
- /**
- Insert a phone number. If a phone number with the same id already ex=
ists
- in this addressee it is not duplicated.
-
- @param phoneNumber The telephone number to insert to the addressee
- */
- void insertPhoneNumber( const PhoneNumber &phoneNumber );
-
- /**
- Remove phone number. If no phone number with the given id exists for=
this
- addresse nothing happens.
-
- @param phoneNumber The telephone number to remove from the addressee
- */
- void removePhoneNumber( const PhoneNumber &phoneNumber );
-
- /**
- Return phone number, which matches the given type.
-
- @param type The type of phone number to get
- */
- PhoneNumber phoneNumber( PhoneNumber::Type type ) const;
-
- /**
- Return list of all phone numbers.
- */
- PhoneNumber::List phoneNumbers() const;
-
- /**
- Return list of phone numbers with a special type.
-
- @param type The type of phone number to get
- */
- PhoneNumber::List phoneNumbers( PhoneNumber::Type type ) const;
-
- /**
- Return phone number with the given id.
-
- @param id The identifier of the phone number to look for.
- See PhoneNumber::id()
- */
- PhoneNumber findPhoneNumber( const QString &id ) const;
-
- /**
- Insert a key. If a key with the same id already exists
- in this addressee it is not duplicated.
-
- @param key The key to insert
- */
- void insertKey( const Key &key );
-
- /**
- Remove a key. If no key with the given id exists for this
- addresse nothing happens.
-
- @param key The key to remove
- */
- void removeKey( const Key &key );
-
- /**
- Return key, which matches the given type.
- If @p type =3D=3D Key::Custom you can specify a string
- that should match. If you leave the string empty, the first
- key with a custom value is returned.
-
- @param type The type of key to look for
- @param customTypeString A string to match custom keys against when
- @p type is @c Key::Custom
- */
- Key key( Key::Type type, QString customTypeString =3D QString() ) cons=
t;
-
- /**
- Return list of all keys.
- */
- Key::List keys() const;
-
- /**
- Set the list of keys
- @param keys The keys to be set.
- */
- void setKeys( const Key::List& keys);
-
- /**
- Return list of keys with a special type.
- If @p type =3D=3D Key::Custom you can specify a string
- that should match. If you leave the string empty, all custom
- keys will be returned.
-
- @param type The type of key to look for
- @param customTypeString A string to match custom keys against when
- @p type is @c Key::Custom
- */
- Key::List keys( Key::Type type, QString customTypeString =3D QString()=
) const;
-
- /**
- Return key with the given id.
-
- @param id The identifier of the key to look for. See Key::id()
- */
- Key findKey( const QString &id ) const;
-
- /**
- Insert an address. If an address with the same id already exists
- in this addressee it is not duplicated.
-
- @param address The address to insert
- */
- void insertAddress( const Address &address );
-
- /**
- Remove address. If no address with the given id exists for this
- addresse nothing happens.
-
- @param address The address to remove
- */
- void removeAddress( const Address &address );
-
- /**
- Return address, which matches the given type.
-
- @param type The type of address to look for
- */
- Address address( Address::Type type ) const;
-
- /**
- Return list of all addresses.
- */
- Address::List addresses() const;
-
- /**
- Return list of addresses with a special type.
-
- @param type The type of addresses to look for
- */
- Address::List addresses( Address::Type type ) const;
-
- /**
- Return address with the given id.
-
- @param id The identifier of the address to look for. See Address::id=
()
- */
- Address findAddress( const QString &id ) const;
-
- /**
- Insert category. If the category already exists it is not duplicated.
- */
- void insertCategory( const QString & );
-
- /**
- Remove category.
- */
- void removeCategory( const QString & );
-
- /**
- Return, if addressee has the given category.
- */
- bool hasCategory( const QString & ) const;
-
- /**
- Set categories to given value.
- */
- void setCategories( const QStringList & );
-
- /**
- Return list of all set categories.
- */
- QStringList categories() const;
-
- /**
- Insert custom entry. The entry is identified by the name of the inse=
rting
- application and a unique name. If an entry with the given app and na=
me
- already exists its value is replaced with the new given value.
-
- An empty value isn't allowed (nothing happens if this is called with
- any of the three arguments being empty)
-
- @param app Name of the application inserting this custom entry
- @param name Name of this application specific custom entry
- @param value Value of this application specific custom entry
- */
- void insertCustom( const QString &app, const QString &name,
- const QString &value );
-
- /**
- Remove custom entry.
-
- @param app Name of the application which has inserted this custom en=
try
- @param name Name of this application specific custom entry
- */
- void removeCustom( const QString &app, const QString &name );
-
- /**
- Return value of custom entry, identified by app and entry name.
-
- @param app Name of the application which has inserted this custom en=
try
- @param name Name of this application specific custom entry
- */
- QString custom( const QString &app, const QString &name ) const;
-
- /**
- Set all custom entries.
- */
- void setCustoms( const QStringList & );
-
- /**
- Return list of all custom entries.
- */
- QStringList customs() const;
-
- /**
- Parse full email address. The result is given back in fullName and e=
mail.
-
- @param rawEmail The input string to parse for name and email
- @param fullName The name part of the @p rawEmail input, if it contai=
ned one
- @param email The email part of the @p rawEmail input, if it containe=
d one
- */
- static void parseEmailAddress( const QString &rawEmail, QString &fullN=
ame,
- QString &email );
-
- /**
- Returns string representation of the addressee.
- */
- QString toString() const;
-
-#ifndef KDEPIM_NO_KRESOURCES
- /**
- Set resource where the addressee is from.
-
- @param resource The Resource the addressee is from
- */
- void setResource( Resource *resource );
-
- /**
- Return pointer to resource.
- */
- Resource *resource() const;
-#endif
-
- /**
- Mark addressee as changed.
-
- @param value Sets the status indicating changed data
- */
- void setChanged( bool value );
-
- /**
- Return whether the addressee is changed.
- */
- bool changed() const;
-
- /**
- Sets the sort mode implementation.
-
- Comparing to addressee objects is delegated to an instance
- of a subclass of KABC::SortMode.
-
- @param mode The sort mode implementator to use
- */
- static void setSortMode( KABC::SortMode *mode );
-
- /**
- Return whether this addressee is "less-than" a given one
-
- @param addr The addressee object to compare with
-
- @see setSortMode()
- */
- bool operator< ( const Addressee &addr ) const;
-
- /**
- Returns the MIME type used for Addressees
- */
- static QString mimeType();
-
- private:
- class Private;
- QSharedDataPointer d;
-};
-#ifdef MAKE_KABC_LIB
-KDE_DUMMY_QHASH_FUNCTION( Addressee )
-#endif
-
-KABC_EXPORT QDataStream &operator<<( QDataStream &, const Addressee & );
-KABC_EXPORT QDataStream &operator>>( QDataStream &, Addressee & );
-
-}
-
-#define KABC_ADDRESSEE_METATYPE_DEFINED 1
-Q_DECLARE_METATYPE( KABC::Addressee )
-
-#endif
diff --git a/kabc/scripts/createisomap.pl b/kabc/scripts/createisomap.pl
deleted file mode 100755
index 2726e20..0000000
--- a/kabc/scripts/createisomap.pl
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/perl
-#
-# Create a translation table countryname->iso-code from the entry.desktop
-# files in kdebase/l10n/*/
-#
-# USAGE EXAMPLE:
-# ./createisomap.pl $KDEDIR/share/locale/l10n > countrytransl.map
-#
-# Don't laugh at me. I put this together with an old perl book, perl
-# being a language I've never used before.
-
-@entries =3D <$ARGV[0]/*/entry.desktop>;
-chomp @entries;
-foreach $entry (@entries) {
- local ( $entryiso, @entryfile, @mappings );
- # print "--> $entry\n";
- $entryiso =3D $entry;
- $entryiso =3D~ s/$ARGV[0]\///;
- $entryiso =3D~ s/\/entry\.desktop//;
- # print " $entryiso\n";
- open (IN, $entry);
- @entryfile =3D ;
- close IN;
- chomp @entryfile;
- foreach $entryfileline (@entryfile) {
- if ( $entryfileline =3D~ /^Name.*=3D(.*)$/ ) {
- # push (@mappings, $1 . "\t" . $entryiso );
- print "$1\t$entryiso\n";
- }
- }
-}
-
diff --git a/kabc/scripts/doxygen-preprocess-addressee.sh b/kabc/scripts/do=
xygen-preprocess-addressee.sh
deleted file mode 100755
index a4cfc24..0000000
--- a/kabc/scripts/doxygen-preprocess-addressee.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-if test "$1" =3D "create"; then
- ./makeaddressee
-elif test "$1" =3D "cleanup"; then
- rm -f ../addressee.h ../addressee.cpp ../field.cpp
-fi
diff --git a/kabc/scripts/entrylist b/kabc/scripts/entrylist
deleted file mode 100644
index 328512d..0000000
--- a/kabc/scripts/entrylist
+++ /dev/null
@@ -1,83 +0,0 @@
-# This file describes the fields of an address book entry.
-#
-# The following comma-separated fields are used:
-#
-# Control: A generates accessor functions.
-# L generates a static function for returning a tranlsat=
ed label
-# F generates a Field id and object for generic field ha=
ndling
-# E generate an equality test in Addressee::operator=3D=
=3D().
-# Field Name : A descriptive name which is shown to the user.
-# Comment : A comment helping translators to understand the field =
name
-# Type : C++ type of field.
-# Identifier : A string used in code as variable name etc.
-# Field Category : Categories the field belongs to (see Field::FieldCateg=
ory).
-# Output function: Function used to convert type to string for debug outp=
ut (optional)
-
-ALE,name,,QString,name
-
-ALFE,formatted name,,QString,formattedName,Frequent
-
-ALFE,family name,,QString,familyName,Frequent
-ALFE,given name,,QString,givenName,Frequent
-ALFE,additional names,,QString,additionalName
-ALFE,honorific prefixes,,QString,prefix
-ALFE,honorific suffixes,,QString,suffix
-
-ALFE,nick name,,QString,nickName,Personal
-
-ALFE,birthday,,QDateTime,birthday,Personal,.toString()
-
-#Address address
-LF,home address street,,QString,homeAddressStreet,Address|Personal
-LF,home address post office box,,QString,homeAddressPostOfficeBox,Address|=
Personal
-LF,home address city,,QString,homeAddressLocality,Address|Personal
-LF,home address state,,QString,homeAddressRegion,Address|Personal
-LF,home address zip code,,QString,homeAddressPostalCode,Address|Personal
-LF,home address country,,QString,homeAddressCountry,Address|Personal
-LF,home address label,,QString,homeAddressLabel,Address|Personal
-
-LF,business address street,,QString,businessAddressStreet,Address|Organiza=
tion
-LF,business address post office box,,QString,businessAddressPostOfficeBox,=
Address|Organization
-LF,business address city,,QString,businessAddressLocality,Address|Organiza=
tion
-LF,business address state,,QString,businessAddressRegion,Address|Organizat=
ion
-LF,business address zip code,,QString,businessAddressPostalCode,Address|Or=
ganization
-LF,business address country,,QString,businessAddressCountry,Address|Organi=
zation
-LF,business address label,,QString,businessAddressLabel,Address|Organizati=
on
-
-#phoneNumbers
-LF,home phone,,QString,homePhone,Personal|Frequent
-LF,business phone,,QString,businessPhone,Organization|Frequent
-LF,mobile phone,,QString,mobilePhone,Frequent
-LF,home fax,,QString,homeFax
-LF,business fax,,QString,businessFax
-LF,car phone,,QString,carPhone
-LF,ISDN,,QString,isdn
-LF,pager,,QString,pager
-
-#emails
-LF,email address,,QString,email,Email|Frequent
-
-ALFE,mail client,,QString,mailer,Email
-
-ALE,time zone,,TimeZone,timeZone,,.toString()
-ALE,geographic position,,Geo,geo,,.toString()
-
-ALFE,title,a person's title,QString,title,Organization
-ALFE,role,of a person in an organization,QString,role,Organization
-ALFE,organization,,QString,organization,Organization
-ALFE,department,,QString,department,Organization
-
-ALFE,note,,QString,note
-
-ALE,product identifier,,QString,productId
-ALE,revision date,,QDateTime,revision,,.toString()
-
-ALE,sort string,,QString,sortString
-
-ALF,homepage,,KUrl,url,,.url()
-
-ALE,security class,,Secrecy,secrecy,,.toString()
-
-ALE,logo,,Picture,logo,,.toString()
-ALE,photo,,Picture,photo,,.toString()
-ALE,sound,,Sound,sound,,.toString()
diff --git a/kabc/scripts/field.src.cpp b/kabc/scripts/field.src.cpp
deleted file mode 100644
index 58e0845..0000000
--- a/kabc/scripts/field.src.cpp
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- This file is part of libkabc.
- Copyright (c) 2002 Cornelius Schumacher
-
- 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 Lice=
nse
- 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
-#include
-#include
-#include
-#include
-
-#include "field.h"
-
-using namespace KABC;
-
-class Field::Private
-{
- public:
- Private( int fieldId, int category =3D 0,
- const QString &label =3D QString(),
- const QString &key =3D QString(),
- const QString &app =3D QString() )
- : mFieldId( fieldId ), mCategory( category ), mLabel( label ),
- mKey( key ), mApp( app ) {}
-
- enum FieldId
- {
- CustomField,
- --ENUMS--
- };
-
- int fieldId() { return mFieldId; }
- int category() { return mCategory; }
-
- QString label() { return mLabel; }
- QString key() { return mKey; }
- QString app() { return mApp; }
-
- static Field::List mAllFields;
- static Field::List mDefaultFields;
- static Field::List mCustomFields;
-
- private:
- int mFieldId;
- int mCategory;
-
- QString mLabel;
- QString mKey;
- QString mApp;
-};
-
-Field::List Field::Private::mAllFields;
-Field::List Field::Private::mDefaultFields;
-Field::List Field::Private::mCustomFields;
-
-Field::Field( Private *p )
- : d( p )
-{
-}
-
-Field::~Field()
-{
- delete d;
-}
-
-QString Field::label()
-{
- switch ( d->fieldId() ) {
- --CASELABEL--
- case Private::CustomField:
- return d->label();
- default:
- return i18n( "Unknown Field" );
- }
-}
-
-int Field::category()
-{
- return d->category();
-}
-
-QString Field::categoryLabel( int category )
-{
- switch ( category ) {
- case All:
- return i18n( "All" );
- case Frequent:
- return i18n( "Frequent" );
- case Address:
- return i18nc( "street/postal","Address" );
- case Email:
- return i18n( "Email" );
- case Personal:
- return i18n( "Personal" );
- case Organization:
- return i18n( "Organization" );
- case CustomCategory:
- return i18n( "Custom" );
- default:
- return i18n( "Undefined" );
- }
-}
-
-QString Field::value( const KABC::Addressee &a )
-{
- switch ( d->fieldId() ) {
- --CASEVALUE--
- case Private::Email:
- return a.preferredEmail();
- case Private::Birthday:
- if ( a.birthday().isValid() )
- return a.birthday().date().toString( Qt::ISODate );
- else
- return QString();
- case Private::Url:
- return a.url().prettyUrl();
- case Private::HomePhone:
- {
- PhoneNumber::List::ConstIterator it;
-
- {
- // check for preferred number
- const PhoneNumber::List list =3D a.phoneNumbers( PhoneNumber::Home=
| PhoneNumber::Pref );
- for ( it =3D list.begin(); it !=3D list.end(); ++it ) {
- if ( ( ( *it ).type() & ~( PhoneNumber::Pref ) ) =3D=3D PhoneNum=
ber::Home ) {
- return ( *it ).number();
- }
- }
- }
-
- {
- // check for normal home number
- const PhoneNumber::List list =3D a.phoneNumbers( PhoneNumber::Home=
);
- for ( it =3D list.begin(); it !=3D list.end(); ++it ) {
- if ( ( ( *it ).type() & ~(PhoneNumber::Pref) ) =3D=3D PhoneNumbe=
r::Home ) {
- return ( *it ).number();
- }
- }
- }
-
- return QString();
- }
- case Private::BusinessPhone:
- {
- PhoneNumber::List::ConstIterator it;
-
- {
- // check for preferred number
- const PhoneNumber::List list =3D a.phoneNumbers( PhoneNumber::Work=
| PhoneNumber::Pref );
- for ( it =3D list.begin(); it !=3D list.end(); ++it ) {
- if ( ( ( *it ).type() & ~(PhoneNumber::Pref) ) =3D=3D PhoneNumbe=
r::Work ) {
- return ( *it ).number();
- }
- }
- }
-
- {
- // check for normal work number
- const PhoneNumber::List list =3D a.phoneNumbers( PhoneNumber::Work=
);
- for ( it =3D list.begin(); it !=3D list.end(); ++it ) {
- if ( ( ( *it ).type() & ~(PhoneNumber::Pref) ) =3D=3D PhoneNumbe=
r::Work ) {
- return ( *it ).number();
- }
- }
- }
-
- return QString();
- }
- case Private::MobilePhone:
- return a.phoneNumber( PhoneNumber::Cell ).number();
- case Private::HomeFax:
- return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number(=
);
- case Private::BusinessFax:
- return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number(=
);
- case Private::CarPhone:
- return a.phoneNumber( PhoneNumber::Car ).number();
- case Private::Isdn:
- return a.phoneNumber( PhoneNumber::Isdn ).number();
- case Private::Pager:
- return a.phoneNumber( PhoneNumber::Pager ).number();
- case Private::HomeAddressStreet:
- return a.address( Address::Home ).street();
- case Private::HomeAddressPostOfficeBox:
- return a.address( Address::Home ).postOfficeBox();
- case Private::HomeAddressLocality:
- return a.address( Address::Home ).locality();
- case Private::HomeAddressRegion:
- return a.address( Address::Home ).region();
- case Private::HomeAddressPostalCode:
- return a.address( Address::Home ).postalCode();
- case Private::HomeAddressCountry:
- return a.address( Address::Home ).country();
- case Private::BusinessAddressStreet:
- return a.address( Address::Work ).street();
- case Private::BusinessAddressPostOfficeBox:
- return a.address( Address::Work ).postOfficeBox();
- case Private::BusinessAddressLocality:
- return a.address( Address::Work ).locality();
- case Private::BusinessAddressRegion:
- return a.address( Address::Work ).region();
- case Private::BusinessAddressPostalCode:
- return a.address( Address::Work ).postalCode();
- case Private::BusinessAddressCountry:
- return a.address( Address::Work ).country();
- case Private::CustomField:
- return a.custom( d->app(), d->key() );
- default:
- return QString();
- }
-}
-
-bool Field::setValue( KABC::Addressee &a, const QString &value )
-{
- switch ( d->fieldId() ) {
- --CASESETVALUE--
- case Private::Birthday:
- a.setBirthday( QDateTime::fromString( value, Qt::ISODate ) );
- return true;
- case Private::CustomField:
- a.insertCustom( d->app(), d->key(), value );
- return true;
- default:
- return false;
- }
-}
-
-QString Field::sortKey( const KABC::Addressee &a )
-{
- switch ( d->fieldId() ) {
- --CASEVALUE--
- case Private::Birthday:
- if ( a.birthday().isValid() ) {
- QDate date =3D a.birthday().date();
- QString key;
- key.sprintf( "%02d-%02d", date.month(), date.day() );
- return key;
- } else
- return QLatin1String( "00-00" );
- default:
- return value( a ).toLower();
- }
-}
-
-bool Field::isCustom()
-{
- return d->fieldId() =3D=3D Private::CustomField;
-}
-
-Field::List Field::allFields()
-{
- if ( Private::mAllFields.isEmpty() ) {
- --CREATEFIELDS--
- }
-
- return Private::mAllFields;
-}
-
-Field::List Field::defaultFields()
-{
- if ( Private::mDefaultFields.isEmpty() ) {
- createDefaultField( Private::FormattedName );
- createDefaultField( Private::Email );
- }
-
- return Private::mDefaultFields;
-}
-
-void Field::createField( int id, int category )
-{
- Private::mAllFields.append( new Field( new Private( id, category ) ) );
-}
-
-void Field::createDefaultField( int id, int category )
-{
- Private::mDefaultFields.append( new Field( new Private( id, category ) )=
);
-}
-
-void Field::deleteFields()
-{
- Field::List::ConstIterator it;
-
- for ( it =3D Private::mAllFields.constBegin(); it !=3D Private::mAllFiel=
ds.constEnd(); ++it ) {
- delete ( *it );
- }
- Private::mAllFields.clear();
-
- for ( it =3D Private::mDefaultFields.constBegin(); it !=3D Private::mDef=
aultFields.constEnd(); ++it ) {
- delete ( *it );
- }
- Private::mDefaultFields.clear();
-
- for ( it =3D Private::mCustomFields.constBegin(); it !=3D Private::mCust=
omFields.constEnd(); ++it ) {
- delete ( *it );
- }
- Private::mCustomFields.clear();
-}
-
-void Field::saveFields( const QString &identifier,
- const Field::List &fields )
-{
- KConfigGroup cg( KGlobal::config(), "KABCFields" );
-
- saveFields( cg, identifier, fields );
-}
-
-void Field::saveFields( KConfigGroup &cfg, const QString &identifier,
- const Field::List &fields )
-{
- QList fieldIds;
-
- int custom =3D 0;
- Field::List::ConstIterator it;
- for ( it =3D fields.begin(); it !=3D fields.end(); ++it ) {
- fieldIds.append( ( *it )->d->fieldId() );
- if ( ( *it )->isCustom() ) {
- QStringList customEntry;
- customEntry << ( *it )->d->label();
- customEntry << ( *it )->d->key();
- customEntry << ( *it )->d->app();
- cfg.writeEntry( QLatin1String( "KABC_CustomEntry_" ) + identifier + =
QLatin1Char( '_' ) +
- QString::number( custom++ ), customEntry );
- }
- }
-
- cfg.writeEntry( identifier, fieldIds );
-}
-
-Field::List Field::restoreFields( const QString &identifier )
-{
- KConfigGroup cg( KGlobal::config(), "KABCFields" );
-
- return restoreFields( cg, identifier );
-}
-
-Field::List Field::restoreFields( const KConfigGroup &cfg, const QString &=
identifier )
-{
- const QList fieldIds =3D cfg.readEntry( identifier,QList() );
-
- Field::List fields;
-
- int custom =3D 0;
- QList::ConstIterator it;
- for ( it =3D fieldIds.begin(); it !=3D fieldIds.end(); ++it ) {
- Private *f =3D 0;
- if ( ( *it ) =3D=3D Private::CustomField ) {
- QStringList customEntry =3D cfg.readEntry( QLatin1String( "KABC_Cust=
omEntry_" ) +
- identifier + QLatin1Char( '=
_' ) +
- QString::number( custom++ )=
,QStringList() );
- f =3D new Private( *it, CustomCategory, customEntry[ 0 ],
- customEntry[ 1 ], customEntry[ 2 ] );
- } else {
- f =3D new Private( *it );
- }
- fields.append( new Field( f ) );
- }
-
- return fields;
-}
-
-bool Field::equals( Field *field )
-{
- bool sameId =3D ( d->fieldId() =3D=3D field->d->fieldId() );
-
- if ( !sameId ) return false;
-
- if ( d->fieldId() !=3D Private::CustomField ) return true;
-
- return d->key() =3D=3D field->d->key();
-}
-
-Field *Field::createCustomField( const QString &label, int category,
- const QString &key, const QString &app )
-{
- Field *field =3D new Field( new Private( Private::CustomField,
- category | CustomCategory,
- label, key, app ) );
- Private::mCustomFields.append( field );
-
- return field;
-}
diff --git a/kabc/scripts/makeaddressee b/kabc/scripts/makeaddressee
deleted file mode 100755
index d8c8f5b..0000000
--- a/kabc/scripts/makeaddressee
+++ /dev/null
@@ -1,224 +0,0 @@
-#!/usr/bin/perl
-use Cwd;
-use File::Basename;
-
-my $srcdir;
-my $builddir =3D cwd();
-$srcdir =3D dirname($0) || die "Can't determine \$srcdir.";
-chomp $srcdir;
-
-chdir $srcdir;
-
-if (!open( ENTRIES, "$srcdir/entrylist" ) ) {
- print "Can't open $srcdir/entrylist\n";
- exit 1;
-}
-
- while() {
- if (/^#/) { next; }
- chop;
- @entries =3D split /,/;
- if (!/^.+,(\w+),(\w+)/) { next; }
- push @entryCtrl, @entries[0];
- push @entryRealNames, @entries[1];
- push @entryComments, @entries[2];
- push @entryTypes, @entries[3];
- push @entryNames, @entries[4];
- push @entryCategory, @entries[5];
- push @entryDebug, @entries[6];
- }
-
-close ENTRIES;
-
-if (!open( H_IN, "$srcdir/addressee.src.h" ) ) {
- print "Can't open $srcdir/addressee.src.h\n";
- exit 1;
-}
-if (!open( H_OUT, ">$builddir/../addressee.h" ) ) {
- print "Can't open addressee.h\n";
- exit 1;
-}
- print H_OUT "/*** Warning! This file has been generated by the script ma=
keaddressee ***/\n";
-
- while( ) {
- if (/--DECLARATIONS--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] =3D~ /A/ ) {
- print H_OUT " /**\n";
- print H_OUT " Set $entryRealNames[$i].\n";
- print H_OUT " */\n";
- print H_OUT " void set" . ucfirst($entryNames[$i]);
- print H_OUT "( const $entryTypes[$i] &$entryNames[$i] );\n";
-
- print H_OUT " /**\n";
- print H_OUT " Return $entryRealNames[$i].\n";
- print H_OUT " */\n";
- print H_OUT " $entryTypes[$i] $entryNames[$i]() const;\n";
- }
-
- if ( $entryCtrl[$i] !~ /L/ ) { next; }
- print H_OUT " /**\n";
- print H_OUT " Return translated label for $entryNames[$i] fie=
ld.\n";
- print H_OUT " */\n";
- print H_OUT " static QString $entryNames[$i]Label();\n\n";
- }
- } else {
- print H_OUT;
- }
- }
-
-close H_OUT;
-close H_IN;
-
-if (!open( CPP_IN, "$srcdir/addressee.src.cpp" ) ) {
- print "Can't open $srcdir/addressee.src.cpp\n";
- exit 1;
-}
-if (!open( CPP_OUT, ">$builddir/../addressee.cpp" ) ) {
- print "Can't open addressee.cpp\n";
- exit 1;
-}
- print CPP_OUT "/*** Warning! This file has been generated by the script =
makeaddressee ***/\n";
-
- while( ) {
- if (/--VARIABLES--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] !~ /A/ ) { next; }
- print CPP_OUT " $entryTypes[$i] m".ucfirst($entryNames[$i]).";\=
n";
- }
- } elsif (/--VARIABLES_ASSIGNMENT--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] !~ /A/ ) { next; }
- print CPP_OUT " m".ucfirst($entryNames[$i])." =3D other.m".uc=
first($entryNames[$i]).";\n";
- }
- } elsif (/--DEFINITIONS--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] =3D~ /A/ ) {
- print CPP_OUT "void Addressee::set" . ucfirst($entryNames[$i]);
- print CPP_OUT "( const $entryTypes[$i] &$entryNames[$i] )\n{\n";
- print CPP_OUT " if ( $entryNames[$i] =3D=3D d->m".ucfirst($entr=
yNames[$i])." ) return;\n";
- print CPP_OUT " d->mEmpty =3D false;\n";
- print CPP_OUT " d->m".ucfirst($entryNames[$i])." =3D $entryName=
s[$i];\n}\n\n";
- print CPP_OUT "$entryTypes[$i] Addressee::$entryNames[$i]() cons=
t\n{\n";
- print CPP_OUT " return d->m".ucfirst($entryNames[$i]).";\n}\n\n=
";
- }
-
- if ( $entryCtrl[$i] !~ /L/ ) { next; }
- @labelwords =3D split ' ', $entryRealNames[$i];
- for( $j=3D0; $j < @labelwords; ++$j ) {
- $labelwords[$j] =3D ucfirst $labelwords[$j];
- }
- $label =3D join ' ', @labelwords;
- print CPP_OUT "QString Addressee::$entryNames[$i]Label()\n{\n";
- if ( $entryComments[$i] ) {
- print CPP_OUT " return i18nc(\"$entryComments[$i]\",\"$label\")=
;\n";
- } else {
- print CPP_OUT " return i18n(\"$label\");\n";
- }
- print CPP_OUT "}\n\n\n";
- }
- } elsif (/--EQUALSTEST--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] =3D~ /E/ ) {
- if ( $entryNames[$i] !~ "revision" ) {
- if ( $entryTypes[$i] =3D~ "QString" ) {
- print CPP_OUT " if ( d->m".ucfirst($entryNames[$i])." !=3D =
a.d->m".ucfirst($entryNames[$i])." &&\n";
- print CPP_OUT " !( d->m".ucfirst($entryNames[$i]).".isEm=
pty() && a.d->m".ucfirst($entryNames[$i]).".isEmpty() ) ) {\n";
- print CPP_OUT " kDebug(5700) << \"$entryNames[$i] differs=
\";\n";
- print CPP_OUT " return false;\n";
- print CPP_OUT " }\n";
- } else {
- print CPP_OUT " if ( d->m".ucfirst($entryNames[$i])." !=3D =
a.d->m".ucfirst($entryNames[$i])." ) {\n";
- print CPP_OUT " kDebug(5700) << \"$entryNames[$i] differs=
\";\n";
- print CPP_OUT " return false;\n";
- print CPP_OUT " }\n";
- }
- }
- }
- }
- } elsif (/--STREAMOUT--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] =3D~ /A/ ) {
- print CPP_OUT " s << a.d->m".ucfirst($entryNames[$i]).";\n";
- }
- }
- } elsif (/--STREAMIN--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] =3D~ /A/ ) {
- print CPP_OUT " s >> a.d->m".ucfirst($entryNames[$i]).";\n";
- }
- }
- } elsif (/--DEBUG--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] !~ /A/ ) { next; }
- print CPP_OUT " str +=3D QString::fromLatin1( \" " . ucfirst($en=
tryNames[$i]);
- print CPP_OUT ": %1\\n\" ).arg( $entryNames[$i]()$entryDebug[$i] )=
;\n";
- }
- } else {
- print CPP_OUT;
- }
- }
-
-close CPP_OUT;
-close CPP_IN;
-
-if (!open( CPP_IN, "$srcdir/field.src.cpp" ) ) {
- print "Can't open $srcdir/field.src.cpp\n";
- exit 1;
-}
-if (!open( CPP_OUT, ">$builddir/../field.cpp" ) ) {
- print "Can't open field.cpp\n";
- exit 1;
-}
- print CPP_OUT "/*** Warning! This file has been generated by the script =
makeaddressee ***/\n";
-
- while( ) {
- if (/--ENUMS--/) {
- $first =3D 1;
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] !~ /F/ ) { next; }
- if ( $first ) { $first =3D 0; }
- else { print CPP_OUT ",\n"; }
- print CPP_OUT " " . ucfirst($entryNames[$i]);
- }
- print CPP_OUT "\n";
- } elsif (/--CASELABEL--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] !~ /F/ ) { next; }
- if ( $entryCtrl[$i] !~ /L/ ) { next; }
- print CPP_OUT " case Private::" . ucfirst($entryNames[$i]) . ":=
\n";
- print CPP_OUT " return Addressee::$entryNames[$i]Label();\n";
- }
- } elsif (/--CASEVALUE--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] !~ /A/ ) { next; }
- if ( $entryCtrl[$i] !~ /F/ ) { next; }
- if ( $entryTypes[$i] ne "QString" ) { next; }
- print CPP_OUT " case Private::" . ucfirst($entryNames[$i]) . ":=
\n";
- print CPP_OUT " return a.$entryNames[$i]();\n";
- }
- } elsif (/--CASESETVALUE--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] !~ /A/ ) { next; }
- if ( $entryCtrl[$i] !~ /F/ ) { next; }
- if ( $entryTypes[$i] ne "QString" ) { next; }
- print CPP_OUT " case Private::" . ucfirst($entryNames[$i]) . ":=
\n";
- print CPP_OUT " a.set" . ucfirst($entryNames[$i]) . "( value =
);\n";
- print CPP_OUT " return true;\n";
- }
- } elsif (/--CREATEFIELDS--/) {
- for( $i=3D0; $i<@entryNames; ++$i ) {
- if ( $entryCtrl[$i] !~ /F/ ) { next; }
- print CPP_OUT " createField( Private::" . ucfirst($entryNames[$=
i]);
- if ( $entryCategory[$i] ) {
- print CPP_OUT ", $entryCategory[$i]";
- }
- print CPP_OUT " );\n";
- }
- } else {
- print CPP_OUT;
- }
- }
-
-close CPP_OUT;
-close CPP_IN;