Playlist: add newly-added columns

Still mostly boilter-plate-y. It is somewhat interesting to see that info
in playlist view, so add the two fileds as columns.

At least for Integrated loudness, since it's normally negative,
we need to add a specialized Delegate.
This commit is contained in:
Roman Lebedev 2023-06-27 04:57:35 +03:00 committed by Jonas Kvinge
parent 44e5c32bcb
commit b2c66c9cda
5 changed files with 53 additions and 0 deletions

View File

@ -323,6 +323,10 @@ QVariant Playlist::data(const QModelIndex &idx, int role) const {
if (role == Qt::DisplayRole) return song.comment().simplified();
return song.comment();
case Column_EBUR128IntegratedLoudness: return song.ebur128_integrated_loudness_lufs() ? *song.ebur128_integrated_loudness_lufs() : QVariant();
case Column_EBUR128LoudnessRange: return song.ebur128_loudness_range_lu() ? *song.ebur128_loudness_range_lu() : QVariant();
case Column_Source: return QVariant::fromValue(song.source());
case Column_Rating: return song.rating();
@ -1325,6 +1329,9 @@ bool Playlist::CompareItems(const int column, const Qt::SortOrder order, std::sh
case Column_HasCUE: cmp(has_cue);
case Column_EBUR128IntegratedLoudness: cmp(ebur128_integrated_loudness_lufs);
case Column_EBUR128LoudnessRange: cmp(ebur128_loudness_range_lu);
default: qLog(Error) << "No such column" << column;
}
@ -1384,6 +1391,10 @@ QString Playlist::column_name(Column column) {
case Column_Mood: return tr("Mood");
case Column_Rating: return tr("Rating");
case Column_HasCUE: return tr("CUE");
case Column_EBUR128IntegratedLoudness: return tr("Integrated loudness");
case Column_EBUR128LoudnessRange: return tr("Loudness range");
default: qLog(Error) << "No such column" << column;;
}
return "";

View File

@ -131,6 +131,8 @@ class Playlist : public QAbstractListModel {
Column_Mood,
Column_Rating,
Column_HasCUE,
Column_EBUR128IntegratedLoudness,
Column_EBUR128LoudnessRange,
ColumnCount
};

View File

@ -540,3 +540,23 @@ QString RatingItemDelegate::displayText(const QVariant &value, const QLocale&) c
return QString::number(rating, 'f', 1);
}
QString Ebur128LoudnessLUFSItemDelegate::displayText(const QVariant &value, const QLocale&) const {
bool ok = false;
double v = value.toDouble(&ok);
if (ok) return Song::Ebur128LoudnessLUFSToText(v);
return QString();
}
QString Ebur128LoudnessRangeLUItemDelegate::displayText(const QVariant &value, const QLocale&) const {
bool ok = false;
double v = value.toDouble(&ok);
if (ok) return Song::Ebur128LoudnessRangeLUToText(v);
return QString();
}

View File

@ -231,4 +231,20 @@ class RatingItemDelegate : public PlaylistDelegateBase {
QModelIndexList selected_indexes_;
};
class Ebur128LoudnessLUFSItemDelegate : public PlaylistDelegateBase {
Q_OBJECT
public:
explicit Ebur128LoudnessLUFSItemDelegate(QObject *parent) : PlaylistDelegateBase(parent) {}
QString displayText(const QVariant &value, const QLocale &locale) const override;
};
class Ebur128LoudnessRangeLUItemDelegate : public PlaylistDelegateBase {
Q_OBJECT
public:
explicit Ebur128LoudnessRangeLUItemDelegate(QObject *parent) : PlaylistDelegateBase(parent) {}
QString displayText(const QVariant &value, const QLocale &locale) const override;
};
#endif // PLAYLISTDELEGATES_H

View File

@ -274,6 +274,8 @@ void PlaylistView::SetItemDelegates() {
rating_delegate_ = new RatingItemDelegate(this);
setItemDelegateForColumn(Playlist::Column_Rating, rating_delegate_);
setItemDelegateForColumn(Playlist::Column_EBUR128IntegratedLoudness, new Ebur128LoudnessLUFSItemDelegate(this));
setItemDelegateForColumn(Playlist::Column_EBUR128LoudnessRange, new Ebur128LoudnessRangeLUItemDelegate(this));
}
void PlaylistView::setModel(QAbstractItemModel *m) {
@ -391,6 +393,8 @@ void PlaylistView::RestoreHeaderState() {
header_->HideSection(Playlist::Column_Mood);
header_->HideSection(Playlist::Column_Rating);
header_->HideSection(Playlist::Column_HasCUE);
header_->HideSection(Playlist::Column_EBUR128IntegratedLoudness);
header_->HideSection(Playlist::Column_EBUR128LoudnessRange);
header_->moveSection(header_->visualIndex(Playlist::Column_Track), 0);