summaryrefslogtreecommitdiff
path: root/noncore/unsupported/mail2/listviewplus.cpp
Side-by-side diff
Diffstat (limited to 'noncore/unsupported/mail2/listviewplus.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/unsupported/mail2/listviewplus.cpp54
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);
+}
+