Center cover manager on same screen as mainwindow

This commit is contained in:
Jonas Kvinge
2020-04-06 22:30:03 +02:00
parent 8321a48af7
commit 7f39a38d6c
3 changed files with 111 additions and 56 deletions

View File

@@ -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

View File

@@ -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() {

View File

@@ -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_;