Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef mitkDataStorageSelection_h
00019 #define mitkDataStorageSelection_h
00020
00021 #include <mitkDataStorage.h>
00022 #include "MitkExtExports.h"
00023 #include <mitkNodePredicateBase.h>
00024 #include <itkEventObject.h>
00025 #include <mitkCommon.h>
00026 #include <set>
00027
00028 namespace mitk
00029 {
00030 class BaseProperty;
00031 class PropertyList;
00032
00033 class MitkExt_EXPORT DataStorageSelection: public itk::Object
00034 {
00035 public:
00036 typedef std::vector<mitk::DataNode*> Nodes;
00037 typedef Message1<const mitk::DataNode*> DataNodeEvent;
00038
00039 DataNodeEvent NodeChanged;
00040 DataNodeEvent NodeAdded;
00041 DataNodeEvent NodeRemoved;
00042 Message2<const mitk::DataNode*, const mitk::BaseProperty*> PropertyChanged;
00043
00044 mitkClassMacro(DataStorageSelection, itk::Object);
00045
00046 mitkNewMacro2Param(DataStorageSelection, DataStorage*, bool);
00047 mitkNewMacro3Param(DataStorageSelection, DataStorage*, NodePredicateBase*, bool);
00048
00049 protected:
00050 DataStorageSelection(mitk::DataStorage* _DataStorage, bool _AutoAddNodes);
00051 DataStorageSelection(mitk::DataStorage* _DataStorage
00052 , mitk::NodePredicateBase* _Predicate, bool _AutoAddNodes);
00053
00054 public:
00055 virtual ~DataStorageSelection();
00056
00060 mitk::DataStorage::Pointer GetDataStorage() const;
00064 mitk::NodePredicateBase::Pointer GetPredicate() const;
00068 unsigned int GetSize() const;
00072 mitk::DataNode::Pointer GetNode(unsigned int index) const;
00076 mitk::DataNode::Pointer GetNode() const;
00080 std::vector<mitk::DataNode*> GetNodes() const;
00084 bool DoesAutoAddNodes() const;
00085 public:
00089 DataStorageSelection& operator=(mitk::DataNode* node);
00093 DataStorageSelection& operator=(mitk::DataNode::Pointer node);
00097 virtual void SetDataStorage(mitk::DataStorage* _DataStorage);
00101 virtual void SetPredicate(mitk::NodePredicateBase* _Predicate);
00105 virtual void AddNode(const mitk::DataNode* node);
00109 virtual void RemoveNode(const mitk::DataNode* node);
00113 virtual void RemoveAllNodes();
00117 virtual void ObjectChanged(const itk::Object *caller, const itk::EventObject &event);
00118 protected:
00122 mitk::DataNode::Pointer FindNode(const mitk::BaseProperty* prop) const;
00126 mitk::DataNode::Pointer FindNode(const mitk::PropertyList* propList) const;
00130 void Reset();
00134 void RemoveListener(mitk::DataNode* node);
00140 void AddListener(mitk::DataNode* node);
00141 protected:
00145 mitk::DataStorage* m_DataStorage;
00149 unsigned int m_DataStorageDeletedTag;
00154 mitk::NodePredicateBase::Pointer m_Predicate;
00158 std::vector<mitk::DataNode*> m_Nodes;
00162 std::map<mitk::DataNode*, unsigned long> m_NodeModifiedObserverTags;
00166 std::map<mitk::PropertyList*, unsigned long> m_PropertyListModifiedObserverTags;
00170 std::map<mitk::PropertyList*, unsigned long> m_PropertyListDeletedObserverTags;
00174 std::map<mitk::BaseProperty*, unsigned long> m_PropertyModifiedObserverTags;
00178 std::map<mitk::BaseProperty*, unsigned long> m_PropertyDeletedObserverTags;
00182 bool m_SelfCall;
00186 bool m_AutoAddNodes;
00187 };
00188
00189 }
00190
00191 #endif // mitkDataStorageSelection_h