]> Creatis software - clitk.git/blobdiff - vv/vvThreadedFilter.cxx
itkv4 migration:
[clitk.git] / vv / vvThreadedFilter.cxx
index 839c4e0b125f0068a5a4808c57e0dc958be71e82..0a074f37e312b31ed4528224830a1d8d3ad40217 100644 (file)
@@ -27,7 +27,6 @@
 vvThreadedFilter::vvThreadedFilter():
   QThread()
 {
-  DD("vvThreadedFilter");
   m_Filter = NULL;
 }
 //------------------------------------------------------------------------------
@@ -43,7 +42,6 @@ vvThreadedFilter::~vvThreadedFilter()
 //------------------------------------------------------------------------------
 void vvThreadedFilter::SetFilter(clitk::ImageToImageGenericFilterBase * f)
 {
-  DD("SetFilter");
   m_Filter = f;
 }
 //------------------------------------------------------------------------------
@@ -56,13 +54,14 @@ void vvThreadedFilter::Update()
 
   // Show a progress bar while computing
   vvProgressDialog progress("Computing ...",100);
+  progress.SetCancelButtonEnabled(true);
   connect(&progress, SIGNAL(rejected()), this, SLOT(reject()));
   this->start();
   this->setTerminationEnabled(true);
   std::string temp;
   while (this->isRunning()) {
-    DD(this->isRunning());
-    m_FilterBase = m_Filter->GetFilterBase(); // get filterbase only after Update
+    // try {
+    m_FilterBase = m_Filter->GetFilterBase(); // get filterbase is only set after Update
     if (m_FilterBase != NULL) {
       progress.SetProgress(m_FilterBase->GetCurrentStepNumber(), 
                           m_FilterBase->GetNumberOfSteps());
@@ -71,10 +70,9 @@ void vvThreadedFilter::Update()
       }
       temp = m_FilterBase->GetCurrentStepName();
     }
-    this->wait(200); // in milisecond
+    this->wait(200); // in miliseconds
     qApp->processEvents();
   }
-  DD("after loop");
 }
 //------------------------------------------------------------------------------
 
@@ -83,7 +81,16 @@ void vvThreadedFilter::Update()
 void vvThreadedFilter::run()
 {
   assert(m_Filter != NULL);
-  m_Filter->Update();
+  try {
+    m_Filter->Update();
+  }
+  catch(clitk::ExceptionObject e) {
+    DD("vvThreadedFilter : exceptionobject handeled");
+    DD(e.what());
+    QApplication::restoreOverrideCursor();
+    QMessageBox::information(new QWidget, tr("Error"), e.what());  
+  }
+  DD("end RUN");
 }
 //------------------------------------------------------------------------------
 
@@ -91,12 +98,11 @@ void vvThreadedFilter::run()
 //------------------------------------------------------------------------------
 void vvThreadedFilter::reject()
 {
-  DD("vvThreadedFilter::reject");
-  this->quit();
-  // if (m_Filter != NULL) {
-//     m_Filter->MustStop();
-//   }
-  DD("after terminate");
+  // First, say the filter it must stop as soon as possible. We then
+  // wait that an exception occur in the main thread.
+  if (m_FilterBase != NULL) {
+    m_FilterBase->Cancel();
+  }
 }
 //------------------------------------------------------------------------------