Add thumbnails

This commit is contained in:
2022-04-18 07:16:46 +02:00
parent 2c95364fc4
commit 4e6230eef2
14 changed files with 347 additions and 39 deletions
+50 -4
View File
@@ -8,10 +8,11 @@ using namespace std;
const int DEFAULT_WIDTH = 2;
Image::Image(const QString name, ImageRingList *ringList) :
Image::Image(const QString name, int number, ImageRingList *ringList) :
m_loading(false),
m_released(true),
m_current(false),
m_number(number),
m_name(name),
m_ringList(ringList)
{
@@ -29,6 +30,14 @@ void Image::load()
emit pixmapLoaded(this);
}
void Image::loadThumbnail()
{
if(!m_thumbnail)
QThreadPool::globalInstance()->start(new LoadRunable(m_name, this, AnalyzeLevel::None, true));
else
emit thumbnailLoaded(this);
}
void Image::release()
{
m_rawImage.reset();
@@ -46,6 +55,11 @@ RawImage *Image::rawImage()
return m_rawImage.get();
}
const RawImage *Image::thumbnail() const
{
return m_thumbnail.get();
}
ImageInfoData Image::info() const
{
return m_info;
@@ -56,6 +70,11 @@ bool Image::isCurrent() const
return !m_released;
}
int Image::number() const
{
return m_number;
}
void Image::imageLoaded(void *rawImage, ImageInfoData info)
{
m_loading = false;
@@ -71,6 +90,13 @@ void Image::imageLoaded(void *rawImage, ImageInfoData info)
}
}
void Image::thumbnailLoadFinish(void *rawImage)
{
m_thumbnail.reset(static_cast<RawImage*>(rawImage));
if(m_thumbnail)
emit thumbnailLoaded(this);
}
ImageRingList::ImageRingList(QObject *parent) : QAbstractItemModel(parent)
, m_liveMode(false)
, m_analyzeLevel(None)
@@ -93,7 +119,7 @@ bool ImageRingList::setDir(const QString path, const QString &currentFile)
QStringList nameFilter;
nameFilter << "*.jpg" << "*.jpeg" << "*.png" << "*.cr2" << "*.fit" << "*.fits" << "*.xisf";
QStringList list = dir.entryList(nameFilter, QDir::Files | QDir::Readable, m_liveMode ? QDir::Time : QDir::Name);
QStringList list = dir.entryList(nameFilter, QDir::Files | QDir::Readable, m_liveMode ? QDir::Time : QDir::Name | QDir::IgnoreCase);
QStringList absolutePaths;
foreach(const QString &file, list)
{
@@ -209,6 +235,24 @@ void ImageRingList::loadFile(int row)
}
}
void ImageRingList::loadThumbnails()
{
for(auto &img : m_images)
{
img->loadThumbnail();
}
}
void ImageRingList::stopLoading()
{
QThreadPool::globalInstance()->clear();
}
int ImageRingList::imageCount() const
{
return m_images.size();
}
QModelIndex ImageRingList::index(int row, int column, const QModelIndex &parent) const
{
return createIndex(row, column, m_images.at(row).get());
@@ -261,10 +305,12 @@ void ImageRingList::setFiles(const QStringList files, const QString &currentFile
QThreadPool::globalInstance()->waitForDone();
beginResetModel();
m_images.clear();
foreach(const QString &file, files)
int i = 0;
for(const QString &file : files)
{
ImagePtr ptr = make_shared<Image>(file, this);
ImagePtr ptr = make_shared<Image>(file, i++, this);
connect(ptr.get(), SIGNAL(pixmapLoaded(Image*)), this, SLOT(imageLoaded(Image*)));
connect(ptr.get(), SIGNAL(thumbnailLoaded(Image*)), this, SIGNAL(thumbnailLoaded(Image*)));
m_images.append(ptr);
}