1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
#include "skin/qml/qmlvisibleeffectsmodel.h"
#include <QModelIndex>
#include "effects/effectmanifest.h"
#include "effects/effectsmanager.h"
namespace mixxx {
namespace skin {
namespace qml {
namespace {
const QHash<int, QByteArray> kRoleNames = {
{Qt::DisplayRole, "display"},
{Qt::ToolTipRole, "tooltip"},
{QmlVisibleEffectsModel::EffectIdRole, "effectId"},
};
}
QmlVisibleEffectsModel::QmlVisibleEffectsModel(
std::shared_ptr<EffectsManager> pEffectsManager,
QObject* parent)
: QAbstractListModel(parent), m_pEffectsManager(pEffectsManager) {
slotVisibleEffectsUpdated();
connect(m_pEffectsManager.get(),
&EffectsManager::visibleEffectsUpdated,
this,
&QmlVisibleEffectsModel::slotVisibleEffectsUpdated);
}
void QmlVisibleEffectsModel::slotVisibleEffectsUpdated() {
beginResetModel();
m_visibleEffectManifests = m_pEffectsManager->getVisibleEffectManifests();
endResetModel();
}
QVariant QmlVisibleEffectsModel::data(const QModelIndex& index, int role) const {
if (index.row() == 0) {
switch (role) {
case Qt::DisplayRole:
return EffectsManager::kNoEffectString;
case Qt::ToolTipRole:
return tr("No effect loaded.");
default:
return QVariant();
}
}
if (index.row() > m_visibleEffectManifests.size()) {
return QVariant();
}
const EffectManifestPointer pManifest = m_visibleEffectManifests.at(index.row() - 1);
switch (role) {
case Qt::DisplayRole:
return pManifest->displayName();
case Qt::ToolTipRole:
return pManifest->description();
case QmlVisibleEffectsModel::EffectIdRole:
return pManifest->id();
default:
return QVariant();
}
}
int QmlVisibleEffectsModel::rowCount(const QModelIndex& parent) const {
if (parent.isValid()) {
return 0;
}
// Add +1 because we also include "no effect" in the model
return m_visibleEffectManifests.size() + 1;
}
QHash<int, QByteArray> QmlVisibleEffectsModel::roleNames() const {
return kRoleNames;
}
QVariant QmlVisibleEffectsModel::get(int row) const {
QModelIndex idx = index(row, 0);
QVariantMap dataMap;
for (auto it = kRoleNames.constBegin(); it != kRoleNames.constEnd(); it++) {
dataMap.insert(it.value(), data(idx, it.key()));
}
return dataMap;
}
} // namespace qml
} // namespace skin
} // namespace mixxx
|