Keep the playlist column alignment setting in PlaylistView instead of in each individual Playlist, ensuring all playlists share the same column alignments and there's only one place to save/restore them.

Fixes issue 1795
This commit is contained in:
David Sansome 2011-11-12 16:12:03 +00:00
parent aba3aa4bbd
commit 63fdf11cd8
8 changed files with 95 additions and 92 deletions

View File

@ -20,6 +20,7 @@
#include "playlistfilter.h"
#include "playlistitemmimedata.h"
#include "playlistundocommands.h"
#include "playlistview.h"
#include "queue.h"
#include "songloaderinserter.h"
#include "songmimedata.h"
@ -121,19 +122,7 @@ Playlist::Playlist(PlaylistBackend* backend,
connect(queue_, SIGNAL(layoutChanged()), SLOT(QueueLayoutChanged()));
column_alignments_[Column_Length]
= column_alignments_[Column_Track]
= column_alignments_[Column_Disc]
= column_alignments_[Column_Year]
= column_alignments_[Column_BPM]
= column_alignments_[Column_Bitrate]
= column_alignments_[Column_Samplerate]
= column_alignments_[Column_Filesize]
= column_alignments_[Column_PlayCount]
= column_alignments_[Column_SkipCount]
= (Qt::AlignRight | Qt::AlignVCenter);
column_alignments_[Column_Score] = (Qt::AlignCenter);
column_alignments_ = PlaylistView::DefaultColumnAlignment();
}
Playlist::~Playlist() {
@ -1697,22 +1686,6 @@ void Playlist::ItemChanged(PlaylistItemPtr item) {
}
}
void Playlist::set_column_alignments(const ColumnAlignmentMap& column_alignments) {
column_alignments_ = column_alignments;
}
void Playlist::set_column_align_left(int column) {
column_alignments_[column] = (Qt::AlignLeft | Qt::AlignVCenter);
}
void Playlist::set_column_align_center(int column) {
column_alignments_[column] = Qt::AlignCenter;
}
void Playlist::set_column_align_right(int column) {
column_alignments_[column] = (Qt::AlignRight | Qt::AlignVCenter);
}
void Playlist::InformOfCurrentSongChange() {
emit dataChanged(index(current_item_index_.row(), 0),
index(current_item_index_.row(), ColumnCount-1));
@ -1788,3 +1761,7 @@ bool Playlist::ApplyValidityOnCurrentSong(const QUrl& url, bool valid) {
return current;
}
void Playlist::SetColumnAlignment(const ColumnAlignmentMap& alignment) {
column_alignments_ = alignment;
}

View File

@ -195,12 +195,6 @@ class Playlist : public QAbstractListModel {
QUndoStack* undo_stack() const { return undo_stack_; }
ColumnAlignmentMap column_alignments() const { return column_alignments_; }
void set_column_alignments(const ColumnAlignmentMap& column_alignments);
void set_column_align_left(int column);
void set_column_align_center(int column);
void set_column_align_right(int column);
// Scrobbling
qint64 scrobble_point_nanosec() const { return scrobble_point_; }
LastFMStatus get_lastfm_status() const { return lastfm_status_; }
@ -281,6 +275,8 @@ class Playlist : public QAbstractListModel {
void RepopulateDynamicPlaylist();
void TurnOffDynamicPlaylist();
void SetColumnAlignment(const ColumnAlignmentMap& alignment);
signals:
void RestoreFinished();
void CurrentSongChanged(const Song& metadata);

View File

@ -87,27 +87,18 @@ void PlaylistHeader::HideCurrent() {
}
void PlaylistHeader::AlignCurrentLeft() {
if (menu_section_ == -1)
return;
PlaylistView* view = static_cast<PlaylistView*>(parent());
view->playlist()->set_column_align_left(menu_section_);
emit ColumnAlignmentChanged();
static_cast<PlaylistView*>(parent())->SetColumnAlignment(
menu_section_, Qt::AlignLeft | Qt::AlignVCenter);
}
void PlaylistHeader::AlignCurrentCenter() {
if (menu_section_ == -1)
return;
PlaylistView* view = static_cast<PlaylistView*>(parent());
view->playlist()->set_column_align_center(menu_section_);
emit ColumnAlignmentChanged();
static_cast<PlaylistView*>(parent())->SetColumnAlignment(
menu_section_, Qt::AlignHCenter | Qt::AlignVCenter);
}
void PlaylistHeader::AlignCurrentRight() {
if (menu_section_ == -1)
return;
PlaylistView* view = static_cast<PlaylistView*>(parent());
view->playlist()->set_column_align_right(menu_section_);
emit ColumnAlignmentChanged();
static_cast<PlaylistView*>(parent())->SetColumnAlignment(
menu_section_, Qt::AlignRight | Qt::AlignVCenter);
}
void PlaylistHeader::ToggleVisible(int section) {

View File

@ -35,7 +35,6 @@ class PlaylistHeader : public StretchHeaderView {
signals:
void SectionVisibilityChanged(int logical, bool visible);
void ColumnAlignmentChanged();
void MouseEntered();
private slots:

View File

@ -17,7 +17,9 @@
#include "playlist.h"
#include "playlistbackend.h"
#include "playlistcontainer.h"
#include "playlistmanager.h"
#include "playlistview.h"
#include "specialplaylisttype.h"
#include "core/logging.h"
#include "core/songloader.h"
@ -104,6 +106,8 @@ Playlist* PlaylistManager::AddPlaylist(int id, const QString& name,
connect(ret, SIGNAL(EditingFinished(QModelIndex)), SIGNAL(EditingFinished(QModelIndex)));
connect(ret, SIGNAL(LoadTracksError(QString)), SIGNAL(Error(QString)));
connect(ret, SIGNAL(PlayRequested(QModelIndex)), SIGNAL(PlayRequested(QModelIndex)));
connect(playlist_container_->view(), SIGNAL(ColumnAlignmentChanged(ColumnAlignmentMap)),
ret, SLOT(SetColumnAlignment(ColumnAlignmentMap)));
playlists_[id] = Data(ret, name);

View File

@ -117,7 +117,6 @@ PlaylistView::PlaylistView(QWidget *parent)
connect(header_, SIGNAL(sectionMoved(int,int,int)), SLOT(InvalidateCachedCurrentPixmap()));
connect(header_, SIGNAL(SectionVisibilityChanged(int,bool)), SLOT(InvalidateCachedCurrentPixmap()));
connect(header_, SIGNAL(StretchEnabledChanged(bool)), SLOT(SaveSettings()));
connect(header_, SIGNAL(ColumnAlignmentChanged()), SLOT(SaveSettings()));
connect(header_, SIGNAL(StretchEnabledChanged(bool)), SLOT(StretchChanged(bool)));
connect(header_, SIGNAL(MouseEntered()), SLOT(RatingHoverOut()));
@ -893,8 +892,12 @@ void PlaylistView::ReloadSettings() {
setting_initial_header_layout_ = false;
}
ColumnAlignmentMap column_alignments = s.value("column_alignments").value<ColumnAlignmentMap>();
if (!column_alignments.isEmpty()) playlist_->set_column_alignments(column_alignments);
column_alignment_ = s.value("column_alignments").value<ColumnAlignmentMap>();
if (column_alignment_.isEmpty()) {
column_alignment_ = DefaultColumnAlignment();
}
emit ColumnAlignmentChanged(column_alignment_);
}
void PlaylistView::SaveSettings() {
@ -904,7 +907,7 @@ void PlaylistView::SaveSettings() {
QSettings s;
s.beginGroup(Playlist::kSettingsGroup);
s.setValue("glow_effect", glow_enabled_);
s.setValue("column_alignments", QVariant::fromValue(playlist_->column_alignments()));
s.setValue("column_alignments", QVariant::fromValue(column_alignment_));
s.setValue("bg_enabled", background_enabled_);
}
@ -955,3 +958,30 @@ void PlaylistView::rowsInserted(const QModelIndex& parent, int start, int end) {
scrollTo(model()->index(start, 0, parent), QAbstractItemView::PositionAtTop);
}
}
ColumnAlignmentMap PlaylistView::DefaultColumnAlignment() {
ColumnAlignmentMap ret;
ret[Playlist::Column_Length] =
ret[Playlist::Column_Track] =
ret[Playlist::Column_Disc] =
ret[Playlist::Column_Year] =
ret[Playlist::Column_BPM] =
ret[Playlist::Column_Bitrate] =
ret[Playlist::Column_Samplerate] =
ret[Playlist::Column_Filesize] =
ret[Playlist::Column_PlayCount] =
ret[Playlist::Column_SkipCount] = (Qt::AlignRight | Qt::AlignVCenter);
ret[Playlist::Column_Score] = (Qt::AlignCenter);
return ret;
}
void PlaylistView::SetColumnAlignment(int section, Qt::Alignment alignment) {
if (section < 0)
return;
column_alignment_[section] = alignment;
emit ColumnAlignmentChanged(column_alignment_);
SaveSettings();
}

View File

@ -65,6 +65,8 @@ class PlaylistView : public QTreeView {
static const int kStateVersion;
static ColumnAlignmentMap DefaultColumnAlignment();
void SetItemDelegates(LibraryBackend* backend);
void SetPlaylist(Playlist* playlist);
void RemoveSelected();
@ -78,7 +80,7 @@ class PlaylistView : public QTreeView {
void drawTree(QPainter* painter, const QRegion& region) const;
void drawRow(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
void keyPressEvent(QKeyEvent* event);
void setModel(QAbstractItemModel *model);
void setModel(QAbstractItemModel* model);
public slots:
void ReloadSettings();
@ -88,6 +90,7 @@ class PlaylistView : public QTreeView {
void JumpToLastPlayedTrack();
void closeEditor(QWidget* editor, QAbstractItemDelegate::EndEditHint hint);
void DynamicModeChanged(bool dynamic);
void SetColumnAlignment(int section, Qt::Alignment alignment);
signals:
void PlayItem(const QModelIndex& index);
@ -96,6 +99,7 @@ class PlaylistView : public QTreeView {
void SeekTrack(int gap);
void FocusOnFilterSignal(QKeyEvent *event);
void BackgroundPropertyChanged();
void ColumnAlignmentChanged(const ColumnAlignmentMap& alignment);
protected:
// QWidget
@ -194,6 +198,8 @@ class PlaylistView : public QTreeView {
bool drag_over_;
DynamicPlaylistControls* dynamic_controls_;
ColumnAlignmentMap column_alignment_;
};
#endif // PLAYLISTVIEW_H

View File

@ -59,7 +59,7 @@ msgstr ""
msgid "%1 playlists (%2)"
msgstr ""
#: playlist/playlistmanager.cpp:298
#: playlist/playlistmanager.cpp:302
#, qt-format
msgid "%1 selected of"
msgstr ""
@ -84,7 +84,7 @@ msgstr ""
msgid "%1 songs found (showing %2)"
msgstr ""
#: playlist/playlistmanager.cpp:304
#: playlist/playlistmanager.cpp:308
#, qt-format
msgid "%1 tracks"
msgstr ""
@ -215,7 +215,7 @@ msgstr ""
msgid "1 day"
msgstr ""
#: playlist/playlistmanager.cpp:304
#: playlist/playlistmanager.cpp:308
msgid "1 track"
msgstr ""
@ -485,7 +485,7 @@ msgstr ""
msgid "After copying..."
msgstr ""
#: playlist/playlist.cpp:1096 ui/organisedialog.cpp:52
#: playlist/playlist.cpp:1085 ui/organisedialog.cpp:52
#: ui/qtsystemtrayicon.cpp:252 ../bin/src/ui_groupbydialog.h:129
#: ../bin/src/ui_groupbydialog.h:142 ../bin/src/ui_groupbydialog.h:155
#: ../bin/src/ui_albumcoversearcher.h:110
@ -498,7 +498,7 @@ msgstr ""
msgid "Album (ideal loudness for all tracks)"
msgstr ""
#: playlist/playlist.cpp:1102 ui/organisedialog.cpp:55
#: playlist/playlist.cpp:1091 ui/organisedialog.cpp:55
#: ../bin/src/ui_edittagdialog.h:658
msgid "Album artist"
msgstr ""
@ -640,7 +640,7 @@ msgstr ""
msgid "Are you sure you want to reset this song's statistics?"
msgstr ""
#: playlist/playlist.cpp:1095 ui/organisedialog.cpp:53
#: playlist/playlist.cpp:1084 ui/organisedialog.cpp:53
#: ui/qtsystemtrayicon.cpp:250 ../bin/src/ui_groupbydialog.h:130
#: ../bin/src/ui_groupbydialog.h:143 ../bin/src/ui_groupbydialog.h:156
#: ../bin/src/ui_albumcoversearcher.h:106
@ -708,7 +708,7 @@ msgstr ""
msgid "Average image size"
msgstr ""
#: playlist/playlist.cpp:1111 ui/organisedialog.cpp:59
#: playlist/playlist.cpp:1100 ui/organisedialog.cpp:59
#: ../bin/src/ui_edittagdialog.h:638
msgid "BPM"
msgstr ""
@ -754,7 +754,7 @@ msgstr ""
msgid "Biography from %1"
msgstr ""
#: playlist/playlist.cpp:1112 ../bin/src/ui_edittagdialog.h:640
#: playlist/playlist.cpp:1101 ../bin/src/ui_edittagdialog.h:640
msgid "Bit rate"
msgstr ""
@ -972,7 +972,7 @@ msgstr ""
msgid "Comma separated list of class:level, level is 0-3"
msgstr ""
#: playlist/playlist.cpp:1121 smartplaylists/searchterm.cpp:279
#: playlist/playlist.cpp:1110 smartplaylists/searchterm.cpp:279
#: ui/organisedialog.cpp:62 ../bin/src/ui_edittagdialog.h:661
msgid "Comment"
msgstr ""
@ -985,7 +985,7 @@ msgstr ""
msgid "Complete tags automatically..."
msgstr ""
#: playlist/playlist.cpp:1103 ui/organisedialog.cpp:56
#: playlist/playlist.cpp:1092 ui/organisedialog.cpp:56
#: ../bin/src/ui_groupbydialog.h:132 ../bin/src/ui_groupbydialog.h:145
#: ../bin/src/ui_groupbydialog.h:158 ../bin/src/ui_edittagdialog.h:659
msgid "Composer"
@ -1232,11 +1232,11 @@ msgstr ""
msgid "Dance"
msgstr ""
#: playlist/playlist.cpp:1119 ../bin/src/ui_edittagdialog.h:649
#: playlist/playlist.cpp:1108 ../bin/src/ui_edittagdialog.h:649
msgid "Date created"
msgstr ""
#: playlist/playlist.cpp:1118 ../bin/src/ui_edittagdialog.h:648
#: playlist/playlist.cpp:1107 ../bin/src/ui_edittagdialog.h:648
msgid "Date modified"
msgstr ""
@ -1371,7 +1371,7 @@ msgstr ""
msgid "Disabled"
msgstr ""
#: playlist/playlist.cpp:1099 ui/organisedialog.cpp:58
#: playlist/playlist.cpp:1088 ui/organisedialog.cpp:58
#: ../bin/src/ui_edittagdialog.h:655
msgid "Disc"
msgstr ""
@ -1728,19 +1728,19 @@ msgstr ""
msgid "File formats"
msgstr ""
#: playlist/playlist.cpp:1114 ../bin/src/ui_edittagdialog.h:650
#: playlist/playlist.cpp:1103 ../bin/src/ui_edittagdialog.h:650
msgid "File name"
msgstr ""
#: playlist/playlist.cpp:1115
#: playlist/playlist.cpp:1104
msgid "File name (without path)"
msgstr ""
#: playlist/playlist.cpp:1116 ../bin/src/ui_edittagdialog.h:644
#: playlist/playlist.cpp:1105 ../bin/src/ui_edittagdialog.h:644
msgid "File size"
msgstr ""
#: playlist/playlist.cpp:1117 ../bin/src/ui_groupbydialog.h:133
#: playlist/playlist.cpp:1106 ../bin/src/ui_groupbydialog.h:133
#: ../bin/src/ui_groupbydialog.h:146 ../bin/src/ui_groupbydialog.h:159
#: ../bin/src/ui_edittagdialog.h:646
msgid "File type"
@ -1873,7 +1873,7 @@ msgstr ""
msgid "General settings"
msgstr ""
#: playlist/playlist.cpp:1101 ui/organisedialog.cpp:61
#: playlist/playlist.cpp:1090 ui/organisedialog.cpp:61
#: ../bin/src/ui_groupbydialog.h:134 ../bin/src/ui_groupbydialog.h:147
#: ../bin/src/ui_groupbydialog.h:160 ../bin/src/ui_edittagdialog.h:660
msgid "Genre"
@ -2200,7 +2200,7 @@ msgstr ""
msgid "Large sidebar"
msgstr ""
#: library/library.cpp:66 playlist/playlist.cpp:1108
#: library/library.cpp:66 playlist/playlist.cpp:1097
#: ../bin/src/ui_edittagdialog.h:641
msgid "Last played"
msgstr ""
@ -2279,7 +2279,7 @@ msgstr ""
msgid "Leave blank for the default. Examples: \"/dev/dsp\", \"front\", etc."
msgstr ""
#: playlist/playlist.cpp:1097 ui/organisedialog.cpp:63
#: playlist/playlist.cpp:1086 ui/organisedialog.cpp:63
#: ui/qtsystemtrayicon.cpp:255 ../bin/src/ui_edittagdialog.h:636
msgid "Length"
msgstr ""
@ -2913,7 +2913,7 @@ msgstr ""
msgid "Play artist radio..."
msgstr ""
#: playlist/playlist.cpp:1106 ../bin/src/ui_edittagdialog.h:637
#: playlist/playlist.cpp:1095 ../bin/src/ui_edittagdialog.h:637
msgid "Play count"
msgstr ""
@ -2954,8 +2954,8 @@ msgstr ""
msgid "Player options"
msgstr ""
#: playlist/playlistcontainer.cpp:297 playlist/playlistmanager.cpp:76
#: playlist/playlistmanager.cpp:369 playlist/playlisttabbar.cpp:292
#: playlist/playlistcontainer.cpp:297 playlist/playlistmanager.cpp:78
#: playlist/playlistmanager.cpp:373 playlist/playlisttabbar.cpp:292
msgid "Playlist"
msgstr ""
@ -3140,7 +3140,7 @@ msgstr ""
msgid "Rate the current song 5 stars"
msgstr ""
#: playlist/playlist.cpp:1105 ../bin/src/ui_edittagdialog.h:645
#: playlist/playlist.cpp:1094 ../bin/src/ui_edittagdialog.h:645
msgid "Rating"
msgstr ""
@ -3300,7 +3300,7 @@ msgstr ""
msgid "Safely remove the device after copying"
msgstr ""
#: playlist/playlist.cpp:1113 ../bin/src/ui_edittagdialog.h:642
#: playlist/playlist.cpp:1102 ../bin/src/ui_edittagdialog.h:642
msgid "Sample rate"
msgstr ""
@ -3344,7 +3344,7 @@ msgstr ""
msgid "Scalable sampling rate profile (SSR)"
msgstr ""
#: playlist/playlist.cpp:1109 ../bin/src/ui_edittagdialog.h:643
#: playlist/playlist.cpp:1098 ../bin/src/ui_edittagdialog.h:643
msgid "Score"
msgstr ""
@ -3630,7 +3630,7 @@ msgstr ""
msgid "Skip backwards in playlist"
msgstr ""
#: playlist/playlist.cpp:1107 ../bin/src/ui_edittagdialog.h:639
#: playlist/playlist.cpp:1096 ../bin/src/ui_edittagdialog.h:639
msgid "Skip count"
msgstr ""
@ -3871,7 +3871,7 @@ msgstr ""
msgid "The directory %1 is not valid"
msgstr ""
#: playlist/playlistmanager.cpp:147 playlist/playlistmanager.cpp:165
#: playlist/playlistmanager.cpp:151 playlist/playlistmanager.cpp:169
#, qt-format
msgid "The playlist '%1' was empty or could not be loaded."
msgstr ""
@ -3997,7 +3997,7 @@ msgstr ""
msgid "Timezone"
msgstr ""
#: playlist/playlist.cpp:1094 ui/organisedialog.cpp:51
#: playlist/playlist.cpp:1083 ui/organisedialog.cpp:51
#: ui/qtsystemtrayicon.cpp:248 ../bin/src/ui_about.h:142
#: ../bin/src/ui_edittagdialog.h:652 ../bin/src/ui_trackselectiondialog.h:211
msgid "Title"
@ -4035,7 +4035,7 @@ msgstr ""
msgid "Total network requests made"
msgstr ""
#: playlist/playlist.cpp:1098 ui/organisedialog.cpp:57
#: playlist/playlist.cpp:1087 ui/organisedialog.cpp:57
#: ../bin/src/ui_edittagdialog.h:653 ../bin/src/ui_trackselectiondialog.h:212
msgid "Track"
msgstr ""
@ -4093,8 +4093,8 @@ msgstr ""
#: core/song.cpp:148 globalsearch/globalsearchitemdelegate.cpp:166
#: globalsearch/globalsearchitemdelegate.cpp:173 library/librarymodel.cpp:284
#: library/librarymodel.cpp:289 library/librarymodel.cpp:899
#: playlist/playlistdelegates.cpp:306 playlist/playlistmanager.cpp:377
#: playlist/playlistmanager.cpp:380 ui/albumcoverchoicecontroller.cpp:111
#: playlist/playlistdelegates.cpp:306 playlist/playlistmanager.cpp:381
#: playlist/playlistmanager.cpp:384 ui/albumcoverchoicecontroller.cpp:111
msgid "Unknown"
msgstr ""
@ -4210,7 +4210,7 @@ msgid "Variable bit rate"
msgstr ""
#: globalsearch/globalsearchitemdelegate.cpp:162 library/librarymodel.cpp:221
#: playlist/playlistmanager.cpp:392 ui/albumcovermanager.cpp:264
#: playlist/playlistmanager.cpp:396 ui/albumcovermanager.cpp:264
msgid "Various artists"
msgstr ""
@ -4342,7 +4342,7 @@ msgstr ""
msgid "Would you like to run a full rescan right now?"
msgstr ""
#: playlist/playlist.cpp:1100 ui/organisedialog.cpp:60
#: playlist/playlist.cpp:1089 ui/organisedialog.cpp:60
#: ../bin/src/ui_groupbydialog.h:135 ../bin/src/ui_groupbydialog.h:148
#: ../bin/src/ui_groupbydialog.h:161 ../bin/src/ui_edittagdialog.h:657
msgid "Year"
@ -4523,7 +4523,7 @@ msgstr ""
msgid "biggest first"
msgstr ""
#: playlist/playlistview.cpp:162 ui/edittagdialog.cpp:421
#: playlist/playlistview.cpp:161 ui/edittagdialog.cpp:421
msgid "bpm"
msgstr ""
@ -4566,7 +4566,7 @@ msgstr ""
msgid "in the last"
msgstr ""
#: playlist/playlistview.cpp:164 ui/edittagdialog.cpp:423
#: playlist/playlistview.cpp:163 ui/edittagdialog.cpp:423
msgid "kbps"
msgstr ""