blob: 9e60bd79c5ef5cea2491dd4092b3577bf9214cd0 (
plain)
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
|
#pragma once
#include <QSortFilterProxyModel>
#include <QAbstractItemModel>
#include "library/trackmodel.h"
// ProxyTrackModel composes a TrackModel inside of a QSortFilterProxyModel so
// that the sorting and filtering of the QSortFilterProxyModel can be completely
// transparent to the user of the TrackModel. The ProxyTrackModel will
// automatically translate any QModelIndex's to their source index before
// calling the composed TrackModel. If the bHandleSearches flag is set, the
// TrackModel search calls will not be delivered to the composed TrackModel
// because filtering is handled by the QSortFilterProxyModel.
class ProxyTrackModel : public QSortFilterProxyModel, public TrackModel {
public:
// Construct a new ProxyTrackModel with pTrackModel as the TrackModel it
// composes. If bHandleSearches is true, then search signals will not be
// delivered to pTrackModel -- instead the ProxyTrackModel will do its own
// filtering.
explicit ProxyTrackModel(QAbstractItemModel* pTrackModel, bool bHandleSearches = true);
~ProxyTrackModel() override;
// Inherited from TrackModel
CapabilitiesFlags getCapabilities() const final;
TrackPointer getTrack(const QModelIndex& index) const final;
TrackPointer getTrackByRef(const TrackRef& trackRef) const final;
QString getTrackLocation(const QModelIndex& index) const final;
TrackId getTrackId(const QModelIndex& index) const final;
CoverInfo getCoverInfo(const QModelIndex& index) const final;
const QVector<int> getTrackRows(TrackId trackId) const final;
void search(const QString& searchText,const QString& extraFilter = QString()) final;
const QString currentSearch() const final;
bool isColumnInternal(int column) final;
bool isColumnHiddenByDefault(int column) final;
void removeTracks(const QModelIndexList& indices) final;
void moveTrack(const QModelIndex& sourceIndex, const QModelIndex& destIndex) final;
QAbstractItemDelegate* delegateForColumn(const int i, QObject* pParent) final;
QString getModelSetting(const QString& name) final;
bool setModelSetting(const QString& name, const QVariant& value) final;
TrackModel::SortColumnId sortColumnIdFromColumnIndex(int index) const override;
int columnIndexFromSortColumnId(TrackModel::SortColumnId sortColumn) const override;
// Inherited from QSortFilterProxyModel
bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const final;
// Inherited from QAbstractItemModel
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) final;
private:
TrackModel* m_pTrackModel;
QString m_currentSearch;
bool m_bHandleSearches;
};
|