From b2c66c9cda33299daa589c76e69ff847964db020 Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Tue, 27 Jun 2023 04:57:35 +0300 Subject: [PATCH] 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. --- src/playlist/playlist.cpp | 11 +++++++++++ src/playlist/playlist.h | 2 ++ src/playlist/playlistdelegates.cpp | 20 ++++++++++++++++++++ src/playlist/playlistdelegates.h | 16 ++++++++++++++++ src/playlist/playlistview.cpp | 4 ++++ 5 files changed, 53 insertions(+) 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);