Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes

mitk::DataStorageSelection Class Reference

#include <mitkDataStorageSelection.h>

Collaboration diagram for mitk::DataStorageSelection:
Collaboration graph
[legend]

List of all members.

Public Types

typedef std::vector
< mitk::DataNode * > 
Nodes
typedef Message1< const
mitk::DataNode * > 
DataNodeEvent
typedef DataStorageSelection Self
typedef itk::Object Superclass
typedef itk::SmartPointer< SelfPointer
typedef itk::SmartPointer
< const Self
ConstPointer

Public Member Functions

virtual const char * GetClassName () const
virtual ~DataStorageSelection ()
mitk::DataStorage::Pointer GetDataStorage () const
mitk::NodePredicateBase::Pointer GetPredicate () const
unsigned int GetSize () const
mitk::DataNode::Pointer GetNode (unsigned int index) const
mitk::DataNode::Pointer GetNode () const
std::vector< mitk::DataNode * > GetNodes () const
bool DoesAutoAddNodes () const
DataStorageSelectionoperator= (mitk::DataNode *node)
DataStorageSelectionoperator= (mitk::DataNode::Pointer node)
virtual void SetDataStorage (mitk::DataStorage *_DataStorage)
virtual void SetPredicate (mitk::NodePredicateBase *_Predicate)
virtual void AddNode (const mitk::DataNode *node)
virtual void RemoveNode (const mitk::DataNode *node)
virtual void RemoveAllNodes ()
virtual void ObjectChanged (const itk::Object *caller, const itk::EventObject &event)

Static Public Member Functions

static Pointer New (DataStorage *_arga, bool _argb)
static Pointer New (DataStorage *_arga, NodePredicateBase *_argb, bool _argc)

Public Attributes

DataNodeEvent NodeChanged
DataNodeEvent NodeAdded
DataNodeEvent NodeRemoved
Message2< const mitk::DataNode
*, const mitk::BaseProperty * > 
PropertyChanged

Protected Member Functions

 DataStorageSelection (mitk::DataStorage *_DataStorage, bool _AutoAddNodes)
 DataStorageSelection (mitk::DataStorage *_DataStorage, mitk::NodePredicateBase *_Predicate, bool _AutoAddNodes)
mitk::DataNode::Pointer FindNode (const mitk::BaseProperty *prop) const
mitk::DataNode::Pointer FindNode (const mitk::PropertyList *propList) const
void Reset ()
void RemoveListener (mitk::DataNode *node)
void AddListener (mitk::DataNode *node)

Protected Attributes

mitk::DataStoragem_DataStorage
unsigned int m_DataStorageDeletedTag
mitk::NodePredicateBase::Pointer m_Predicate
std::vector< mitk::DataNode * > m_Nodes
std::map< mitk::DataNode
*, unsigned long > 
m_NodeModifiedObserverTags
 Maps a node to a modified observer tag.
std::map< mitk::PropertyList
*, unsigned long > 
m_PropertyListModifiedObserverTags
 Maps a propertylist to a modified observer tag.
std::map< mitk::PropertyList
*, unsigned long > 
m_PropertyListDeletedObserverTags
 Maps a propertylist to a delete observer tag.
std::map< mitk::BaseProperty
*, unsigned long > 
m_PropertyModifiedObserverTags
 Maps a property to a modified observer tag.
std::map< mitk::BaseProperty
*, unsigned long > 
m_PropertyDeletedObserverTags
 Maps a property to a delete observer tag.
bool m_SelfCall
bool m_AutoAddNodes

Detailed Description

Definition at line 33 of file mitkDataStorageSelection.h.


Member Typedef Documentation

typedef itk::SmartPointer<const Self> mitk::DataStorageSelection::ConstPointer

Definition at line 44 of file mitkDataStorageSelection.h.

Definition at line 37 of file mitkDataStorageSelection.h.

Definition at line 36 of file mitkDataStorageSelection.h.

typedef itk::SmartPointer<Self> mitk::DataStorageSelection::Pointer

