22#include "contactgroupviewer.h"
24#include "contactgroupexpandjob.h"
25#include "standardcontactgroupformatter.h"
26#include "textbrowser_p.h"
28#include <akonadi/collectionfetchjob.h>
29#include <akonadi/entitydisplayattribute.h>
30#include <akonadi/item.h>
31#include <akonadi/itemfetchjob.h>
32#include <akonadi/itemfetchscope.h>
33#include <kabc/addressee.h>
34#include <kabc/contactgroup.h>
35#include <kcolorscheme.h>
38#include <klocalizedstring.h>
39#include <kstringhandler.h>
45class ContactGroupViewer::Private
49 : mParent( parent ), mExpandJob( 0 ), mParentCollectionFetchJob( 0 )
51 mBrowser =
new TextBrowser;
53 static QPixmap groupPixmap = KIcon( QLatin1String(
"x-mail-distribution-list" ) ).pixmap( QSize( 100, 100 ) );
54 mBrowser->document()->addResource( QTextDocument::ImageResource,
55 QUrl( QLatin1String(
"group_photo" ) ),
58 mStandardContactGroupFormatter =
new StandardContactGroupFormatter;
59 mContactGroupFormatter = mStandardContactGroupFormatter;
64 delete mStandardContactGroupFormatter;
69 mParent->setWindowTitle( i18n(
"Contact Group %1", mCurrentGroupName ) );
71 KABC::ContactGroup group;
72 group.setName( mCurrentGroupName );
73 foreach (
const KABC::Addressee &contact, mCurrentContacts ) {
74 group.append( KABC::ContactGroup::Data( contact.realName(), contact.preferredEmail() ) );
77 mContactGroupFormatter->setContactGroup( group );
79 QList<QVariantMap> additionalFields;
81 if ( !mCurrentAddressBookName.isEmpty() ) {
82 QVariantMap addressBookName;
83 addressBookName.insert( QLatin1String(
"title" ), i18n(
"Address Book" ) );
84 addressBookName.insert( QLatin1String(
"value" ), mCurrentAddressBookName );
86 additionalFields << addressBookName;
89 mContactGroupFormatter->setAdditionalFields( additionalFields );
91 mBrowser->setHtml( mContactGroupFormatter->toHtml() );
94 void slotMailClicked(
const QString&,
const QString &email )
96 QString name, address;
99 KABC::Addressee::parseEmailAddress( email.mid( 7 ), name, address );
101 emit mParent->emailClicked( name, address );
104 void _k_expandResult( KJob *job )
108 if ( !job->error() ) {
109 ContactGroupExpandJob *expandJob = qobject_cast<ContactGroupExpandJob*>( job );
110 mCurrentContacts = expandJob->
contacts();
114 if ( mParentCollectionFetchJob ) {
115 mParent->disconnect( mParentCollectionFetchJob, SIGNAL(result(KJob*)), mParent, SLOT(slotParentCollectionFetched(KJob*)) );
116 delete mParentCollectionFetchJob;
117 mParentCollectionFetchJob = 0;
120 mParentCollectionFetchJob =
new CollectionFetchJob( mCurrentItem.parentCollection(),
CollectionFetchJob::Base, mParent );
121 mParent->connect( mParentCollectionFetchJob, SIGNAL(result(KJob*)), SLOT(slotParentCollectionFetched(KJob*)) );
124 void slotParentCollectionFetched( KJob *job )
126 mParentCollectionFetchJob = 0;
127 mCurrentAddressBookName.clear();
129 if ( !job->error() ) {
130 CollectionFetchJob *fetchJob = qobject_cast<CollectionFetchJob*>( job );
132 const Collection collection = fetchJob->
collections().first();
133 mCurrentAddressBookName = collection.displayName();
141 TextBrowser *mBrowser;
142 QString mCurrentGroupName;
143 KABC::Addressee::List mCurrentContacts;
144 QString mCurrentAddressBookName;
146 ContactGroupExpandJob *mExpandJob;
147 CollectionFetchJob *mParentCollectionFetchJob;
148 AbstractContactGroupFormatter *mStandardContactGroupFormatter;
149 AbstractContactGroupFormatter *mContactGroupFormatter;
153 : QWidget( parent ), d( new Private( this ) )
155 QVBoxLayout *layout =
new QVBoxLayout(
this );
156 layout->setMargin( 0 );
158 d->mBrowser->setNotifyClick(
true );
160 connect( d->mBrowser, SIGNAL(mailClick(QString,QString)),
161 this, SLOT(slotMailClicked(QString,QString)) );
163 layout->addWidget( d->mBrowser );
187 if ( formatter == 0 ) {
188 d->mContactGroupFormatter = d->mStandardContactGroupFormatter;
190 d->mContactGroupFormatter = formatter;
194void ContactGroupViewer::itemChanged(
const Item &item )
196 if ( !
item.hasPayload<KABC::ContactGroup>() ) {
200 const KABC::ContactGroup group =
item.payload<KABC::ContactGroup>();
201 d->mCurrentGroupName = group.name();
202 d->mCurrentItem =
item;
204 if ( d->mExpandJob ) {
205 disconnect( d->mExpandJob, SIGNAL(result(KJob*)),
this, SLOT(_k_expandResult(KJob*)) );
206 d->mExpandJob->kill();
209 d->mExpandJob =
new ContactGroupExpandJob( group );
210 connect( d->mExpandJob, SIGNAL(result(KJob*)), SLOT(_k_expandResult(KJob*)) );
211 d->mExpandJob->start();
214void ContactGroupViewer::itemRemoved()
216 d->mBrowser->clear();
219#include "moc_contactgroupviewer.cpp"
@ Base
Only fetch the base collection.
Collection::List collections() const
Returns the list of fetched collection.
void setAncestorRetrieval(AncestorRetrieval ancestorDepth)
Sets how many levels of ancestor collections should be included in the retrieval.
void fetchFullPayload(bool fetch=true)
Sets whether the full payload shall be fetched.
@ Parent
Only retrieve the immediate parent collection.
void setItem(const Item &item)
Sets the item that shall be monitored.
Item item() const
Returns the currently monitored item.
ItemFetchScope & fetchScope()
Returns the item fetch scope.
FreeBusyManager::Singleton.