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; 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) { bool Song::save_embedded_cover_supported(const FileType filetype) {
return filetype == FileType::FLAC || return filetype == FileType::FLAC ||

View File

@@ -421,6 +421,13 @@ class Song {
bool comment_supported() const; bool comment_supported() const;
bool lyrics_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); 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(); }; 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))); QKeySequence(QKeySequence::MoveToNextPage).toString(QKeySequence::NativeText)));
new TagCompleter(collection_backend, Playlist::Column::Artist, ui_->artist); 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::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::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::Genre, ui_->genre);
new TagCompleter(collection_backend, Playlist::Column::Composer, ui_->composer); 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::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::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) { QVariant EditTagDialog::Data::value(const Song &song, const QString &id) {
if (id == "title"_L1) return song.title(); if (id == "title"_L1) return song.title();
if (id == "titlesort"_L1) return song.titlesort();
if (id == "artist"_L1) return song.artist(); if (id == "artist"_L1) return song.artist();
if (id == "artistsort"_L1) return song.artistsort();
if (id == "album"_L1) return song.album(); if (id == "album"_L1) return song.album();
if (id == "albumsort"_L1) return song.albumsort();
if (id == "albumartist"_L1) return song.albumartist(); if (id == "albumartist"_L1) return song.albumartist();
if (id == "albumartistsort"_L1) return song.albumartistsort();
if (id == "composer"_L1) return song.composer(); if (id == "composer"_L1) return song.composer();
if (id == "composersort"_L1) return song.composersort();
if (id == "performer"_L1) return song.performer(); if (id == "performer"_L1) return song.performer();
if (id == "performersort"_L1) return song.performersort();
if (id == "grouping"_L1) return song.grouping(); if (id == "grouping"_L1) return song.grouping();
if (id == "genre"_L1) return song.genre(); if (id == "genre"_L1) return song.genre();
if (id == "comment"_L1) return song.comment(); 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) { void EditTagDialog::Data::set_value(const QString &id, const QVariant &value) {
if (id == "title"_L1) current_.set_title(value.toString()); 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 == "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 == "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 == "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 == "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 == "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 == "grouping"_L1) current_.set_grouping(value.toString());
else if (id == "genre"_L1) current_.set_genre(value.toString()); else if (id == "genre"_L1) current_.set_genre(value.toString());
else if (id == "comment"_L1) current_.set_comment(value.toString()); else if (id == "comment"_L1) current_.set_comment(value.toString());
@@ -675,14 +693,20 @@ void EditTagDialog::SelectionChanged() {
bool art_different = false; bool art_different = false;
bool action_different = false; bool action_different = false;
bool albumartist_enabled = false; bool albumartist_enabled = false;
bool albumartistsort_enabled = false;
bool composer_enabled = false; bool composer_enabled = false;
bool composersort_enabled = false;
bool performer_enabled = false; bool performer_enabled = false;
bool performersort_enabled = false;
bool grouping_enabled = false; bool grouping_enabled = false;
bool genre_enabled = false; bool genre_enabled = false;
bool compilation_enabled = false; bool compilation_enabled = false;
bool rating_enabled = false; bool rating_enabled = false;
bool comment_enabled = false; bool comment_enabled = false;
bool lyrics_enabled = false; bool lyrics_enabled = false;
bool titlesort_enabled = false;
bool artistsort_enabled = false;
bool albumsort_enabled = false;
for (const QModelIndex &idx : indexes) { for (const QModelIndex &idx : indexes) {
if (data_.value(idx.row()).cover_action_ == UpdateCoverAction::None) { if (data_.value(idx.row()).cover_action_ == UpdateCoverAction::None) {
data_[idx.row()].cover_result_ = AlbumCoverImageResult(); data_[idx.row()].cover_result_ = AlbumCoverImageResult();
@@ -702,12 +726,21 @@ void EditTagDialog::SelectionChanged() {
if (song.albumartist_supported()) { if (song.albumartist_supported()) {
albumartist_enabled = true; albumartist_enabled = true;
} }
if (song.albumartistsort_supported()) {
albumartistsort_enabled = true;
}
if (song.composer_supported()) { if (song.composer_supported()) {
composer_enabled = true; composer_enabled = true;
} }
if (song.composersort_supported()) {
composersort_enabled = true;
}
if (song.performer_supported()) { if (song.performer_supported()) {
performer_enabled = true; performer_enabled = true;
} }
if (song.performersort_supported()) {
performersort_enabled = true;
}
if (song.grouping_supported()) { if (song.grouping_supported()) {
grouping_enabled = true; grouping_enabled = true;
} }
@@ -726,6 +759,15 @@ void EditTagDialog::SelectionChanged() {
if (song.lyrics_supported()) { if (song.lyrics_supported()) {
lyrics_enabled = true; 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; QString summary;
@@ -782,14 +824,20 @@ void EditTagDialog::SelectionChanged() {
album_cover_choice_controller_->set_save_embedded_cover_override(embedded_cover); album_cover_choice_controller_->set_save_embedded_cover_override(embedded_cover);
ui_->albumartist->setEnabled(albumartist_enabled); ui_->albumartist->setEnabled(albumartist_enabled);
ui_->albumartistsort->setEnabled(albumartistsort_enabled);
ui_->composer->setEnabled(composer_enabled); ui_->composer->setEnabled(composer_enabled);
ui_->composersort->setEnabled(composersort_enabled);
ui_->performer->setEnabled(performer_enabled); ui_->performer->setEnabled(performer_enabled);
ui_->performersort->setEnabled(performersort_enabled);
ui_->grouping->setEnabled(grouping_enabled); ui_->grouping->setEnabled(grouping_enabled);
ui_->genre->setEnabled(genre_enabled); ui_->genre->setEnabled(genre_enabled);
ui_->compilation->setEnabled(compilation_enabled); ui_->compilation->setEnabled(compilation_enabled);
ui_->rating->setEnabled(rating_enabled); ui_->rating->setEnabled(rating_enabled);
ui_->comment->setEnabled(comment_enabled); ui_->comment->setEnabled(comment_enabled);
ui_->lyrics->setEnabled(lyrics_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> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>801</width> <width>781</width>
<height>918</height> <height>1047</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
@@ -700,54 +700,35 @@
<property name="sizeConstraint"> <property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum> <enum>QLayout::SetMinimumSize</enum>
</property> </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"> <item row="3" column="2">
<widget class="QLabel" name="label_disc"> <widget class="QLabel" name="label_year">
<property name="text"> <property name="text">
<string>Disc</string> <string>Year</string>
</property> </property>
<property name="buddy"> <property name="buddy">
<cstring>disc</cstring> <cstring>year</cstring>
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="1"> <item row="25" column="1">
<widget class="LineEdit" name="composer"> <widget class="QPushButton" name="fetch_tag">
<property name="has_reset_button" stdset="0"> <property name="text">
<bool>true</bool> <string>Complete tags automatically</string>
</property> </property>
<property name="has_clear_button" stdset="0"> <property name="icon">
<bool>false</bool> <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> </property>
</widget> </widget>
</item> </item>
<item row="13" column="0"> <item row="13" column="0">
<widget class="QLabel" name="label_grouping"> <widget class="QLabel" name="label_performersort">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>80</width> <width>80</width>
@@ -755,14 +736,56 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>Grouping</string> <string>Performer sort</string>
</property> </property>
<property name="buddy"> <property name="buddy">
<cstring>grouping</cstring> <cstring>performersort</cstring>
</property> </property>
</widget> </widget>
</item> </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"> <widget class="QLabel" name="label_albumartist">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@@ -778,7 +801,130 @@
</property> </property>
</widget> </widget>
</item> </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"> <widget class="LineEdit" name="grouping">
<property name="has_reset_button" stdset="0"> <property name="has_reset_button" stdset="0">
<bool>true</bool> <bool>true</bool>
@@ -788,7 +934,63 @@
</property> </property>
</widget> </widget>
</item> </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"> <widget class="LineEdit" name="performer">
<property name="has_reset_button" stdset="0"> <property name="has_reset_button" stdset="0">
<bool>true</bool> <bool>true</bool>
@@ -798,26 +1000,6 @@
</property> </property>
</widget> </widget>
</item> </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"> <item row="0" column="3">
<widget class="SpinBox" name="track"> <widget class="SpinBox" name="track">
<property name="correctionMode"> <property name="correctionMode">
@@ -834,7 +1016,49 @@
</property> </property>
</widget> </widget>
</item> </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"> <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"> <widget class="QLabel" name="label_album">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@@ -850,18 +1074,18 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="2"> <item row="0" column="2">
<widget class="QLabel" name="label_year"> <widget class="QLabel" name="label_track">
<property name="text"> <property name="text">
<string>Year</string> <string>Track</string>
</property> </property>
<property name="buddy"> <property name="buddy">
<cstring>year</cstring> <cstring>track</cstring>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="10" column="0">
<widget class="QLabel" name="label_title"> <widget class="QLabel" name="label_composer">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>80</width> <width>80</width>
@@ -869,10 +1093,72 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>Title</string> <string>Composer</string>
</property> </property>
<property name="buddy"> <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> </property>
</widget> </widget>
</item> </item>
@@ -892,66 +1178,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="0"> <item row="18" 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">
<widget class="QLabel" name="label_genre"> <widget class="QLabel" name="label_genre">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@@ -967,7 +1194,17 @@
</property> </property>
</widget> </widget>
</item> </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"> <widget class="QLabel" name="label_comment">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
@@ -983,47 +1220,8 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="11" column="0">
<widget class="LineEdit" name="album"> <widget class="QLabel" name="label_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="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">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>80</width> <width>80</width>
@@ -1031,57 +1229,15 @@
</size> </size>
</property> </property>
<property name="text"> <property name="text">
<string>Performer</string> <string>Composer sort</string>
</property> </property>
<property name="buddy"> <property name="buddy">
<cstring>performer</cstring> <cstring>composersort</cstring>
</property> </property>
</widget> </widget>
</item> </item>
<item row="15" column="0"> <item row="6" column="1">
<widget class="QLabel" name="label_compilation"> <widget class="LineEdit" name="albumsort">
<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>
<property name="has_reset_button" stdset="0"> <property name="has_reset_button" stdset="0">
<bool>true</bool> <bool>true</bool>
</property> </property>
@@ -1147,12 +1303,12 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="21" column="1"> <item>
<widget class="QPushButton" name="fetch_lyrics"> <widget class="QPushButton" name="fetch_lyrics">
<property name="text"> <property name="text">
<string>Complete lyrics automatically</string> <string>Complete lyrics automatically</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
@@ -1215,25 +1371,32 @@
<tabstop>summary</tabstop> <tabstop>summary</tabstop>
<tabstop>filename</tabstop> <tabstop>filename</tabstop>
<tabstop>path</tabstop> <tabstop>path</tabstop>
<tabstop>art_embedded</tabstop>
<tabstop>art_manual</tabstop> <tabstop>art_manual</tabstop>
<tabstop>art_automatic</tabstop> <tabstop>art_automatic</tabstop>
<tabstop>art_unset</tabstop>
<tabstop>playcount_reset</tabstop> <tabstop>playcount_reset</tabstop>
<tabstop>tags_summary</tabstop> <tabstop>tags_summary</tabstop>
<tabstop>tags_art_button</tabstop> <tabstop>tags_art_button</tabstop>
<tabstop>checkbox_embedded_cover</tabstop> <tabstop>checkbox_embedded_cover</tabstop>
<tabstop>title</tabstop> <tabstop>title</tabstop>
<tabstop>track</tabstop> <tabstop>track</tabstop>
<tabstop>artist</tabstop> <tabstop>titlesort</tabstop>
<tabstop>disc</tabstop> <tabstop>disc</tabstop>
<tabstop>album</tabstop> <tabstop>artist</tabstop>
<tabstop>year</tabstop> <tabstop>year</tabstop>
<tabstop>artistsort</tabstop>
<tabstop>album</tabstop>
<tabstop>albumsort</tabstop>
<tabstop>albumartist</tabstop> <tabstop>albumartist</tabstop>
<tabstop>albumartistsort</tabstop>
<tabstop>composer</tabstop> <tabstop>composer</tabstop>
<tabstop>composersort</tabstop>
<tabstop>performer</tabstop> <tabstop>performer</tabstop>
<tabstop>performersort</tabstop>
<tabstop>grouping</tabstop> <tabstop>grouping</tabstop>
<tabstop>genre</tabstop> <tabstop>genre</tabstop>
<tabstop>compilation</tabstop> <tabstop>compilation</tabstop>
<tabstop>rating</tabstop>
<tabstop>fetch_tag</tabstop> <tabstop>fetch_tag</tabstop>
<tabstop>comment</tabstop> <tabstop>comment</tabstop>
<tabstop>lyrics</tabstop> <tabstop>lyrics</tabstop>