]> git.sur5r.net Git - minitube/blob - src/downloadlistview.cpp
Imported Upstream version 1.2
[minitube] / src / downloadlistview.cpp
1 #include "downloadlistview.h"
2 #include "downloadmodel.h"
3 #include "playlist/PrettyItemDelegate.h"
4 #include <QtGui>
5
6 DownloadListView::DownloadListView(QWidget *parent) : QListView(parent) {
7
8     // playIconHovered = false;
9     // setMouseTracking(true);
10
11 }
12
13 void DownloadListView::leaveEvent(QEvent * /* event */) {
14     DownloadModel *downloadModel = dynamic_cast<DownloadModel *>(model());
15     if (downloadModel) downloadModel->clearHover();
16 }
17
18 void DownloadListView::mouseMoveEvent(QMouseEvent *event) {
19     // qDebug() << "DownloadListView::mouseMoveEvent" << event->pos();
20
21     QListView::mouseMoveEvent(event);
22
23     if (isHoveringPlayIcon(event)) {
24         QMetaObject::invokeMethod(model(), "enterPlayIconHover", Qt::DirectConnection);
25     } else {
26         QMetaObject::invokeMethod(model(), "exitPlayIconHover", Qt::DirectConnection);
27     }
28
29 }
30
31 void DownloadListView::mousePressEvent(QMouseEvent *event) {
32     if (event->button() == Qt::LeftButton
33         && isHoveringPlayIcon(event)) {
34         QMetaObject::invokeMethod(model(), "enterPlayIconPressed", Qt::DirectConnection);
35     } else {
36         QListView::mousePressEvent(event);
37     }
38 }
39
40 void DownloadListView::mouseReleaseEvent(QMouseEvent *event) {
41     if (event->button() == Qt::LeftButton) {
42         QMetaObject::invokeMethod(model(), "exitPlayIconPressed", Qt::DirectConnection);
43         if (isHoveringPlayIcon(event))
44             emit downloadButtonPushed(indexAt(event->pos()));
45     } else {
46         QListView::mousePressEvent(event);
47     }
48 }
49
50 bool DownloadListView::isHoveringPlayIcon(QMouseEvent *event) {
51     const QModelIndex itemIndex = indexAt(event->pos());
52     const QRect itemRect = visualRect(itemIndex);
53     // qDebug() << " itemRect.x()" <<  itemRect.x();
54
55     PrettyItemDelegate *delegate = dynamic_cast<PrettyItemDelegate *>(itemDelegate());
56     if (!delegate) return false;
57
58     QRect buttonRect = delegate->downloadButtonRect(itemRect);
59
60     const int x = event->x() - itemRect.x() - buttonRect.x();
61     const int y = event->y() - itemRect.y() - buttonRect.y();
62     return x > 0 && x < buttonRect.width() && y > 0 && y < buttonRect.height();
63 }