diff --git a/kabc/contactgroup.cpp b/kabc/contactgroup.cpp index 17cb4cfc0..381ef2a73 100644 --- a/kabc/contactgroup.cpp +++ b/kabc/contactgroup.cpp @@ -1,474 +1,489 @@ /* This file is part of libkabc. Copyright (c) 2008 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 License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "contactgroup.h" #include #include #include #include using namespace KABC; class ContactGroup::ContactReference::ContactReferencePrivate : public QSharedData { public: ContactReferencePrivate() : QSharedData() { } ContactReferencePrivate( const ContactReferencePrivate &other ) : QSharedData( other ) { mUid = other.mUid; mPreferredEmail = other.mPreferredEmail; mCustoms = other.mCustoms; } QString mUid; QString mPreferredEmail; QMap mCustoms; }; ContactGroup::ContactReference::ContactReference() : d( new ContactReferencePrivate ) { } ContactGroup::ContactReference::ContactReference( const ContactReference &other ) : d( other.d ) { } ContactGroup::ContactReference::ContactReference( const QString &uid ) : d( new ContactReferencePrivate ) { d->mUid = uid; } ContactGroup::ContactReference::~ContactReference() { } void ContactGroup::ContactReference::setUid( const QString &uid ) { d->mUid = uid; } QString ContactGroup::ContactReference::uid() const { return d->mUid; } void ContactGroup::ContactReference::setPreferredEmail( const QString &email ) { d->mPreferredEmail = email; } QString ContactGroup::ContactReference::preferredEmail() const { return d->mPreferredEmail; } void ContactGroup::ContactReference::insertCustom( const QString &key, const QString &value ) { d->mCustoms.insert( key, value ); } void ContactGroup::ContactReference::removeCustom( const QString &key ) { d->mCustoms.remove( key ); } QString ContactGroup::ContactReference::custom( const QString &key ) const { return d->mCustoms.value( key ); } ContactGroup::ContactReference &ContactGroup::ContactReference::operator=( const ContactGroup::ContactReference &other ) { if ( this != &other ) { d = other.d; } return *this; } bool ContactGroup::ContactReference::operator==( const ContactReference &other ) const { return d->mUid == other.d->mUid && d->mPreferredEmail == other.d->mPreferredEmail && d->mCustoms == other.d->mCustoms; } class ContactGroup::ContactGroupReference::ContactGroupReferencePrivate : public QSharedData { public: ContactGroupReferencePrivate() : QSharedData() { } ContactGroupReferencePrivate( const ContactGroupReferencePrivate &other ) : QSharedData( other ) { mUid = other.mUid; mCustoms = other.mCustoms; } QString mUid; QMap mCustoms; }; ContactGroup::ContactGroupReference::ContactGroupReference() : d( new ContactGroupReferencePrivate ) { } ContactGroup::ContactGroupReference::ContactGroupReference( const ContactGroupReference &other ) : d( other.d ) { } ContactGroup::ContactGroupReference::ContactGroupReference( const QString &uid ) : d( new ContactGroupReferencePrivate ) { d->mUid = uid; } ContactGroup::ContactGroupReference::~ContactGroupReference() { } void ContactGroup::ContactGroupReference::setUid( const QString &uid ) { d->mUid = uid; } QString ContactGroup::ContactGroupReference::uid() const { return d->mUid; } void ContactGroup::ContactGroupReference::insertCustom( const QString &key, const QString &value ) { d->mCustoms.insert( key, value ); } void ContactGroup::ContactGroupReference::removeCustom( const QString &key ) { d->mCustoms.remove( key ); } QString ContactGroup::ContactGroupReference::custom( const QString &key ) const { return d->mCustoms.value( key ); } ContactGroup::ContactGroupReference &ContactGroup::ContactGroupReference::operator=( const ContactGroup::ContactGroupReference &other ) { if ( this != &other ) { d = other.d; } return *this; } bool ContactGroup::ContactGroupReference::operator==( const ContactGroupReference &other ) const { return d->mUid == other.d->mUid && d->mCustoms == other.d->mCustoms; } class ContactGroup::Data::DataPrivate : public QSharedData { public: DataPrivate() : QSharedData() { } DataPrivate( const DataPrivate &other ) : QSharedData( other ) { mName = other.mName; mEmail = other.mEmail; mCustoms = other.mCustoms; } QString mName; QString mEmail; QMap mCustoms; }; ContactGroup::Data::Data() : d( new DataPrivate ) { } ContactGroup::Data::Data( const Data &other ) : d( other.d ) { } ContactGroup::Data::Data( const QString &name, const QString &email ) : d( new DataPrivate ) { d->mName = name; d->mEmail = email; } ContactGroup::Data::~Data() { } void ContactGroup::Data::setName( const QString &name ) { d->mName = name; } QString ContactGroup::Data::name() const { return d->mName; } void ContactGroup::Data::setEmail( const QString &email ) { d->mEmail = email; } QString ContactGroup::Data::email() const { return d->mEmail; } void ContactGroup::Data::insertCustom( const QString &key, const QString &value ) { d->mCustoms.insert( key, value ); } void ContactGroup::Data::removeCustom( const QString &key ) { d->mCustoms.remove( key ); } QString ContactGroup::Data::custom( const QString &key ) const { return d->mCustoms.value( key ); } ContactGroup::Data &ContactGroup::Data::operator=( const ContactGroup::Data &other ) { if ( this != &other ) { d = other.d; } return *this; } bool ContactGroup::Data::operator==( const Data &other ) const { return d->mName == other.d->mName && d->mEmail == other.d->mEmail && d->mCustoms == other.d->mCustoms; } class ContactGroup::Private : public QSharedData { public: Private() : QSharedData(), mIdentifier( QUuid::createUuid().toString() ) { } Private( const Private &other ) : QSharedData( other ) { mIdentifier = other.mIdentifier; mName = other.mName; mContactReferences = other.mContactReferences; mContactGroupReferences = other.mContactGroupReferences; mDataObjects = other.mDataObjects; } QString mIdentifier; QString mName; ContactGroup::ContactReference::List mContactReferences; ContactGroup::ContactGroupReference::List mContactGroupReferences; ContactGroup::Data::List mDataObjects; }; ContactGroup::ContactGroup() : d( new Private ) { } ContactGroup::ContactGroup( const ContactGroup &other ) : d( other.d ) { } ContactGroup::ContactGroup( const QString &name ) : d( new Private ) { d->mName = name; } ContactGroup::~ContactGroup() { } void ContactGroup::setName( const QString &name ) { d->mName = name; } QString ContactGroup::name() const { return d->mName; } void ContactGroup::setId( const QString &id ) { d->mIdentifier = id; } QString ContactGroup::id() const { return d->mIdentifier; } unsigned int ContactGroup::count() const { return d->mContactReferences.count() + d->mDataObjects.count(); } unsigned int ContactGroup::contactReferenceCount() const { return d->mContactReferences.count(); } unsigned int ContactGroup::contactGroupReferenceCount() const { return d->mContactGroupReferences.count(); } unsigned int ContactGroup::dataCount() const { return d->mDataObjects.count(); } ContactGroup::ContactReference &ContactGroup::contactReference( unsigned int index ) { Q_ASSERT_X( index < (unsigned int)d->mContactReferences.count(), "contactReference()", "index out of range" ); return d->mContactReferences[ index ]; } const ContactGroup::ContactReference &ContactGroup::contactReference( unsigned int index ) const { Q_ASSERT_X( index < (unsigned int)d->mContactReferences.count(), "contactReference()", "index out of range" ); return d->mContactReferences[ index ]; } ContactGroup::ContactGroupReference &ContactGroup::contactGroupReference( unsigned int index ) { Q_ASSERT_X( index < (unsigned int)d->mContactGroupReferences.count(), "contactGroupReference()", "index out of range" ); return d->mContactGroupReferences[ index ]; } const ContactGroup::ContactGroupReference &ContactGroup::contactGroupReference( unsigned int index ) const { Q_ASSERT_X( index < (unsigned int)d->mContactGroupReferences.count(), "contactGroupReference()", "index out of range" ); return d->mContactGroupReferences[ index ]; } ContactGroup::Data &ContactGroup::data( unsigned int index ) { Q_ASSERT_X( index < (unsigned int)d->mDataObjects.count(), "data()", "index out of range" ); return d->mDataObjects[ index ]; } const ContactGroup::Data &ContactGroup::data( unsigned int index ) const { Q_ASSERT_X( index < (unsigned int)d->mDataObjects.count(), "data()", "index out of range" ); return d->mDataObjects[ index ]; } void ContactGroup::append( const ContactReference &reference ) { d->mContactReferences.append( reference ); } void ContactGroup::append( const ContactGroupReference &reference ) { d->mContactGroupReferences.append( reference ); } void ContactGroup::append( const Data &data ) { d->mDataObjects.append( data ); } void ContactGroup::remove( const ContactReference &reference ) { d->mContactReferences.removeOne( reference ); } void ContactGroup::remove( const ContactGroupReference &reference ) { d->mContactGroupReferences.removeOne( reference ); } void ContactGroup::remove( const Data &data ) { d->mDataObjects.removeOne( data ); } +void ContactGroup::removeAllContactReferences() +{ + d->mContactReferences.clear(); +} + +void ContactGroup::removeAllContactGroupReferences() +{ + d->mContactGroupReferences.clear(); +} + +void ContactGroup::removeAllContactData() +{ + d->mDataObjects.clear(); +} + ContactGroup &ContactGroup::operator=( const ContactGroup &other ) { if ( this != &other ) { d = other.d; } return *this; } bool ContactGroup::operator==( const ContactGroup &other ) const { return d->mIdentifier == other.d->mIdentifier && d->mName == other.d->mName && d->mContactReferences == other.d->mContactReferences && d->mContactGroupReferences == other.d->mContactGroupReferences && d->mDataObjects == other.d->mDataObjects; } QString ContactGroup::mimeType() { return QLatin1String( "application/x-vnd.kde.contactgroup" ); } diff --git a/kabc/contactgroup.h b/kabc/contactgroup.h index 434461793..565273296 100644 --- a/kabc/contactgroup.h +++ b/kabc/contactgroup.h @@ -1,448 +1,463 @@ /* This file is part of libkabc. Copyright (c) 2008 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 License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef KABC_CONTACTGROUP_H #define KABC_CONTACTGROUP_H #include #include #include "kabc_export.h" class QString; namespace KABC { /** * This class represents a group of contacts. * * It can contain two types of contacts, either a reference * or data. * The reference entry is just an unique identifier which * identifies the real contact in the system. * The data entry contains a name and an email address. * * @since 4.2 */ class KABC_EXPORT ContactGroup { public: /** * This class represents a contact reference */ class KABC_EXPORT ContactReference { public: /** * A list of contact references. */ typedef QList List; /** * Creates an empty contact reference. */ ContactReference(); /** * Creates a contact reference from an @p other reference. */ ContactReference( const ContactReference &other ); /** * Creates a contact reference for the given contact @p uid. */ ContactReference( const QString &uid ); /** * Destroys the contact reference. */ ~ContactReference(); /** * Sets the contact uid of the contact reference. */ void setUid( const QString &uid ); /** * Returns the contact uid of the contact reference. */ QString uid() const; /** * Sets the preferred email address. */ void setPreferredEmail( const QString &email ); /** * Returns the preferred email address, or an empty string * if no preferred email address is set. */ QString preferredEmail() const; /** * Inserts a custom entry. * If an entry with the same @p key already exists, it is * overwritten. * * @param key The unique key. * @param value The value. */ void insertCustom( const QString &key, const QString &value ); /** * Removes the custom entry with the given @p key. */ void removeCustom( const QString &key ); /** * Returns the value for the given @p key, or an empty string * if the entry for that key does not exists. */ QString custom( const QString &key ) const; /** * @internal */ ContactReference &operator=( const ContactReference & ); /** * @internal */ bool operator==( const ContactReference & ) const; private: class ContactReferencePrivate; QSharedDataPointer d; }; /** * This class represents a contact group reference */ class KABC_EXPORT ContactGroupReference { public: /** * A list of contact group references. */ typedef QList List; /** * Creates an empty contact group reference. */ ContactGroupReference(); /** * Creates a contact group reference from an @p other reference. */ ContactGroupReference( const ContactGroupReference &other ); /** * Creates a contact group reference for the given contact group @p uid. */ ContactGroupReference( const QString &uid ); /** * Destroys the contact group reference. */ ~ContactGroupReference(); /** * Sets the contact group uid of the contact group reference. */ void setUid( const QString &uid ); /** * Returns the contact group uid of the contact group reference. */ QString uid() const; /** * Inserts a custom entry. * If an entry with the same @p key already exists, it is * overwritten. * * @param key The unique key. * @param value The value. */ void insertCustom( const QString &key, const QString &value ); /** * Removes the custom entry with the given @p key. */ void removeCustom( const QString &key ); /** * Returns the value for the given @p key, or an empty string * if the entry for that key does not exists. */ QString custom( const QString &key ) const; /** * @internal */ ContactGroupReference &operator=( const ContactGroupReference & ); /** * @internal */ bool operator==( const ContactGroupReference & ) const; private: class ContactGroupReferencePrivate; QSharedDataPointer d; }; /** * This class represents a contact data object */ class KABC_EXPORT Data { public: /** * A list of contact data. */ typedef QList List; /** * Creates an empty contact data object. */ Data(); /** * Creates a contact data object from an @p other data object. */ Data( const Data &other ); /** * Creates a contact data object with the given @p name and @p email address. */ Data( const QString &name, const QString &email ); /** * Destroys the contact data object. */ ~Data(); /** * Sets the @p name of the contact data object. */ void setName( const QString &name ); /** * Returns the name of the contact data object. */ QString name() const; /** * Sets the @p email address of the contact data object. */ void setEmail( const QString &email ); /** * Returns the email address of the contact data object. */ QString email() const; /** * Inserts a custom entry. * If an entry with the same @p key already exists, it is * overwritten. * * @param key The unique key. * @param value The value. */ void insertCustom( const QString &key, const QString &value ); /** * Removes the custom entry with the given @p key. */ void removeCustom( const QString &key ); /** * Returns the value for the given @p key, or an empty string * if the entry for that key does not exists. */ QString custom( const QString &key ) const; /** * @internal */ Data &operator=( const Data & ); /** * @internal */ bool operator==( const Data & ) const; private: class DataPrivate; QSharedDataPointer d; }; /** * A list of contact groups. */ typedef QList List; /** * Creates an empty contact group. */ ContactGroup(); /** * Creates a contact group from an @p other group. */ ContactGroup( const ContactGroup &other ); /** * Creates a contact group with the given name. */ ContactGroup( const QString &name ); /** * Destroys the contact group. */ ~ContactGroup(); /** * Sets the unique @p id of the contact group. */ void setId( const QString &id ); /** * Returns the unique id of the contact group. */ QString id() const; /** * Sets the i18n'd @p name of the contact group. */ void setName( const QString &name ); /** * Returns the i18n'd name of the contact group. */ QString name() const; /** * Returns the number of contacts in this group. * That includes the contact references and contact data. */ unsigned int count() const; /** * Returns the number of contact references in this group. */ unsigned int contactReferenceCount() const; /** * Returns the number of group references in this group. */ unsigned int contactGroupReferenceCount() const; /** * Returns the number of contact data objects in this group. */ unsigned int dataCount() const; /** * Returns the contact reference at the given @p index. */ ContactReference &contactReference( unsigned int index ); /** * Returns the contact reference at the given @p index. */ const ContactReference &contactReference( unsigned int index ) const; /** * Returns the contact group reference at the given @p index. */ ContactGroupReference &contactGroupReference( unsigned int index ); /** * Returns the contact group reference at the given @p index. */ const ContactGroupReference &contactGroupReference( unsigned int index ) const; /** * Returns the contact data object at the given @p index. */ Data &data( unsigned int index ); /** * Returns the contact data object at the given @p index. */ const Data &data( unsigned int index ) const; /** * Appends a new contact @p reference to the contact group. */ void append( const ContactReference &reference ); /** * Appends a new contact group @p reference to the contact group. */ void append( const ContactGroupReference &reference ); /** * Appends a new contact @p data object to the contact group. */ void append( const Data &data ); /** * Removes the given contact @p reference from the contact group. */ void remove( const ContactReference &reference ); /** * Removes the given contact group @p reference from the contact group. */ void remove( const ContactGroupReference &reference ); /** * Removes the given contact @p data object from the contact group. */ void remove( const Data &data ); + /** + * Removes all contact references from the contact group. + */ + void removeAllContactReferences(); + + /** + * Removes all contact group references from the contact group. + */ + void removeAllContactGroupReferences(); + + /** + * Removes all contact data from the contact group. + */ + void removeAllContactData(); + /** * @internal */ ContactGroup &operator=( const ContactGroup & ); /** * @internal */ bool operator==( const ContactGroup & ) const; /** * Returns the MIME type used for Contact Groups */ static QString mimeType(); private: class Private; QSharedDataPointer d; }; } #endif