| 255 | } |
| 256 | |
| 257 | void mitk::ToolManager::SetReferenceData(DataVectorType data) |
| 258 | { |
| 259 | if (data != m_ReferenceData) |
| 260 | { |
| 261 | // remove observers from old nodes |
| 262 | for (auto dataIter = m_ReferenceData.begin(); dataIter != m_ReferenceData.end(); ++dataIter) |
| 263 | { |
| 264 | auto searchIter = m_ReferenceDataObserverTags.find(*dataIter); |
| 265 | if (searchIter != m_ReferenceDataObserverTags.end()) |
| 266 | { |
| 267 | (*dataIter)->RemoveObserver(searchIter->second); |
| 268 | } |
| 269 | } |
| 270 | |
| 271 | m_ReferenceData = data; |
| 272 | // TODO tell active tool? |
| 273 | |
| 274 | // attach new observers |
| 275 | m_ReferenceDataObserverTags.clear(); |
| 276 | for (auto dataIter = m_ReferenceData.begin(); dataIter != m_ReferenceData.end(); ++dataIter) |
| 277 | { |
| 278 | itk::MemberCommand<ToolManager>::Pointer command = itk::MemberCommand<ToolManager>::New(); |
| 279 | command->SetCallbackFunction(this, &ToolManager::OnOneOfTheReferenceDataDeleted); |
| 280 | command->SetCallbackFunction(this, &ToolManager::OnOneOfTheReferenceDataDeletedConst); |
| 281 | m_ReferenceDataObserverTags.insert( |
| 282 | std::pair<DataNode *, unsigned long>((*dataIter), (*dataIter)->AddObserver(itk::DeleteEvent(), command))); |
| 283 | } |
| 284 | |
| 285 | ReferenceDataChanged.Send(); |
| 286 | } |
| 287 | } |
| 288 | |
| 289 | void mitk::ToolManager::OnOneOfTheReferenceDataDeletedConst(const itk::Object *caller, const itk::EventObject &e) |
| 290 | { |