summaryrefslogtreecommitdiffabout
path: root/kaddressbook/views/kaddressbooktableview.cpp
Side-by-side diff
Diffstat (limited to 'kaddressbook/views/kaddressbooktableview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/views/kaddressbooktableview.cpp337
1 files changed, 337 insertions, 0 deletions
diff --git a/kaddressbook/views/kaddressbooktableview.cpp b/kaddressbook/views/kaddressbooktableview.cpp
new file mode 100644
index 0000000..ee2fcf8
--- a/dev/null
+++ b/kaddressbook/views/kaddressbooktableview.cpp
@@ -0,0 +1,337 @@
+// $Id$
+
+#include <qvbox.h>
+#include <qlistbox.h>
+#include <qwidget.h>
+#include <qfile.h>
+#include <qimage.h>
+#include <qcombobox.h>
+#include <qapplication.h>
+#include <qdragobject.h>
+#include <qevent.h>
+#include <qurl.h>
+#include <qpixmap.h>
+
+#include <kabc/addressbook.h>
+#include <kapplication.h>
+#include <kconfig.h>
+#include <kcolorbutton.h>
+#include <kdebug.h>
+#include <kglobal.h>
+#include <kiconloader.h>
+#include <klineedit.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kurl.h>
+#include <kurlrequester.h>
+
+//US#include "configuretableviewdialog.h"
+#include "contactlistview.h"
+#include "kabprefs.h"
+#include "undocmds.h"
+#include "viewmanager.h"
+
+#include <qlayout.h>
+
+
+#include "kaddressbooktableview.h"
+
+
+KAddressBookTableView::KAddressBookTableView( KABC::AddressBook *ab,
+ QWidget *parent, const char *name )
+ : KAddressBookView( ab, parent, name )
+{
+ mainLayout = new QVBoxLayout( viewWidget(), 2 );
+
+ // The list view will be created when the config is read.
+ mListView = 0;
+}
+
+KAddressBookTableView::~KAddressBookTableView()
+{
+}
+
+void KAddressBookTableView::reconstructListView()
+{
+ if (mListView)
+ {
+ disconnect(mListView, SIGNAL(selectionChanged()),
+ this, SLOT(addresseeSelected()));
+ disconnect(mListView, SIGNAL(executed(QListViewItem*)),
+ this, SLOT(addresseeExecuted(QListViewItem*)));
+ disconnect(mListView, SIGNAL(doubleClicked(QListViewItem*)),
+ this, SLOT(addresseeExecuted(QListViewItem*)));
+ disconnect(mListView, SIGNAL(startAddresseeDrag()), this,
+ SIGNAL(startDrag()));
+ disconnect(mListView, SIGNAL(returnPressed(QListViewItem*)),
+ this, SLOT(addresseeExecuted(QListViewItem*)));
+
+ disconnect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this,
+ SIGNAL(dropped(QDropEvent*)));
+ delete mListView;
+ }
+
+ mListView = new ContactListView( this, addressBook(), viewWidget() );
+
+ // Add the columns
+ KABC::Field::List fieldList = fields();
+ KABC::Field::List::ConstIterator it;
+
+ int c = 0;
+ for( it = fieldList.begin(); it != fieldList.end(); ++it ) {
+ mListView->addColumn( (*it)->label() );
+ mListView->setColumnWidthMode(c++, QListView::Manual);
+//US
+ // qDebug("KAddressBookTableView::reconstructListView: field %s", (*it)->label().latin1());
+ }
+
+ connect(mListView, SIGNAL(selectionChanged()),
+ this, SLOT(addresseeSelected()));
+ connect(mListView, SIGNAL(startAddresseeDrag()), this,
+ SIGNAL(startDrag()));
+ connect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this,
+ SIGNAL(dropped(QDropEvent*)));
+
+ if (KABPrefs::instance()->mHonorSingleClick)
+ connect(mListView, SIGNAL(executed(QListViewItem*)),
+ this, SLOT(addresseeExecuted(QListViewItem*)));
+ else
+ connect(mListView, SIGNAL(doubleClicked(QListViewItem*)),
+ this, SLOT(addresseeExecuted(QListViewItem*)));
+ connect(mListView, SIGNAL(returnPressed(QListViewItem*)),
+ this, SLOT(addresseeExecuted(QListViewItem*)));
+ connect(mListView, SIGNAL(signalDelete()),
+ this, SLOT(addresseeDeleted()));
+
+ refresh();
+
+ mListView->setSorting( 0, true );
+ mainLayout->addWidget( mListView );
+ mainLayout->activate();
+ mListView->show();
+}
+
+void KAddressBookTableView::writeConfig(KConfig *config)
+{
+ KAddressBookView::writeConfig(config);
+
+ mListView->saveLayout(config, config->group());
+}
+
+void KAddressBookTableView::readConfig(KConfig *config)
+{
+ KAddressBookView::readConfig( config );
+
+ // The config could have changed the fields, so we need to reconstruct
+ // the listview.
+ reconstructListView();
+
+ // Set the list view options
+ mListView->setAlternateBackgroundEnabled(config->readBoolEntry("ABackground",
+ true));
+ mListView->setSingleLineEnabled(config->readBoolEntry("SingleLine", false));
+ mListView->setToolTipsEnabled(config->readBoolEntry("ToolTips", true));
+
+ if (config->readBoolEntry("Background", false))
+ mListView->setBackgroundPixmap(config->readEntry("BackgroundName"));
+
+ // Restore the layout of the listview
+ mListView->restoreLayout(config, config->group());
+}
+
+void KAddressBookTableView::refresh(QString uid)
+{
+ // For now just repopulate. In reality this method should
+ // check the value of uid, and if valid iterate through
+ // the listview to find the entry, then tell it to refresh.
+
+ if (uid.isNull()) {
+ // Clear the list view
+ QString currentUID, nextUID;
+#ifndef KAB_EMBEDDED
+ ContactListViewItem *currentItem = dynamic_cast<ContactListViewItem*>( mListView->currentItem() );
+#else //KAB_EMBEDDED
+ ContactListViewItem *currentItem = (ContactListViewItem*)( mListView->currentItem() );
+#endif //KAB_EMBEDDED
+
+ if ( currentItem ) {
+#ifndef KAB_EMBEDDED
+ ContactListViewItem *nextItem = dynamic_cast<ContactListViewItem*>( currentItem->itemBelow() );
+#else //KAB_EMBEDDED
+ ContactListViewItem *nextItem = (ContactListViewItem*)( currentItem->itemBelow() );
+#endif //KAB_EMBEDDED
+ if ( nextItem )
+ nextUID = nextItem->addressee().uid();
+ currentUID = currentItem->addressee().uid();
+ }
+
+ mListView->clear();
+
+ currentItem = 0;
+ KABC::Addressee::List addresseeList = addressees();
+ KABC::Addressee::List::Iterator it;
+ for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
+ ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields());
+ if ( (*it).uid() == currentUID )
+ currentItem = item;
+ else if ( (*it).uid() == nextUID && !currentItem )
+ currentItem = item;
+ }
+
+ // Sometimes the background pixmap gets messed up when we add lots
+ // of items.
+ mListView->repaint();
+
+ if ( currentItem ) {
+ mListView->setCurrentItem( currentItem );
+ mListView->ensureItemVisible( currentItem );
+ }
+ } else {
+ // Only need to update on entry. Iterate through and try to find it
+ ContactListViewItem *ceItem;
+ QListViewItemIterator it( mListView );
+ while ( it.current() ) {
+#ifndef KAB_EMBEDDED
+ ceItem = dynamic_cast<ContactListViewItem*>( it.current() );
+#else //KAB_EMBEDDED
+ ceItem = (ContactListViewItem*)( it.current() );
+#endif //KAB_EMBEDDED
+
+ if ( ceItem && ceItem->addressee().uid() == uid ) {
+ ceItem->refresh();
+ return;
+ }
+ ++it;
+ }
+
+ refresh( QString::null );
+ }
+}
+
+QStringList KAddressBookTableView::selectedUids()
+{
+ QStringList uidList;
+ QListViewItem *item;
+ ContactListViewItem *ceItem;
+
+ for(item = mListView->firstChild(); item; item = item->itemBelow())
+ {
+ if (mListView->isSelected( item ))
+ {
+#ifndef KAB_EMBEDDED
+ ceItem = dynamic_cast<ContactListViewItem*>(item);
+#else //KAB_EMBEDDED
+ ceItem = (ContactListViewItem*)(item);
+#endif //KAB_EMBEDDED
+
+ if (ceItem != 0L)
+ uidList << ceItem->addressee().uid();
+ }
+ }
+ if ( uidList.count() == 0 )
+ if ( mListView->currentItem() ) {
+ ceItem = (ContactListViewItem*)(mListView->currentItem()) ;
+ uidList << ceItem->addressee().uid();
+ }
+
+ return uidList;
+}
+
+void KAddressBookTableView::setSelected(QString uid, bool selected)
+{
+ QListViewItem *item;
+ ContactListViewItem *ceItem;
+
+ if (uid.isNull())
+ {
+ mListView->selectAll(selected);
+ }
+ else
+ {
+ for(item = mListView->firstChild(); item; item = item->itemBelow())
+ {
+#ifndef KAB_EMBEDDED
+ ceItem = dynamic_cast<ContactListViewItem*>(item);
+#else //KAB_EMBEDDED
+ ceItem = (ContactListViewItem*)(item);
+#endif //KAB_EMBEDDED
+
+
+ if ((ceItem != 0L) && (ceItem->addressee().uid() == uid))
+ {
+ mListView->setSelected(item, selected);
+
+ if (selected)
+ mListView->ensureItemVisible(item);
+ }
+ }
+ }
+}
+
+void KAddressBookTableView::addresseeSelected()
+{
+ // We need to try to find the first selected item. This might not be the
+ // last selected item, but when QListView is in multiselection mode,
+ // there is no way to figure out which one was
+ // selected last.
+ QListViewItem *item;
+ bool found =false;
+ for (item = mListView->firstChild(); item && !found;
+ item = item->nextSibling())
+ {
+ if (item->isSelected())
+ {
+ found = true;
+#ifndef KAB_EMBEDDED
+ ContactListViewItem *ceItem
+ = dynamic_cast<ContactListViewItem*>(item);
+#else //KAB_EMBEDDED
+ ContactListViewItem *ceItem
+ = (ContactListViewItem*)(item);
+#endif //KAB_EMBEDDED
+
+ if ( ceItem ) emit selected(ceItem->addressee().uid());
+ }
+ }
+
+ if (!found)
+ emit selected(QString::null);
+}
+
+void KAddressBookTableView::addresseeExecuted(QListViewItem *item)
+{
+ if (item)
+ {
+#ifndef KAB_EMBEDDED
+ ContactListViewItem *ceItem
+ = dynamic_cast<ContactListViewItem*>(item);
+#else //KAB_EMBEDDED
+ ContactListViewItem *ceItem
+ = (ContactListViewItem*)(item);
+#endif //KAB_EMBEDDED
+
+ if (ceItem)
+ {
+ emit executed(ceItem->addressee().uid());
+ }
+ }
+ else
+ {
+ emit executed(QString::null);
+ }
+}
+
+void KAddressBookTableView::addresseeDeleted()
+{
+
+ emit deleteRequest();
+
+}
+
+
+
+
+
+#ifndef KAB_EMBEDDED
+#include "kaddressbooktableview.moc"
+#endif //KAB_EMBEDDED