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

mitk::LevelWindowManager Class Reference

Provides access to the mitkLevelWindowProperty object and mitkLevelWindow to the current image. More...

#include <mitkLevelWindowManager.h>

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

List of all members.

Public Types

typedef LevelWindowManager Self
typedef itk::Object Superclass
typedef itk::SmartPointer< SelfPointer
typedef itk::SmartPointer
< const Self
ConstPointer

Public Member Functions

virtual const char * GetClassName () const
void SetDataStorage (mitk::DataStorage *ds)
mitk::DataStorageGetDataStorage ()
 returns the datastorage
void SetAutoTopMostImage (bool autoTopMost, const mitk::DataNode *removedNode=NULL)
void Update (const itk::EventObject &e)
 gets called if a visible property changes
void SetLevelWindowProperty (LevelWindowProperty::Pointer levelWindowProperty)
void SetLevelWindow (const mitk::LevelWindow &levelWindow)
 sets new Level/Window values and informs all listeners about changes
const LevelWindowGetLevelWindow ()
 returns Level/Window values for the current image
LevelWindowProperty::Pointer GetLevelWindowProperty ()
 returns the current mitkLevelWindowProperty object from the image that is affected by changes
bool isAutoTopMost ()
 true if changes on slider or line-edits will affect always the topmost layer image
void DataStorageChanged (const mitk::DataNode *n=NULL)
 Change notifications from DataStorage.
void DataStorageRemovedNode (const mitk::DataNode *removedNode=NULL)
 Node removal notifications from DataStorage.
void OnPropertyModified (const itk::EventObject &e)
 change notifications from mitkLevelWindowProperty
mitk::ImageGetCurrentImage ()
 return the currently active image
mitk::DataStorage::SetOfObjects::ConstPointer GetRelevantNodes ()

Static Public Member Functions

static Pointer New ()

Protected Types

typedef std::map< unsigned
long,
mitk::BaseProperty::Pointer
ObserverToPropertyMap

Protected Member Functions

 LevelWindowManager ()
 ~LevelWindowManager ()

Protected Attributes

DataStorage::Pointer m_DataStorage
LevelWindowProperty::Pointer m_LevelWindowProperty
 pointer to the LevelWindowProperty of the current image
ObserverToPropertyMap m_PropObserverToNode
 map to hold observer IDīs to every visible property of DataNodeīs BaseProperty
ObserverToPropertyMap m_PropObserverToNode2
 map to hold observer IDīs to every layer property of DataNodeīs BaseProperty
bool m_AutoTopMost
unsigned long m_ObserverTag
bool m_IsObserverTagSet
unsigned long m_PropertyModifiedTag
mitk::Imagem_CurrentImage
bool m_IsPropertyModifiedTagSet

Detailed Description

Provides access to the mitkLevelWindowProperty object and mitkLevelWindow to the current image.

Documentation

Changes on Level/Window can be set with SetLevelWindow() and will affect either the topmost layer image, if isAutoTopMost() returns true, or an image which is set by SetLevelWindowProperty(LevelWindowProperty::Pointer levelWindowProperty). Changes on Level/Window, when another image gets active or by SetLevelWindow(const mitk::LevelWindow& levelWindow), will be sent to all listeners by Modified().

DataStorageChanged() listens to the DataStorage for new or removed images. Depending on how m_AutoTopMost is set, the new image becomes active or not. If an image is removed from the DataStorage and m_AutoTopMost is false, there is a check to proof, if the active image is still available. If not, then m_AutoTopMost becomes true.

Definition at line 44 of file mitkLevelWindowManager.h.


Member Typedef Documentation

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

Definition at line 48 of file mitkLevelWindowManager.h.

Definition at line 102 of file mitkLevelWindowManager.h.

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

Definition at line 48 of file mitkLevelWindowManager.h.

Definition at line 48 of file mitkLevelWindowManager.h.

Definition at line 48 of file mitkLevelWindowManager.h.


Constructor & Destructor Documentation

mitk::LevelWindowManager::LevelWindowManager (  ) [protected]
mitk::LevelWindowManager::~LevelWindowManager (  ) [protected]

Definition at line 39 of file mitkLevelWindowManager.cpp.

