summaryrefslogtreecommitdiffabout
path: root/kaddressbook/views/kaddressbookiconview.cpp
Side-by-side diff
Diffstat (limited to 'kaddressbook/views/kaddressbookiconview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/views/kaddressbookiconview.cpp378
1 files changed, 378 insertions, 0 deletions
diff --git a/kaddressbook/views/kaddressbookiconview.cpp b/kaddressbook/views/kaddressbookiconview.cpp
new file mode 100644
index 0000000..50ff285
--- a/dev/null
+++ b/kaddressbook/views/kaddressbookiconview.cpp
@@ -0,0 +1,378 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#ifndef KAB_EMBEDDED
+#include <qiconview.h>
+#include <qstringlist.h>
+
+#include <kabc/addressee.h>
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klocale.h>
+
+#else //KAB_EMBEDDED
+#endif //KAB_EMBEDDED
+
+#include <kabc/addressbook.h>
+#include "kabprefs.h"
+#include "viewmanager.h"
+#include "kaddressbookiconview.h"
+#include <qlayout.h>
+#include <kglobal.h>
+/*US transfered to the headerfile
+class IconViewFactory : public ViewFactory
+{
+ public:
+ KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name )
+ {
+ return new KAddressBookIconView( ab, parent, name );
+ }
+
+ QString type() const { return "Icon"; }
+
+ QString description() const { return i18n( "Icons represent contacts. Very simple view." ); }
+};
+
+*/
+
+extern "C" {
+ void *init_libkaddrbk_iconview()
+ {
+ return ( new IconViewFactory );
+ }
+}
+
+////////////////////////////////
+// AddresseeIconView (internal class)
+#ifndef KAB_EMBEDDED
+AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name)
+ : KIconView(parent, name)
+#else //KAB_EMBEDDED
+AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name)
+ : QIconView(parent, name)
+#endif //KAB_EMBEDDED
+
+{
+ setSelectionMode( QIconView::Extended );
+ setResizeMode( QIconView::Adjust );
+ setWordWrapIconText( true );
+ setGridX( 100 );
+ setItemsMovable(false);
+ setSorting(true, true);
+
+
+//US ??? setMode( KIconView::Select );
+
+#ifndef KAB_EMBEDDED
+
+ connect(this, SIGNAL(dropped(QDropEvent*, const QValueList<QIconDragItem>&)),
+ this, SLOT(itemDropped(QDropEvent*, const QValueList<QIconDragItem>&)));
+#endif //KAB_EMBEDDED
+}
+
+AddresseeIconView::~AddresseeIconView()
+{
+}
+
+void AddresseeIconView::itemDropped(QDropEvent *e,
+ const QValueList<QIconDragItem> &)
+{
+ emit addresseeDropped(e);
+}
+
+QDragObject *AddresseeIconView::dragObject()
+{
+ emit startAddresseeDrag();
+
+ // We never want IconView to start the drag
+ return 0;
+}
+////////////////////////////////
+// AddresseeIconViewItem (internal class)
+#ifndef KAB_EMBEDDED
+class AddresseeIconViewItem : public KIconViewItem
+#else //KAB_EMBEDDED
+class AddresseeIconViewItem : public QIconViewItem
+#endif //KAB_EMBEDDED
+{
+ public:
+#ifndef KAB_EMBEDDED
+ AddresseeIconViewItem(const KABC::Field::List &fields,
+ KABC::AddressBook *doc, const KABC::Addressee &a,
+ QIconView *parent)
+ : KIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a)
+#else //KAB_EMBEDDED
+ AddresseeIconViewItem(const KABC::Field::List &fields,
+ KABC::AddressBook *doc, const KABC::Addressee &a,
+ QIconView *parent)
+ : QIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a)
+#endif //KAB_EMBEDDED
+ {
+ if ( mFields.isEmpty() ) {
+ mFields = KABC::Field::defaultFields();
+ }
+ refresh();
+ }
+
+ const KABC::Addressee &addressee() const { return mAddressee; }
+
+ void refresh()
+ {
+ // Update our addressee, since it may have changed elsewhere
+ mAddressee = mDocument->findByUid(mAddressee.uid());
+
+ if (!mAddressee.isEmpty())
+ setText( mAddressee.givenName() + " " + mAddressee.familyName() );
+
+ QPixmap icon;
+ QPixmap defaultIcon( KGlobal::iconLoader()->loadIcon( "vcard", KIcon::Desktop, 128 ) );
+ KABC::Picture pic = mAddressee.photo();
+ if ( pic.data().isNull() )
+ pic = mAddressee.logo();
+
+ if ( pic.isIntern() && !pic.data().isNull() ) {
+ QImage img = pic.data();
+#ifndef KAB_EMBEDDED
+ if ( img.width() > img.height() )
+ icon = img.scaleWidth( 32 );
+ else
+ icon = img.scaleHeight( 32 );
+#else //KAB_EMBEDDED
+ qDebug("AddresseeIconViewItem::refresh - scale here dependend of the displaysize and the right factor");
+ icon.convertFromImage(img.smoothScale(32, 32));
+#endif //KAB_EMBEDDED
+
+ } else
+ icon = defaultIcon;
+
+ setPixmap( icon );
+ }
+
+ private:
+ KABC::Field::List mFields;
+ KABC::AddressBook *mDocument;
+ KABC::Addressee mAddressee;
+};
+
+///////////////////////////////
+// KAddressBookView
+
+KAddressBookIconView::KAddressBookIconView( KABC::AddressBook *ab,
+ QWidget *parent, const char *name)
+ : KAddressBookView( ab, parent, name )
+{
+ // Init the GUI
+ QVBoxLayout *layout = new QVBoxLayout(viewWidget());
+
+ mIconView = new AddresseeIconView(viewWidget(), "mIconView");
+ layout->addWidget(mIconView);
+
+ // Connect up the signals
+
+//US method executed is part of KIconView
+//US connect(mIconView, SIGNAL(executed(QIconViewItem *)),
+//US this, SLOT(addresseeExecuted(QIconViewItem *)));
+ connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)),
+ this, SLOT(addresseeExecuted(QIconViewItem *)));
+
+ connect(mIconView, SIGNAL(selectionChanged()),
+ this, SLOT(addresseeSelected()));
+ connect(mIconView, SIGNAL(addresseeDropped(QDropEvent*)),
+ this, SIGNAL(dropped(QDropEvent*)));
+ connect(mIconView, SIGNAL(startAddresseeDrag()),
+ this, SIGNAL(startDrag()));
+}
+
+KAddressBookIconView::~KAddressBookIconView()
+{
+}
+
+void KAddressBookIconView::readConfig(KConfig *config)
+{
+ KAddressBookView::readConfig(config);
+
+//US method executed is part of KIconView
+//US disconnect(mIconView, SIGNAL(executed(QIconViewItem *)),
+//US this, SLOT(addresseeExecuted(QIconViewItem *)));
+ disconnect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)),
+ this, SLOT(addresseeExecuted(QIconViewItem *)));
+
+//US method executed is part of KIconView. Use selectionChanged instead
+/*US
+ if (KABPrefs::instance()->mHonorSingleClick)
+ connect(mIconView, SIGNAL(executed(QIconViewItem *)),
+ this, SLOT(addresseeExecuted(QIconViewItem *)));
+ else
+ connect(mIconView, SIGNAL(doubleClicked(QIconViewItem *)),
+ this, SLOT(addresseeExecuted(QIconViewItem *)));
+*/
+ connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)),
+ this, SLOT(addresseeExecuted(QIconViewItem *)));
+
+}
+
+QStringList KAddressBookIconView::selectedUids()
+{
+ QStringList uidList;
+ QIconViewItem *item;
+ AddresseeIconViewItem *aItem;
+
+ for (item = mIconView->firstItem(); item; item = item->nextItem())
+ {
+ if (item->isSelected())
+ {
+#ifndef KAB_EMBEDDED
+ aItem = dynamic_cast<AddresseeIconViewItem*>(item);
+#else //KAB_EMBEDDED
+ aItem = (AddresseeIconViewItem*)(item);
+#endif //KAB_EMBEDDED
+ if (aItem)
+ uidList << aItem->addressee().uid();
+ }
+ }
+
+ return uidList;
+}
+
+void KAddressBookIconView::refresh(QString uid)
+{
+ QIconViewItem *item;
+ AddresseeIconViewItem *aItem;
+
+ if ( uid.isNull() ) {
+ // Rebuild the view
+ mIconView->clear();
+ mIconList.clear();
+
+ KABC::Addressee::List addresseeList = addressees();
+ KABC::Addressee::List::Iterator iter;
+ for ( iter = addresseeList.begin(); iter != addresseeList.end(); ++iter )
+ aItem = new AddresseeIconViewItem( fields(), addressBook(), *iter, mIconView );
+
+ mIconView->arrangeItemsInGrid( true );
+
+ for ( item = mIconView->firstItem(); item; item = item->nextItem() )
+ {
+#ifndef KAB_EMBEDDED
+ AddresseeIconViewItem* aivi = dynamic_cast<AddresseeIconViewItem*>( item );
+#else //KAB_EMBEDDED
+ AddresseeIconViewItem* aivi = (AddresseeIconViewItem*)( item );
+#endif //KAB_EMBEDDED
+ mIconList.append( aivi );
+ }
+
+ } else {
+ // Try to find the one to refresh
+ for ( item = mIconView->firstItem(); item; item = item->nextItem() ) {
+#ifndef KAB_EMBEDDED
+ aItem = dynamic_cast<AddresseeIconViewItem*>(item);
+#else //KAB_EMBEDDED
+ aItem = (AddresseeIconViewItem*)(item);
+#endif //KAB_EMBEDDED
+ if ((aItem) && (aItem->addressee().uid() == uid)) {
+ aItem->refresh();
+ mIconView->arrangeItemsInGrid( true );
+ return;
+ }
+ }
+ refresh( QString::null );
+ }
+}
+
+void KAddressBookIconView::setSelected(QString uid, bool selected)
+{
+ QIconViewItem *item;
+ AddresseeIconViewItem *aItem;
+
+ if (uid.isNull())
+ {
+ mIconView->selectAll(selected);
+ }
+ else
+ {
+ bool found = false;
+ for (item = mIconView->firstItem(); item && !found;
+ item = item->nextItem())
+ {
+#ifndef KAB_EMBEDDED
+ aItem = dynamic_cast<AddresseeIconViewItem*>(item);
+#else //KAB_EMBEDDED
+ aItem = (AddresseeIconViewItem*)(item);
+#endif //KAB_EMBEDDED
+
+ if ((aItem) && (aItem->addressee().uid() == uid))
+ {
+ mIconView->setSelected(aItem, selected);
+ mIconView->ensureItemVisible( aItem );
+ found = true;
+ }
+ }
+ }
+}
+
+void KAddressBookIconView::addresseeExecuted(QIconViewItem *item)
+{
+#ifndef KAB_EMBEDDED
+ AddresseeIconViewItem *aItem = dynamic_cast<AddresseeIconViewItem*>(item);
+#else //KAB_EMBEDDED
+ AddresseeIconViewItem *aItem = (AddresseeIconViewItem*)(item);
+#endif //KAB_EMBEDDED
+
+ if (aItem) {
+ emit executed(aItem->addressee().uid());
+ }
+}
+
+void KAddressBookIconView::addresseeSelected()
+{
+ QIconViewItem *item;
+ AddresseeIconViewItem *aItem;
+
+ bool found = false;
+ for (item = mIconView->firstItem(); item && !found;
+ item = item->nextItem())
+ {
+ if (item->isSelected())
+ {
+#ifndef KAB_EMBEDDED
+ aItem = dynamic_cast<AddresseeIconViewItem*>(item);
+#else //KAB_EMBEDDED
+ aItem = (AddresseeIconViewItem*)(item);
+#endif //KAB_EMBEDDED
+ if (aItem)
+ {
+ emit selected(aItem->addressee().uid());
+ found = true;
+ }
+ }
+ }
+
+ if (!found)
+ emit selected(QString::null);
+}
+
+#ifndef KAB_EMBEDDED
+#include "kaddressbookiconview.moc"
+#endif //KAB_EMBEDDED