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>
39 #include <kstringhandler.h>
41 #include <QVBoxLayout>
43 using namespace Akonadi;
45 class ContactGroupViewer::Private
49 : mParent( parent ), mExpandJob( 0 ), mParentCollectionFetchJob( 0 )
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" ) ),
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() ) );
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() ) {
110 mCurrentContacts = expandJob->
contacts();
114 if ( mParentCollectionFetchJob ) {
115 mParent->disconnect( mParentCollectionFetchJob, SIGNAL(result(KJob*)), mParent, SLOT(slotParentCollectionFetched(KJob*)) );
116 delete mParentCollectionFetchJob;
117 mParentCollectionFetchJob = 0;
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() ) {
136 mCurrentAddressBookName = collection.
name();
146 QString mCurrentGroupName;
147 KABC::Addressee::List mCurrentContacts;
148 QString mCurrentAddressBookName;
157 : QWidget( parent ), d( new Private( this ) )
159 QVBoxLayout *layout =
new QVBoxLayout(
this );
160 layout->setMargin( 0 );
162 d->mBrowser->setNotifyClick(
true );
164 connect( d->mBrowser, SIGNAL(mailClick(QString,QString)),
165 this, SLOT(slotMailClicked(QString,QString)) );
167 layout->addWidget( d->mBrowser );
191 if ( formatter == 0 ) {
192 d->mContactGroupFormatter = d->mStandardContactGroupFormatter;
194 d->mContactGroupFormatter = formatter;
198 void ContactGroupViewer::itemChanged(
const Item &item )
200 if ( !item.
hasPayload<KABC::ContactGroup>() ) {
204 const KABC::ContactGroup group = item.
payload<KABC::ContactGroup>();
205 d->mCurrentGroupName = group.name();
206 d->mCurrentItem =
item;
208 if ( d->mExpandJob ) {
209 disconnect( d->mExpandJob, SIGNAL(result(KJob*)),
this, SLOT(_k_expandResult(KJob*)) );
210 d->mExpandJob->kill();
214 connect( d->mExpandJob, SIGNAL(result(KJob*)), SLOT(_k_expandResult(KJob*)) );
215 d->mExpandJob->start();
218 void ContactGroupViewer::itemRemoved()
220 d->mBrowser->clear();
223 #include "moc_contactgroupviewer.cpp"