From 66e13529be4fd32c3af1e1bf8c74062b8b53a90b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Sun, 18 Dec 2022 10:18:01 +0100 Subject: [PATCH] Allow change of preload without restart --- imageringlist.cpp | 29 +++++++++++++++++++++++++++++ imageringlist.h | 2 ++ mainwindow.cpp | 1 + settingsdialog.cpp | 2 ++ settingsdialog.h | 2 ++ 5 files changed, 36 insertions(+) diff --git a/imageringlist.cpp b/imageringlist.cpp index 93848e0..1526c3b 100644 --- a/imageringlist.cpp +++ b/imageringlist.cpp @@ -348,6 +348,35 @@ QVariant ImageRingList::headerData(int section, Qt::Orientation orientation, int return QVariant(); } +void ImageRingList::setPreload(int width) +{ + DEFAULT_WIDTH = width; + if(m_images.size() == 0)return; + + int newWidth = DEFAULT_WIDTH m_width) + { + for(int i = newWidth - m_width; i>0; i--) + { + m_firstImage = decrement(m_firstImage); + (*m_firstImage)->load(); + m_lastImage = increment(m_lastImage); + (*m_lastImage)->load(); + } + } + if(newWidth < m_width) + { + for(int i = m_width - newWidth; i>0; i--) + { + (*m_firstImage)->release(); + m_firstImage = increment(m_firstImage); + (*m_lastImage)->release(); + m_lastImage = decrement(m_lastImage); + } + } + m_width = newWidth; +} + void ImageRingList::setFiles(const QStringList files, const QString ¤tFile) { QThreadPool::globalInstance()->clear(); diff --git a/imageringlist.h b/imageringlist.h index 5500fc9..23b209a 100644 --- a/imageringlist.h +++ b/imageringlist.h @@ -89,6 +89,8 @@ public: int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; +public slots: + void setPreload(int width); protected: void setFiles(const QStringList files, const QString ¤tFile = QString()); QList::iterator increment(QList::iterator iter); diff --git a/mainwindow.cpp b/mainwindow.cpp index 6d8bb42..77219d5 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -627,6 +627,7 @@ void MainWindow::showMarkFilesDialog() void MainWindow::showSettingsDialog() { SettingsDialog settingsDialog(this); + connect(&settingsDialog, &SettingsDialog::preloadChanged, m_ringList, &ImageRingList::setPreload); settingsDialog.exec(); } diff --git a/settingsdialog.cpp b/settingsdialog.cpp index 6ff969a..4295399 100644 --- a/settingsdialog.cpp +++ b/settingsdialog.cpp @@ -92,4 +92,6 @@ void SettingsDialog::saveSettings() settings.setValue("settings/preloadimagecount", m_preloadImages->value()); settings.setValue("settings/dontusenativedialogs", m_useNativeDialog->isChecked()); QApplication::setAttribute(Qt::AA_DontUseNativeDialogs, m_useNativeDialog->isChecked()); + if(DEFAULT_WIDTH != m_preloadImages->value()) + emit preloadChanged(m_preloadImages->value()); } diff --git a/settingsdialog.h b/settingsdialog.h index b3a90a2..e7736ed 100644 --- a/settingsdialog.h +++ b/settingsdialog.h @@ -12,6 +12,8 @@ public: explicit SettingsDialog(QWidget *parent = nullptr); static void loadSettings(); static bool loadThumbsizes(); +signals: + void preloadChanged(int witdth); private: void saveSettings();