Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ControlObjects for track table sorting #2118

Merged
merged 16 commits into from
Jun 11, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
49 changes: 49 additions & 0 deletions src/library/basesqltablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,41 @@ void BaseSqlTableModel::initHeaderData() {
tr("ReplayGain"), 50);
}

void BaseSqlTableModel::initSortColumnMapping() {
// Add a bijective mapping between the SortColumnIds and column indices
for (int i = 0; i < TrackModel::SortColumnId::NUM_SORTCOLUMNIDS; ++i) {
m_columnIndexBySortColumnId[i] = -1;
}
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_ARTIST] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ARTIST);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_TITLE] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_TITLE);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_ALBUM] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ALBUM);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_ALBUMARTIST] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ALBUMARTIST);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_YEAR] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_YEAR);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_GENRE] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_GENRE);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_COMPOSER] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_COMPOSER);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_GROUPING] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_GROUPING);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_TRACKNUMBER] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_TRACKNUMBER);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_FILETYPE] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_FILETYPE);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_NATIVELOCATION] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_NATIVELOCATION);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_COMMENT] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_COMMENT);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_DURATION] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_DURATION);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_BITRATE] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_BITRATE);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_BPM] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_BPM);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_REPLAYGAIN] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_REPLAYGAIN);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_DATETIMEADDED] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_DATETIMEADDED);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_TIMESPLAYED] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_TIMESPLAYED);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_RATING] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_RATING);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_KEY] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_KEY);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_PREVIEW] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_PREVIEW);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_COVERART] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_COVERART);

m_sortColumnIdByColumnIndex.clear();
for (int i = 0; i < TrackModel::SortColumnId::NUM_SORTCOLUMNIDS; ++i) {
TrackModel::SortColumnId sortColumn = static_cast<TrackModel::SortColumnId>(i);
m_sortColumnIdByColumnIndex.insert(m_columnIndexBySortColumnId[sortColumn], sortColumn);
}
}

