From 47463dc67e645689464048385bd0b4418d39cb91 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mikko=20Kein=C3=A4nen?= Date: Wed, 27 Oct 2010 02:32:26 +0300 Subject: [PATCH] Added progress bar to file scanning operation and a message box notifying the operation ending. --- src/dialogs/mediaimagepathmaindialog.cpp | 16 +++++++++++++--- src/utils/fileutil.cpp | 11 ++++++++++- src/utils/fileutil.h | 3 ++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/dialogs/mediaimagepathmaindialog.cpp b/src/dialogs/mediaimagepathmaindialog.cpp index 4317f41..da3595e 100644 --- a/src/dialogs/mediaimagepathmaindialog.cpp +++ b/src/dialogs/mediaimagepathmaindialog.cpp @@ -40,6 +40,7 @@ MediaImagePathMainDialog::MediaImagePathMainDialog(QWidget *parent) initEditDialog(); objectList->hideColumn(DbFilePath::FilePath_Id); objectList->hideColumn(DbFilePath::FilePath_SetupId); + // do not move to parent class: connectSignals(); } @@ -68,10 +69,19 @@ void MediaImagePathMainDialog::beginScanFilePath() QStringList l; l << "*.zip"; // TODO set filters in a global constant class - dbMediaImageContainer->removeFromFilePath(fpo->getId()); - int count = fileUtil.scanFilePath(fpo, l, dbMediaImageContainer); - qDebug() << "Storing scanned " << count << " files to database"; + + QProgressDialog progressDialog(this); + progressDialog.setWindowTitle("Scanning files..."); + progressDialog.setCancelButtonText("Abort"); + progressDialog.setWindowModality(Qt::WindowModal); + progressDialog.show(); + + int count = fileUtil.scanFilePath(fpo, l, dbMediaImageContainer, progressDialog); + progressDialog.hide(); + QMessageBox msgBox; + msgBox.setText(tr("Scanned %1 files to database.").arg(count)); + msgBox.exec(); delete fpo; } catch (EmuFrontException s) diff --git a/src/utils/fileutil.cpp b/src/utils/fileutil.cpp index 2b40478..c2132ef 100644 --- a/src/utils/fileutil.cpp +++ b/src/utils/fileutil.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include "fileutil.h" #include "zlib.h" /* crc32 */ #include "../exceptions/emufrontexception.h" @@ -43,7 +44,9 @@ FileUtil::~FileUtil() } /* Throws EmuFrontException */ -int FileUtil::scanFilePath(FilePathObject *fp, QStringList filters, DbMediaImageContainer *dbMic) +int FileUtil::scanFilePath(FilePathObject *fp, + QStringList filters, DbMediaImageContainer *dbMic, + QProgressDialog &progressDialog) { if (!fp->getSetup()){ throw EmuFrontException(tr("Setup not available with %1.").arg(fp->getName())); @@ -75,8 +78,13 @@ int FileUtil::scanFilePath(FilePathObject *fp, QStringList filters, DbMediaImage // TODO: only a buffer of objects should be kept here, // and write to database each time the buffer is filled. QList containers; + progressDialog.setMinimum(0); + progressDialog.setMaximum(list.size()); for (int i = 0; i < list.size(); ++i) { + progressDialog.setValue(i); + if (progressDialog.wasCanceled()) + break; QFileInfo fileInfo = list.at(i); qDebug() << QString("%1 %2").arg(fileInfo.size(), 10).arg(fileInfo.absoluteFilePath()); @@ -110,6 +118,7 @@ int FileUtil::scanFilePath(FilePathObject *fp, QStringList filters, DbMediaImage qDebug() << "We have " << containers.size() << " containers."; } } + progressDialog.setValue(list.size()); if (containers.count() > 0) { qDebug() << "Storing the rest " << containers.count() << " containers."; dbMic->storeContainers(containers, fp); diff --git a/src/utils/fileutil.h b/src/utils/fileutil.h index 88f1f14..72124e9 100644 --- a/src/utils/fileutil.h +++ b/src/utils/fileutil.h @@ -31,13 +31,14 @@ class MediaImageContainer; class MediaImage; class DbMediaImageContainer; class UnzipHelper; +class QProgressDialog; class FileUtil : QObject { public: FileUtil(QObject *parent); ~FileUtil(); - int scanFilePath(FilePathObject *fpo, const QStringList filters, DbMediaImageContainer *mic); + int scanFilePath(FilePathObject *fpo, const QStringList filters, DbMediaImageContainer *mic, QProgressDialog &); private: char *buf; quint32 readCrc32(QString filePath); -- 1.7.9.5