References DataStorageChanged(), and DataStorageRemovedNode().

{
  if (m_DataStorage.IsNotNull())
  {
    m_DataStorage->AddNodeEvent.RemoveListener(MessageDelegate1<LevelWindowManager, const mitk::DataNode*>( this, &LevelWindowManager::DataStorageChanged ));
    m_DataStorage->RemoveNodeEvent.RemoveListener(MessageDelegate1<LevelWindowManager, const mitk::DataNode*>( this, &LevelWindowManager::DataStorageRemovedNode ));
    m_DataStorage = NULL;
  }
  if (m_IsPropertyModifiedTagSet && m_LevelWindowProperty.IsNotNull())
  {
    m_LevelWindowProperty->RemoveObserver(m_PropertyModifiedTag);
    m_IsPropertyModifiedTagSet = false;
  }
  for( std::map<unsigned long, mitk::BaseProperty::Pointer>::iterator iter = m_PropObserverToNode.begin(); iter != m_PropObserverToNode.end(); iter++ ) {
    (*iter).second->RemoveObserver((*iter).first);
  }
  for( std::map<unsigned long, mitk::BaseProperty::Pointer>::iterator iter = m_PropObserverToNode2.begin(); iter != m_PropObserverToNode2.end(); iter++ ) {
    (*iter).second->RemoveObserver((*iter).first);
  }
}

Member Function Documentation

void mitk::LevelWindowManager::DataStorageChanged ( const mitk::DataNode n = NULL )

Change notifications from DataStorage.

Definition at line 187 of file mitkLevelWindowManager.cpp.

Referenced by SetDataStorage(), and ~LevelWindowManager().

void mitk::LevelWindowManager::DataStorageRemovedNode ( const mitk::DataNode removedNode = NULL )

Node removal notifications from DataStorage.

Definition at line 191 of file mitkLevelWindowManager.cpp.

References mitk::NodePredicateProperty::New(), and Update().

Referenced by SetDataStorage(), and ~LevelWindowManager().

{
  /* remove old observers */
  for (ObserverToPropertyMap::iterator iter = m_PropObserverToNode.begin(); iter != m_PropObserverToNode.end(); iter++ ) 
    (*iter).second->RemoveObserver((*iter).first);
  m_PropObserverToNode.clear();

  for (ObserverToPropertyMap::iterator iter = m_PropObserverToNode2.begin(); iter != m_PropObserverToNode2.end(); iter++ ) 
    (*iter).second->RemoveObserver((*iter).first);
  m_PropObserverToNode2.clear();

  if (m_DataStorage.IsNull())
  {
    itkExceptionMacro("DataStorage not set");
  }

  /* listen to changes  in visible property of all images */

  mitk::DataStorage::SetOfObjects::ConstPointer all = this->GetRelevantNodes();
  for (mitk::DataStorage::SetOfObjects::ConstIterator it = all->Begin(); it != all->End(); ++it)
  {
    if (it->Value().IsNull())
      continue;
    /* register listener for changes in visible property */
    itk::ReceptorMemberCommand<LevelWindowManager>::Pointer command = itk::ReceptorMemberCommand<LevelWindowManager>::New();
    command->SetCallbackFunction(this, &LevelWindowManager::Update);
    m_PropObserverToNode[it->Value()->GetProperty("visible")->AddObserver( itk::ModifiedEvent(), command )] = it->Value()->GetProperty("visible");
  }

  /* listen to changes  in layer property of all images */

  for (mitk::DataStorage::SetOfObjects::ConstIterator it = all->Begin(); it != all->End(); ++it)
  {
    if (it->Value().IsNull())
      continue;
    /* register listener for changes in layer property */
    itk::ReceptorMemberCommand<LevelWindowManager>::Pointer command2 = itk::ReceptorMemberCommand<LevelWindowManager>::New();
    command2->SetCallbackFunction(this, &LevelWindowManager::Update);
    m_PropObserverToNode2[it->Value()->GetProperty("layer")->AddObserver( itk::ModifiedEvent(), command2 )] = it->Value()->GetProperty("layer");
  }

  /* search image than belongs to the property */
  if (m_LevelWindowProperty.IsNull())
    SetAutoTopMostImage(true, removedNode);
  else
  {
    mitk::NodePredicateProperty::Pointer p2 = mitk::NodePredicateProperty::New("levelwindow", m_LevelWindowProperty);
    mitk::DataNode* n = m_DataStorage->GetNode(p2);
    if (n == NULL || m_AutoTopMost) // if node was deleted, change our behaviour to AutoTopMost, if AutoTopMost is true change level window to topmost node
      SetAutoTopMostImage(true, removedNode);
   }
}
virtual const char* mitk::LevelWindowManager::GetClassName (  ) const [virtual]
mitk::Image * mitk::LevelWindowManager::GetCurrentImage (  )

