1 #include "downloadlistview.h"
2 #include "downloadmodel.h"
3 #include "playlist/PrettyItemDelegate.h"
6 DownloadListView::DownloadListView(QWidget *parent) : QListView(parent) {
8 // playIconHovered = false;
9 // setMouseTracking(true);
13 void DownloadListView::leaveEvent(QEvent * /* event */) {
14 DownloadModel *downloadModel = dynamic_cast<DownloadModel *>(model());
15 if (downloadModel) downloadModel->clearHover();
18 void DownloadListView::mouseMoveEvent(QMouseEvent *event) {
19 // qDebug() << "DownloadListView::mouseMoveEvent" << event->pos();
21 QListView::mouseMoveEvent(event);
23 if (isHoveringPlayIcon(event)) {
24 QMetaObject::invokeMethod(model(), "enterPlayIconHover", Qt::DirectConnection);
26 QMetaObject::invokeMethod(model(), "exitPlayIconHover", Qt::DirectConnection);
31 void DownloadListView::mousePressEvent(QMouseEvent *event) {
32 if (event->button() == Qt::LeftButton
33 && isHoveringPlayIcon(event)) {
34 QMetaObject::invokeMethod(model(), "enterPlayIconPressed", Qt::DirectConnection);
36 QListView::mousePressEvent(event);
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()));
46 QListView::mousePressEvent(event);
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();
55 PrettyItemDelegate *delegate = dynamic_cast<PrettyItemDelegate *>(itemDelegate());
56 if (!delegate) return false;
58 QRect buttonRect = delegate->downloadButtonRect(itemRect);
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();