Definition at line 44 of file mitkDataStorageSelection.h.

Definition at line 44 of file mitkDataStorageSelection.h.

Definition at line 44 of file mitkDataStorageSelection.h.


Constructor & Destructor Documentation

mitk::DataStorageSelection::DataStorageSelection ( mitk::DataStorage _DataStorage,
bool  _AutoAddNodes 
) [protected]

Definition at line 21 of file mitkDataStorageSelection.cpp.

{

mitk::DataStorageSelection::DataStorageSelection ( mitk::DataStorage _DataStorage,
mitk::NodePredicateBase _Predicate,
bool  _AutoAddNodes 
) [protected]

Definition at line 27 of file mitkDataStorageSelection.cpp.

mitk::DataStorageSelection::~DataStorageSelection (  ) [virtual]

Definition at line 35 of file mitkDataStorageSelection.cpp.

    : m_DataStorage(0), m_Predicate(_Predicate), m_SelfCall(false), m_AutoAddNodes(_AutoAddNodes)
  {
    this->SetDataStorage(_DataStorage);
  }


Member Function Documentation

void mitk::DataStorageSelection::AddListener ( mitk::DataNode node ) [protected]

Adds listeners for modified/delete event, for the propertylists modified/delete and for the modified/delete event of each property and stores listener tags

Definition at line 333 of file mitkDataStorageSelection.cpp.

  {
    // node listener
    itk::MemberCommand<DataStorageSelection>::Pointer ObjectChangedCommand
      = itk::MemberCommand<DataStorageSelection>::New();
    ObjectChangedCommand->SetCallbackFunction(this, &DataStorageSelection::ObjectChanged);

    m_NodeModifiedObserverTags[node] = node->AddObserver(itk::ModifiedEvent()
      , ObjectChangedCommand);

    // create propertylist listener
    mitk::PropertyList* propList = node->GetPropertyList();
    m_PropertyListModifiedObserverTags[propList] = propList
      ->AddObserver(itk::ModifiedEvent(), ObjectChangedCommand);
    m_PropertyListDeletedObserverTags[propList] = propList
      ->AddObserver(itk::DeleteEvent(), ObjectChangedCommand);

    mitk::BaseProperty* prop = 0;
    // do the same for each property
    for(mitk::PropertyList::PropertyMap::const_iterator it=propList->GetMap()->begin()
      ; it!=propList->GetMap()->end()
      ; ++it)
    {
      prop = it->second.first;
      m_PropertyModifiedObserverTags[prop] = prop->AddObserver(itk::ModifiedEvent()
void mitk::DataStorageSelection::AddNode ( const mitk::DataNode node ) [virtual]

Add a node (if not already there)

Definition at line 144 of file mitkDataStorageSelection.cpp.

  {
    // garantuee no recursions when a new node event is thrown
    if(m_SelfCall)
      return;

    // if we have a predicate, check node against predicate first
    if(m_Predicate.IsNotNull() && !m_Predicate->CheckNode(node))
      return;

    // no duplicates
    if(std::find(m_Nodes.begin(), m_Nodes.end(), node) != m_Nodes.end())
      return;

    mitk::DataNode* nonConstNode = const_cast<mitk::DataNode*>(node);
    // add listener
    this->AddListener(nonConstNode);

    // add node
bool mitk::DataStorageSelection::DoesAutoAddNodes (  ) const
See also:
m_AutoAddNodes

Definition at line 72 of file mitkDataStorageSelection.cpp.

References m_Nodes.

  {
    return m_Nodes;
  }

mitk::DataNode::Pointer mitk::DataStorageSelection::FindNode ( const mitk::BaseProperty prop ) const [protected]

Find a node in the list by the given prop

Definition at line 246 of file mitkDataStorageSelection.cpp.

  {
    mitk::DataNode* node = 0;
    for(Nodes::const_iterator it=m_Nodes.begin(); it!=m_Nodes.end(); ++it)
    {
      for(mitk::PropertyList::PropertyMap::const_iterator it2
        = (*it)->GetPropertyList()->GetMap()->begin()
        ; it2 != (*it)->GetPropertyList()->GetMap()->end(); ++it2)
      {
        if(it2->second.first == prop)
        {
          node = *it;
          break;
mitk::DataNode::Pointer mitk::DataStorageSelection::FindNode ( const mitk::PropertyList propList ) const [protected]

Find a node in the list by the given proplist

Definition at line 265 of file mitkDataStorageSelection.cpp.

  {
    mitk::DataNode* node = 0;
    for(Nodes::const_iterator it=m_Nodes.begin(); it!=m_Nodes.end(); ++it)
    {
      if((*it)->GetPropertyList() == propList)
      {
        node = *it;
virtual const char* mitk::DataStorageSelection::GetClassName (  ) const [virtual]
mitk::DataStorage::Pointer mitk::DataStorageSelection::GetDataStorage (  ) const

Get the DataStorage.

Definition at line 41 of file mitkDataStorageSelection.cpp.

References SetDataStorage().

  {
    // kick datastorage and all nodes and all listeners
    this->SetDataStorage(0);
  }
mitk::DataNode::Pointer mitk::DataStorageSelection::GetNode (  ) const

Returns the first node, same as calling GetNode(0)

Definition at line 56 of file mitkDataStorageSelection.cpp.

References m_Nodes.

Referenced by GetNode().

  {
    return m_Nodes.size();
  }
mitk::DataNode::Pointer mitk::DataStorageSelection::GetNode ( unsigned int  index ) const

Get node at a specific model index.

Definition at line 61 of file mitkDataStorageSelection.cpp.

References GetNode().

  {
    return this->GetNode(0);
  }
std::vector< mitk::DataNode * > mitk::DataStorageSelection::GetNodes (  ) const

Returns a copy of the node-vector

Definition at line 66 of file mitkDataStorageSelection.cpp.

References m_Nodes.

  {
    return (index < m_Nodes.size())? m_Nodes.at(index): 0;
  }
mitk::NodePredicateBase::Pointer mitk::DataStorageSelection::GetPredicate (  ) const

Get the predicate.

Definition at line 46 of file mitkDataStorageSelection.cpp.

References m_DataStorage.

  {
    return m_DataStorage;
  }
unsigned int mitk::DataStorageSelection::GetSize (  ) const

Returns the size of this selection

Definition at line 51 of file mitkDataStorageSelection.cpp.

References m_Predicate.

  {
    return m_Predicate;
  }
static Pointer mitk::DataStorageSelection::New ( DataStorage _arga,
bool  _argb 
) [inline, static]
static Pointer mitk::DataStorageSelection::New ( DataStorage _arga,
NodePredicateBase _argb,
bool  _argc 
) [inline, static]

Definition at line 47 of file mitkDataStorageSelection.h.

:
      DataStorageSelection(mitk::DataStorage* _DataStorage, bool _AutoAddNodes);
void mitk::DataStorageSelection::ObjectChanged ( const itk::Object *  caller,
const itk::EventObject &  event 
) [virtual]

Called whenever an itk Object this class holds gets deleted or modified

Definition at line 206 of file mitkDataStorageSelection.cpp.

  {
    if(m_SelfCall)
      return;

    const itk::DeleteEvent* delEvent = 0;
    const itk::ModifiedEvent* modifiedEvent = dynamic_cast<const itk::ModifiedEvent*>(&event);
    if(!modifiedEvent)
      delEvent = dynamic_cast<const itk::DeleteEvent*>(&event);

    const mitk::BaseProperty* prop = 0;
    const mitk::PropertyList* propList = 0;
    const mitk::DataNode* node = dynamic_cast<const mitk::DataNode*>(caller);
    if(!node)
    {
      if((prop = dynamic_cast<const mitk::BaseProperty*>(caller)))
      {
        node = this->FindNode(prop);
      }
      else if((propList = dynamic_cast<const mitk::PropertyList*>(caller)))
      {
        node = this->FindNode(propList);
      }
      else if(dynamic_cast<const mitk::DataStorage*>(caller))
      {
        this->SetDataStorage(0);
      }
    }

    if(prop && node)
    {
      PropertyChanged.Send(node, prop);
    }
DataStorageSelection & mitk::DataStorageSelection::operator= ( mitk::DataNode node )

Removes all nodes, sets node as new first element

Definition at line 77 of file mitkDataStorageSelection.cpp.

References m_AutoAddNodes.

DataStorageSelection & mitk::DataStorageSelection::operator= ( mitk::DataNode::Pointer  node )

Removes all nodes, sets node as new first element

Definition at line 84 of file mitkDataStorageSelection.cpp.

void mitk::DataStorageSelection::RemoveAllNodes (  ) [virtual]

Removes a node

Definition at line 193 of file mitkDataStorageSelection.cpp.

  {
    // remove all nodes now (dont use iterators because removing elements
    // would invalidate the iterator)
    // start at the last element: first in, last out
    unsigned int i = m_Nodes.size();
    while(!m_Nodes.empty())
void mitk::DataStorageSelection::RemoveListener ( mitk::DataNode node ) [protected]

If a node is already in this list, all listeners will be removed

Definition at line 306 of file mitkDataStorageSelection.cpp.

  {
    // remove node listener
    node->RemoveObserver(m_NodeModifiedObserverTags[node]);
    m_NodeModifiedObserverTags.erase(node);

    // remove propertylist listener
    mitk::PropertyList* propList = node->GetPropertyList();
    propList->RemoveObserver(m_PropertyListModifiedObserverTags[propList]);
    m_PropertyListModifiedObserverTags.erase(propList);
    propList->RemoveObserver(m_PropertyListDeletedObserverTags[propList]);
    m_PropertyListDeletedObserverTags.erase(propList);

    mitk::BaseProperty* prop = 0;
    // do the same for each property
    for(mitk::PropertyList::PropertyMap::const_iterator it=propList->GetMap()->begin()
      ; it!=propList->GetMap()->end()
      ; ++it)
    {
      prop = it->second.first;
      prop->RemoveObserver(m_PropertyModifiedObserverTags[prop]);
void mitk::DataStorageSelection::RemoveNode ( const mitk::DataNode node ) [virtual]

Removes a node

Definition at line 170 of file mitkDataStorageSelection.cpp.

  {
    if(m_SelfCall)
      return;

    // find corresponding node
    std::vector<mitk::DataNode*>::iterator nodeIt
      = std::find(m_Nodes.begin(), m_Nodes.end(), node);

    if(nodeIt == m_Nodes.end())
      return;

    mitk::DataNode* nonConstNode = const_cast<mitk::DataNode*>(node);
    // add listener
    this->RemoveListener(nonConstNode);

    // remove node
void mitk::DataStorageSelection::Reset (  ) [protected]

Removes all nodes and fill the vector again

Definition at line 279 of file mitkDataStorageSelection.cpp.

  {
    this->RemoveAllNodes();
    // the whole reset depends on the fact if a data storage is set or not
    if(m_DataStorage)
    {
      mitk::DataStorage::SetOfObjects::ConstPointer _NodeSet = 0;
      if(m_AutoAddNodes && m_Predicate.IsNotNull())
        // get subset
        _NodeSet = m_DataStorage->GetSubset(m_Predicate);
      // if predicate is NULL, select all nodes
      else if(m_AutoAddNodes)
      {
        _NodeSet = m_DataStorage->GetAll();
      }
      else
        return;
      // finally add all nodes to the model
      for(mitk::DataStorage::SetOfObjects::const_iterator it=_NodeSet->begin(); it!=_NodeSet->end()
        ; it++)
      {
void mitk::DataStorageSelection::SetDataStorage ( mitk::DataStorage _DataStorage ) [virtual]

Sets the DataStorage.

Definition at line 90 of file mitkDataStorageSelection.cpp.

Referenced by GetDataStorage().

  {
    *this = node.GetPointer();
    return *this;
  }

  void DataStorageSelection::SetDataStorage(mitk::DataStorage* _DataStorage)
  {
    // only proceed if we have a new datastorage
    if(m_DataStorage != _DataStorage)
    {
      // if a data storage was set before remove old event listeners
      if(m_DataStorage != 0)
      {
        if(m_AutoAddNodes)
          this->m_DataStorage->AddNodeEvent.RemoveListener( mitk::MessageDelegate1<DataStorageSelection
          , const mitk::DataNode*>( this, &DataStorageSelection::AddNode ) );

        this->m_DataStorage->RemoveNodeEvent.RemoveListener( mitk::MessageDelegate1<DataStorageSelection
          , const mitk::DataNode*>( this, &DataStorageSelection::RemoveNode ) );

        m_DataStorage->RemoveObserver(m_DataStorageDeletedTag);
        m_DataStorageDeletedTag = 0;
      }

      // set new data storage
      m_DataStorage = _DataStorage;

      // if new storage is not 0 subscribe for events
      if(m_DataStorage != 0)
      {
        // subscribe for node added/removed events
        if(m_AutoAddNodes)
          this->m_DataStorage->AddNodeEvent.AddListener( mitk::MessageDelegate1<DataStorageSelection
          , const mitk::DataNode*>( this, &DataStorageSelection::AddNode ) );

        this->m_DataStorage->RemoveNodeEvent.AddListener( mitk::MessageDelegate1<DataStorageSelection
          , const mitk::DataNode*>( this, &DataStorageSelection::RemoveNode ) );

        itk::MemberCommand<DataStorageSelection>::Pointer ObjectChangedCommand
          = itk::MemberCommand<DataStorageSelection>::New();
        ObjectChangedCommand->SetCallbackFunction(this, &DataStorageSelection::ObjectChanged);

        m_DataStorageDeletedTag = m_DataStorage->AddObserver(itk::DeleteEvent(), ObjectChangedCommand);
void mitk::DataStorageSelection::SetPredicate ( mitk::NodePredicateBase _Predicate ) [virtual]

Sets the predicate. QmitkDataStorageTableModel is owner of the predicate!

Definition at line 134 of file mitkDataStorageSelection.cpp.

  {
    // ensure that a new predicate is set in order to avoid unnecessary changed events
    if(m_Predicate != _Predicate)

Member Data Documentation

Saves if new nodes are automatically added to this selection

Definition at line 186 of file mitkDataStorageSelection.h.

Referenced by operator=().

Pointer to the DataStorage from which the nodes are selected

Definition at line 145 of file mitkDataStorageSelection.h.

Referenced by GetPredicate().

DeleteTag for the DataStorage

Definition at line 149 of file mitkDataStorageSelection.h.

Maps a node to a modified observer tag.

Definition at line 162 of file mitkDataStorageSelection.h.

Holds all selected Nodes.

Definition at line 158 of file mitkDataStorageSelection.h.

Referenced by DoesAutoAddNodes(), GetNode(), and GetNodes().

Holds the predicate that defines this SubSet of Nodes. If m_Predicate is NULL all Nodes will be selected.

Definition at line 154 of file mitkDataStorageSelection.h.

Referenced by GetSize().

Maps a property to a delete observer tag.

Definition at line 178 of file mitkDataStorageSelection.h.

Maps a propertylist to a delete observer tag.

Definition at line 170 of file mitkDataStorageSelection.h.

Maps a propertylist to a modified observer tag.

Definition at line 166 of file mitkDataStorageSelection.h.

Maps a property to a modified observer tag.

Definition at line 174 of file mitkDataStorageSelection.h.

If set to true no event processing will be performed

Definition at line 182 of file mitkDataStorageSelection.h.

Definition at line 40 of file mitkDataStorageSelection.h.

Definition at line 39 of file mitkDataStorageSelection.h.

Definition at line 41 of file mitkDataStorageSelection.h.

Definition at line 42 of file mitkDataStorageSelection.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines