From ba2f4ddedc6b52c9dce7daa6e68ca646da8be304 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Wed, 30 May 2012 11:06:25 +0100 Subject: [PATCH] Fix a crash in the smart playlist preview when the moodbar column is enabled --- src/library/libraryview.cpp | 4 ++-- src/smartplaylists/querywizardplugin.cpp | 6 ++++-- src/smartplaylists/querywizardplugin.h | 2 +- src/smartplaylists/searchpreview.cpp | 4 ++++ src/smartplaylists/searchpreview.h | 2 ++ src/smartplaylists/wizard.cpp | 5 +++-- src/smartplaylists/wizard.h | 4 +++- src/smartplaylists/wizardplugin.cpp | 3 ++- src/smartplaylists/wizardplugin.h | 4 +++- 9 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/library/libraryview.cpp b/src/library/libraryview.cpp index 40ea0c9ad..67923eb37 100644 --- a/src/library/libraryview.cpp +++ b/src/library/libraryview.cpp @@ -531,7 +531,7 @@ void LibraryView::FilterReturnPressed() { } void LibraryView::NewSmartPlaylist() { - Wizard* wizard = new Wizard(app_->library_backend(), this); + Wizard* wizard = new Wizard(app_, app_->library_backend(), this); wizard->setAttribute(Qt::WA_DeleteOnClose); connect(wizard, SIGNAL(accepted()), SLOT(NewSmartPlaylistFinished())); @@ -539,7 +539,7 @@ void LibraryView::NewSmartPlaylist() { } void LibraryView::EditSmartPlaylist() { - Wizard* wizard = new Wizard(app_->library_backend(), this); + Wizard* wizard = new Wizard(app_, app_->library_backend(), this); wizard->setAttribute(Qt::WA_DeleteOnClose); connect(wizard, SIGNAL(accepted()), SLOT(EditSmartPlaylistFinished())); diff --git a/src/smartplaylists/querywizardplugin.cpp b/src/smartplaylists/querywizardplugin.cpp index 11df20f02..8b7e1a033 100644 --- a/src/smartplaylists/querywizardplugin.cpp +++ b/src/smartplaylists/querywizardplugin.cpp @@ -71,8 +71,8 @@ public: }; -QueryWizardPlugin::QueryWizardPlugin(LibraryBackend* library, QObject* parent) - : WizardPlugin(library, parent), +QueryWizardPlugin::QueryWizardPlugin(Application* app, LibraryBackend* library, QObject* parent) + : WizardPlugin(app, library, parent), search_page_(NULL), previous_scrollarea_max_(0) { @@ -118,6 +118,7 @@ int QueryWizardPlugin::CreatePages(QWizard* wizard, int finish_page_id) { QVBoxLayout* terms_page_layout = static_cast(search_page_->layout()); terms_page_layout->addStretch(); search_page_->preview_ = new SearchPreview(search_page_); + search_page_->preview_->set_application(app_); search_page_->preview_->set_library(library_); terms_page_layout->addWidget(search_page_->preview_); @@ -136,6 +137,7 @@ int QueryWizardPlugin::CreatePages(QWizard* wizard, int finish_page_id) { sort_ui_->limit_none->setChecked(true); // Set up the preview widget that's already at the bottom of the sort page + sort_ui_->preview->set_application(app_); sort_ui_->preview->set_library(library_); connect(sort_ui_->field, SIGNAL(toggled(bool)), SLOT(UpdateSortPreview())); connect(sort_ui_->field_value, SIGNAL(currentIndexChanged(int)), SLOT(UpdateSortPreview())); diff --git a/src/smartplaylists/querywizardplugin.h b/src/smartplaylists/querywizardplugin.h index cb50ea5ed..8213d945b 100644 --- a/src/smartplaylists/querywizardplugin.h +++ b/src/smartplaylists/querywizardplugin.h @@ -39,7 +39,7 @@ class QueryWizardPlugin : public WizardPlugin { Q_OBJECT public: - QueryWizardPlugin(LibraryBackend* library, QObject* parent); + QueryWizardPlugin(Application* app, LibraryBackend* library, QObject* parent); ~QueryWizardPlugin(); QString type() const { return "Query"; } diff --git a/src/smartplaylists/searchpreview.cpp b/src/smartplaylists/searchpreview.cpp index d638cb00e..d084c0400 100644 --- a/src/smartplaylists/searchpreview.cpp +++ b/src/smartplaylists/searchpreview.cpp @@ -49,6 +49,10 @@ SearchPreview::~SearchPreview() { delete ui_; } +void SearchPreview::set_application(Application* app) { + ui_->tree->SetApplication(app); +} + void SearchPreview::set_library(LibraryBackend* backend) { backend_ = backend; diff --git a/src/smartplaylists/searchpreview.h b/src/smartplaylists/searchpreview.h index 73997fe23..8f58eeecd 100644 --- a/src/smartplaylists/searchpreview.h +++ b/src/smartplaylists/searchpreview.h @@ -23,6 +23,7 @@ #include +class Application; class LibraryBackend; class Playlist; class Ui_SmartPlaylistSearchPreview; @@ -36,6 +37,7 @@ public: SearchPreview(QWidget *parent = 0); ~SearchPreview(); + void set_application(Application* app); void set_library(LibraryBackend* backend); void Update(const Search& search); diff --git a/src/smartplaylists/wizard.cpp b/src/smartplaylists/wizard.cpp index afe62816a..9f215077c 100644 --- a/src/smartplaylists/wizard.cpp +++ b/src/smartplaylists/wizard.cpp @@ -55,8 +55,9 @@ public: Ui_SmartPlaylistWizardFinishPage* ui_; }; -Wizard::Wizard(LibraryBackend* library, QWidget* parent) +Wizard::Wizard(Application* app, LibraryBackend* library, QWidget* parent) : QWizard(parent), + app_(app), library_(library), type_page_(new TypePage(this)), finish_page_(new FinishPage(this)), @@ -83,7 +84,7 @@ Wizard::Wizard(LibraryBackend* library, QWidget* parent) connect(type_mapper_, SIGNAL(mapped(int)), SLOT(TypeChanged(int))); new QVBoxLayout(type_page_); - AddPlugin(new QueryWizardPlugin(library_, this)); + AddPlugin(new QueryWizardPlugin(app_, library_, this)); // Skip the type page - remove this when we have more than one type setStartId(2); diff --git a/src/smartplaylists/wizard.h b/src/smartplaylists/wizard.h index 4f35b0108..f8599ce54 100644 --- a/src/smartplaylists/wizard.h +++ b/src/smartplaylists/wizard.h @@ -22,6 +22,7 @@ #include +class Application; class LibraryBackend; class Ui_SmartPlaylistWizardFinishPage; @@ -35,7 +36,7 @@ class Wizard : public QWizard { Q_OBJECT public: - Wizard(LibraryBackend* library, QWidget* parent); + Wizard(Application* app, LibraryBackend* library, QWidget* parent); ~Wizard(); void SetGenerator(GeneratorPtr gen); @@ -54,6 +55,7 @@ private slots: void TypeChanged(int index); private: + Application* app_; LibraryBackend* library_; TypePage* type_page_; FinishPage* finish_page_; diff --git a/src/smartplaylists/wizardplugin.cpp b/src/smartplaylists/wizardplugin.cpp index 4607c1fd1..6f4eacdb5 100644 --- a/src/smartplaylists/wizardplugin.cpp +++ b/src/smartplaylists/wizardplugin.cpp @@ -19,8 +19,9 @@ namespace smart_playlists { -WizardPlugin::WizardPlugin(LibraryBackend* library, QObject* parent) +WizardPlugin::WizardPlugin(Application* app, LibraryBackend* library, QObject* parent) : QObject(parent), + app_(app), library_(library), start_page_(-1) { diff --git a/src/smartplaylists/wizardplugin.h b/src/smartplaylists/wizardplugin.h index 4fd775e46..2d9cea116 100644 --- a/src/smartplaylists/wizardplugin.h +++ b/src/smartplaylists/wizardplugin.h @@ -22,6 +22,7 @@ #include "generator_fwd.h" +class Application; class LibraryBackend; class QWizard; @@ -32,7 +33,7 @@ class WizardPlugin : public QObject { Q_OBJECT public: - WizardPlugin(LibraryBackend* library, QObject* parent); + WizardPlugin(Application* app, LibraryBackend* library, QObject* parent); virtual QString type() const = 0; virtual QString name() const = 0; @@ -48,6 +49,7 @@ public: protected: virtual int CreatePages(QWizard* wizard, int finish_page_id) = 0; + Application* app_; LibraryBackend* library_; private: