Allow editing new sort tags

This commit is contained in:
Mark
2025-07-28 11:40:48 +02:00
committed by Jonas Kvinge
parent 0bfc2ee198
commit 27e782d8cf
4 changed files with 471 additions and 228 deletions

View File

@@ -816,6 +816,31 @@ bool Song::lyrics_supported() const {
return additional_tags_supported() || d->filetype_ == FileType::ASF;
}
bool Song::albumartistsort_supported() const {
return d->filetype_ == FileType::FLAC || d->filetype_ == FileType::OggFlac || d->filetype_ == FileType::OggVorbis || d->filetype_ == FileType::MPEG;
}
bool Song::albumsort_supported() const {
return d->filetype_ == FileType::FLAC || d->filetype_ == FileType::OggFlac || d->filetype_ == FileType::OggVorbis || d->filetype_ == FileType::MPEG;
}
bool Song::artistsort_supported() const {
return d->filetype_ == FileType::FLAC || d->filetype_ == FileType::OggFlac || d->filetype_ == FileType::OggVorbis || d->filetype_ == FileType::MPEG;
}
bool Song::composersort_supported() const {
return d->filetype_ == FileType::FLAC || d->filetype_ == FileType::OggFlac || d->filetype_ == FileType::OggVorbis || d->filetype_ == FileType::MPEG;
}
bool Song::performersort_supported() const {
// Performer sort is a rare custom field even in vorbis comments, no write support in MPEG formats
return d->filetype_ == FileType::FLAC || d->filetype_ == FileType::OggFlac || d->filetype_ == FileType::OggVorbis;
}
bool Song::titlesort_supported() const {
return d->filetype_ == FileType::FLAC || d->filetype_ == FileType::OggFlac || d->filetype_ == FileType::OggVorbis || d->filetype_ == FileType::MPEG;
}
bool Song::save_embedded_cover_supported(const FileType filetype) {
return filetype == FileType::FLAC ||

View File

@@ -421,6 +421,13 @@ class Song {
bool comment_supported() const;
bool lyrics_supported() const;
bool albumartistsort_supported() const;
bool albumsort_supported() const;
bool artistsort_supported() const;
bool composersort_supported() const;
bool performersort_supported() const;
bool titlesort_supported() const;
static bool save_embedded_cover_supported(const FileType filetype);
bool save_embedded_cover_supported() const { return url().isLocalFile() && save_embedded_cover_supported(filetype()) && !has_cue(); };

View File

@@ -274,12 +274,18 @@ EditTagDialog::EditTagDialog(const SharedPtr<NetworkAccessManager> network,
QKeySequence(QKeySequence::MoveToNextPage).toString(QKeySequence::NativeText)));
new TagCompleter(collection_backend, Playlist::Column::Artist, ui_->artist);
new TagCompleter(collection_backend, Playlist::Column::ArtistSort, ui_->artistsort);
new TagCompleter(collection_backend, Playlist::Column::Album, ui_->album);
new TagCompleter(collection_backend, Playlist::Column::AlbumSort, ui_->albumsort);
new TagCompleter(collection_backend, Playlist::Column::AlbumArtist, ui_->albumartist);
new TagCompleter(collection_backend, Playlist::Column::AlbumArtistSort, ui_->albumartistsort);
new TagCompleter(collection_backend, Playlist::Column::Genre, ui_->genre);
new TagCompleter(collection_backend, Playlist::Column::Composer, ui_->composer);
new TagCompleter(collection_backend, Playlist::Column::ComposerSort, ui_->composersort);
new TagCompleter(collection_backend, Playlist::Column::Performer, ui_->performer);
new TagCompleter(collection_backend, Playlist::Column::PerformerSort, ui_->performersort);
new TagCompleter(collection_backend, Playlist::Column::Grouping, ui_->grouping);
new TagCompleter(collection_backend, Playlist::Column::TitleSort, ui_->titlesort);
}
@@ -493,11 +499,17 @@ void EditTagDialog::SetSongListVisibility(bool visible) {
QVariant EditTagDialog::Data::value(const Song &song, const QString &id) {
if (id == "title"_L1) return song.title();
if (id == "titlesort"_L1) return song.titlesort();
if (id == "artist"_L1) return song.artist();
if (id == "artistsort"_L1) return song.artistsort();
if (id == "album"_L1) return song.album();
if (id == "albumsort"_L1) return song.albumsort();
if (id == "albumartist"_L1) return song.albumartist();
if (id == "albumartistsort"_L1) return song.albumartistsort();
if (id == "composer"_L1) return song.composer();
if (id == "composersort"_L1) return song.composersort();
if (id == "performer"_L1) return song.performer();
if (id == "performersort"_L1) return song.performersort();
if (id == "grouping"_L1) return song.grouping();
if (id == "genre"_L1) return song.genre();
if (id == "comment"_L1) return song.comment();
@@ -515,11 +527,17 @@ QVariant EditTagDialog::Data::value(const Song &song, const QString &id) {
void EditTagDialog::Data::set_value(const QString &id, const QVariant &value) {
if (id == "title"_L1) current_.set_title(value.toString());
else if (id == "titlesort"_L1) current_.set_titlesort(value.toString());
else if (id == "artist"_L1) current_.set_artist(value.toString());
else if (id == "artistsort"_L1) current_.set_artistsort(value.toString());
else if (id == "album"_L1) current_.set_album(value.toString());
else if (id == "albumsort"_L1) current_.set_albumsort(value.toString());
else if (id == "albumartist"_L1) current_.set_albumartist(value.toString());
else if (id == "albumartistsort"_L1) current_.set_albumartistsort(value.toString());
else if (id == "composer"_L1) current_.set_composer(value.toString());
else if (id == "composersort"_L1) current_.set_composersort(value.toString());
else if (id == "performer"_L1) current_.set_performer(value.toString());
else if (id == "performersort"_L1) current_.set_performersort(value.toString());
else if (id == "grouping"_L1) current_.set_grouping(value.toString());
else if (id == "genre"_L1) current_.set_genre(value.toString());
else if (id == "comment"_L1) current_.set_comment(value.toString());
@@ -675,14 +693,20 @@ void EditTagDialog::SelectionChanged() {
bool art_different = false;
bool action_different = false;
bool albumartist_enabled = false;
bool albumartistsort_enabled = false;
bool composer_enabled = false;
bool composersort_enabled = false;
bool performer_enabled = false;
bool performersort_enabled = false;
bool grouping_enabled = false;
bool genre_enabled = false;
bool compilation_enabled = false;
bool rating_enabled = false;
bool comment_enabled = false;
bool lyrics_enabled = false;
bool titlesort_enabled = false;
bool artistsort_enabled = false;
bool albumsort_enabled = false;
for (const QModelIndex &idx : indexes) {
if (data_.value(idx.row()).cover_action_ == UpdateCoverAction::None) {
data_[idx.row()].cover_result_ = AlbumCoverImageResult();
@@ -702,12 +726,21 @@ void EditTagDialog::SelectionChanged() {
if (song.albumartist_supported()) {
albumartist_enabled = true;
}
if (song.albumartistsort_supported()) {
albumartistsort_enabled = true;
}
if (song.composer_supported()) {
composer_enabled = true;
}
if (song.composersort_supported()) {
composersort_enabled = true;
}
if (song.performer_supported()) {
performer_enabled = true;
}
if (song.performersort_supported()) {
performersort_enabled = true;
}
if (song.grouping_supported()) {
grouping_enabled = true;
}
@@ -726,6 +759,15 @@ void EditTagDialog::SelectionChanged() {
if (song.lyrics_supported()) {
lyrics_enabled = true;
}
if (song.titlesort_supported()) {
titlesort_enabled = true;
}
if (song.artistsort_supported()) {
artistsort_enabled = true;
}
if (song.albumsort_supported()) {
albumsort_enabled = true;
}
}
QString summary;
@@ -782,14 +824,20 @@ void EditTagDialog::SelectionChanged() {
album_cover_choice_controller_->set_save_embedded_cover_override(embedded_cover);
ui_->albumartist->setEnabled(albumartist_enabled);
ui_->albumartistsort->setEnabled(albumartistsort_enabled);
ui_->composer->setEnabled(composer_enabled);
ui_->composersort->setEnabled(composersort_enabled);
ui_->performer->setEnabled(performer_enabled);
ui_->performersort->setEnabled(performersort_enabled);
ui_->grouping->setEnabled(grouping_enabled);
ui_->genre->setEnabled(genre_enabled);
ui_->compilation->setEnabled(compilation_enabled);
ui_->rating->setEnabled(rating_enabled);
ui_->comment->setEnabled(comment_enabled);
ui_->lyrics->setEnabled(lyrics_enabled);
ui_->titlesort->setEnabled(titlesort_enabled);
ui_->artistsort->setEnabled(artistsort_enabled);
ui_->albumsort->setEnabled(albumsort_enabled);
}

View File

@@ -31,8 +31,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>801</width>
<height>918</height>
<width>781</width>
<height>1047</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
@@ -700,54 +700,35 @@
<property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum>
</property>
<item row="4" column="3">
<widget class="SpinBox" name="year">
<property name="correctionMode">
<enum>QAbstractSpinBox::CorrectToNearestValue</enum>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
</widget>
</item>
<item row="14" column="1">
<widget class="LineEdit" name="genre">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QLabel" name="label_disc">
<widget class="QLabel" name="label_year">
<property name="text">
<string>Disc</string>
<string>Year</string>
</property>
<property name="buddy">
<cstring>disc</cstring>
<cstring>year</cstring>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="LineEdit" name="composer">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
<item row="25" column="1">
<widget class="QPushButton" name="fetch_tag">
<property name="text">
<string>Complete tags automatically</string>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
<property name="icon">
<iconset resource="../../data/data.qrc">
<normaloff>:/pictures/musicbrainz.png</normaloff>:/pictures/musicbrainz.png</iconset>
</property>
<property name="iconSize">
<size>
<width>38</width>
<height>22</height>
</size>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="label_grouping">
<widget class="QLabel" name="label_performersort">
<property name="minimumSize">
<size>
<width>80</width>
@@ -755,14 +736,56 @@
</size>
</property>
<property name="text">
<string>Grouping</string>
<string>Performer sort</string>
</property>
<property name="buddy">
<cstring>grouping</cstring>
<cstring>performersort</cstring>
</property>
</widget>
</item>
<item row="5" column="0">
<item row="19" column="0">
<widget class="QLabel" name="label_compilation">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Compilation</string>
</property>
<property name="buddy">
<cstring>compilation</cstring>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="LineEdit" name="albumartistsort">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_titlesort">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Title sort</string>
</property>
<property name="buddy">
<cstring>titlesort</cstring>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_albumartist">
<property name="minimumSize">
<size>
@@ -778,7 +801,130 @@
</property>
</widget>
</item>
<item row="13" column="1">
<item row="0" column="1">
<widget class="LineEdit" name="title">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_performer">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Performer</string>
</property>
<property name="buddy">
<cstring>performer</cstring>
</property>
</widget>
</item>
<item row="18" column="1">
<widget class="LineEdit" name="genre">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="SpinBox" name="year">
<property name="correctionMode">
<enum>QAbstractSpinBox::CorrectToNearestValue</enum>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
</widget>
</item>
<item row="20" column="1">
<widget class="RatingBox" name="rating" native="true">
<property name="maximumSize">
<size>
<width>140</width>
<height>16777215</height>
</size>
</property>
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="LineEdit" name="album">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="26" column="1">
<widget class="TextEdit" name="comment">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="tabChangesFocus">
<bool>true</bool>
</property>
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="LineEdit" name="artistsort">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_title">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Title</string>
</property>
<property name="buddy">
<cstring>title</cstring>
</property>
</widget>
</item>
<item row="17" column="1">
<widget class="LineEdit" name="grouping">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
@@ -788,7 +934,63 @@
</property>
</widget>
</item>
<item row="9" column="1">
<item row="1" column="3">
<widget class="SpinBox" name="disc">
<property name="correctionMode">
<enum>QAbstractSpinBox::CorrectToNearestValue</enum>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
</widget>
</item>
<item row="19" column="1">
<widget class="CheckBox" name="compilation">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="LineEdit" name="titlesort">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="20" column="0">
<widget class="QLabel" name="label_rating">
<property name="text">
<string>Rating</string>
</property>
<property name="buddy">
<cstring>rating</cstring>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_disc">
<property name="text">
<string>Disc</string>
</property>
<property name="buddy">
<cstring>disc</cstring>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="LineEdit" name="performer">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
@@ -798,26 +1000,6 @@
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="LineEdit" name="artist">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="LineEdit" name="title">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="SpinBox" name="track">
<property name="correctionMode">
@@ -834,7 +1016,49 @@
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_albumartistsort">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Album artist sort</string>
</property>
<property name="buddy">
<cstring>albumartistsort</cstring>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="LineEdit" name="artist">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_artistsort">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Artist sort</string>
</property>
<property name="buddy">
<cstring>artistsort</cstring>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_album">
<property name="minimumSize">
<size>
@@ -850,18 +1074,18 @@
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QLabel" name="label_year">
<item row="0" column="2">
<widget class="QLabel" name="label_track">
<property name="text">
<string>Year</string>
<string>Track</string>
</property>
<property name="buddy">
<cstring>year</cstring>
<cstring>track</cstring>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_title">
<item row="10" column="0">
<widget class="QLabel" name="label_composer">
<property name="minimumSize">
<size>
<width>80</width>
@@ -869,10 +1093,72 @@
</size>
</property>
<property name="text">
<string>Title</string>
<string>Composer</string>
</property>
<property name="buddy">
<cstring>title</cstring>
<cstring>composer</cstring>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="LineEdit" name="albumartist">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="LineEdit" name="composersort">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="13" column="1">
<widget class="LineEdit" name="performersort">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="17" column="0">
<widget class="QLabel" name="label_grouping">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Grouping</string>
</property>
<property name="buddy">
<cstring>grouping</cstring>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_albumsort">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Album sort</string>
</property>
<property name="buddy">
<cstring>albumsort</cstring>
</property>
</widget>
</item>
@@ -892,66 +1178,7 @@
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_composer">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Composer</string>
</property>
<property name="buddy">
<cstring>composer</cstring>
</property>
</widget>
</item>
<item row="21" column="1">
<widget class="QPushButton" name="fetch_tag">
<property name="text">
<string>Complete tags automatically</string>
</property>
<property name="icon">
<iconset resource="../../data/data.qrc">
<normaloff>:/pictures/musicbrainz.png</normaloff>:/pictures/musicbrainz.png</iconset>
</property>
<property name="iconSize">
<size>
<width>38</width>
<height>22</height>
</size>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="SpinBox" name="disc">
<property name="correctionMode">
<enum>QAbstractSpinBox::CorrectToNearestValue</enum>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
</widget>
</item>
<item row="15" column="1">
<widget class="CheckBox" name="compilation">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="14" column="0">
<item row="18" column="0">
<widget class="QLabel" name="label_genre">
<property name="minimumSize">
<size>
@@ -967,7 +1194,17 @@
</property>
</widget>
</item>
<item row="22" column="0">
<item row="10" column="1">
<widget class="LineEdit" name="composer">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="26" column="0">
<widget class="QLabel" name="label_comment">
<property name="minimumSize">
<size>
@@ -983,47 +1220,8 @@
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="LineEdit" name="album">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="LineEdit" name="albumartist">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="22" column="1">
<widget class="TextEdit" name="comment">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="tabChangesFocus">
<bool>true</bool>
</property>
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
<property name="has_clear_button" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="label_performer">
<item row="11" column="0">
<widget class="QLabel" name="label_composersort">
<property name="minimumSize">
<size>
<width>80</width>
@@ -1031,57 +1229,15 @@
</size>
</property>
<property name="text">
<string>Performer</string>
<string>Composer sort</string>
</property>
<property name="buddy">
<cstring>performer</cstring>
<cstring>composersort</cstring>
</property>
</widget>
</item>
<item row="15" column="0">
<widget class="QLabel" name="label_compilation">
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Compilation</string>
</property>
<property name="buddy">
<cstring>compilation</cstring>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label_track">
<property name="text">
<string>Track</string>
</property>
<property name="buddy">
<cstring>track</cstring>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="label_rating">
<property name="text">
<string>Rating</string>
</property>
<property name="buddy">
<cstring>rating</cstring>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="RatingBox" name="rating" native="true">
<property name="maximumSize">
<size>
<width>140</width>
<height>16777215</height>
</size>
</property>
<item row="6" column="1">
<widget class="LineEdit" name="albumsort">
<property name="has_reset_button" stdset="0">
<bool>true</bool>
</property>
@@ -1147,12 +1303,12 @@
</property>
</widget>
</item>
<item row="21" column="1">
<widget class="QPushButton" name="fetch_lyrics">
<property name="text">
<string>Complete lyrics automatically</string>
</property>
</widget>
<item>
<widget class="QPushButton" name="fetch_lyrics">
<property name="text">
<string>Complete lyrics automatically</string>
</property>
</widget>
</item>
</layout>
</widget>
@@ -1215,25 +1371,32 @@
<tabstop>summary</tabstop>
<tabstop>filename</tabstop>
<tabstop>path</tabstop>
<tabstop>art_embedded</tabstop>
<tabstop>art_manual</tabstop>
<tabstop>art_automatic</tabstop>
<tabstop>art_unset</tabstop>
<tabstop>playcount_reset</tabstop>
<tabstop>tags_summary</tabstop>
<tabstop>tags_art_button</tabstop>
<tabstop>checkbox_embedded_cover</tabstop>
<tabstop>title</tabstop>
<tabstop>track</tabstop>
<tabstop>artist</tabstop>
<tabstop>titlesort</tabstop>
<tabstop>disc</tabstop>
<tabstop>album</tabstop>
<tabstop>artist</tabstop>
<tabstop>year</tabstop>
<tabstop>artistsort</tabstop>
<tabstop>album</tabstop>
<tabstop>albumsort</tabstop>
<tabstop>albumartist</tabstop>
<tabstop>albumartistsort</tabstop>
<tabstop>composer</tabstop>
<tabstop>composersort</tabstop>
<tabstop>performer</tabstop>
<tabstop>performersort</tabstop>
<tabstop>grouping</tabstop>
<tabstop>genre</tabstop>
<tabstop>compilation</tabstop>
<tabstop>rating</tabstop>
<tabstop>fetch_tag</tabstop>
<tabstop>comment</tabstop>
<tabstop>lyrics</tabstop>