Diffstat (limited to 'noncore/unsupported/mail2/listviewplus.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/unsupported/mail2/listviewplus.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/noncore/unsupported/mail2/listviewplus.cpp b/noncore/unsupported/mail2/listviewplus.cpp new file mode 100644 index 0000000..ce5f35f --- a/dev/null +++ b/noncore/unsupported/mail2/listviewplus.cpp @@ -0,0 +1,54 @@ +#include <qpopupmenu.h> +#include <qtimer.h> + +#include "listviewplus.h" + +ListViewPlus::ListViewPlus(QWidget *parent, const char *name, WFlags fl) + : QListView(parent, name, fl) +{ + +} + +void ListViewPlus::keyPressEvent(QKeyEvent *event) +{ + switch(event->key()) { + case Qt::Key_Space: // FALLTHROUGH + case Qt::Key_Enter: + if (currentItem() != 0) + emit clicked(currentItem()); + break; + default: break; + } + + QListView::keyPressEvent(event); +} + +void ListViewPlus::setPopup(QPopupMenu *popup, int delay) +{ + _popup = popup; + _delay = delay; + + connect(this, SIGNAL(pressed(QListViewItem *, const QPoint &, int)), SLOT(_initPopup(QListViewItem *, const QPoint &, int))); + connect(this, SIGNAL(clicked(QListViewItem *, const QPoint &, int)), SLOT(_cancelPopup(QListViewItem *, const QPoint &, int))); +} + +void ListViewPlus::_initPopup(QListViewItem *, const QPoint &point, int) +{ + _point = point; + + _timer = new QTimer(); + _timer->start(_delay, true); + + connect(_timer, SIGNAL(timeout()), this, SLOT(_showPopup())); +} + +void ListViewPlus::_cancelPopup(QListViewItem *, const QPoint &, int) +{ + delete _timer; +} + +void ListViewPlus::_showPopup() +{ + _popup->popup(_point); +} + |