Add thumbnails
This commit is contained in:
+50
-4
@@ -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 ¤tFile)
|
||||
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 ¤tFile
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user