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 <QtGui/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() ) );
78 QList<QVariantMap> additionalFields;
80 if ( !mCurrentAddressBookName.isEmpty() ) {
81 QVariantMap addressBookName;
82 addressBookName.insert( QLatin1String(
"title" ), i18n(
"Address Book" ) );
83 addressBookName.insert( QLatin1String(
"value" ), mCurrentAddressBookName );
85 additionalFields << addressBookName;
88 mContactGroupFormatter->setAdditionalFields( additionalFields );
90 mBrowser->setHtml( mContactGroupFormatter->toHtml() );
93 void slotMailClicked(
const QString&,
const QString &email )
95 QString name, address;
98 KABC::Addressee::parseEmailAddress( email.mid( 7 ), name, address );
100 emit mParent->emailClicked( name, address );
103 void _k_expandResult( KJob *job )
107 if ( !job->error() ) {
109 mCurrentContacts = expandJob->
contacts();
113 if ( mParentCollectionFetchJob ) {
114 mParent->disconnect( mParentCollectionFetchJob, SIGNAL(result(KJob*)), mParent, SLOT(slotParentCollectionFetched(KJob*)) );
115 delete mParentCollectionFetchJob;
116 mParentCollectionFetchJob = 0;
120 mParent->connect( mParentCollectionFetchJob, SIGNAL(result(KJob*)), SLOT(slotParentCollectionFetched(KJob*)) );
123 void slotParentCollectionFetched( KJob *job )
125 mParentCollectionFetchJob = 0;
126 mCurrentAddressBookName.clear();
128 if ( !job->error() ) {
135 mCurrentAddressBookName = collection.
name();
144 QString mCurrentGroupName;
145 KABC::Addressee::List mCurrentContacts;
146 QString mCurrentAddressBookName;
155 : QWidget( parent ), d( new Private( this ) )
157 QVBoxLayout *layout =
new QVBoxLayout(
this );
158 layout->setMargin( 0 );
160 d->mBrowser->setNotifyClick(
true );
162 connect( d->mBrowser, SIGNAL(mailClick(QString,QString)),
163 this, SLOT(slotMailClicked(QString,QString)) );
165 layout->addWidget( d->mBrowser );
189 if ( formatter == 0 )
190 d->mContactGroupFormatter = d->mStandardContactGroupFormatter;
192 d->mContactGroupFormatter = formatter;
195 void ContactGroupViewer::itemChanged(
const Item &item )
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();
210 connect( d->mExpandJob, SIGNAL(result(KJob*)), SLOT(_k_expandResult(KJob*)) );
211 d->mExpandJob->start();
214 void ContactGroupViewer::itemRemoved()
216 d->mBrowser->clear();
219 #include "contactgroupviewer.moc"