Provides access to the mitkLevelWindowProperty object and mitkLevelWindow to the current image. More...
#include <mitkLevelWindowManager.h>
Public Types | |
typedef LevelWindowManager | Self |
typedef itk::Object | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SmartPointer < const Self > | ConstPointer |
Public Member Functions | |
virtual const char * | GetClassName () const |
void | SetDataStorage (mitk::DataStorage *ds) |
mitk::DataStorage * | GetDataStorage () |
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 LevelWindow & | GetLevelWindow () |
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::Image * | GetCurrentImage () |
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::Image * | m_CurrentImage |
bool | m_IsPropertyModifiedTagSet |
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.
typedef itk::SmartPointer<const Self> mitk::LevelWindowManager::ConstPointer |
Definition at line 48 of file mitkLevelWindowManager.h.
typedef std::map<unsigned long, mitk::BaseProperty::Pointer> mitk::LevelWindowManager::ObserverToPropertyMap [protected] |
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.
typedef itk::Object mitk::LevelWindowManager::Superclass |
Definition at line 48 of file mitkLevelWindowManager.h.
mitk::LevelWindowManager::LevelWindowManager | ( | ) | [protected] |
Definition at line 32 of file mitkLevelWindowManager.cpp.
: m_DataStorage(NULL), m_LevelWindowProperty(NULL), m_AutoTopMost(true), m_IsObserverTagSet(false), m_CurrentImage(NULL),m_IsPropertyModifiedTagSet(false) { }
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); } }
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().
{ this->DataStorageRemovedNode(); }
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().
{ return m_LevelWindowProperty; }
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 ) |
sets new Level/Window values and informs all listeners about changes
Definition at line 178 of file mitkLevelWindowManager.cpp.
Referenced by QmitkLevelWindowWidgetContextMenu::changeScaleRange(), QmitkLevelWindowWidgetContextMenu::setDefaultLevelWindow(), QmitkLevelWindowWidgetContextMenu::setDefaultScaleRange(), QmitkLevelWindowWidgetContextMenu::setFixed(), QmitkLevelWindowWidgetContextMenu::setMaximumWindow(), QmitkLevelWindowWidgetContextMenu::setPreset(), and QmitkLevelWindowWidgetContextMenu::useAllGreyvaluesFromImage().
{ if (m_LevelWindowProperty.IsNotNull()) { m_LevelWindowProperty->SetLevelWindow(levelWindow); } this->Modified(); }
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(); }
bool mitk::LevelWindowManager::m_AutoTopMost [protected] |
Definition at line 105 of file mitkLevelWindowManager.h.
mitk::Image* mitk::LevelWindowManager::m_CurrentImage [protected] |
Definition at line 109 of file mitkLevelWindowManager.h.
Definition at line 100 of file mitkLevelWindowManager.h.
bool mitk::LevelWindowManager::m_IsObserverTagSet [protected] |
Definition at line 107 of file mitkLevelWindowManager.h.
bool mitk::LevelWindowManager::m_IsPropertyModifiedTagSet [protected] |
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.
unsigned long mitk::LevelWindowManager::m_PropertyModifiedTag [protected] |
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.