Add BPM, mood and initial key support

This commit is contained in:
Jonas Kvinge
2025-08-10 01:34:44 +02:00
parent c4646531b0
commit da9e9840b8
8 changed files with 116 additions and 7 deletions

View File

@@ -391,7 +391,11 @@ QVariant Playlist::data(const QModelIndex &idx, const int role) const {
case Column::HasCUE: return song.has_cue();
case Column::Mood:
case Column::BPM: return song.bpm();
case Column::Mood: return song.mood();
case Column::InitialKey: return song.initial_key();
case Column::Moodbar:
case Column::ColumnCount:
break;
@@ -445,7 +449,7 @@ QVariant Playlist::data(const QModelIndex &idx, const int role) const {
#ifdef HAVE_MOODBAR
void Playlist::MoodbarUpdated(const QModelIndex &idx) {
Q_EMIT dataChanged(idx.sibling(idx.row(), static_cast<int>(Column::Mood)), idx.sibling(idx.row(), static_cast<int>(Column::Mood)));
Q_EMIT dataChanged(idx.sibling(idx.row(), static_cast<int>(Column::Moodbar)), idx.sibling(idx.row(), static_cast<int>(Column::Moodbar)));
}
#endif
@@ -1412,7 +1416,11 @@ bool Playlist::CompareItems(const Column column, const Qt::SortOrder order, Play
case Column::EBUR128IntegratedLoudness: return CompareVal(ma.ebur128_integrated_loudness_lufs(), mb.ebur128_integrated_loudness_lufs());
case Column::EBUR128LoudnessRange: return CompareVal(ma.ebur128_loudness_range_lu(), mb.ebur128_loudness_range_lu());
case Column::Mood:
case Column::BPM: return CompareVal(ma.bpm(), mb.bpm());
case Column::Mood: return CompareStr(ma.mood(), mb.mood());
case Column::InitialKey: return CompareStr(ma.initial_key(), mb.initial_key());
case Column::Moodbar:
case Column::ColumnCount:
break;
}
@@ -1460,13 +1468,17 @@ QString Playlist::column_name(const Column column) {
case Column::Comment: return tr("Comment");
case Column::Source: return tr("Source");
case Column::Mood: return tr("Mood");
case Column::Moodbar: return tr("Moodbar");
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");
case Column::BPM: return tr("BPM");
case Column::Mood: return tr("Mood");
case Column::InitialKey: return tr("Initial key");
case Column::ColumnCount:
break;
}
@@ -2266,6 +2278,15 @@ Playlist::Columns Playlist::ChangedColumns(const Song &metadata1, const Song &me
if (metadata1.ebur128_loudness_range_lu() != metadata2.ebur128_loudness_range_lu()) {
columns << Column::EBUR128LoudnessRange;
}
if (metadata1.bpm() != metadata2.bpm()) {
columns << Column::BPM;
}
if (metadata1.mood() != metadata2.mood()) {
columns << Column::Mood;
}
if (metadata1.initial_key() != metadata2.initial_key()) {
columns << Column::InitialKey;
}
return columns;

View File

@@ -133,11 +133,14 @@ class Playlist : public QAbstractListModel {
Comment,
Grouping,
Source,
Mood,
Moodbar,
Rating,
HasCUE,
EBUR128IntegratedLoudness,
EBUR128LoudnessRange,
BPM,
Mood,
InitialKey,
ColumnCount
};
using Columns = QList<Column>;

View File

@@ -246,7 +246,7 @@ void PlaylistView::SetItemDelegates() {
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Source), new SongSourceDelegate(this));
#ifdef HAVE_MOODBAR
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Mood), new MoodbarItemDelegate(moodbar_loader_, this, this));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Moodbar), new MoodbarItemDelegate(moodbar_loader_, this, this));
#endif
rating_delegate_ = new RatingItemDelegate(this);
@@ -254,6 +254,7 @@ void PlaylistView::SetItemDelegates() {
setItemDelegateForColumn(static_cast<int>(Playlist::Column::EBUR128IntegratedLoudness), new Ebur128LoudnessLUFSItemDelegate(this));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::EBUR128LoudnessRange), new Ebur128LoudnessRangeLUItemDelegate(this));
}
void PlaylistView::setModel(QAbstractItemModel *m) {
@@ -390,11 +391,14 @@ void PlaylistView::RestoreHeaderState() {
header_->HideSection(static_cast<int>(Playlist::Column::LastPlayed));
header_->HideSection(static_cast<int>(Playlist::Column::Comment));
header_->HideSection(static_cast<int>(Playlist::Column::Grouping));
header_->HideSection(static_cast<int>(Playlist::Column::Mood));
header_->HideSection(static_cast<int>(Playlist::Column::Moodbar));
header_->HideSection(static_cast<int>(Playlist::Column::Rating));
header_->HideSection(static_cast<int>(Playlist::Column::HasCUE));
header_->HideSection(static_cast<int>(Playlist::Column::EBUR128IntegratedLoudness));
header_->HideSection(static_cast<int>(Playlist::Column::EBUR128LoudnessRange));
header_->HideSection(static_cast<int>(Playlist::Column::BPM));
header_->HideSection(static_cast<int>(Playlist::Column::Mood));
header_->HideSection(static_cast<int>(Playlist::Column::InitialKey));
header_->ShowSection(static_cast<int>(Playlist::Column::Track));
header_->ShowSection(static_cast<int>(Playlist::Column::Title));
@@ -1390,6 +1394,7 @@ ColumnAlignmentMap PlaylistView::DefaultColumnAlignment() {
ret[static_cast<int>(Playlist::Column::Filesize)] =
ret[static_cast<int>(Playlist::Column::PlayCount)] =
ret[static_cast<int>(Playlist::Column::SkipCount)] =
ret[static_cast<int>(Playlist::Column::BPM)] =
(Qt::AlignRight | Qt::AlignVCenter);
return ret;