void BaseSqlTableModel::setHeaderProperties(
ColumnCache::Column column, QString title, int defaultWidth) {
int fi = fieldIndex(column);
Expand Down Expand Up @@ -399,10 +434,24 @@ void BaseSqlTableModel::setTable(const QString& tableName,
m_tableColumnCache.setColumns(m_tableColumns);

initHeaderData();
initSortColumnMapping();

m_bInitialized = true;
}

int BaseSqlTableModel::columnIndexFromSortColumnId(TrackModel::SortColumnId column) {
if (column == TrackModel::SortColumnId::SORTCOLUMN_INVALID) {
return -1;
}

return m_columnIndexBySortColumnId[column];
}

TrackModel::SortColumnId BaseSqlTableModel::sortColumnIdFromColumnIndex(int index) {
return m_sortColumnIdByColumnIndex.value(index, TrackModel::SortColumnId::SORTCOLUMN_INVALID);
}


const QString BaseSqlTableModel::currentSearch() const {
return m_currentSearch;
}
Expand Down
5 changes: 5 additions & 0 deletions src/library/basesqltablemodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ class BaseSqlTableModel : public QAbstractTableModel, public TrackModel {
void search(const QString& searchText, const QString& extraFilter = QString()) override;
const QString currentSearch() const override;
QAbstractItemDelegate* delegateForColumn(const int i, QObject* pParent) override;
TrackModel::SortColumnId sortColumnIdFromColumnIndex(int column) override;
int columnIndexFromSortColumnId(TrackModel::SortColumnId sortColumn) override;

///////////////////////////////////////////////////////////////////////////
// Inherited from QAbstractItemModel
Expand All @@ -90,6 +92,7 @@ class BaseSqlTableModel : public QAbstractTableModel, public TrackModel {
const QStringList& tableColumns,
QSharedPointer<BaseTrackCache> trackSource);
void initHeaderData();
virtual void initSortColumnMapping();

// Use this if you want a model that is read-only.
virtual Qt::ItemFlags readOnlyFlags(const QModelIndex &index) const;
Expand All @@ -102,6 +105,8 @@ class BaseSqlTableModel : public QAbstractTableModel, public TrackModel {
QString m_previewDeckGroup;
TrackId m_previewDeckTrackId;
QString m_tableOrderBy;
int m_columnIndexBySortColumnId[NUM_SORTCOLUMNIDS];
QMap<int, TrackModel::SortColumnId> m_sortColumnIdByColumnIndex;

private slots:
virtual void tracksChanged(QSet<TrackId> trackIds);
Expand Down
48 changes: 48 additions & 0 deletions src/library/browse/browsetablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,41 @@ BrowseTableModel::BrowseTableModel(QObject* parent,

setDefaultSort(COLUMN_FILENAME, Qt::AscendingOrder);

for (int i = 0; i < TrackModel::SortColumnId::NUM_SORTCOLUMNIDS; ++i) {
m_columnIndexBySortColumnId[i] = -1;
}
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_FILENAME] = COLUMN_FILENAME;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_ARTIST] = COLUMN_ARTIST;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_TITLE] = COLUMN_TITLE;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_ALBUM] = COLUMN_ALBUM;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_ALBUMARTIST] = COLUMN_ALBUMARTIST;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_YEAR] = COLUMN_YEAR;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_GENRE] = COLUMN_GENRE;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_COMPOSER] = COLUMN_COMPOSER;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_GROUPING] = COLUMN_GROUPING;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_TRACKNUMBER] = COLUMN_TRACK_NUMBER;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_FILETYPE] = COLUMN_TYPE;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_NATIVELOCATION] = COLUMN_NATIVELOCATION;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_COMMENT] = COLUMN_COMMENT;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_DURATION] = COLUMN_DURATION;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_BITRATE] = COLUMN_BITRATE;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_BPM] = COLUMN_BPM;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_REPLAYGAIN] = COLUMN_REPLAYGAIN;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_KEY] = COLUMN_KEY;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_PREVIEW] = COLUMN_PREVIEW;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_GROUPING] = COLUMN_GROUPING;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_FILE_MODIFIED_TIME] = COLUMN_FILE_MODIFIED_TIME;
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_FILE_CREATION_TIME] = COLUMN_FILE_CREATION_TIME;

m_sortColumnIdByColumnIndex.clear();
for (int i = 0; i < TrackModel::SortColumnId::NUM_SORTCOLUMNIDS; ++i) {
TrackModel::SortColumnId sortColumn = static_cast<TrackModel::SortColumnId>(i);
int columnIndex = m_columnIndexBySortColumnId[sortColumn];
if (columnIndex >= 0) {
m_sortColumnIdByColumnIndex.insert(columnIndex, sortColumn);
}
}

