| 267 | } |
| 268 | |
| 269 | void QmitkSegmentationTaskListWidget::CheckDataStorage(const mitk::DataNode* removedNode) |
| 270 | { |
| 271 | QString warning; |
| 272 | |
| 273 | if (nullptr == m_DataStorage) |
| 274 | { |
| 275 | warning = QStringLiteral( |
| 276 | "<h3>Developer warning</h3><p>Call <code>SetDataStorage()</code> to fully initialize " |
| 277 | "this instance of <code>QmitkSegmentationTaskListWidget</code>.</p>"); |
| 278 | } |
| 279 | else |
| 280 | { |
| 281 | auto isTaskList = mitk::TNodePredicateDataType<mitk::SegmentationTaskList>::New(); |
| 282 | auto taskListNodes = GetSubset(m_DataStorage, isTaskList, removedNode); |
| 283 | |
| 284 | if (taskListNodes->empty()) |
| 285 | { |
| 286 | warning = QStringLiteral( |
| 287 | "<h3>No segmentation task list found</h3><p>Load a segmentation task list to use " |
| 288 | "this plugin.</p>"); |
| 289 | } |
| 290 | else if (taskListNodes->Size() > 1) |
| 291 | { |
| 292 | warning = QStringLiteral( |
| 293 | "<h3>More than one segmentation task list found</h3><p>Unload everything but a " |
| 294 | "single segmentation task list to use this plugin.</p>"); |
| 295 | } |
| 296 | else |
| 297 | { |
| 298 | const auto* taskListNode = (*taskListNodes)[0].GetPointer(); |
| 299 | |
| 300 | auto isTaskListNode = mitk::NodePredicateFunction::New([taskListNode](const mitk::DataNode* node) { |
| 301 | return node == taskListNode; |
| 302 | }); |
| 303 | |
| 304 | auto isChildOfTaskListNode = mitk::NodePredicateFunction::New([this, isTaskListNode](const mitk::DataNode* node) { |
| 305 | return !m_DataStorage->GetSources(node, isTaskListNode, false)->empty(); |
| 306 | }); |
| 307 | |
| 308 | auto isHelperObject = mitk::NodePredicateProperty::New("helper object"); |
| 309 | auto isUndesiredNode = mitk::NodePredicateNot::New(mitk::NodePredicateOr::New( |
| 310 | isTaskListNode, |
| 311 | isChildOfTaskListNode, |
| 312 | isHelperObject)); |
| 313 | |
| 314 | auto unreleatedData = GetSubset(m_DataStorage, isUndesiredNode, removedNode); |
| 315 | |
| 316 | if (!unreleatedData->empty()) |
| 317 | { |
| 318 | warning = QStringLiteral( |
| 319 | "<h3>Unrelated data found</h3><p>Unload everything but a single segmentation task " |
| 320 | "list to use this plugin.</p><p>Unreleated data:<ul>"); |
| 321 | |
| 322 | for (auto node : *unreleatedData) |
| 323 | { |
| 324 | warning += "<li>" + node->GetName(); |
| 325 | |
| 326 | if (auto data = node->GetData(); data != nullptr) |
no test coverage detected