Medical Imaging Interaction Toolkit  2021.10.99-9c07a326
Medical Imaging Interaction Toolkit
QmitkAbstractDataStorageModel.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef QMITKABSTRACTDATASTORAGEMODEL_H
14 #define QMITKABSTRACTDATASTORAGEMODEL_H
15 
16 #include <MitkQtWidgetsExports.h>
17 
18 // mitk core
19 #include <mitkDataStorage.h>
20 #include <mitkNodePredicateBase.h>
21 #include <mitkWeakPointer.h>
22 
23 // qt
24 #include <QAbstractItemModel>
25 
26 /*
27 * @brief This abstract class extends the 'QAbstractItemModel' to accept an 'mitk::DataStorage' and a 'mitk::NodePredicateBase'.
28 * It registers itself as a node event listener of the data storage.
29 * The 'QmitkAbstractDataStorageModel' provides three empty functions, 'NodeAdded', 'NodeChanged' and 'NodeRemoved', that
30 * may be implemented by subclasses. These functions allow to react to the 'AddNodeEvent', 'ChangedNodeEvent' and
31 * 'RemoveNodeEvent' of the data storage. This might be useful to force an update on a custom view to correctly
32 * represent the content of the data storage.
33 *
34 * A concrete implementation of this class is used to store the temporarily shown data nodes of the data storage.
35 * These nodes may be a subset of all the nodes inside the data storage, if a specific node predicate is set.
36 *
37 * A model that implements this class has to return mitk::DataNode::Pointer objects for model indexes when the
38 * role is QmitkDataNodeRole.
39 */
40 class MITKQTWIDGETS_EXPORT QmitkAbstractDataStorageModel : public QAbstractItemModel
41 {
42  Q_OBJECT
43 
44 public:
45 
47  /*
48  * @brief Sets the data storage and adds listener for node events.
49  *
50  * @param dataStorage A pointer to the data storage to set.
51  */
52  void SetDataStorage(mitk::DataStorage* dataStorage);
53 
54  mitk::DataStorage* GetDataStorage() const;
55  /*
56  * @brief Sets the node predicate and updates the model data, according to the node predicate.
57  *
58  * @param nodePredicate A pointer to node predicate.
59  */
60  void SetNodePredicate(const mitk::NodePredicateBase* nodePredicate);
61 
62  const mitk::NodePredicateBase* GetNodePredicate() const { return m_NodePredicate; }
63 
64 protected:
65 
66  virtual void DataStorageChanged() = 0;
67  virtual void NodePredicateChanged() = 0;
68 
69  virtual void NodeAdded(const mitk::DataNode* node) = 0;
70  virtual void NodeChanged(const mitk::DataNode* node) = 0;
71  virtual void NodeRemoved(const mitk::DataNode* node) = 0;
72 
73  QmitkAbstractDataStorageModel(QObject* parent = nullptr);
74  QmitkAbstractDataStorageModel(mitk::DataStorage* dataStorage, QObject* parent = nullptr);
75 
78 
79 private:
80 
82  void SetDataStorageDeleted();
83 
84  unsigned long m_DataStorageDeletedTag;
85 
86 };
87 
88 #endif // QMITKABSTRACTDATASTORAGEMODEL_H
Data management class that handles &#39;was created by&#39; relations.
#define MITKQTWIDGETS_EXPORT
mitk::NodePredicateBase::ConstPointer m_NodePredicate
const mitk::NodePredicateBase * GetNodePredicate() const
Interface for evaluation conditions used in the DataStorage class GetSubset() method.
Class for nodes of the DataTree.
Definition: mitkDataNode.h:57
mitk::WeakPointer< mitk::DataStorage > m_DataStorage