| 505 | } |
| 506 | |
| 507 | void QmitkDataStorageTreeModel::SetDataStorage(mitk::DataStorage *_DataStorage) |
| 508 | { |
| 509 | if (m_DataStorage != _DataStorage) // dont take the same again |
| 510 | { |
| 511 | auto dataStorage = m_DataStorage.Lock(); |
| 512 | if (dataStorage.IsNotNull()) |
| 513 | { |
| 514 | // remove Listener for the data storage itself |
| 515 | dataStorage->RemoveObserver(m_DataStorageDeletedTag); |
| 516 | |
| 517 | // remove listeners for the nodes |
| 518 | dataStorage->AddNodeEvent.RemoveListener( |
| 519 | mitk::MessageDelegate1<QmitkDataStorageTreeModel, const mitk::DataNode *>(this, |
| 520 | &QmitkDataStorageTreeModel::AddNode)); |
| 521 | |
| 522 | dataStorage->ChangedNodeEvent.RemoveListener( |
| 523 | mitk::MessageDelegate1<QmitkDataStorageTreeModel, const mitk::DataNode *>( |
| 524 | this, &QmitkDataStorageTreeModel::SetNodeModified)); |
| 525 | |
| 526 | dataStorage->RemoveNodeEvent.RemoveListener( |
| 527 | mitk::MessageDelegate1<QmitkDataStorageTreeModel, const mitk::DataNode *>( |
| 528 | this, &QmitkDataStorageTreeModel::RemoveNode)); |
| 529 | } |
| 530 | |
| 531 | this->beginResetModel(); |
| 532 | |
| 533 | // take over the new data storage |
| 534 | m_DataStorage = _DataStorage; |
| 535 | |
| 536 | // delete the old root (if necessary, create new) |
| 537 | if (m_Root) |
| 538 | m_Root->Delete(); |
| 539 | mitk::DataNode::Pointer rootDataNode = mitk::DataNode::New(); |
| 540 | rootDataNode->SetName("Data Manager"); |
| 541 | m_Root = new TreeItem(rootDataNode, nullptr); |
| 542 | |
| 543 | dataStorage = m_DataStorage.Lock(); |
| 544 | if (dataStorage.IsNotNull()) |
| 545 | { |
| 546 | // add Listener for the data storage itself |
| 547 | auto command = itk::SimpleMemberCommand<QmitkDataStorageTreeModel>::New(); |
| 548 | command->SetCallbackFunction(this, &QmitkDataStorageTreeModel::SetDataStorageDeleted); |
| 549 | m_DataStorageDeletedTag = dataStorage->AddObserver(itk::DeleteEvent(), command); |
| 550 | |
| 551 | // add listeners for the nodes |
| 552 | dataStorage->AddNodeEvent.AddListener(mitk::MessageDelegate1<QmitkDataStorageTreeModel, const mitk::DataNode *>( |
| 553 | this, &QmitkDataStorageTreeModel::AddNode)); |
| 554 | |
| 555 | dataStorage->ChangedNodeEvent.AddListener( |
| 556 | mitk::MessageDelegate1<QmitkDataStorageTreeModel, const mitk::DataNode *>( |
| 557 | this, &QmitkDataStorageTreeModel::SetNodeModified)); |
| 558 | |
| 559 | dataStorage->RemoveNodeEvent.AddListener( |
| 560 | mitk::MessageDelegate1<QmitkDataStorageTreeModel, const mitk::DataNode *>( |
| 561 | this, &QmitkDataStorageTreeModel::RemoveNode)); |
| 562 | |
| 563 | // finally add all nodes to the model |
| 564 | this->Update(); |
no test coverage detected