]> git.sur5r.net Git - minitube/blob - src/downloadmodel.cpp
Imported Upstream version 1.2
[minitube] / src / downloadmodel.cpp
1 #include "downloadmodel.h"
2 #include "downloadmanager.h"
3 #include "downloaditem.h"
4 #include "video.h"
5 #include "ListModel.h"
6
7 DownloadModel::DownloadModel(DownloadManager *downloadManager, QObject *parent) :
8         QAbstractListModel(parent),
9         downloadManager(downloadManager) {
10     hoveredRow = -1;
11     playIconHovered = false;
12     playIconPressed = false;
13 }
14
15 int DownloadModel::rowCount(const QModelIndex &/*parent*/) const {
16     return downloadManager->getItems().size();
17 }
18
19 QVariant DownloadModel::data(const QModelIndex &index, int role) const {
20
21     int row = index.row();
22     if (row < 0 || row >= rowCount()) return QVariant();
23
24     QList<DownloadItem*> items = downloadManager->getItems();
25     if (items.isEmpty()) return QVariant();
26
27     switch (role) {
28     case ItemTypeRole:
29         return ItemTypeVideo;
30     case VideoRole:
31         return QVariant::fromValue(QPointer<Video>(items.at(row)->getVideo()));
32     case DownloadItemRole:
33         return QVariant::fromValue(QPointer<DownloadItem>(items.at(row)));
34     case ActiveTrackRole:
35         return false;
36     case HoveredItemRole:
37         return hoveredRow == index.row();
38     case DownloadButtonHoveredRole:
39         return playIconHovered;
40     case DownloadButtonPressedRole:
41         return playIconPressed;
42     }
43
44     return QVariant();
45 }
46
47 void DownloadModel::sendReset() {
48     reset();
49 }
50
51 void DownloadModel::setHoveredRow(int row) {
52     int oldRow = hoveredRow;
53     hoveredRow = row;
54     emit dataChanged( createIndex( oldRow, 0 ), createIndex( oldRow, columnCount() - 1 ) );
55     emit dataChanged( createIndex( hoveredRow, 0 ), createIndex( hoveredRow, columnCount() - 1 ) );
56 }
57
58 void DownloadModel::clearHover() {
59     emit dataChanged( createIndex( hoveredRow, 0 ), createIndex( hoveredRow, columnCount() - 1 ) );
60     hoveredRow = -1;
61 }
62
63 void DownloadModel::enterPlayIconHover() {
64     if (playIconHovered) return;
65     playIconHovered = true;
66     updatePlayIcon();
67 }
68
69 void DownloadModel::exitPlayIconHover() {
70     if (!playIconHovered) return;
71     playIconHovered = false;
72     updatePlayIcon();
73     setHoveredRow(hoveredRow);
74 }
75
76 void DownloadModel::enterPlayIconPressed() {
77     if (playIconPressed) return;
78     playIconPressed = true;
79     updatePlayIcon();
80 }
81
82 void DownloadModel::exitPlayIconPressed() {
83     if (!playIconPressed) return;
84     playIconPressed = false;
85     updatePlayIcon();
86 }
87
88 void DownloadModel::updatePlayIcon() {
89     emit dataChanged( createIndex( hoveredRow, 0 ), createIndex( hoveredRow, columnCount() - 1 ) );
90 }