|
AlbumShaper
1.0a3
|
#include <addPhotosDialog.h>


Public Member Functions | |
| GeneratePreviewThread (FilePreview *previewWidget) | |
| void | start (QString filename) |
| virtual void | run () |
Private Attributes | |
| QString | filename |
| current file being processed | |
| FilePreview * | previewWidget |
| handle on preview widget necessary for posting an update event once the current file has been processed | |
| bool | updating |
| is the worker thread currently generating a file preview? | |
| QString | queue |
| next file to be processed by worker thread | |
| QMutex | lockingMutex |
| locking mutex - necessary to prevent multiple threads from accessing the updating bool or queue variable simultaniously | |
Definition at line 29 of file addPhotosDialog.h.
| GeneratePreviewThread::GeneratePreviewThread | ( | FilePreview * | previewWidget | ) |
Definition at line 60 of file addPhotosDialog.cpp.
References previewWidget, queue, and updating.
{
//we'll need to store a previewWidget handle to
//posting update events when updates are
//ready to be shown
this->previewWidget = previewWidget;
//by default worker thread isn't busy yet
updating = false;
queue = QString::null;
}
| void GeneratePreviewThread::run | ( | ) | [virtual] |
Definition at line 94 of file addPhotosDialog.cpp.
References filename, getImageSize(), lockingMutex, MIN_HEIGHT, MIN_WIDTH, previewWidget, queue, scaleImage(), and updating.
{
//since it is possible for another job
//to be added to the queue while processing this one, it is necessary
//to loop until the queue is empty
while(true)
{
//------------------------------------------
//Get image type extension and convert to caps
QString extension = QFileInfo(filename).extension(false).upper();
bool validExtension = ( (extension.compare("GIF") == 0) ||
(extension.compare("JPG") == 0) ||
(extension.compare("JPEG") == 0) ||
(extension.compare("PNG") == 0) ||
(extension.compare("XPM") == 0) );
//------------------------------------------
//Scale the image to fit nicely on the screen, aka < 300x225
QImage scaledImage;
if( validExtension )
{
scaleImage(filename, scaledImage, MIN_WIDTH, MIN_HEIGHT );
}
//------------------------------------------
//Get image resolution
QString imageRes = "";
if(validExtension)
{
QSize res;
getImageSize( filename, res );
imageRes = QString("%1 x %2").arg(res.width()).arg(res.height());
}
//------------------------------------------
//Determine file size and construct a nicely formatted size string
QString fileSize = "?";
QFileInfo info;
info.setFile( filename );
int sizeOnDisk = info.size();
if(sizeOnDisk < 1024)
fileSize = QString("%1 Byte%2").arg(sizeOnDisk).arg( sizeOnDisk == 0 || sizeOnDisk > 1 ? "s" : "");
else if( sizeOnDisk/1024 < 1024)
// fileSize = QString("%1 Kb").arg( ((float)*sizeOnDisk)/1024 );
fileSize = QString("%1 Kb").arg( ((float)((100*sizeOnDisk)/1024))/100 );
else if( sizeOnDisk/(1024*1024) < 1024)
fileSize = QString("%1 Mb").arg( ((float)((100*sizeOnDisk)/(1024*1024)))/100 );
else
fileSize = QString("%1 Gigs").arg( ((float)((100*sizeOnDisk)/(1024*1024*1024)))/100 );
//------------------------------------------
//Setup image details string
QString fileDetails = QString("%1 %2, %3")
.arg(imageRes)
.arg(extension)
.arg(fileSize);
//------------------------------------------
//Post UPDATE_PREVIEW_DETAILS event
UpdatePreviewEvent* upe = new UpdatePreviewEvent( scaledImage, fileDetails );
QApplication::postEvent( previewWidget, upe );
//------------------------------------------
//get lock
lockingMutex.lock();
//if the queue is empty we're done!
if( queue.isNull() )
{
updating = false;
lockingMutex.unlock();
return;
}
//clear queue and process pending job
else
{
filename = queue;
queue = QString::null;
lockingMutex.unlock();
}
} //end while(true)
}
| void GeneratePreviewThread::start | ( | QString | filename | ) |
Definition at line 72 of file addPhotosDialog.cpp.
References filename, lockingMutex, queue, and updating.
Referenced by FilePreview::updatePreview().
{
//get lock
lockingMutex.lock();
//if currently animating then append job to queue
if(updating)
{
queue = filename;
lockingMutex.unlock();
return;
}
//else set animating to true, actually initiate job
else
{
updating = true;
this->filename = filename;
lockingMutex.unlock();
QThread::start();
}
}
QString GeneratePreviewThread::filename [private] |
current file being processed
Definition at line 38 of file addPhotosDialog.h.
QMutex GeneratePreviewThread::lockingMutex [private] |
locking mutex - necessary to prevent multiple threads from accessing the updating bool or queue variable simultaniously
Definition at line 52 of file addPhotosDialog.h.
FilePreview* GeneratePreviewThread::previewWidget [private] |
handle on preview widget necessary for posting an update event once the current file has been processed
Definition at line 42 of file addPhotosDialog.h.
Referenced by GeneratePreviewThread(), and run().
QString GeneratePreviewThread::queue [private] |
next file to be processed by worker thread
Definition at line 48 of file addPhotosDialog.h.
Referenced by GeneratePreviewThread(), run(), and start().
bool GeneratePreviewThread::updating [private] |
is the worker thread currently generating a file preview?
Definition at line 45 of file addPhotosDialog.h.
Referenced by GeneratePreviewThread(), run(), and start().
1.7.5.1