-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Expand file tree
/
Copy pathqmlsidebarmodelproxy.cpp
More file actions
89 lines (77 loc) · 2.51 KB
/
Copy pathqmlsidebarmodelproxy.cpp
File metadata and controls
89 lines (77 loc) · 2.51 KB
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 "qml/qmlsidebarmodelproxy.h"
#include <qalgorithms.h>
#include <QAbstractListModel>
#include <QVariant>
#include <QtDebug>
#include "library/treeitem.h"
#include "moc_qmlsidebarmodelproxy.cpp"
#include "qml/qmlconfigproxy.h"
#include "qml/qmllibrarysource.h"
#include "util/assert.h"
#include "util/parented_ptr.h"
namespace mixxx {
namespace qml {
namespace {
const QHash<int, QByteArray> kRoleNames = {
{Qt::DisplayRole, "label"},
{QmlSidebarModelProxy::IconRole, "icon"},
};
} // namespace
QHash<int, QByteArray> QmlSidebarModelProxy::roleNames() const {
return kRoleNames;
}
QVariant QmlSidebarModelProxy::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;
}
void QmlSidebarModelProxy::activate(const QModelIndex& index) {
VERIFY_OR_DEBUG_ASSERT(index.isValid()) {
return;
}
if (index.internalPointer() == this) {
VERIFY_OR_DEBUG_ASSERT(index.row() >= 0 && index.row() < m_sFeatures.length()) {
return;
}
m_sFeatures[index.row()]->activate();
} else {
TreeItem* pTreeItem = static_cast<TreeItem*>(index.internalPointer());
VERIFY_OR_DEBUG_ASSERT(pTreeItem != nullptr) {
return;
}
LibraryFeature* pFeature = pTreeItem->feature();
DEBUG_ASSERT(pFeature);
pFeature->activateChild(index);
pFeature->onLazyChildExpandation(index);
}
}
QmlSidebarModelProxy::QmlSidebarModelProxy(QObject* parent)
: SidebarModel(QmlConfigProxy::get(), parent),
m_tracklist(nullptr) {
}
QmlSidebarModelProxy::~QmlSidebarModelProxy() = default;
void QmlSidebarModelProxy::update(const QList<QmlLibraryAbstractSource*>& sources) {
beginResetModel();
qDeleteAll(m_sFeatures);
for (const auto& librarySource : sources) {
VERIFY_OR_DEBUG_ASSERT(librarySource) {
continue;
}
connect(librarySource,
&QmlLibraryAbstractSource::requestTrackModel,
this,
&QmlSidebarModelProxy::slotShowTrackModel);
auto* pLibrarySource = librarySource->internal();
addLibraryFeature(pLibrarySource);
}
endResetModel();
}
void QmlSidebarModelProxy::slotShowTrackModel(std::shared_ptr<QmlLibraryTrackListModel> pModel) {
m_tracklist = pModel;
emit tracklistChanged();
}
} // namespace qml
} // namespace mixxx