diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index 15051b299..ca48580d8 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -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 ""; diff --git a/src/playlist/playlist.h b/src/playlist/playlist.h index 247add19b..9a157fac2 100644 --- a/src/playlist/playlist.h +++ b/src/playlist/playlist.h @@ -131,6 +131,8 @@ class Playlist : public QAbstractListModel { Column_Mood, Column_Rating, Column_HasCUE, + Column_EBUR128IntegratedLoudness, + Column_EBUR128LoudnessRange, ColumnCount }; diff --git a/src/playlist/playlistdelegates.cpp b/src/playlist/playlistdelegates.cpp index 59e138e58..08ea15f04 100644 --- a/src/playlist/playlistdelegates.cpp +++ b/src/playlist/playlistdelegates.cpp @@ -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(); + +} diff --git a/src/playlist/playlistdelegates.h b/src/playlist/playlistdelegates.h index cdd160087..95853e7bb 100644 --- a/src/playlist/playlistdelegates.h +++ b/src/playlist/playlistdelegates.h @@ -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 diff --git a/src/playlist/playlistview.cpp b/src/playlist/playlistview.cpp index 959171526..bf07cf45f 100644 --- a/src/playlist/playlistview.cpp +++ b/src/playlist/playlistview.cpp @@ -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);