Explorar o código

Changed behaviour of progress dialog on import

Still WIP, but better suits the background processing
Marco Nolden %!s(int64=13) %!d(string=hai) anos
pai
achega
1ccad5b78f
Modificáronse 1 ficheiros con 12 adicións e 9 borrados
  1. 12 9
      Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp

+ 12 - 9
Libs/DICOM/Widgets/ctkDICOMAppWidget.cpp

@@ -424,30 +424,33 @@ void ctkDICOMAppWidget::onImportDirectory(QString directory)
       {
       targetDirectory = d->DICOMDatabase->databaseDirectory();
       }
-    QProgressDialog progress("DICOM Import", "Cancel", 0, 100, this,
+    QProgressDialog* progress = new QProgressDialog("DICOM Import", "Cancel", 0, 100, this,
                            Qt::WindowTitleHint | Qt::WindowSystemMenuHint);
     // We don't want the progress dialog to resize itself, so we bypass the label
     // by creating our own
     QLabel* progressLabel = new QLabel(tr("Initialization..."));
-    progress.setLabel(progressLabel);
+    progress->setLabel(progressLabel);
 #ifdef Q_WS_MAC
     // BUG: avoid deadlock of dialogs on mac
-    progress.setWindowModality(Qt::NonModal);
+    progress->setWindowModality(Qt::NonModal);
 #else
-    progress.setWindowModality(Qt::ApplicationModal);
+    progress->setWindowModality(Qt::ApplicationModal);
 #endif
-    progress.setMinimumDuration(0);
-    progress.setValue(0);
-    progress.show();
+    progress->setMinimumDuration(0);
+    progress->setValue(0);
+    progress->show();
 
-    connect(&progress, SIGNAL(canceled()), d->DICOMIndexer.data(), SLOT(cancel()));
+    connect(progress, SIGNAL(canceled()), d->DICOMIndexer.data(), SLOT(cancel()));
     connect(d->DICOMIndexer.data(), SIGNAL(indexingFilePath(QString)),
             progressLabel, SLOT(setText(QString)));
     connect(d->DICOMIndexer.data(), SIGNAL(progress(int)),
-            &progress, SLOT(setValue(int)));
+            progress, SLOT(setValue(int)));
     connect(d->DICOMIndexer.data(), SIGNAL(progress(int)),
             this, SLOT(onProgress(int)));
 
+    connect(d->DICOMIndexer.data(), SIGNAL(indexingComplete()),
+            progress, SLOT(close()));
+
     d->DICOMIndexer->addDirectory(*d->DICOMDatabase,directory,targetDirectory);
 
     d->DICOMModel.reset();