Add slideshow

This commit is contained in:
2024-01-05 13:36:06 +01:00
parent 7818b8d3e9
commit da9b389409
5 changed files with 39 additions and 3 deletions
+22
View File
@@ -1,6 +1,8 @@
#include "imageringlist.h" #include "imageringlist.h"
#include <QThreadPool> #include <QThreadPool>
#include <QDir> #include <QDir>
#include <QSettings>
#include <QTimer>
#include "loadrunable.h" #include "loadrunable.h"
#include "rawimage.h" #include "rawimage.h"
#include "database.h" #include "database.h"
@@ -108,6 +110,9 @@ ImageRingList::ImageRingList(Database *database, const QStringList &nameFilter,
connect(&m_fileSystemWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(dirChanged(QString))); connect(&m_fileSystemWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(dirChanged(QString)));
m_nameFilter.replaceInStrings(QRegularExpression("^"), "*."); m_nameFilter.replaceInStrings(QRegularExpression("^"), "*.");
m_thumbPool = new QThreadPool(this); m_thumbPool = new QThreadPool(this);
m_slideShowTimer = new QTimer(this);
connect(m_slideShowTimer, &QTimer::timeout, this, static_cast<void (ImageRingList::*)()>(&ImageRingList::increment));
} }
ImageRingList::~ImageRingList() ImageRingList::~ImageRingList()
@@ -295,11 +300,13 @@ void ImageRingList::clearThumbnails()
QModelIndex ImageRingList::index(int row, int column, const QModelIndex &parent) const QModelIndex ImageRingList::index(int row, int column, const QModelIndex &parent) const
{ {
Q_UNUSED(parent);
return createIndex(row, column, m_images.at(row).get()); return createIndex(row, column, m_images.at(row).get());
} }
QModelIndex ImageRingList::parent(const QModelIndex &child) const QModelIndex ImageRingList::parent(const QModelIndex &child) const
{ {
Q_UNUSED(child);
return QModelIndex(); return QModelIndex();
} }
@@ -313,6 +320,7 @@ int ImageRingList::rowCount(const QModelIndex &parent) const
int ImageRingList::columnCount(const QModelIndex &parent) const int ImageRingList::columnCount(const QModelIndex &parent) const
{ {
Q_UNUSED(parent);
return 1; return 1;
} }
@@ -398,6 +406,20 @@ void ImageRingList::reverseSort()
} }
} }
void ImageRingList::toggleSlideshow(bool start)
{
if(start)
{
QSettings settings;
int time = settings.value("settings/slideshowtime", 1.0).toDouble() * 1000;
m_slideShowTimer->start(time);
}
else
{
m_slideShowTimer->stop();
}
}
void ImageRingList::setFiles(const QStringList files, const QString &currentFile) void ImageRingList::setFiles(const QStringList files, const QString &currentFile)
{ {
QThreadPool::globalInstance()->clear(); QThreadPool::globalInstance()->clear();
+4 -2
View File
@@ -65,14 +65,13 @@ class ImageRingList : public QAbstractItemModel
QThreadPool *m_thumbPool; QThreadPool *m_thumbPool;
Database *m_database; Database *m_database;
QStringList m_nameFilter; QStringList m_nameFilter;
QTimer *m_slideShowTimer;
public: public:
explicit ImageRingList(Database *database, const QStringList &nameFilter, QObject *parent = 0); explicit ImageRingList(Database *database, const QStringList &nameFilter, QObject *parent = 0);
~ImageRingList() override; ~ImageRingList() override;
bool setDir(const QString path, const QString &currentFile = QString()); bool setDir(const QString path, const QString &currentFile = QString());
void setFile(const QString &file); void setFile(const QString &file);
ImagePtr currentImage(); ImagePtr currentImage();
void increment();
void decrement();
void setLiveMode(bool live); void setLiveMode(bool live);
void setCalculateStats(bool stats); void setCalculateStats(bool stats);
void setFindPeaks(bool findPeaks); void setFindPeaks(bool findPeaks);
@@ -96,6 +95,9 @@ public slots:
void setPreload(int width); void setPreload(int width);
void setSort(QDir::SortFlag sort); void setSort(QDir::SortFlag sort);
void reverseSort(); void reverseSort();
void toggleSlideshow(bool start);
void increment();
void decrement();
protected: protected:
void setFiles(const QStringList files, const QString &currentFile = QString()); void setFiles(const QStringList files, const QString &currentFile = QString());
QList<ImagePtr>::iterator increment(QList<ImagePtr>::iterator iter); QList<ImagePtr>::iterator increment(QList<ImagePtr>::iterator iter);
+2
View File
@@ -181,6 +181,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
else m_ringList->stopLoading(); else m_ringList->stopLoading();
}, Qt::Key_F2); }, Qt::Key_F2);
thumbnailsAction->setCheckable(true); thumbnailsAction->setCheckable(true);
QAction *slideshowAction = viewMenu->addAction(tr("Slideshow"), m_ringList, &ImageRingList::toggleSlideshow, Qt::Key_F3);
slideshowAction->setCheckable(true);
menuBar()->addMenu(viewMenu); menuBar()->addMenu(viewMenu);
QMenu *selectMenu = new QMenu(tr("Select"), this); QMenu *selectMenu = new QMenu(tr("Select"), this);
+10 -1
View File
@@ -57,6 +57,13 @@ SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent)
m_saturation->setValue(settings.value("settings/saturation", SATURATION * 100.0).toDouble()); m_saturation->setValue(settings.value("settings/saturation", SATURATION * 100.0).toDouble());
m_saturation->setToolTip(tr("Set threshold value that is considered saturated when showing statistics.\nFor RAW files you may set 22%")); m_saturation->setToolTip(tr("Set threshold value that is considered saturated when showing statistics.\nFor RAW files you may set 22%"));
m_slideShowTime = new QDoubleSpinBox(this);
m_slideShowTime->setMinimum(0.01);
m_slideShowTime->setMaximum(10);
m_slideShowTime->setSuffix(" s");
m_slideShowTime->setValue(settings.value("settings/slideshowtime", 1.0).toDouble());
m_slideShowTime->setSingleStep(0.1);
//m_slideShowTime->setStepType(QAbstractSpinBox::AdaptiveDecimalStepType);
m_useNativeDialog = new QCheckBox(tr("Don't use native file dialog"), this); m_useNativeDialog = new QCheckBox(tr("Don't use native file dialog"), this);
m_useNativeDialog->setChecked(QApplication::testAttribute(Qt::AA_DontUseNativeDialogs)); m_useNativeDialog->setChecked(QApplication::testAttribute(Qt::AA_DontUseNativeDialogs));
@@ -67,8 +74,9 @@ SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent)
layout->addRow(tr("Image preload count"), m_preloadImages); layout->addRow(tr("Image preload count"), m_preloadImages);
layout->addRow(tr("Thumbnails size"), m_thumSize); layout->addRow(tr("Thumbnails size"), m_thumSize);
layout->addRow(tr("Saturation"), m_saturation); layout->addRow(tr("Saturation"), m_saturation);
layout->addRow(m_useNativeDialog); layout->addRow(tr("Slideshow interval"), m_slideShowTime);
layout->addRow(tr("Image filtering"), m_filtering); layout->addRow(tr("Image filtering"), m_filtering);
layout->addRow(m_useNativeDialog);
//layout->addRow(new QLabel(tr("Changes in settings will take effect after program restart."))); //layout->addRow(new QLabel(tr("Changes in settings will take effect after program restart.")));
QDialogButtonBox *buttonBox = new QDialogButtonBox(this); QDialogButtonBox *buttonBox = new QDialogButtonBox(this);
@@ -109,6 +117,7 @@ void SettingsDialog::saveSettings()
settings.setValue("settings/preloadimagecount", m_preloadImages->value()); settings.setValue("settings/preloadimagecount", m_preloadImages->value());
settings.setValue("settings/dontusenativedialogs", m_useNativeDialog->isChecked()); settings.setValue("settings/dontusenativedialogs", m_useNativeDialog->isChecked());
settings.setValue("settings/saturation", m_saturation->value()); settings.setValue("settings/saturation", m_saturation->value());
settings.setValue("settings/slideshowtime", m_slideShowTime->value());
FILTERING = m_filtering->currentIndex(); FILTERING = m_filtering->currentIndex();
settings.setValue("settings/filtering", FILTERING); settings.setValue("settings/filtering", FILTERING);
SATURATION = m_saturation->value() / 100.0; SATURATION = m_saturation->value() / 100.0;
+1
View File
@@ -20,6 +20,7 @@ private:
QSpinBox *m_preloadImages; QSpinBox *m_preloadImages;
QSpinBox *m_thumSize; QSpinBox *m_thumSize;
QDoubleSpinBox *m_slideShowTime;
QDoubleSpinBox *m_saturation; QDoubleSpinBox *m_saturation;
QCheckBox *m_useNativeDialog; QCheckBox *m_useNativeDialog;
QComboBox *m_filtering; QComboBox *m_filtering;