return the currently active image

Definition at line 316 of file mitkLevelWindowManager.cpp.

Referenced by QmitkLevelWindowWidgetContextMenu::useAllGreyvaluesFromImage().

{
  return m_CurrentImage;
}
mitk::DataStorage * mitk::LevelWindowManager::GetDataStorage (  )

returns the datastorage

Definition at line 245 of file mitkLevelWindowManager.cpp.

{
  return m_DataStorage.GetPointer();
}
const mitk::LevelWindow & mitk::LevelWindowManager::GetLevelWindow (  )

returns Level/Window values for the current image

Definition at line 167 of file mitkLevelWindowManager.cpp.

Referenced by QmitkLevelWindowWidgetContextMenu::getContextMenu().

{
  if (m_LevelWindowProperty.IsNotNull())
    return m_LevelWindowProperty->GetLevelWindow();
  else
  {
    itkExceptionMacro("No LevelWindow available!");
  }
}
mitk::LevelWindowProperty::Pointer mitk::LevelWindowManager::GetLevelWindowProperty (  )

returns the current mitkLevelWindowProperty object from the image that is affected by changes

Definition at line 160 of file mitkLevelWindowManager.cpp.

Referenced by QmitkLevelWindowWidgetContextMenu::getContextMenu().

mitk::DataStorage::SetOfObjects::ConstPointer mitk::LevelWindowManager::GetRelevantNodes (  )

returns all nodes in the DataStorage that have the following properties: "visible" == true, "binary" == false, "levelwindow", and DataType == Image

Definition at line 287 of file mitkLevelWindowManager.cpp.

References mitk::NodePredicateAnd::New(), mitk::NodePredicateOr::New(), mitk::NodePredicateDataType::New(), mitk::NodePredicateProperty::New(), and mitk::BoolProperty::New().

Referenced by QmitkLevelWindowWidgetContextMenu::getContextMenu().

{
  if (m_DataStorage.IsNull())
    return mitk::DataStorage::SetOfObjects::ConstPointer(mitk::DataStorage::SetOfObjects::New());  // return empty set

  mitk::BoolProperty::Pointer trueProp = mitk::BoolProperty::New(true);
  mitk::NodePredicateProperty::Pointer notBinary = mitk::NodePredicateProperty::New("binary", mitk::BoolProperty::New(false));
  mitk::NodePredicateProperty::Pointer hasLevelWindow = mitk::NodePredicateProperty::New("levelwindow", NULL);
  
  mitk::NodePredicateDataType::Pointer isImage = mitk::NodePredicateDataType::New("Image");
  mitk::NodePredicateDataType::Pointer isDImage = mitk::NodePredicateDataType::New("DiffusionImage");
  mitk::NodePredicateDataType::Pointer isTImage = mitk::NodePredicateDataType::New("TensorImage");
  mitk::NodePredicateDataType::Pointer isQImage = mitk::NodePredicateDataType::New("QBallImage");
  mitk::NodePredicateOr::Pointer predicateTypes = mitk::NodePredicateOr::New();
  predicateTypes->AddPredicate(isImage);
  predicateTypes->AddPredicate(isDImage);
  predicateTypes->AddPredicate(isTImage);
  predicateTypes->AddPredicate(isQImage);
  
  mitk::NodePredicateAnd::Pointer predicate = mitk::NodePredicateAnd::New();
  predicate->AddPredicate(notBinary);
  predicate->AddPredicate(hasLevelWindow); 
  predicate->AddPredicate(predicateTypes);

  mitk::DataStorage::SetOfObjects::ConstPointer relevantNodes = m_DataStorage->GetSubset( predicate );
  return relevantNodes; 
}
bool mitk::LevelWindowManager::isAutoTopMost (  )