setHorizontalHeaderLabels(header_data);
// register the QList<T> as a metatype since we use QueuedConnection below
qRegisterMetaType< QList< QList<QStandardItem*> > >(
Expand All @@ -87,6 +122,19 @@ BrowseTableModel::BrowseTableModel(QObject* parent,
BrowseTableModel::~BrowseTableModel() {
}

int BrowseTableModel::columnIndexFromSortColumnId(TrackModel::SortColumnId column) {
if (column == TrackModel::SortColumnId::SORTCOLUMN_INVALID ||
column >= TrackModel::SortColumnId::NUM_SORTCOLUMNIDS) {
return -1;
}

return m_columnIndexBySortColumnId[column];
}

TrackModel::SortColumnId BrowseTableModel::sortColumnIdFromColumnIndex(int index) {
return m_sortColumnIdByColumnIndex.value(index, TrackModel::SortColumnId::SORTCOLUMN_INVALID);
}

const QList<int>& BrowseTableModel::searchColumns() const {
return m_searchColumns;
}
Expand Down
5 changes: 5 additions & 0 deletions src/library/browse/browsetablemodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ class BrowseTableModel final : public QStandardItemModel, public virtual TrackMo
bool setData(const QModelIndex& index, const QVariant& value, int role=Qt::EditRole) override;
QAbstractItemDelegate* delegateForColumn(const int i, QObject* pParent) override;
bool isColumnSortable(int column) override;
TrackModel::SortColumnId sortColumnIdFromColumnIndex(int index) override;
int columnIndexFromSortColumnId(TrackModel::SortColumnId sortColumn) override;

public slots:
void slotClear(BrowseTableModel*);
Expand All @@ -84,6 +86,9 @@ class BrowseTableModel final : public QStandardItemModel, public virtual TrackMo
RecordingManager* m_pRecordingManager;
BrowseThreadPointer m_pBrowseThread;
QString m_previewDeckGroup;
int m_columnIndexBySortColumnId[TrackModel::SortColumnId::NUM_SORTCOLUMNIDS];
QMap<int, TrackModel::SortColumnId> m_sortColumnIdByColumnIndex;

};

#endif
24 changes: 24 additions & 0 deletions src/library/librarycontrol.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,16 @@ LibraryControl::LibraryControl(Library* pLibrary)
connect(m_pAutoDjAddBottom.get(), SIGNAL(valueChanged(double)),
this, SLOT(slotAutoDjAddBottom(double)));

// Sort controls
m_pSortColumn = std::make_unique<ControlEncoder>(ConfigKey("[Library]", "sort_column"));
m_pSortOrder = std::make_unique<ControlPushButton>(ConfigKey("[Library]", "sort_order"));
m_pSortOrder->setButtonMode(ControlPushButton::TOGGLE);
m_pSortColumnToggle = std::make_unique<ControlEncoder>(ConfigKey("[Library]", "sort_column_toggle"), false);
connect(m_pSortColumn.get(), SIGNAL(valueChanged(double)),
this, SLOT(slotSortColumn(double)));
connect(m_pSortColumnToggle.get(), SIGNAL(valueChanged(double)),
this, SLOT(slotSortColumnToggle(double)));

// Font sizes
m_pFontSizeKnob = std::make_unique<ControlObject>(
ConfigKey("[Library]", "font_size_knob"), false);
Expand Down Expand Up @@ -478,6 +488,20 @@ void LibraryControl::slotGoToItem(double v) {
//emitKeyEvent(QKeyEvent{QEvent::KeyPress, Qt::Key_Return, Qt::AltModifier});
}

void LibraryControl::slotSortColumn(double v) {
m_pSortColumnToggle->set(v);
}

void LibraryControl::slotSortColumnToggle(double v) {
int column = static_cast<int>(v);
if (static_cast<int>(m_pSortColumn->get()) == column) {
m_pSortOrder->set(!m_pSortOrder->get());
} else {
m_pSortColumn->set(v);
m_pSortOrder->set(0);
}
}

void LibraryControl::slotFontSize(double v) {
if (v == 0.0) {
return;
Expand Down
8 changes: 8 additions & 0 deletions src/library/librarycontrol.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ class LibraryControl : public QObject {
void slotNumSamplersChanged(double v);
void slotNumPreviewDecksChanged(double v);

void slotSortColumn(double v);
void slotSortColumnToggle(double v);

void slotFontSize(double v);
void slotIncrementFontSize(double v);
void slotDecrementFontSize(double v);
Expand Down Expand Up @@ -117,6 +120,11 @@ class LibraryControl : public QObject {
std::unique_ptr<ControlObject> m_pAutoDjAddTop;
std::unique_ptr<ControlObject> m_pAutoDjAddBottom;

// Controls to sort the track view
std::unique_ptr<ControlEncoder> m_pSortColumn;
std::unique_ptr<ControlEncoder> m_pSortColumnToggle;
std::unique_ptr<ControlPushButton> m_pSortOrder;

// Font sizes
std::unique_ptr<ControlPushButton> m_pFontSizeIncrement;
std::unique_ptr<ControlPushButton> m_pFontSizeDecrement;
Expand Down
36 changes: 36 additions & 0 deletions src/library/playlisttablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,42 @@ PlaylistTableModel::PlaylistTableModel(QObject* parent,
PlaylistTableModel::~PlaylistTableModel() {
}

void PlaylistTableModel::initSortColumnMapping() {
// Add a bijective mapping between the SortColumnIds and column indices
for (int i = 0; i < TrackModel::SortColumnId::NUM_SORTCOLUMNIDS; ++i) {
m_columnIndexBySortColumnId[i] = -1;
}
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_ARTIST] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ARTIST);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_TITLE] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_TITLE);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_ALBUM] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ALBUM);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_ALBUMARTIST] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_ALBUMARTIST);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_YEAR] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_YEAR);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_GENRE] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_GENRE);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_COMPOSER] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_COMPOSER);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_GROUPING] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_GROUPING);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_TRACKNUMBER] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_TRACKNUMBER);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_FILETYPE] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_FILETYPE);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_NATIVELOCATION] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_NATIVELOCATION);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_COMMENT] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_COMMENT);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_DURATION] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_DURATION);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_BITRATE] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_BITRATE);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_BPM] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_BPM);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_REPLAYGAIN] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_REPLAYGAIN);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_DATETIMEADDED] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_DATETIMEADDED);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_TIMESPLAYED] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_TIMESPLAYED);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_RATING] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_RATING);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_KEY] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_KEY);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_PREVIEW] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_PREVIEW);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_COVERART] = fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_COVERART);
m_columnIndexBySortColumnId[TrackModel::SortColumnId::SORTCOLUMN_POSITION] = fieldIndex(ColumnCache::COLUMN_PLAYLISTTRACKSTABLE_POSITION);

