Index: mitk/CoreUI/Qmitk/QmitkDataStorageComboBox.cpp =================================================================== --- mitk/CoreUI/Qmitk/QmitkDataStorageComboBox.cpp (revision 19915) +++ mitk/CoreUI/Qmitk/QmitkDataStorageComboBox.cpp (working copy) @@ -29,6 +29,18 @@ QmitkDataStorageComboBox::~QmitkDataStorageComboBox() { + // if there was an old storage, remove listeners + if(m_DataStorage.IsNotNull()) + { + this->m_DataStorage->AddNodeEvent.RemoveListener( mitk::MessageDelegate1( this, &QmitkDataStorageComboBox::AddNode ) ); + + this->m_DataStorage->RemoveNodeEvent.RemoveListener( mitk::MessageDelegate1( this, &QmitkDataStorageComboBox::RemoveNode ) ); + } + + while(m_Nodes.size() > 0) + RemoveNode(0); } //#PUBLIC GETTER Index: mitk/CoreUI/Qmitk/QmitkStdMultiWidget.cpp =================================================================== --- mitk/CoreUI/Qmitk/QmitkStdMultiWidget.cpp (revision 19915) +++ mitk/CoreUI/Qmitk/QmitkStdMultiWidget.cpp (working copy) @@ -407,10 +407,13 @@ { if (m_PlaneNode1.IsNotNull() && m_PlaneNode2.IsNotNull() && m_PlaneNode3.IsNotNull() && m_Node.IsNotNull()) { - m_DataStorage->Remove(m_PlaneNode1); - m_DataStorage->Remove(m_PlaneNode2); - m_DataStorage->Remove(m_PlaneNode3); - m_DataStorage->Remove(m_Node); + if(m_DataStorage.IsNotNull()) + { + m_DataStorage->Remove(m_PlaneNode1); + m_DataStorage->Remove(m_PlaneNode2); + m_DataStorage->Remove(m_PlaneNode3); + m_DataStorage->Remove(m_Node); + } } } Index: mitk/Modules/QmitkExt/QmitkSlicesInterpolator.cpp =================================================================== --- mitk/Modules/QmitkExt/QmitkSlicesInterpolator.cpp (revision 19915) +++ mitk/Modules/QmitkExt/QmitkSlicesInterpolator.cpp (working copy) @@ -173,12 +173,14 @@ { itk::MemberCommand::Pointer command = itk::MemberCommand::New(); command->SetCallbackFunction( this, &QmitkSlicesInterpolator::OnTransversalTimeChanged ); + slicer->RemoveObserver(TTimeObserverTag); TTimeObserverTag = slicer->AddObserver( mitk::SliceNavigationController::GeometryTimeEvent(NULL, 0), command ); } { itk::ReceptorMemberCommand::Pointer command = itk::ReceptorMemberCommand::New(); command->SetCallbackFunction( this, &QmitkSlicesInterpolator::OnTransversalSliceChanged ); + slicer->RemoveObserver(TSliceObserverTag); TSliceObserverTag = slicer->AddObserver( mitk::SliceNavigationController::GeometrySliceEvent(NULL, 0), command ); } @@ -188,12 +190,14 @@ { itk::MemberCommand::Pointer command = itk::MemberCommand::New(); command->SetCallbackFunction( this, &QmitkSlicesInterpolator::OnSagittalTimeChanged ); + slicer->RemoveObserver(STimeObserverTag); STimeObserverTag = slicer->AddObserver( mitk::SliceNavigationController::GeometryTimeEvent(NULL, 0), command ); } { itk::ReceptorMemberCommand::Pointer command = itk::ReceptorMemberCommand::New(); command->SetCallbackFunction( this, &QmitkSlicesInterpolator::OnSagittalSliceChanged ); + slicer->RemoveObserver(SSliceObserverTag); SSliceObserverTag = slicer->AddObserver( mitk::SliceNavigationController::GeometrySliceEvent(NULL, 0), command ); } @@ -203,12 +207,14 @@ { itk::MemberCommand::Pointer command = itk::MemberCommand::New(); command->SetCallbackFunction( this, &QmitkSlicesInterpolator::OnFrontalTimeChanged ); + slicer->RemoveObserver(FTimeObserverTag); FTimeObserverTag = slicer->AddObserver( mitk::SliceNavigationController::GeometryTimeEvent(NULL, 0), command ); } { itk::ReceptorMemberCommand::Pointer command = itk::ReceptorMemberCommand::New(); command->SetCallbackFunction( this, &QmitkSlicesInterpolator::OnFrontalSliceChanged ); + slicer->RemoveObserver(FSliceObserverTag); FSliceObserverTag = slicer->AddObserver( mitk::SliceNavigationController::GeometrySliceEvent(NULL, 0), command ); } } @@ -218,7 +224,29 @@ } QmitkSlicesInterpolator::~QmitkSlicesInterpolator() -{ +{ + if (m_MultiWidget) + { + mitk::SliceNavigationController* slicer; + if(m_MultiWidget->mitkWidget1 != NULL) + { + slicer = m_MultiWidget->mitkWidget1->GetSliceNavigationController(); + slicer->RemoveObserver( TSliceObserverTag ); + slicer->RemoveObserver( TTimeObserverTag ); + } + if(m_MultiWidget->mitkWidget2 != NULL) + { + slicer = m_MultiWidget->mitkWidget2->GetSliceNavigationController(); + slicer->RemoveObserver( SSliceObserverTag ); + slicer->RemoveObserver( STimeObserverTag ); + } + if(m_MultiWidget->mitkWidget3 != NULL) + { + slicer = m_MultiWidget->mitkWidget3->GetSliceNavigationController(); + slicer->RemoveObserver( FSliceObserverTag ); + slicer->RemoveObserver( FTimeObserverTag ); + } + } } void QmitkSlicesInterpolator::OnToolManagerWorkingDataModified() @@ -314,7 +342,7 @@ const mitk::SliceNavigationController::GeometrySliceEvent& event = dynamic_cast(e); mitk::TimeSlicedGeometry* tsg = event.GetTimeSlicedGeometry(); - if (tsg) + if (tsg && m_TimeStep.size() > windowID) { mitk::SlicedGeometry3D* slicedGeometry = dynamic_cast(tsg->GetGeometry3D(m_TimeStep[windowID])); if (slicedGeometry) @@ -322,7 +350,7 @@ mitk::PlaneGeometry* plane = dynamic_cast(slicedGeometry->GetGeometry2D( event.GetPos() )); Interpolate( plane, m_TimeStep[windowID] ); return true; - } + } } } catch(std::bad_cast)