true if changes on slider or line-edits will affect always the topmost layer image

Definition at line 252 of file mitkLevelWindowManager.cpp.

Referenced by QmitkLevelWindowWidgetContextMenu::getContextMenu(), and QmitkLevelWindowWidgetContextMenu::setImage().

{
  return m_AutoTopMost;
}
static Pointer mitk::LevelWindowManager::New (  ) [static]
void mitk::LevelWindowManager::OnPropertyModified ( const itk::EventObject &  e )

change notifications from mitkLevelWindowProperty

Definition at line 80 of file mitkLevelWindowManager.cpp.

Referenced by SetLevelWindowProperty().

{
  Modified();
}
void mitk::LevelWindowManager::SetAutoTopMostImage ( bool  autoTopMost,
const mitk::DataNode removedNode = NULL 
)

if autoTopMost == true: sets the topmost layer image to be affected by changes if removedNode != NULL a node was removed from DataStorage

Definition at line 86 of file mitkLevelWindowManager.cpp.

References min.

Referenced by QmitkLevelWindowWidgetContextMenu::setImage().

{
  m_AutoTopMost = autoTopMost;
  if (m_AutoTopMost == false)
    return;

  if (m_IsPropertyModifiedTagSet && m_LevelWindowProperty.IsNotNull())
  {
    m_LevelWindowProperty->RemoveObserver(m_PropertyModifiedTag);
    m_IsPropertyModifiedTagSet = false;
  }
  /* search topmost image */
  if (m_DataStorage.IsNull())
  {
    itkExceptionMacro("DataStorage not set");
  }
  int maxLayer = itk::NumericTraits<int>::min();
  m_LevelWindowProperty = NULL;

  mitk::DataStorage::SetOfObjects::ConstPointer all = this->GetRelevantNodes();
  for (mitk::DataStorage::SetOfObjects::ConstIterator it = all->Begin(); it != all->End(); ++it)
  {
    mitk::DataNode::Pointer node = it->Value();
    if (node.IsNull() || (removedNode != NULL && node == removedNode))
      continue;
    if (node->IsVisible(NULL) == false)
      continue;
    int layer = 0;
    node->GetIntProperty("layer", layer);
    if ( layer < maxLayer )
      continue;
    mitk::LevelWindowProperty::Pointer levelWindowProperty = dynamic_cast<mitk::LevelWindowProperty*>(node->GetProperty("levelwindow"));
    if (levelWindowProperty.IsNull())
      continue;
    m_LevelWindowProperty = levelWindowProperty;
    m_CurrentImage = dynamic_cast<mitk::Image*>(node->GetData());
    maxLayer = layer;
  }
  Modified();
}
void mitk::LevelWindowManager::SetDataStorage ( mitk::DataStorage ds )

Definition at line 61 of file mitkLevelWindowManager.cpp.

References mitk::DataStorage::AddNodeEvent, DataStorageChanged(), and DataStorageRemovedNode().

{
  if (ds == NULL)
    return;

  /* remove listeners of old DataStorage */
  if (m_DataStorage.IsNotNull())
  {
    m_DataStorage->AddNodeEvent.RemoveListener(MessageDelegate1<LevelWindowManager, const mitk::DataNode*>( this, &LevelWindowManager::DataStorageChanged ));
    m_DataStorage->RemoveNodeEvent.RemoveListener(MessageDelegate1<LevelWindowManager, const mitk::DataNode*>( this, &LevelWindowManager::DataStorageRemovedNode ));
  }
  /* register listener for new DataStorage */
  m_DataStorage = ds;  // register 
  m_DataStorage->AddNodeEvent.AddListener(MessageDelegate1<LevelWindowManager, const mitk::DataNode*>( this, &LevelWindowManager::DataStorageChanged ));
  m_DataStorage->RemoveNodeEvent.AddListener(MessageDelegate1<LevelWindowManager, const mitk::DataNode*>( this, &LevelWindowManager::DataStorageRemovedNode ));
  this->DataStorageChanged(); // update us with new DataStorage
}
void mitk::LevelWindowManager::SetLevelWindow ( const mitk::LevelWindow levelWindow )
void mitk::LevelWindowManager::SetLevelWindowProperty ( LevelWindowProperty::Pointer  levelWindowProperty )

