#ifndef CONTACTLISTVIEW_H #define CONTACTLISTVIEW_H #include <qcolor.h> #include <qpixmap.h> #include <qtooltip.h> #include <qstring.h> #include <klistview.h> #include <kabc/field.h> #include <kabc/addressee.h> #include <kabc/addressbook.h> class QDropEvent; class KAddressBookTableView; class ContactListView; /** The whole tooltip design needs a lot of work. Currently it is * hacked together to function. */ class DynamicTip : public QToolTip { public: DynamicTip( ContactListView * parent ); protected: void maybeTip( const QPoint & ); private: }; class ContactListViewItem : public KListViewItem { public: ContactListViewItem(const KABC::Addressee &a, ContactListView* parent, KABC::AddressBook *doc, const KABC::Field::List &fields ); const KABC::Addressee &addressee() const { return mAddressee; } virtual void refresh(); virtual ContactListView* parent(); virtual QString key ( int, bool ) const; /** Adds the border around the cell if the user wants it. * This is how the single line config option is implemented. */ virtual void paintCell(QPainter * p, const QColorGroup & cg, int column, int width, int align ); private: KABC::Addressee mAddressee; KABC::Field::List mFields; ContactListView *parentListView; KABC::AddressBook *mDocument; }; ///////////////////////////////////////////// // ContactListView class ContactListView : public KListView { Q_OBJECT public: ContactListView(KAddressBookTableView *view, KABC::AddressBook *doc, QWidget *parent, const char *name = 0L ); virtual ~ContactListView() {} //void resort(); /** Returns true if tooltips should be displayed, false otherwise */ bool tooltips() const { return mToolTips; } void setToolTipsEnabled(bool enabled) { mToolTips = enabled; } bool alternateBackground() const { return mABackground; } void setAlternateBackgroundEnabled(bool enabled); bool singleLine() const { return mSingleLine; } void setSingleLineEnabled(bool enabled) { mSingleLine = enabled; } const QColor &alternateColor() const { return mAlternateColor; } void setAlternateColor(const QColor &mAlternateColor); /** Sets the background pixmap to <i>filename</i>. If the * QString is empty (QString::isEmpty()), then the background * pixmap will be disabled. */ void setBackgroundPixmap(const QString &filename); protected: /** Paints the background pixmap in the empty area. This method is needed * since Qt::FixedPixmap will not scroll with the list view. */ virtual void paintEmptyArea( QPainter * p, const QRect & rect ); virtual void contentsMousePressEvent(QMouseEvent*); void contentsMouseMoveEvent( QMouseEvent *e ); void contentsDropEvent( QDropEvent *e ); virtual bool acceptDrag(QDropEvent *e) const; protected slots: void itemDropped(QDropEvent *e); public slots: signals: void startAddresseeDrag(); void addresseeDropped(QDropEvent *); private: KAddressBookTableView *pabWidget; int oldColumn; int column; bool ascending; bool mABackground; bool mSingleLine; bool mToolTips; QColor mAlternateColor; QPoint presspos; }; #endif