00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#include <qiconview.h>
00025
#include <qlayout.h>
00026
#include <qstringlist.h>
00027
00028
#include <kabc/addressbook.h>
00029
#include <kabc/addressee.h>
00030
#include <kconfig.h>
00031
#include <kdebug.h>
00032
#include <kglobal.h>
00033
#include <kiconloader.h>
00034
#include <klocale.h>
00035
00036
#include "core.h"
00037
#include "kabprefs.h"
00038
00039
#include "kaddressbookiconview.h"
00040
00041
class IconViewFactory :
public ViewFactory
00042 {
00043
public:
00044
KAddressBookView *view( KAB::Core *core,
QWidget *parent,
const char *name )
00045 {
00046
return new KAddressBookIconView( core, parent, name );
00047 }
00048
00049
QString type()
const {
return I18N_NOOP(
"Icon"); }
00050
00051
QString description()
const {
return i18n(
"Icons represent contacts. Very simple view." ); }
00052 };
00053
00054
extern "C" {
00055
void *init_libkaddrbk_iconview()
00056 {
00057
return (
new IconViewFactory );
00058 }
00059 }
00060
00062
00063 AddresseeIconView::AddresseeIconView(
QWidget *parent,
const char *name)
00064 : KIconView(parent, name)
00065 {
00066 setSelectionMode( QIconView::Extended );
00067 setResizeMode( QIconView::Adjust );
00068 setWordWrapIconText(
true );
00069 setGridX( 100 );
00070 setItemsMovable(
false);
00071 setSorting(
true,
true);
00072 setMode( KIconView::Select );
00073
00074 connect(
this, SIGNAL(
dropped(
QDropEvent*,
const QValueList<QIconDragItem>&)),
00075
this, SLOT(itemDropped(
QDropEvent*,
const QValueList<QIconDragItem>&)));
00076 }
00077
00078 AddresseeIconView::~AddresseeIconView()
00079 {
00080 }
00081
00082
void AddresseeIconView::itemDropped(
QDropEvent *e,
00083
const QValueList<QIconDragItem> &)
00084 {
00085 emit addresseeDropped(e);
00086 }
00087
00088
QDragObject *AddresseeIconView::dragObject()
00089 {
00090 emit startAddresseeDrag();
00091
00092
00093
return 0;
00094 }
00096
00097
class AddresseeIconViewItem :
public KIconViewItem
00098 {
00099
public:
00100 AddresseeIconViewItem(
const KABC::Field::List &fields,
00101 KABC::AddressBook *doc,
const KABC::Addressee &a,
00102
QIconView *parent)
00103 : KIconViewItem(parent), mDocument(doc), mAddressee(a)
00104 {
00105 refresh();
00106 }
00107
00108
const KABC::Addressee &addressee()
const {
return mAddressee; }
00109
00110
void refresh()
00111 {
00112
00113 mAddressee = mDocument->findByUid(mAddressee.uid());
00114
00115
if (!mAddressee.isEmpty())
00116 setText( mAddressee.givenName() +
" " + mAddressee.familyName() );
00117
00118
QPixmap icon;
00119
QPixmap defaultIcon( KGlobal::iconLoader()->loadIcon(
"vcard", KIcon::Desktop ) );
00120 KABC::Picture pic = mAddressee.photo();
00121
if ( pic.data().isNull() )
00122 pic = mAddressee.logo();
00123
00124
if ( pic.isIntern() && !pic.data().isNull() ) {
00125
QImage img = pic.data();
00126
if ( img.width() > img.height() )
00127 icon = img.scaleWidth( 32 );
00128
else
00129 icon = img.scaleHeight( 32 );
00130 }
else
00131 icon = defaultIcon;
00132
00133 setPixmap( icon );
00134 }
00135
00136
private:
00137 KABC::AddressBook *mDocument;
00138 KABC::Addressee mAddressee;
00139 };
00140
00142
00143
00144 KAddressBookIconView::KAddressBookIconView( KAB::Core *core,
00145
QWidget *parent,
const char *name)
00146 :
KAddressBookView( core, parent, name )
00147 {
00148
00149
QVBoxLayout *layout =
new QVBoxLayout(
viewWidget());
00150
00151 mIconView =
new AddresseeIconView(
viewWidget(),
"mIconView");
00152 layout->addWidget(mIconView);
00153
00154
00155 connect(mIconView, SIGNAL(
executed(
QIconViewItem *)),
00156
this, SLOT(addresseeExecuted(
QIconViewItem *)));
00157 connect(mIconView, SIGNAL(selectionChanged()),
00158
this, SLOT(addresseeSelected()));
00159 connect(mIconView, SIGNAL(addresseeDropped(
QDropEvent*)),
00160
this, SIGNAL(
dropped(
QDropEvent*)));
00161 connect(mIconView, SIGNAL(startAddresseeDrag()),
00162
this, SIGNAL(
startDrag()));
00163 connect( mIconView, SIGNAL( contextMenuRequested(
QIconViewItem*,
const QPoint& ) ),
00164
this, SLOT( rmbClicked(
QIconViewItem*,
const QPoint& ) ) );
00165 }
00166
00167 KAddressBookIconView::~KAddressBookIconView()
00168 {
00169 }
00170
00171 KABC::Field *
KAddressBookIconView::sortField()
const
00172
{
00173
00174
return KABC::Field::allFields()[ 2 ];
00175 }
00176
00177 void KAddressBookIconView::readConfig(KConfig *config)
00178 {
00179
KAddressBookView::readConfig(config);
00180
00181 disconnect(mIconView, SIGNAL(
executed(
QIconViewItem *)),
00182
this, SLOT(addresseeExecuted(
QIconViewItem *)));
00183
00184
if (KABPrefs::instance()->mHonorSingleClick)
00185 connect(mIconView, SIGNAL(
executed(
QIconViewItem *)),
00186
this, SLOT(addresseeExecuted(
QIconViewItem *)));
00187
else
00188 connect(mIconView, SIGNAL(doubleClicked(
QIconViewItem *)),
00189
this, SLOT(addresseeExecuted(
QIconViewItem *)));
00190 }
00191
00192 QStringList KAddressBookIconView::selectedUids()
00193 {
00194
QStringList uidList;
00195
QIconViewItem *item;
00196 AddresseeIconViewItem *aItem;
00197
00198
for (item = mIconView->firstItem(); item; item = item->nextItem())
00199 {
00200
if (item->isSelected())
00201 {
00202 aItem = dynamic_cast<AddresseeIconViewItem*>(item);
00203
if (aItem)
00204 uidList << aItem->addressee().uid();
00205 }
00206 }
00207
00208
return uidList;
00209 }
00210
00211 void KAddressBookIconView::refresh(
QString uid)
00212 {
00213
QIconViewItem *item;
00214 AddresseeIconViewItem *aItem;
00215
00216
if ( uid.isNull() ) {
00217
00218 mIconView->clear();
00219 mIconList.clear();
00220
00221 KABC::Addressee::List addresseeList =
addressees();
00222 KABC::Addressee::List::Iterator iter;
00223
for ( iter = addresseeList.begin(); iter != addresseeList.end(); ++iter )
00224 aItem =
new AddresseeIconViewItem(
fields(),
core()->addressBook(), *iter, mIconView );
00225
00226 mIconView->arrangeItemsInGrid(
true );
00227
00228
for ( item = mIconView->firstItem(); item; item = item->nextItem() )
00229 {
00230 AddresseeIconViewItem* aivi = dynamic_cast<AddresseeIconViewItem*>( item );
00231 mIconList.append( aivi );
00232 }
00233
00234 }
else {
00235
00236
for ( item = mIconView->firstItem(); item; item = item->nextItem() ) {
00237 aItem = dynamic_cast<AddresseeIconViewItem*>(item);
00238
if ((aItem) && (aItem->addressee().uid() == uid)) {
00239 aItem->refresh();
00240 mIconView->arrangeItemsInGrid(
true );
00241
return;
00242 }
00243 }
00244
refresh( QString::null );
00245 }
00246 }
00247
00248 void KAddressBookIconView::setSelected(
QString uid,
bool selected)
00249 {
00250
QIconViewItem *item;
00251 AddresseeIconViewItem *aItem;
00252
00253
if (uid.isNull())
00254 {
00255 mIconView->selectAll(selected);
00256 }
00257
else
00258 {
00259
bool found =
false;
00260
for (item = mIconView->firstItem(); item && !found;
00261 item = item->nextItem())
00262 {
00263 aItem = dynamic_cast<AddresseeIconViewItem*>(item);
00264
00265
if ((aItem) && (aItem->addressee().uid() == uid))
00266 {
00267 mIconView->setSelected(aItem, selected);
00268 mIconView->ensureItemVisible( aItem );
00269 found =
true;
00270 }
00271 }
00272 }
00273 }
00274
00275
void KAddressBookIconView::addresseeExecuted(
QIconViewItem *item)
00276 {
00277 AddresseeIconViewItem *aItem = dynamic_cast<AddresseeIconViewItem*>(item);
00278
00279
if (aItem)
00280 emit
executed(aItem->addressee().uid());
00281 }
00282
00283
void KAddressBookIconView::addresseeSelected()
00284 {
00285
QIconViewItem *item;
00286 AddresseeIconViewItem *aItem;
00287
00288
bool found =
false;
00289
for (item = mIconView->firstItem(); item && !found;
00290 item = item->nextItem())
00291 {
00292
if (item->isSelected())
00293 {
00294 aItem = dynamic_cast<AddresseeIconViewItem*>(item);
00295
if (aItem)
00296 {
00297 emit
selected(aItem->addressee().uid());
00298 found =
true;
00299 }
00300 }
00301 }
00302
00303
if (!found)
00304 emit
selected(QString::null);
00305 }
00306
00307
void KAddressBookIconView::rmbClicked(
QIconViewItem*,
const QPoint &point )
00308 {
00309
popup( point );
00310 }
00311
00312
#include "kaddressbookiconview.moc"