m_sortColumnIdByColumnIndex.clear();
for (int i = 0; i < TrackModel::SortColumnId::NUM_SORTCOLUMNIDS; ++i) {
TrackModel::SortColumnId sortColumn = static_cast<TrackModel::SortColumnId>(i);
m_sortColumnIdByColumnIndex.insert(m_columnIndexBySortColumnId[sortColumn], sortColumn);
}
}

void PlaylistTableModel::setTableModel(int playlistId) {
//qDebug() << "PlaylistTableModel::setTableModel" << playlistId;
if (m_iPlaylistId == playlistId) {
Expand Down
2 changes: 2 additions & 0 deletions src/library/playlisttablemodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ class PlaylistTableModel : public BaseSqlTableModel {
void playlistChanged(int playlistId);

private:
void initSortColumnMapping() override;

int m_iPlaylistId;
bool m_showAll;
};
Expand Down
10 changes: 10 additions & 0 deletions src/library/proxytrackmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,16 @@ ProxyTrackModel::ProxyTrackModel(QAbstractItemModel* pTrackModel,
ProxyTrackModel::~ProxyTrackModel() {
}

TrackModel::SortColumnId ProxyTrackModel::sortColumnIdFromColumnIndex(int index) {
return (m_pTrackModel ? m_pTrackModel->sortColumnIdFromColumnIndex(index)
: TrackModel::sortColumnIdFromColumnIndex(index));
}

int ProxyTrackModel::columnIndexFromSortColumnId(TrackModel::SortColumnId sortColumn) {
return (m_pTrackModel ? m_pTrackModel->columnIndexFromSortColumnId(sortColumn)
: TrackModel::columnIndexFromSortColumnId(sortColumn));
}

TrackId ProxyTrackModel::getTrackId(const QModelIndex& index) const {
QModelIndex indexSource = mapToSource(index);
return m_pTrackModel ? m_pTrackModel->getTrackId(indexSource) : TrackId();
Expand Down
2 changes: 2 additions & 0 deletions src/library/proxytrackmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ class ProxyTrackModel : public QSortFilterProxyModel, public TrackModel {
QAbstractItemDelegate* delegateForColumn(const int i, QObject* pParent) final;
QString getModelSetting(QString name) final;
bool setModelSetting(QString name, QVariant value) final;
TrackModel::SortColumnId sortColumnIdFromColumnIndex(int index) override;
int columnIndexFromSortColumnId(TrackModel::SortColumnId sortColumn) override;

// Inherited from QSortFilterProxyModel
bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const final;
Expand Down