]> Creatis software - clitk.git/blobdiff - vv/vvToolStructureSetManager.cxx
changes in license header
[clitk.git] / vv / vvToolStructureSetManager.cxx
index c9e336884b65bb746c5808f3723ae05ba4c49368..16d53cb91cce2c0bcf8d5ed9dfe10c7e2bf693aa 100644 (file)
@@ -3,7 +3,7 @@
 
   Authors belong to:
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
@@ -14,7 +14,7 @@
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-  ======================================================================-====*/
+  ===========================================================================**/
 
 // vv
 #include "vvToolStructureSetManager.h"
@@ -27,7 +27,8 @@
 #include <QFileDialog>
 #include <QMessageBox>
 #include <QColorDialog>
-
+#include <QAbstractEventDispatcher>
 // vtk
 #include <vtkLookupTable.h>
 #include <vtkRenderWindow.h>
@@ -41,7 +42,6 @@ ADD_TOOL(vvToolStructureSetManager);
 int vvToolStructureSetManager::m_NumberOfTool = 0;
 std::vector<vvSlicerManager*> vvToolStructureSetManager::mListOfInputs;
 std::map<vvSlicerManager*, vvToolStructureSetManager*> vvToolStructureSetManager::mListOfOpenTool;
-bool vvToolStructureSetManager::mDestroyed = false;
 
 //------------------------------------------------------------------------------
 vvToolStructureSetManager::vvToolStructureSetManager(vvMainWindowBase * parent, 
@@ -100,9 +100,15 @@ vvToolStructureSetManager::vvToolStructureSetManager(vvMainWindowBase * parent,
 //------------------------------------------------------------------------------
 vvToolStructureSetManager::~vvToolStructureSetManager()
 {
-  //std::cout << "vvToolStructureSetManager::~vvToolStructureSetManager()" << std::endl;
   m_NumberOfTool--;
-  mDestroyed=true;
+  
+  // clearing the list at this point avoids
+  // segfaulting due to events being dispatched
+  // after object destruction
+  mTreeWidgetList.clear();
+  mTree->clearSelection();
+
+  //std::cout << "vvToolStructureSetManager::~vvToolStructureSetManager()" << std::endl;
 }
 //------------------------------------------------------------------------------
 
@@ -255,7 +261,7 @@ void vvToolStructureSetManager::OpenBinaryImage()
     std::vector<std::string> filenames;
     filenames.push_back(filename[i].toStdString());
     reader->SetInputFilenames(filenames);
-    reader->Update(IMAGE);
+    reader->Update(vvImageReader::IMAGE);
     QApplication::restoreOverrideCursor();
 
     if (reader->GetLastError().size() != 0) {
@@ -362,6 +368,7 @@ void vvToolStructureSetManager::apply()
 bool vvToolStructureSetManager::close()
 {
   //std::cout << "vvToolStructureSetManager::close()" << std::endl;
+
   return vvToolWidgetBase::close();
 }
 //------------------------------------------------------------------------------
@@ -371,7 +378,6 @@ bool vvToolStructureSetManager::close()
 void vvToolStructureSetManager::closeEvent(QCloseEvent *event) 
 {
   //std::cout << "vvToolStructureSetManager::closeEvent()" << std::endl;
-  disconnect(mTree, SIGNAL(itemSelectionChanged()));
 
   std::vector<vvSlicerManager*>::iterator iter = std::find(mListOfInputs.begin(), mListOfInputs.end(), mCurrentSlicerManager);
   if (iter != mListOfInputs.end()) mListOfInputs.erase(iter);
@@ -403,16 +409,6 @@ void vvToolStructureSetManager::closeEvent(QCloseEvent *event)
 //------------------------------------------------------------------------------
 void vvToolStructureSetManager::SelectedItemChangedInTree() {
   
-  // ATTENTION:
-  //  RP - 05/04/2011
-  //  Horrible solution for the problem of triggering this event
-  // after the window has been closed and the object instance 
-  // has been destroyed. I couldn't find the place where the
-  // window is destroyed, though.
-  //
-  if (mDestroyed)
-    return;
-  
   // Search which roi is selected
   QList<QTreeWidgetItem *> l = mTree->selectedItems();
   if (l.size() == 0) {
@@ -597,7 +593,7 @@ void vvToolStructureSetManager::ReloadCurrentROI() {
   // Reload image
   vvImageReader::Pointer reader = vvImageReader::New();
   reader->SetInputFilename(mCurrentROI->GetFilename());
-  reader->Update(IMAGE);
+  reader->Update(vvImageReader::IMAGE);
   if (reader->GetLastError() != "") {
     QMessageBox::information(mMainWindowBase, tr("Sorry, error. Could not reload"), reader->GetLastError().c_str());
     return;