Documentation Sets an specific LevelWindowProperty, all changes will affect the image belonging to this property.

Sets m_AutoTopMost to false

Definition at line 129 of file mitkLevelWindowManager.cpp.

References mitk::DataNode::GetData(), mitk::NodePredicateProperty::New(), and OnPropertyModified().

Referenced by QmitkLevelWindowWidgetContextMenu::setImage().

{
  if (levelWindowProperty.IsNull())
    return;

  if (m_IsPropertyModifiedTagSet)  // remove listener for old property
  {
    m_LevelWindowProperty->RemoveObserver(m_PropertyModifiedTag);
    m_IsPropertyModifiedTagSet = false;
  }
  m_LevelWindowProperty = levelWindowProperty;

  itk::ReceptorMemberCommand<LevelWindowManager>::Pointer command = itk::ReceptorMemberCommand<LevelWindowManager>::New();  // register listener for new property
  command->SetCallbackFunction(this, &LevelWindowManager::OnPropertyModified);
  m_PropertyModifiedTag = m_LevelWindowProperty->AddObserver( itk::ModifiedEvent(), command );
  m_IsPropertyModifiedTagSet = true;
  m_AutoTopMost = false;

  /* search image than belongs to the property */
  mitk::NodePredicateProperty::Pointer p = mitk::NodePredicateProperty::New("levelwindow", m_LevelWindowProperty);
  mitk::DataNode* n = m_DataStorage->GetNode(p);
  if (n == NULL)
  {
    itkExceptionMacro("No Image in DataStorage that belongs to LevelWindow property " << m_LevelWindowProperty);
  }
  m_CurrentImage = dynamic_cast<mitk::Image*>(n->GetData());
  this->Modified();
}
void mitk::LevelWindowManager::Update ( const itk::EventObject &  e )

gets called if a visible property changes

Definition at line 258 of file mitkLevelWindowManager.cpp.

Referenced by DataStorageRemovedNode().

{
  if (m_AutoTopMost)
  {
    SetAutoTopMostImage(true);
    return;
  }
  mitk::DataStorage::SetOfObjects::ConstPointer all = this->GetRelevantNodes();
  for (mitk::DataStorage::SetOfObjects::ConstIterator it = all->Begin(); it != all->End(); ++it)
  {
    mitk::DataNode::Pointer node = it->Value();
    if (node.IsNull())
      continue;
    if (node->IsVisible(NULL) == false)
      continue;
    mitk::LevelWindowProperty::Pointer levelWindowProperty = dynamic_cast<mitk::LevelWindowProperty*>(node->GetProperty("levelwindow"));
    if (levelWindowProperty.IsNull())
      continue;
    m_LevelWindowProperty = levelWindowProperty;
    m_CurrentImage = dynamic_cast<mitk::Image*>(node->GetData());
    if (m_LevelWindowProperty.IsNull() && m_LevelWindowProperty.GetPointer() == levelWindowProperty) // we found our m_LevelWindowProperty
    {
      return;
    }
  }
  Modified();
}

Member Data Documentation

Definition at line 105 of file mitkLevelWindowManager.h.

Definition at line 109 of file mitkLevelWindowManager.h.

Definition at line 100 of file mitkLevelWindowManager.h.

Definition at line 107 of file mitkLevelWindowManager.h.

Definition at line 110 of file mitkLevelWindowManager.h.

pointer to the LevelWindowProperty of the current image

Definition at line 101 of file mitkLevelWindowManager.h.

unsigned long mitk::LevelWindowManager::m_ObserverTag [protected]

Definition at line 106 of file mitkLevelWindowManager.h.

Definition at line 108 of file mitkLevelWindowManager.h.

map to hold observer IDīs to every visible property of DataNodeīs BaseProperty

Definition at line 103 of file mitkLevelWindowManager.h.

map to hold observer IDīs to every layer property of DataNodeīs BaseProperty

Definition at line 104 of file mitkLevelWindowManager.h.


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