Center cover manager on same screen as mainwindow
This commit is contained in:
@@ -210,7 +210,7 @@ MainWindow::MainWindow(Application *app, SystemTrayIcon *tray_icon, OSD *osd, co
|
|||||||
queue_view_(new QueueView(this)),
|
queue_view_(new QueueView(this)),
|
||||||
settings_dialog_(std::bind(&MainWindow::CreateSettingsDialog, this)),
|
settings_dialog_(std::bind(&MainWindow::CreateSettingsDialog, this)),
|
||||||
cover_manager_([=]() {
|
cover_manager_([=]() {
|
||||||
AlbumCoverManager *cover_manager = new AlbumCoverManager(app, app->collection_backend());
|
AlbumCoverManager *cover_manager = new AlbumCoverManager(app, app->collection_backend(), this);
|
||||||
cover_manager->Init();
|
cover_manager->Init();
|
||||||
|
|
||||||
// Cover manager connections
|
// Cover manager connections
|
||||||
|
|||||||
@@ -27,9 +27,11 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <QScreen>
|
||||||
|
#include <QWindow>
|
||||||
|
#include <QGuiApplication>
|
||||||
#include <QItemSelectionModel>
|
#include <QItemSelectionModel>
|
||||||
#include <QListWidgetItem>
|
#include <QListWidgetItem>
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
@@ -82,17 +84,15 @@
|
|||||||
|
|
||||||
#include "ui_albumcovermanager.h"
|
#include "ui_albumcovermanager.h"
|
||||||
|
|
||||||
using std::unique_ptr;
|
|
||||||
using std::stable_sort;
|
|
||||||
|
|
||||||
const char *AlbumCoverManager::kSettingsGroup = "CoverManager";
|
const char *AlbumCoverManager::kSettingsGroup = "CoverManager";
|
||||||
|
|
||||||
AlbumCoverManager::AlbumCoverManager(Application *app, CollectionBackend *collection_backend, QWidget *parent, QNetworkAccessManager *network)
|
AlbumCoverManager::AlbumCoverManager(Application *app, CollectionBackend *collection_backend, QMainWindow *mainwindow, QWidget *parent)
|
||||||
: QMainWindow(parent),
|
: QMainWindow(parent),
|
||||||
ui_(new Ui_CoverManager),
|
ui_(new Ui_CoverManager),
|
||||||
|
mainwindow_(mainwindow),
|
||||||
app_(app),
|
app_(app),
|
||||||
album_cover_choice_controller_(new AlbumCoverChoiceController(this)),
|
album_cover_choice_controller_(new AlbumCoverChoiceController(this)),
|
||||||
cover_fetcher_(new AlbumCoverFetcher(app_->cover_providers(), this, network)),
|
cover_fetcher_(new AlbumCoverFetcher(app_->cover_providers(), this)),
|
||||||
cover_searcher_(nullptr),
|
cover_searcher_(nullptr),
|
||||||
cover_export_(nullptr),
|
cover_export_(nullptr),
|
||||||
cover_exporter_(new AlbumCoverExporter(this)),
|
cover_exporter_(new AlbumCoverExporter(this)),
|
||||||
@@ -142,8 +142,10 @@ AlbumCoverManager::AlbumCoverManager(Application *app, CollectionBackend *collec
|
|||||||
}
|
}
|
||||||
|
|
||||||
AlbumCoverManager::~AlbumCoverManager() {
|
AlbumCoverManager::~AlbumCoverManager() {
|
||||||
|
|
||||||
CancelRequests();
|
CancelRequests();
|
||||||
delete ui_;
|
delete ui_;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlbumCoverManager::ReloadSettings() {
|
void AlbumCoverManager::ReloadSettings() {
|
||||||
@@ -224,7 +226,10 @@ void AlbumCoverManager::Init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AlbumCoverManager::showEvent(QShowEvent *) {
|
void AlbumCoverManager::showEvent(QShowEvent *) {
|
||||||
|
|
||||||
|
LoadGeometry();
|
||||||
Reset();
|
Reset();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlbumCoverManager::closeEvent(QCloseEvent *e) {
|
void AlbumCoverManager::closeEvent(QCloseEvent *e) {
|
||||||
@@ -239,15 +244,62 @@ void AlbumCoverManager::closeEvent(QCloseEvent *e) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save geometry
|
SaveGeometry();
|
||||||
QSettings s;
|
|
||||||
s.beginGroup(kSettingsGroup);
|
|
||||||
|
|
||||||
s.setValue("geometry", saveGeometry());
|
|
||||||
s.setValue("splitter_state", ui_->splitter->saveState());
|
|
||||||
|
|
||||||
// Cancel any outstanding requests
|
// Cancel any outstanding requests
|
||||||
CancelRequests();
|
CancelRequests();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void AlbumCoverManager::LoadGeometry() {
|
||||||
|
|
||||||
|
QSettings s;
|
||||||
|
s.beginGroup(kSettingsGroup);
|
||||||
|
if (s.contains("geometry")) {
|
||||||
|
restoreGeometry(s.value("geometry").toByteArray());
|
||||||
|
}
|
||||||
|
if (s.contains("splitter_state")) {
|
||||||
|
ui_->splitter->restoreState(s.value("splitter_state").toByteArray());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Sensible default size for the artists view
|
||||||
|
ui_->splitter->setSizes(QList<int>() << 200 << width() - 200);
|
||||||
|
}
|
||||||
|
s.endGroup();
|
||||||
|
|
||||||
|
// Resize the window if it's too big
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
|
||||||
|
QScreen *screen = QWidget::screen();
|
||||||
|
#else
|
||||||
|
QScreen *screen = (window() && window()->windowHandle() ? window()->windowHandle()->screen() : QGuiApplication::primaryScreen());
|
||||||
|
#endif
|
||||||
|
if (screen && screen->availableGeometry().height() < height()) {
|
||||||
|
resize(width(), sizeHint().height());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Center the window on the same screen as the mainwindow.
|
||||||
|
#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
|
||||||
|
screen = mainwindow_->screen();
|
||||||
|
#else
|
||||||
|
screen = (mainwindow_->window() && mainwindow_->window()->windowHandle() ? mainwindow_->window()->windowHandle()->screen() : nullptr);
|
||||||
|
#endif
|
||||||
|
if (screen) {
|
||||||
|
const QRect sr = screen->availableGeometry();
|
||||||
|
const QRect wr({}, size().boundedTo(sr.size()));
|
||||||
|
resize(wr.size());
|
||||||
|
move(sr.center() - wr.center());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void AlbumCoverManager::SaveGeometry() {
|
||||||
|
|
||||||
|
QSettings s;
|
||||||
|
s.beginGroup(kSettingsGroup);
|
||||||
|
s.setValue("geometry", saveGeometry());
|
||||||
|
s.setValue("splitter_state", ui_->splitter->saveState());
|
||||||
|
s.endGroup();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AlbumCoverManager::CancelRequests() {
|
void AlbumCoverManager::CancelRequests() {
|
||||||
|
|||||||
@@ -40,7 +40,6 @@
|
|||||||
|
|
||||||
class QWidget;
|
class QWidget;
|
||||||
class QMimeData;
|
class QMimeData;
|
||||||
class QNetworkAccessManager;
|
|
||||||
class QMenu;
|
class QMenu;
|
||||||
class QAction;
|
class QAction;
|
||||||
class QProgressBar;
|
class QProgressBar;
|
||||||
@@ -63,7 +62,7 @@ class Ui_CoverManager;
|
|||||||
class AlbumCoverManager : public QMainWindow {
|
class AlbumCoverManager : public QMainWindow {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AlbumCoverManager(Application *app, CollectionBackend *collection_backend, QWidget *parent = nullptr, QNetworkAccessManager *network = 0);
|
explicit AlbumCoverManager(Application *app, CollectionBackend *collection_backend, QMainWindow *mainwindow, QWidget *parent = nullptr);
|
||||||
~AlbumCoverManager();
|
~AlbumCoverManager();
|
||||||
|
|
||||||
static const char *kSettingsGroup;
|
static const char *kSettingsGroup;
|
||||||
@@ -82,16 +81,55 @@ class AlbumCoverManager : public QMainWindow {
|
|||||||
SongList GetSongsInAlbums(const QModelIndexList &indexes) const;
|
SongList GetSongsInAlbums(const QModelIndexList &indexes) const;
|
||||||
SongMimeData *GetMimeDataForAlbums(const QModelIndexList &indexes) const;
|
SongMimeData *GetMimeDataForAlbums(const QModelIndexList &indexes) const;
|
||||||
|
|
||||||
signals:
|
|
||||||
void AddToPlaylist(QMimeData *data);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void showEvent(QShowEvent *);
|
void showEvent(QShowEvent*);
|
||||||
void closeEvent(QCloseEvent *);
|
void closeEvent(QCloseEvent*);
|
||||||
|
|
||||||
// For the album view context menu events
|
// For the album view context menu events
|
||||||
bool eventFilter(QObject *obj, QEvent *event);
|
bool eventFilter(QObject *obj, QEvent *event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum ArtistItemType {
|
||||||
|
All_Artists,
|
||||||
|
Various_Artists,
|
||||||
|
Specific_Artist
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Role {
|
||||||
|
Role_ArtistName = Qt::UserRole + 1,
|
||||||
|
Role_AlbumArtistName,
|
||||||
|
Role_AlbumName,
|
||||||
|
Role_PathAutomatic,
|
||||||
|
Role_PathManual,
|
||||||
|
Role_FirstUrl
|
||||||
|
};
|
||||||
|
|
||||||
|
enum HideCovers {
|
||||||
|
Hide_None,
|
||||||
|
Hide_WithCovers,
|
||||||
|
Hide_WithoutCovers
|
||||||
|
};
|
||||||
|
|
||||||
|
void LoadGeometry();
|
||||||
|
void SaveGeometry();
|
||||||
|
|
||||||
|
QString InitialPathForOpenCoverDialog(const QString &path_automatic, const QString &first_file_name) const;
|
||||||
|
QString EffectiveAlbumArtistName(const QListWidgetItem &item) const;
|
||||||
|
|
||||||
|
// Returns the selected element in form of a Song ready to be used by AlbumCoverChoiceController or invalid song if there's nothing or multiple elements selected.
|
||||||
|
Song GetSingleSelectionAsSong();
|
||||||
|
// Returns the first of the selected elements in form of a Song ready to be used by AlbumCoverChoiceController or invalid song if there's nothing selected.
|
||||||
|
Song GetFirstSelectedAsSong();
|
||||||
|
|
||||||
|
Song ItemAsSong(QListWidgetItem *item);
|
||||||
|
|
||||||
|
void UpdateStatusText();
|
||||||
|
bool ShouldHide(const QListWidgetItem &item, const QString &filter, HideCovers hide) const;
|
||||||
|
void SaveAndSetCover(QListWidgetItem *item, const QUrl &cover_url, const QImage &image);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void AddToPlaylist(QMimeData *data);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void ArtistChanged(QListWidgetItem *current);
|
void ArtistChanged(QListWidgetItem *current);
|
||||||
void CoverImageLoaded(const quint64 id, const QUrl &cover_url, const QImage &image);
|
void CoverImageLoaded(const quint64 id, const QUrl &cover_url, const QImage &image);
|
||||||
@@ -119,44 +157,9 @@ class AlbumCoverManager : public QMainWindow {
|
|||||||
void UpdateCoverInList(QListWidgetItem *item, const QUrl &cover);
|
void UpdateCoverInList(QListWidgetItem *item, const QUrl &cover);
|
||||||
void UpdateExportStatus(int exported, int bad, int count);
|
void UpdateExportStatus(int exported, int bad, int count);
|
||||||
|
|
||||||
private:
|
|
||||||
enum ArtistItemType {
|
|
||||||
All_Artists,
|
|
||||||
Various_Artists,
|
|
||||||
Specific_Artist
|
|
||||||
};
|
|
||||||
|
|
||||||
enum Role {
|
|
||||||
Role_ArtistName = Qt::UserRole + 1,
|
|
||||||
Role_AlbumArtistName,
|
|
||||||
Role_AlbumName,
|
|
||||||
Role_PathAutomatic,
|
|
||||||
Role_PathManual,
|
|
||||||
Role_FirstUrl
|
|
||||||
};
|
|
||||||
|
|
||||||
enum HideCovers {
|
|
||||||
Hide_None,
|
|
||||||
Hide_WithCovers,
|
|
||||||
Hide_WithoutCovers
|
|
||||||
};
|
|
||||||
|
|
||||||
QString InitialPathForOpenCoverDialog(const QString &path_automatic, const QString &first_file_name) const;
|
|
||||||
QString EffectiveAlbumArtistName(const QListWidgetItem &item) const;
|
|
||||||
|
|
||||||
// Returns the selected element in form of a Song ready to be used by AlbumCoverChoiceController or invalid song if there's nothing or multiple elements selected.
|
|
||||||
Song GetSingleSelectionAsSong();
|
|
||||||
// Returns the first of the selected elements in form of a Song ready to be used by AlbumCoverChoiceController or invalid song if there's nothing selected.
|
|
||||||
Song GetFirstSelectedAsSong();
|
|
||||||
|
|
||||||
Song ItemAsSong(QListWidgetItem *item);
|
|
||||||
|
|
||||||
void UpdateStatusText();
|
|
||||||
bool ShouldHide(const QListWidgetItem &item, const QString &filter, HideCovers hide) const;
|
|
||||||
void SaveAndSetCover(QListWidgetItem *item, const QUrl &cover_url, const QImage &image);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui_CoverManager *ui_;
|
Ui_CoverManager *ui_;
|
||||||
|
QMainWindow *mainwindow_;
|
||||||
Application *app_;
|
Application *app_;
|
||||||
|
|
||||||
AlbumCoverChoiceController *album_cover_choice_controller_;
|
AlbumCoverChoiceController *album_cover_choice_controller_;
|
||||||
|
|||||||
Reference in New Issue
Block a user