Add slideshow
This commit is contained in:
@@ -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 ¤tFile)
|
void ImageRingList::setFiles(const QStringList files, const QString ¤tFile)
|
||||||
{
|
{
|
||||||
QThreadPool::globalInstance()->clear();
|
QThreadPool::globalInstance()->clear();
|
||||||
|
|||||||
+4
-2
@@ -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 ¤tFile = QString());
|
bool setDir(const QString path, const QString ¤tFile = 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 ¤tFile = QString());
|
void setFiles(const QStringList files, const QString ¤tFile = QString());
|
||||||
QList<ImagePtr>::iterator increment(QList<ImagePtr>::iterator iter);
|
QList<ImagePtr>::iterator increment(QList<ImagePtr>::iterator iter);
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user