13#include <q3filedialog.h>
23#include <qapplication.h>
25#include <Q3GridLayout>
26#include <QCustomEvent>
36#define UPDATE_PREVIEW_DETAILS QEvent::User
72 queue = QString::null;
106 QString extension = QFileInfo(
filename).extension(
false).upper();
107 bool validExtension = ( (extension.compare(
"GIF") == 0) ||
108 (extension.compare(
"JPG") == 0) ||
109 (extension.compare(
"JPEG") == 0) ||
110 (extension.compare(
"PNG") == 0) ||
111 (extension.compare(
"XPM") == 0) );
121 QString imageRes =
"";
126 imageRes = QString(
"%1 x %2").arg(res.width()).arg(res.height());
130 QString fileSize =
"?";
133 int sizeOnDisk = info.size();
135 if(sizeOnDisk < 1024)
136 fileSize = QString(
"%1 Byte%2").arg(sizeOnDisk).arg( sizeOnDisk == 0 || sizeOnDisk > 1 ?
"s" :
"");
137 else if( sizeOnDisk/1024 < 1024)
139 fileSize = QString(
"%1 Kb").arg( ((
float)((100*sizeOnDisk)/1024))/100 );
140 else if( sizeOnDisk/(1024*1024) < 1024)
141 fileSize = QString(
"%1 Mb").arg( ((
float)((100*sizeOnDisk)/(1024*1024)))/100 );
143 fileSize = QString(
"%1 Gigs").arg( ((
float)((100*sizeOnDisk)/(1024*1024*1024)))/100 );
146 QString fileDetails = QString(
"%1 %2, %3")
169 queue = QString::null;
182 Q3GridLayout* grid =
new Q3GridLayout(
this, 4, 3 );
183 grid->setRowStretch( 0, 1 );
184 grid->addWidget(
filePreview, 1, 1, Qt::AlignHCenter );
185 grid->addWidget(
fileDetails, 2, 1, Qt::AlignHCenter );
186 grid->setRowStretch( 3, 1 );
188 grid->setColStretch( 0, 1 );
189 grid->setColStretch( 2, 1 );
206 QFontMetrics fm( font() );
220 QPixmap scaledPixmap;
221 scaledPixmap.convertFromImage( upe->
getImage() );
243 tr(
"Images") +
" (*.gif *.jpg *.jpeg *.png *.xpm *.GIF *.JPG *.JPEG *.PNG *.XPM)",
247 setMode( Q3FileDialog::ExistingFiles );
248 setViewMode( Q3FileDialog::List );
251 setContentsPreviewEnabled(
true );
253 setPreviewMode( Q3FileDialog::Contents );
257 setDescriptions =
new QCheckBox( tr(
"Use filenames for descriptions."),
this );
262 setCaption( tr(
"Add Photos") );
264 connect(
this, SIGNAL( fileHighlighted(
const QString&)),
270 if( exec() == QDialog::Accepted )
273 return selectedFiles();
275 else {
return QStringList(); }
#define UPDATE_PREVIEW_DETAILS
FilePreview * filePreview
Used to preview selected files.
AddPhotosDialog(QString path, QWidget *parent=0, const char *name=0)
QCheckBox * setDescriptions
Checkbox asking if filenames should be used to set image descriptions.
void updatePreview(const QString &filename)
handle the user selecting items by updating the file preview fields
QStringList getFilenames(bool &setDescriptions)
returns the list of selected filenames, while setting setDescritions to the state the checkbox was le...
void customEvent(QCustomEvent *e)
handle update events that come from the GeneratePreviewThread
QLabel * fileDetails
details about last selected file
QLabel * filePreview
preview of last selected file
QSize minimumSizeHint() const
GeneratePreviewThread * generatorThread
a worker thread that actually generates the file preview image and details information that is displa...
FilePreview(QWidget *parent=0)
void updatePreview(const QString &path)
call this function to update the file preview
GeneratePreviewThread(FilePreview *previewWidget)
void start(QString filename)
bool updating
is the worker thread currently generating a file preview?
QMutex lockingMutex
locking mutex - necessary to prevent multiple threads from accessing the updating bool or queue varia...
FilePreview * previewWidget
handle on preview widget necessary for posting an update event once the current file has been process...
QString filename
current file being processed
QString queue
next file to be processed by worker thread
UpdatePreviewEvent(QImage image, QString details)
QString getDetails() const