| 67 | } |
| 68 | |
| 69 | void QmitkPointListModel::ObserveNewPointSet(mitk::DataNode *pointSetNode) |
| 70 | { |
| 71 | // remove old observers |
| 72 | if (m_PointSetNode != nullptr) |
| 73 | { |
| 74 | try // here sometimes an exception is thrown which leads to a crash. So catch this exception but give an error |
| 75 | // message. See bug 18316 for details. |
| 76 | { |
| 77 | mitk::PointSet::Pointer oldPointSet = dynamic_cast<mitk::PointSet *>(m_PointSetNode->GetData()); |
| 78 | if (oldPointSet.IsNotNull()) |
| 79 | { |
| 80 | oldPointSet->RemoveObserver(m_PointSetModifiedObserverTag); |
| 81 | oldPointSet->RemoveObserver(m_PointSetDeletedObserverTag); |
| 82 | } |
| 83 | } |
| 84 | catch (std::exception &e) |
| 85 | { |
| 86 | MITK_ERROR << "Exception while removing observer from old point set node: " << e.what(); |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | // get the new pointset |
| 91 | mitk::PointSet::Pointer pointSet = this->CheckForPointSetInNode(pointSetNode); |
| 92 | |
| 93 | m_PointSetNode = pointSetNode; |
| 94 | |
| 95 | if (pointSet.IsNotNull()) |
| 96 | { |
| 97 | // add new observer for modified if necessary |
| 98 | itk::ReceptorMemberCommand<QmitkPointListModel>::Pointer modCommand = |
| 99 | itk::ReceptorMemberCommand<QmitkPointListModel>::New(); |
| 100 | modCommand->SetCallbackFunction(this, &QmitkPointListModel::OnPointSetChanged); |
| 101 | m_PointSetModifiedObserverTag = pointSet->AddObserver(itk::ModifiedEvent(), modCommand); |
| 102 | |
| 103 | // add new observer for detele if necessary |
| 104 | itk::ReceptorMemberCommand<QmitkPointListModel>::Pointer delCommand = |
| 105 | itk::ReceptorMemberCommand<QmitkPointListModel>::New(); |
| 106 | delCommand->SetCallbackFunction(this, &QmitkPointListModel::OnPointSetDeleted); |
| 107 | m_PointSetDeletedObserverTag = pointSet->AddObserver(itk::DeleteEvent(), delCommand); |
| 108 | } |
| 109 | else |
| 110 | { |
| 111 | m_PointSetModifiedObserverTag = 0; |
| 112 | m_PointSetDeletedObserverTag = 0; |
| 113 | } |
| 114 | } |
| 115 | |
| 116 | void QmitkPointListModel::OnPointSetChanged(const itk::EventObject &) |
| 117 | { |
no test coverage detected