1 #include "downloadlistview.h"
2 #include "downloadmodel.h"
3 #include "playlist/PrettyItemDelegate.h"
5 DownloadListView::DownloadListView(QWidget *parent) : QListView(parent) {
9 void DownloadListView::leaveEvent(QEvent * /* event */) {
10 DownloadModel *downloadModel = dynamic_cast<DownloadModel *>(model());
11 if (downloadModel) downloadModel->clearHover();
14 void DownloadListView::mouseMoveEvent(QMouseEvent *event) {
15 // qDebug() << "DownloadListView::mouseMoveEvent" << event->pos();
17 QListView::mouseMoveEvent(event);
19 if (isHoveringPlayIcon(event)) {
20 QMetaObject::invokeMethod(model(), "enterPlayIconHover");
22 QMetaObject::invokeMethod(model(), "exitPlayIconHover");
27 void DownloadListView::mousePressEvent(QMouseEvent *event) {
28 if (event->button() == Qt::LeftButton
29 && isHoveringPlayIcon(event)) {
30 QMetaObject::invokeMethod(model(), "enterPlayIconPressed");
32 QListView::mousePressEvent(event);
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()));
42 QListView::mousePressEvent(event);
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();
51 PrettyItemDelegate *delegate = dynamic_cast<PrettyItemDelegate *>(itemDelegate());
52 if (!delegate) return false;
54 QRect buttonRect = delegate->downloadButtonRect(itemRect);
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();