X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=vv%2FvvToolStructureSetManager.cxx;h=16d53cb91cce2c0bcf8d5ed9dfe10c7e2bf693aa;hb=573d80d0f7a17607d2ee883c21c940c0ba020282;hp=c9e336884b65bb746c5808f3723ae05ba4c49368;hpb=e511e2ba1150ea6d29247a0912ae5efca22415e8;p=clitk.git diff --git a/vv/vvToolStructureSetManager.cxx b/vv/vvToolStructureSetManager.cxx index c9e3368..16d53cb 100644 --- a/vv/vvToolStructureSetManager.cxx +++ b/vv/vvToolStructureSetManager.cxx @@ -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 #include #include - +#include + // vtk #include #include @@ -41,7 +42,6 @@ ADD_TOOL(vvToolStructureSetManager); int vvToolStructureSetManager::m_NumberOfTool = 0; std::vector vvToolStructureSetManager::mListOfInputs; std::map 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 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::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 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;