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