Manages and coordinates instances of mitk::Tool. More...
#include <mitkToolManager.h>
Manages and coordinates instances of mitk::Tool.
There is a separate page describing the general design of QmitkInteractiveSegmentation: QmitkInteractiveSegmentationTechnicalPage
This class creates and manages several instances of mitk::Tool.
Design descisions:
$Author$
Definition at line 85 of file mitkToolManager.h.
typedef itk::SmartPointer<const Self> mitk::ToolManager::ConstPointer |
Definition at line 106 of file mitkToolManager.h.
typedef std::vector<DataNode*> mitk::ToolManager::DataVectorType |
Definition at line 91 of file mitkToolManager.h.
typedef std::map<DataNode*, unsigned long> mitk::ToolManager::NodeTagMapType |
Definition at line 92 of file mitkToolManager.h.
typedef itk::SmartPointer<Self> mitk::ToolManager::Pointer |
Definition at line 106 of file mitkToolManager.h.
typedef ToolManager mitk::ToolManager::Self |
Definition at line 106 of file mitkToolManager.h.
typedef itk::Object mitk::ToolManager::Superclass |
Definition at line 106 of file mitkToolManager.h.
typedef std::vector<Tool::Pointer> mitk::ToolManager::ToolVectorType |
Definition at line 89 of file mitkToolManager.h.
typedef std::vector<Tool::ConstPointer> mitk::ToolManager::ToolVectorTypeConst |
Definition at line 90 of file mitkToolManager.h.
mitk::ToolManager::ToolManager | ( | DataStorage * | storage ) | [protected] |
You may specify a list of tool "groups" that should be available for this ToolManager. Every Tool can report its group as a string. This constructor will try to find the tool's group inside the supplied string. If there is a match, the tool is accepted. Effectively, you can provide a human readable list like "default, lymphnodevolumetry, oldERISstuff".
Definition at line 27 of file mitkToolManager.cpp.
References mitk::CoreObjectFactory::GetInstance(), m_Tools, OnGeneralToolMessage(), and OnToolErrorMessage().
:m_ActiveTool(NULL), m_ActiveToolID(-1), m_RegisteredClients(0), m_DataStorage(storage) { CoreObjectFactory::GetInstance(); // to make sure a CoreObjectFactory was instantiated (and in turn, possible tools are registered) - bug 1029 // get a list of all known mitk::Tools std::list<itk::LightObject::Pointer> thingsThatClaimToBeATool = itk::ObjectFactoryBase::CreateAllInstance("mitkTool"); // remember these tools for ( std::list<itk::LightObject::Pointer>::iterator iter = thingsThatClaimToBeATool.begin(); iter != thingsThatClaimToBeATool.end(); ++iter ) { if ( Tool* tool = dynamic_cast<Tool*>( iter->GetPointer() ) ) { tool->SetToolManager(this); // important to call right after instantiation tool->ErrorMessage += MessageDelegate1<mitk::ToolManager, std::string>( this, &ToolManager::OnToolErrorMessage ); tool->GeneralMessage += MessageDelegate1<mitk::ToolManager, std::string>( this, &ToolManager::OnGeneralToolMessage ); m_Tools.push_back( tool ); } } //ActivateTool(0); // first one is default }
mitk::ToolManager::~ToolManager | ( | ) | [protected, virtual] |
Definition at line 55 of file mitkToolManager.cpp.
References mitk::GlobalInteraction::GetInstance(), and mitk::GlobalInteraction::RemoveListener().
{ if (m_ActiveTool) { m_ActiveTool->Deactivated(); GlobalInteraction::GetInstance()->RemoveListener( m_ActiveTool ); m_ActiveTool = NULL; m_ActiveToolID = -1; // no tool active ActiveToolChanged.Send(); } for ( NodeTagMapType::iterator observerTagMapIter = m_ReferenceDataObserverTags.begin(); observerTagMapIter != m_ReferenceDataObserverTags.end(); ++observerTagMapIter ) { observerTagMapIter->first->RemoveObserver( observerTagMapIter->second ); } }
bool mitk::ToolManager::ActivateTool | ( | int | id ) |
id | The tool to activate. Provide -1 for disabling any tools. Counting starts with 0. |
Definition at line 110 of file mitkToolManager.cpp.
References mitk::GlobalInteraction::AddListener(), mitk::GlobalInteraction::GetInstance(), and mitk::GlobalInteraction::RemoveListener().
Referenced by QmitkSegmentationView::Deactivated().
{ //MITK_INFO << "ToolManager::ActivateTool("<<id<<")"<<std::endl; //if( GetToolById(id) == NULL ) return false; // NO, invalid IDs are actually used here. Parameter -1 or anything that does not exists will deactivate all tools! if ( GetToolById( id ) == m_ActiveTool ) return true; // no change needed static int nextTool = -1; nextTool = id; //MITK_INFO << "ToolManager::ActivateTool("<<id<<"): nextTool = "<<nextTool<<std::endl; static bool inActivateTool = false; if (inActivateTool) { //MITK_INFO << "ToolManager::ActivateTool("<<id<<"): already inside ActivateTool somehow, returning now "<<std::endl; return true; } inActivateTool = true; while ( nextTool != m_ActiveToolID ) { //MITK_INFO <<"ToolManager::ActivateTool: nextTool = " << nextTool << " (active tool = " << m_ActiveToolID<<")"<<std::endl; if (m_ActiveTool) { m_ActiveTool->Deactivated(); GlobalInteraction::GetInstance()->RemoveListener( m_ActiveTool ); } m_ActiveTool = GetToolById( nextTool ); m_ActiveToolID = m_ActiveTool ? nextTool : -1; // current ID if tool is valid, otherwise -1 ActiveToolChanged.Send(); if (m_ActiveTool) { if (m_RegisteredClients) { m_ActiveTool->Activated(); GlobalInteraction::GetInstance()->AddListener( m_ActiveTool ); } } } inActivateTool = false; return (m_ActiveTool != NULL); }
mitk::Tool * mitk::ToolManager::GetActiveTool | ( | ) |
Definition at line 446 of file mitkToolManager.cpp.
{ return m_ActiveTool; }
int mitk::ToolManager::GetActiveToolID | ( | ) |
Definition at line 441 of file mitkToolManager.cpp.
{ return m_ActiveToolID; }
virtual const char* mitk::ToolManager::GetClassName | ( | ) | const [virtual] |
mitk::DataStorage * mitk::ToolManager::GetDataStorage | ( | ) |
Definition at line 410 of file mitkToolManager.cpp.
{ if ( m_DataStorage.IsNotNull() ) { return m_DataStorage; } else { return NULL; } }
mitk::ToolManager::DataVectorType mitk::ToolManager::GetReferenceData | ( | ) |
Definition at line 371 of file mitkToolManager.cpp.
Referenced by QmitkSegmentationView::CheckImageAlignment(), QmitkSegmentationView::CreateNewSegmentation(), QmitkSegmentationView::CreateSegmentationFromSurface(), QmitkSegmentationView::ForceDisplayPreferencesUponAllImages(), QmitkSlicesInterpolator::OnInterpolationActivated(), and QmitkSegmentationView::ToolboxStackPageChanged().
{ return m_ReferenceData; }
mitk::DataNode * mitk::ToolManager::GetReferenceData | ( | int | idx ) |
Definition at line 376 of file mitkToolManager.cpp.
{ try { return m_ReferenceData.at(idx); } catch(std::exception&) { return NULL; } }
mitk::DataNode * mitk::ToolManager::GetRoiData | ( | int | idx ) |
Definition at line 398 of file mitkToolManager.cpp.
{ try { return m_RoiData.at(idx); } catch(std::exception&) { return NULL; } }
mitk::ToolManager::DataVectorType mitk::ToolManager::GetRoiData | ( | ) |
Definition at line 393 of file mitkToolManager.cpp.
{ return m_RoiData; }
mitk::Tool * mitk::ToolManager::GetToolById | ( | int | id ) |
Definition at line 98 of file mitkToolManager.cpp.
Referenced by QmitkSegmentationView::CreateNewSegmentation().
{ try { return m_Tools.at(id); } catch(std::exception&) { return NULL; } }
int mitk::ToolManager::GetToolID | ( | const Tool * | tool ) |
Definition at line 479 of file mitkToolManager.cpp.
int mitk::ToolManager::GetToolIdByToolType | ( | ) | [inline] |
Definition at line 130 of file mitkToolManager.h.
const mitk::ToolManager::ToolVectorTypeConst mitk::ToolManager::GetTools | ( | ) |
Gives you a list of all tools. This is const on purpose.
Definition at line 84 of file mitkToolManager.cpp.
{ ToolVectorTypeConst resultList; for ( ToolVectorType::iterator iter = m_Tools.begin(); iter != m_Tools.end(); ++iter ) { resultList.push_back( iter->GetPointer() ); } return resultList; }
mitk::ToolManager::DataVectorType mitk::ToolManager::GetWorkingData | ( | ) |
Definition at line 388 of file mitkToolManager.cpp.
Referenced by QmitkSegmentationView::ForceDisplayPreferencesUponAllImages(), QmitkSlicesInterpolator::Initialize(), QmitkSlicesInterpolator::Interpolate(), QmitkSlicesInterpolator::OnInterpolationActivated(), and QmitkSegmentationView::ToolboxStackPageChanged().
{ return m_WorkingData; }
mitk::DataNode * mitk::ToolManager::GetWorkingData | ( | int | idx ) |
Definition at line 429 of file mitkToolManager.cpp.
{ try { return m_WorkingData.at(idx); } catch(std::exception&) { return NULL; } }
static Pointer mitk::ToolManager::New | ( | DataStorage * | _arg ) | [inline, static] |
Definition at line 107 of file mitkToolManager.h.
Referenced by mitkToolManagerTest(), QmitkToolReferenceDataSelectionBox::QmitkToolReferenceDataSelectionBox(), QmitkToolRoiDataSelectionBox::QmitkToolRoiDataSelectionBox(), QmitkToolSelectionBox::QmitkToolSelectionBox(), QmitkToolWorkingDataSelectionBox::QmitkToolWorkingDataSelectionBox(), and QmitkSegmentationPostProcessing::ThresholdImage().
{
void mitk::ToolManager::OnGeneralToolMessage | ( | std::string | s ) |
Definition at line 78 of file mitkToolManager.cpp.
Referenced by ToolManager().
{ this->GeneralToolMessage(s); }
void mitk::ToolManager::OnOneOfTheReferenceDataDeleted | ( | itk::Object * | caller, |
const itk::EventObject & | e | ||
) |
Definition at line 195 of file mitkToolManager.cpp.
Referenced by SetReferenceData().
{ //MITK_INFO << "Deleted: " << (void*)caller << " Removing from reference data list." << std::endl; DataVectorType v; for (DataVectorType::iterator dataIter = m_ReferenceData.begin(); dataIter != m_ReferenceData.end(); ++dataIter ) { //MITK_INFO << " In list: " << (void*)(*dataIter); if ( (void*)(*dataIter) != (void*)caller ) { v.push_back( *dataIter ); //MITK_INFO << " kept" << std::endl; } else { //MITK_INFO << " removed" << std::endl; m_ReferenceDataObserverTags.erase( *dataIter ); // no tag to remove anymore } } this->SetReferenceData( v ); }
void mitk::ToolManager::OnOneOfTheReferenceDataDeletedConst | ( | const itk::Object * | caller, |
const itk::EventObject & | e | ||
) |
Definition at line 190 of file mitkToolManager.cpp.
Referenced by SetReferenceData().
{ OnOneOfTheReferenceDataDeleted( const_cast<itk::Object*>(caller), e ); }
void mitk::ToolManager::OnOneOfTheRoiDataDeleted | ( | itk::Object * | caller, |
const itk::EventObject & | e | ||
) |
Definition at line 349 of file mitkToolManager.cpp.
Referenced by SetRoiData().
{ //MITK_INFO << "Deleted: " << (void*)caller << " Removing from roi data list." << std::endl; DataVectorType v; for (DataVectorType::iterator dataIter = m_RoiData.begin(); dataIter != m_RoiData.end(); ++dataIter ) { //MITK_INFO << " In list: " << (void*)(*dataIter); if ( (void*)(*dataIter) != (void*)caller ) { v.push_back( *dataIter ); //MITK_INFO << " kept" << std::endl; } else { //MITK_INFO << " removed" << std::endl; m_RoiDataObserverTags.erase( *dataIter ); // no tag to remove anymore } } this->SetRoiData( v ); }
void mitk::ToolManager::OnOneOfTheRoiDataDeletedConst | ( | const itk::Object * | caller, |
const itk::EventObject & | e | ||
) |
Definition at line 344 of file mitkToolManager.cpp.
Referenced by SetRoiData().
{ OnOneOfTheRoiDataDeleted( const_cast<itk::Object*>(caller), e ); }
void mitk::ToolManager::OnOneOfTheWorkingDataDeleted | ( | itk::Object * | caller, |
const itk::EventObject & | e | ||
) |
Definition at line 266 of file mitkToolManager.cpp.
Referenced by SetWorkingData().
{ //MITK_INFO << "Deleted: " << (void*)caller << " Removing from reference data list." << std::endl; DataVectorType v; for (DataVectorType::iterator dataIter = m_WorkingData.begin(); dataIter != m_WorkingData.end(); ++dataIter ) { //MITK_INFO << " In list: " << (void*)(*dataIter); if ( (void*)(*dataIter) != (void*)caller ) { v.push_back( *dataIter ); //MITK_INFO << " kept" << std::endl; } else { //MITK_INFO << " removed" << std::endl; m_WorkingDataObserverTags.erase( *dataIter ); // no tag to remove anymore } } this->SetWorkingData( v ); }
void mitk::ToolManager::OnOneOfTheWorkingDataDeletedConst | ( | const itk::Object * | caller, |
const itk::EventObject & | e | ||
) |
Definition at line 261 of file mitkToolManager.cpp.
Referenced by SetWorkingData().
{ OnOneOfTheWorkingDataDeleted( const_cast<itk::Object*>(caller), e ); }
void mitk::ToolManager::OnToolErrorMessage | ( | std::string | s ) |
Definition at line 73 of file mitkToolManager.cpp.
Referenced by ToolManager().
{ this->ToolErrorMessage(s); }
void mitk::ToolManager::RegisterClient | ( | ) |
Definition at line 451 of file mitkToolManager.cpp.
References mitk::GlobalInteraction::AddListener(), and mitk::GlobalInteraction::GetInstance().
{ if ( m_RegisteredClients == 0 ) { if ( m_ActiveTool ) { m_ActiveTool->Activated(); GlobalInteraction::GetInstance()->AddListener( m_ActiveTool ); } } ++m_RegisteredClients; }
void mitk::ToolManager::SetDataStorage | ( | DataStorage & | storage ) |
Definition at line 422 of file mitkToolManager.cpp.
Referenced by QmitkSegmentationView::CreateQtPartControl().
{ m_DataStorage = &storage; }
void mitk::ToolManager::SetReferenceData | ( | DataVectorType | data ) |
Definition at line 157 of file mitkToolManager.cpp.
References OnOneOfTheReferenceDataDeleted(), and OnOneOfTheReferenceDataDeletedConst().
Referenced by QmitkSegmentationView::SetToolManagerSelection().
{ if (data != m_ReferenceData) { // remove observers from old nodes for ( DataVectorType::iterator dataIter = m_ReferenceData.begin(); dataIter != m_ReferenceData.end(); ++dataIter ) { NodeTagMapType::iterator searchIter = m_ReferenceDataObserverTags.find( *dataIter ); if ( searchIter != m_ReferenceDataObserverTags.end() ) { //MITK_INFO << "Stopping observation of " << (void*)(*dataIter) << std::endl; (*dataIter)->RemoveObserver( searchIter->second ); } } m_ReferenceData = data; // TODO tell active tool? // attach new observers m_ReferenceDataObserverTags.clear(); for ( DataVectorType::iterator dataIter = m_ReferenceData.begin(); dataIter != m_ReferenceData.end(); ++dataIter ) { //MITK_INFO << "Observing " << (void*)(*dataIter) << std::endl; itk::MemberCommand<ToolManager>::Pointer command = itk::MemberCommand<ToolManager>::New(); command->SetCallbackFunction( this, &ToolManager::OnOneOfTheReferenceDataDeleted ); command->SetCallbackFunction( this, &ToolManager::OnOneOfTheReferenceDataDeletedConst ); m_ReferenceDataObserverTags.insert( std::pair<DataNode*, unsigned long>( (*dataIter), (*dataIter)->AddObserver( itk::DeleteEvent(), command ) ) ); } ReferenceDataChanged.Send(); } }
void mitk::ToolManager::SetReferenceData | ( | DataNode * | data ) |
Definition at line 217 of file mitkToolManager.cpp.
{ //MITK_INFO << "ToolManager::SetReferenceData(" << (void*)data << ")" << std::endl; DataVectorType v; if (data) { v.push_back(data); } SetReferenceData(v); }
void mitk::ToolManager::SetRoiData | ( | DataNode * | data ) |
Definition at line 333 of file mitkToolManager.cpp.
{ DataVectorType v; if(data) { v.push_back(data); } this->SetRoiData(v); }
void mitk::ToolManager::SetRoiData | ( | DataVectorType | data ) |
Definition at line 301 of file mitkToolManager.cpp.
References OnOneOfTheRoiDataDeleted(), and OnOneOfTheRoiDataDeletedConst().
{ if (data != m_RoiData) { // remove observers from old nodes for ( DataVectorType::iterator dataIter = m_RoiData.begin(); dataIter != m_RoiData.end(); ++dataIter ) { NodeTagMapType::iterator searchIter = m_RoiDataObserverTags.find( *dataIter ); if ( searchIter != m_RoiDataObserverTags.end() ) { //MITK_INFO << "Stopping observation of " << (void*)(*dataIter) << std::endl; (*dataIter)->RemoveObserver( searchIter->second ); } } m_RoiData = data; // TODO tell active tool? // attach new observers m_RoiDataObserverTags.clear(); for ( DataVectorType::iterator dataIter = m_RoiData.begin(); dataIter != m_RoiData.end(); ++dataIter ) { //MITK_INFO << "Observing " << (void*)(*dataIter) << std::endl; itk::MemberCommand<ToolManager>::Pointer command = itk::MemberCommand<ToolManager>::New(); command->SetCallbackFunction( this, &ToolManager::OnOneOfTheRoiDataDeleted ); command->SetCallbackFunction( this, &ToolManager::OnOneOfTheRoiDataDeletedConst ); m_RoiDataObserverTags.insert( std::pair<DataNode*, unsigned long>( (*dataIter), (*dataIter)->AddObserver( itk::DeleteEvent(), command ) ) ); } RoiDataChanged.Send(); } }
void mitk::ToolManager::SetWorkingData | ( | DataNode * | data ) |
Definition at line 289 of file mitkToolManager.cpp.
{ DataVectorType v; if (data) // don't allow for NULL nodes { v.push_back(data); } SetWorkingData(v); }
void mitk::ToolManager::SetWorkingData | ( | DataVectorType | data ) |
Definition at line 228 of file mitkToolManager.cpp.
References OnOneOfTheWorkingDataDeleted(), and OnOneOfTheWorkingDataDeletedConst().
Referenced by QmitkSegmentationView::SetToolManagerSelection().
{ if ( data != m_WorkingData ) { // remove observers from old nodes for ( DataVectorType::iterator dataIter = m_WorkingData.begin(); dataIter != m_WorkingData.end(); ++dataIter ) { NodeTagMapType::iterator searchIter = m_WorkingDataObserverTags.find( *dataIter ); if ( searchIter != m_WorkingDataObserverTags.end() ) { //MITK_INFO << "Stopping observation of " << (void*)(*dataIter) << std::endl; (*dataIter)->RemoveObserver( searchIter->second ); } } m_WorkingData = data; // TODO tell active tool? // attach new observers m_WorkingDataObserverTags.clear(); for ( DataVectorType::iterator dataIter = m_WorkingData.begin(); dataIter != m_WorkingData.end(); ++dataIter ) { //MITK_INFO << "Observing " << (void*)(*dataIter) << std::endl; itk::MemberCommand<ToolManager>::Pointer command = itk::MemberCommand<ToolManager>::New(); command->SetCallbackFunction( this, &ToolManager::OnOneOfTheWorkingDataDeleted ); command->SetCallbackFunction( this, &ToolManager::OnOneOfTheWorkingDataDeletedConst ); m_WorkingDataObserverTags.insert( std::pair<DataNode*, unsigned long>( (*dataIter), (*dataIter)->AddObserver( itk::DeleteEvent(), command ) ) ); } WorkingDataChanged.Send(); } }
void mitk::ToolManager::UnregisterClient | ( | ) |
Definition at line 465 of file mitkToolManager.cpp.
References mitk::GlobalInteraction::GetInstance(), and mitk::GlobalInteraction::RemoveListener().
{ --m_RegisteredClients; if ( m_RegisteredClients == 0 ) { if ( m_ActiveTool ) { m_ActiveTool->Deactivated(); GlobalInteraction::GetInstance()->RemoveListener( m_ActiveTool ); } } }
Definition at line 98 of file mitkToolManager.h.
Message1<std::string> mitk::ToolManager::GeneralToolMessage |
Definition at line 104 of file mitkToolManager.h.
Tool* mitk::ToolManager::m_ActiveTool [protected] |
Definition at line 265 of file mitkToolManager.h.
int mitk::ToolManager::m_ActiveToolID [protected] |
Definition at line 266 of file mitkToolManager.h.
WeakPointer<DataStorage> mitk::ToolManager::m_DataStorage [protected] |
Definition at line 279 of file mitkToolManager.h.
DataVectorType mitk::ToolManager::m_ReferenceData [protected] |
Definition at line 268 of file mitkToolManager.h.
Definition at line 269 of file mitkToolManager.h.
int mitk::ToolManager::m_RegisteredClients [protected] |
Definition at line 277 of file mitkToolManager.h.
DataVectorType mitk::ToolManager::m_RoiData [protected] |
Definition at line 274 of file mitkToolManager.h.
Definition at line 275 of file mitkToolManager.h.
ToolVectorType mitk::ToolManager::m_Tools [protected] |
Definition at line 263 of file mitkToolManager.h.
Referenced by ToolManager().
DataVectorType mitk::ToolManager::m_WorkingData [protected] |
Definition at line 271 of file mitkToolManager.h.
Definition at line 272 of file mitkToolManager.h.
Definition at line 96 of file mitkToolManager.h.
Referenced by QmitkSegmentationView::CreateQtPartControl().
Definition at line 95 of file mitkToolManager.h.
Referenced by QmitkSegmentationView::CreateQtPartControl().
Definition at line 94 of file mitkToolManager.h.
Definition at line 99 of file mitkToolManager.h.
Referenced by QmitkSlicesInterpolator::Initialize().
Definition at line 101 of file mitkToolManager.h.
Message1<std::string> mitk::ToolManager::ToolErrorMessage |
Definition at line 103 of file mitkToolManager.h.
Definition at line 100 of file mitkToolManager.h.
Referenced by QmitkSlicesInterpolator::Initialize().