Refactoring

This commit is contained in:
Jonas Kvinge
2024-10-22 18:12:33 +02:00
parent dfcf715291
commit 8da2b9cd94
623 changed files with 9071 additions and 5126 deletions

View File

@@ -59,11 +59,10 @@
#include <QtEvents>
#include <QSettings>
#include "core/application.h"
#include "core/player.h"
#include "core/qt_blurimage.h"
#include "includes/qt_blurimage.h"
#include "core/song.h"
#include "core/settings.h"
#include "core/player.h"
#include "playlistmanager.h"
#include "playlist.h"
#include "playlistdelegates.h"
@@ -73,8 +72,8 @@
#include "playlistproxystyle.h"
#include "covermanager/currentalbumcoverloader.h"
#include "covermanager/albumcoverloaderresult.h"
#include "settings/appearancesettingspage.h"
#include "settings/playlistsettingspage.h"
#include "constants/appearancesettings.h"
#include "constants/playlistsettings.h"
#include "dynamicplaylistcontrols.h"
#ifdef HAVE_MOODBAR
@@ -92,18 +91,17 @@ constexpr int kDropIndicatorGradientWidth = 5;
PlaylistView::PlaylistView(QWidget *parent)
: QTreeView(parent),
app_(nullptr),
style_(new PlaylistProxyStyle(QApplication::style()->name())),
playlist_(nullptr),
header_(new PlaylistHeader(Qt::Horizontal, this, this)),
background_image_type_(AppearanceSettingsPage::BackgroundImageType::Default),
background_image_position_(AppearanceSettingsPage::BackgroundImagePosition::BottomRight),
background_image_type_(AppearanceSettings::BackgroundImageType::Default),
background_image_position_(AppearanceSettings::BackgroundImagePosition::BottomRight),
background_image_maxsize_(0),
background_image_stretch_(false),
background_image_do_not_cut_(true),
background_image_keep_aspect_ratio_(true),
blur_radius_(AppearanceSettingsPage::kDefaultBlurRadius),
opacity_level_(AppearanceSettingsPage::kDefaultOpacityLevel),
blur_radius_(AppearanceSettings::kDefaultBlurRadius),
opacity_level_(AppearanceSettings::kDefaultOpacityLevel),
background_initialized_(false),
set_initial_header_layout_(false),
header_state_loaded_(false),
@@ -187,18 +185,30 @@ PlaylistView::~PlaylistView() {
style_->deleteLater();
}
void PlaylistView::Init(Application *app) {
void PlaylistView::Init(const SharedPtr<Player> player,
const SharedPtr<PlaylistManager> playlist_manager,
const SharedPtr<CollectionBackend> collection_backend,
#ifdef HAVE_MOODBAR
const SharedPtr<MoodbarLoader> moodbar_loader,
#endif
const SharedPtr<CurrentAlbumCoverLoader> current_albumcover_loader) {
Q_ASSERT(app);
app_ = app;
player_ = player;
playlist_manager_ = playlist_manager;
collection_backend_ = collection_backend;
current_albumcover_loader_ = current_albumcover_loader;
#ifdef HAVE_MOODBAR
moodbar_loader_ = moodbar_loader;
#endif
SetItemDelegates();
QObject::connect(&*app_->playlist_manager(), &PlaylistManager::CurrentSongChanged, this, &PlaylistView::SongChanged);
QObject::connect(&*app_->current_albumcover_loader(), &CurrentAlbumCoverLoader::AlbumCoverLoaded, this, &PlaylistView::AlbumCoverLoaded);
QObject::connect(&*app_->player(), &Player::Playing, this, &PlaylistView::StartGlowing);
QObject::connect(&*app_->player(), &Player::Paused, this, &PlaylistView::StopGlowing);
QObject::connect(&*app_->player(), &Player::Stopped, this, &PlaylistView::Stopped);
QObject::connect(&*playlist_manager, &PlaylistManager::CurrentSongChanged, this, &PlaylistView::SongChanged);
QObject::connect(&*current_albumcover_loader_, &CurrentAlbumCoverLoader::AlbumCoverLoaded, this, &PlaylistView::AlbumCoverLoaded);
QObject::connect(&*player, &Player::Playing, this, &PlaylistView::StartGlowing);
QObject::connect(&*player, &Player::Paused, this, &PlaylistView::StopGlowing);
QObject::connect(&*player, &Player::Stopped, this, &PlaylistView::Stopped);
}
@@ -207,13 +217,13 @@ void PlaylistView::SetItemDelegates() {
setItemDelegate(new PlaylistDelegateBase(this));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Title), new TextItemDelegate(this));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Album), new TagCompletionItemDelegate(this, app_->collection_backend(), Playlist::Column::Album));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Artist), new TagCompletionItemDelegate(this, app_->collection_backend(), Playlist::Column::Artist));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::AlbumArtist), new TagCompletionItemDelegate(this, app_->collection_backend(), Playlist::Column::AlbumArtist));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Genre), new TagCompletionItemDelegate(this, app_->collection_backend(), Playlist::Column::Genre));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Composer), new TagCompletionItemDelegate(this, app_->collection_backend(), Playlist::Column::Composer));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Performer), new TagCompletionItemDelegate(this, app_->collection_backend(), Playlist::Column::Performer));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Grouping), new TagCompletionItemDelegate(this, app_->collection_backend(), Playlist::Column::Grouping));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Album), new TagCompletionItemDelegate(this, collection_backend_, Playlist::Column::Album));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Artist), new TagCompletionItemDelegate(this, collection_backend_, Playlist::Column::Artist));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::AlbumArtist), new TagCompletionItemDelegate(this, collection_backend_, Playlist::Column::AlbumArtist));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Genre), new TagCompletionItemDelegate(this, collection_backend_, Playlist::Column::Genre));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Composer), new TagCompletionItemDelegate(this, collection_backend_, Playlist::Column::Composer));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Performer), new TagCompletionItemDelegate(this, collection_backend_, Playlist::Column::Performer));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Grouping), new TagCompletionItemDelegate(this, collection_backend_, Playlist::Column::Grouping));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Length), new LengthItemDelegate(this));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Filesize), new SizeItemDelegate(this));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Filetype), new FileTypeItemDelegate(this));
@@ -230,7 +240,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(app_, this, this));
setItemDelegateForColumn(static_cast<int>(Playlist::Column::Mood), new MoodbarItemDelegate(moodbar_loader_, this, this));
#endif
rating_delegate_ = new RatingItemDelegate(this);
@@ -293,12 +303,12 @@ void PlaylistView::SetPlaylist(Playlist *playlist) {
void PlaylistView::LoadHeaderState() {
Settings s;
s.beginGroup(Playlist::kSettingsGroup);
if (s.contains("state")) {
header_state_version_ = s.value("state_version", 0).toInt();
header_state_ = s.value("state").toByteArray();
s.beginGroup(PlaylistSettings::kSettingsGroup);
if (s.contains(PlaylistSettings::kState)) {
header_state_version_ = s.value(PlaylistSettings::kStateVersion, 0).toInt();
header_state_ = s.value(PlaylistSettings::kState).toByteArray();
}
if (s.contains("column_alignments")) column_alignment_ = s.value("column_alignments").value<ColumnAlignmentMap>();
if (s.contains(PlaylistSettings::kColumnAlignments)) column_alignment_ = s.value(PlaylistSettings::kColumnAlignments).value<ColumnAlignmentMap>();
s.endGroup();
if (column_alignment_.isEmpty()) {
@@ -851,10 +861,10 @@ void PlaylistView::mousePressEvent(QMouseEvent *event) {
if (idx.isValid()) {
switch (event->button()) {
case Qt::XButton1:
app_->player()->Previous();
player_->Previous();
break;
case Qt::XButton2:
app_->player()->Next();
player_->Next();
break;
case Qt::LeftButton:{
if (idx.data(Playlist::Role_CanSetRating).toBool() && !rating_locked_) {
@@ -972,7 +982,7 @@ void PlaylistView::paintEvent(QPaintEvent *event) {
// The cached pixmap gets invalidated in dragLeaveEvent, dropEvent and scrollContentsBy.
// Draw background
if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Custom || background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Album) {
if (background_image_type_ == AppearanceSettings::BackgroundImageType::Custom || background_image_type_ == AppearanceSettings::BackgroundImageType::Album) {
if (!background_image_.isNull() || !previous_background_image_.isNull()) {
QPainter background_painter(viewport());
@@ -1023,23 +1033,23 @@ void PlaylistView::paintEvent(QPaintEvent *event) {
background_painter.setOpacity(1.0 - previous_background_image_opacity_);
}
switch (background_image_position_) {
case AppearanceSettingsPage::BackgroundImagePosition::UpperLeft:
case AppearanceSettings::BackgroundImagePosition::UpperLeft:
current_background_image_x_ = 0;
current_background_image_y_ = 0;
break;
case AppearanceSettingsPage::BackgroundImagePosition::UpperRight:
case AppearanceSettings::BackgroundImagePosition::UpperRight:
current_background_image_x_ = (pb_width - cached_scaled_background_image_.width());
current_background_image_y_ = 0;
break;
case AppearanceSettingsPage::BackgroundImagePosition::Middle:
case AppearanceSettings::BackgroundImagePosition::Middle:
current_background_image_x_ = ((pb_width - cached_scaled_background_image_.width()) / 2);
current_background_image_y_ = ((pb_height - cached_scaled_background_image_.height()) / 2);
break;
case AppearanceSettingsPage::BackgroundImagePosition::BottomLeft:
case AppearanceSettings::BackgroundImagePosition::BottomLeft:
current_background_image_x_ = 0;
current_background_image_y_ = (pb_height - cached_scaled_background_image_.height());
break;
case AppearanceSettingsPage::BackgroundImagePosition::BottomRight:
case AppearanceSettings::BackgroundImagePosition::BottomRight:
default:
current_background_image_x_ = (pb_width - cached_scaled_background_image_.width());
current_background_image_y_ = (pb_height - cached_scaled_background_image_.height());
@@ -1169,32 +1179,32 @@ void PlaylistView::ReloadSettings() {
Settings s;
s.beginGroup(PlaylistSettingsPage::kSettingsGroup);
bars_enabled_ = s.value("show_bars", true).toBool();
s.beginGroup(PlaylistSettings::kSettingsGroup);
bars_enabled_ = s.value(PlaylistSettings::kShowBars, true).toBool();
#ifdef Q_OS_MACOS
bool glow_effect = false;
#else
bool glow_effect = true;
#endif
glow_enabled_ = bars_enabled_ && s.value("glow_effect", glow_effect).toBool();
bool editmetadatainline = s.value("editmetadatainline", false).toBool();
select_track_ = s.value("select_track", false).toBool();
auto_sort_ = s.value("auto_sort", false).toBool();
setAlternatingRowColors(s.value("alternating_row_colors", true).toBool());
glow_enabled_ = bars_enabled_ && s.value(PlaylistSettings::kGlowEffect, glow_effect).toBool();
bool editmetadatainline = s.value(PlaylistSettings::kEditMetadataInline, false).toBool();
select_track_ = s.value(PlaylistSettings::kSelectTrack, false).toBool();
auto_sort_ = s.value(PlaylistSettings::kAutoSort, false).toBool();
setAlternatingRowColors(s.value(PlaylistSettings::kAlternatingRowColors, true).toBool());
s.endGroup();
s.beginGroup(AppearanceSettingsPage::kSettingsGroup);
QVariant background_image_type_var = s.value(AppearanceSettingsPage::kBackgroundImageType);
QVariant background_image_position_var = s.value(AppearanceSettingsPage::kBackgroundImagePosition);
int background_image_maxsize = s.value(AppearanceSettingsPage::kBackgroundImageMaxSize).toInt();
s.beginGroup(AppearanceSettings::kSettingsGroup);
QVariant background_image_type_var = s.value(AppearanceSettings::kBackgroundImageType);
QVariant background_image_position_var = s.value(AppearanceSettings::kBackgroundImagePosition);
int background_image_maxsize = s.value(AppearanceSettings::kBackgroundImageMaxSize).toInt();
if (background_image_maxsize <= 10) background_image_maxsize = 9000;
QString background_image_filename = s.value(AppearanceSettingsPage::kBackgroundImageFilename).toString();
bool background_image_stretch = s.value(AppearanceSettingsPage::kBackgroundImageStretch, false).toBool();
bool background_image_do_not_cut = s.value(AppearanceSettingsPage::kBackgroundImageDoNotCut, true).toBool();
bool background_image_keep_aspect_ratio = s.value(AppearanceSettingsPage::kBackgroundImageKeepAspectRatio, true).toBool();
int blur_radius = s.value(AppearanceSettingsPage::kBlurRadius, AppearanceSettingsPage::kDefaultBlurRadius).toInt();
int opacity_level = s.value(AppearanceSettingsPage::kOpacityLevel, AppearanceSettingsPage::kDefaultOpacityLevel).toInt();
QColor playlist_playing_song_color = s.value(AppearanceSettingsPage::kPlaylistPlayingSongColor).value<QColor>();
QString background_image_filename = s.value(AppearanceSettings::kBackgroundImageFilename).toString();
bool background_image_stretch = s.value(AppearanceSettings::kBackgroundImageStretch, false).toBool();
bool background_image_do_not_cut = s.value(AppearanceSettings::kBackgroundImageDoNotCut, true).toBool();
bool background_image_keep_aspect_ratio = s.value(AppearanceSettings::kBackgroundImageKeepAspectRatio, true).toBool();
int blur_radius = s.value(AppearanceSettings::kBlurRadius, AppearanceSettings::kDefaultBlurRadius).toInt();
int opacity_level = s.value(AppearanceSettings::kOpacityLevel, AppearanceSettings::kDefaultOpacityLevel).toInt();
QColor playlist_playing_song_color = s.value(AppearanceSettings::kPlaylistPlayingSongColor).value<QColor>();
if (playlist_playing_song_color != playlist_playing_song_color_) {
row_height_ = -1;
}
@@ -1205,20 +1215,20 @@ void PlaylistView::ReloadSettings() {
if (!glow_enabled_) StopGlowing();
// Background:
AppearanceSettingsPage::BackgroundImageType background_image_type(AppearanceSettingsPage::BackgroundImageType::Default);
AppearanceSettings::BackgroundImageType background_image_type(AppearanceSettings::BackgroundImageType::Default);
if (background_image_type_var.isValid()) {
background_image_type = static_cast<AppearanceSettingsPage::BackgroundImageType>(background_image_type_var.toInt());
background_image_type = static_cast<AppearanceSettings::BackgroundImageType>(background_image_type_var.toInt());
}
else {
background_image_type = AppearanceSettingsPage::BackgroundImageType::Default;
background_image_type = AppearanceSettings::BackgroundImageType::Default;
}
AppearanceSettingsPage::BackgroundImagePosition background_image_position(AppearanceSettingsPage::BackgroundImagePosition::BottomRight);
AppearanceSettings::BackgroundImagePosition background_image_position(AppearanceSettings::BackgroundImagePosition::BottomRight);
if (background_image_position_var.isValid()) {
background_image_position = static_cast<AppearanceSettingsPage::BackgroundImagePosition>(background_image_position_var.toInt());
background_image_position = static_cast<AppearanceSettings::BackgroundImagePosition>(background_image_position_var.toInt());
}
else {
background_image_position = AppearanceSettingsPage::BackgroundImagePosition::BottomRight;
background_image_position = AppearanceSettings::BackgroundImagePosition::BottomRight;
}
// Check if background properties have changed.
@@ -1250,10 +1260,10 @@ void PlaylistView::ReloadSettings() {
blur_radius_ = blur_radius;
opacity_level_ = opacity_level;
if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Custom) {
if (background_image_type_ == AppearanceSettings::BackgroundImageType::Custom) {
set_background_image(QImage(background_image_filename));
}
else if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Album) {
else if (background_image_type_ == AppearanceSettings::BackgroundImageType::Album) {
set_background_image(current_song_cover_art_);
}
else {
@@ -1263,8 +1273,8 @@ void PlaylistView::ReloadSettings() {
cached_scaled_background_image_ = QPixmap();
previous_background_image_ = QPixmap();
}
setProperty("default_background_enabled", background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Default);
setProperty("strawbs_background_enabled", background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Strawbs);
setProperty("default_background_enabled", background_image_type_ == AppearanceSettings::BackgroundImageType::Default);
setProperty("strawbs_background_enabled", background_image_type_ == AppearanceSettings::BackgroundImageType::Strawbs);
Q_EMIT BackgroundPropertyChanged();
force_background_redraw_ = true;
}
@@ -1283,11 +1293,11 @@ void PlaylistView::SaveSettings() {
if (!header_state_loaded_ || read_only_settings_) return;
Settings s;
s.beginGroup(Playlist::kSettingsGroup);
s.beginGroup(PlaylistSettings::kSettingsGroup);
s.setValue("state_version", header_state_version_);
s.setValue("state", header_->SaveState());
s.setValue("column_alignments", QVariant::fromValue<ColumnAlignmentMap>(column_alignment_));
s.setValue("rating_locked", rating_locked_);
s.setValue(PlaylistSettings::kRatingLocked, rating_locked_);
s.endGroup();
}
@@ -1424,7 +1434,7 @@ void PlaylistView::AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResu
current_song_cover_art_ = result.album_cover.image;
if (background_image_type_ == AppearanceSettingsPage::BackgroundImageType::Album) {
if (background_image_type_ == AppearanceSettings::BackgroundImageType::Album) {
set_background_image(result.success && result.type != AlbumCoverLoaderResult::Type::None && result.type != AlbumCoverLoaderResult::Type::Unset ? current_song_cover_art_ : QImage());
force_background_redraw_ = true;
update();