Added progress bar to file scanning operation and a message box
authorMikko Keinänen <mikko.keinanen@gmail.com>
Tue, 26 Oct 2010 23:32:26 +0000 (02:32 +0300)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Tue, 26 Oct 2010 23:32:26 +0000 (02:32 +0300)
notifying the operation ending.

src/dialogs/mediaimagepathmaindialog.cpp
src/utils/fileutil.cpp
src/utils/fileutil.h

index 4317f41..da3595e 100644 (file)
@@ -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)
index 2b40478..c2132ef 100644 (file)
@@ -20,6 +20,7 @@
 #include <QDir>
 #include <QDebug>
 #include <QProcess>
+#include <QProgressDialog>
 #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<MediaImageContainer*> 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);
index 88f1f14..72124e9 100644 (file)
@@ -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);