diff --git a/Core/Code/Resources/Interactions/Legacy/DisplayConfigMITKTools.xml b/Core/Code/Resources/Interactions/Legacy/DisplayConfigMITKTools.xml
new file mode 100644
index 0000000000..62d73d33ae
--- /dev/null
+++ b/Core/Code/Resources/Interactions/Legacy/DisplayConfigMITKTools.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Core/Code/files.cmake b/Core/Code/files.cmake
index 49ddb9419e..783778987f 100644
--- a/Core/Code/files.cmake
+++ b/Core/Code/files.cmake
@@ -1,355 +1,356 @@
set(H_FILES
Algorithms/itkImportMitkImageContainer.h
Algorithms/itkImportMitkImageContainer.txx
Algorithms/itkLocalVariationImageFilter.h
Algorithms/itkLocalVariationImageFilter.txx
Algorithms/itkMITKScalarImageToHistogramGenerator.h
Algorithms/itkMITKScalarImageToHistogramGenerator.txx
Algorithms/itkTotalVariationDenoisingImageFilter.h
Algorithms/itkTotalVariationDenoisingImageFilter.txx
Algorithms/itkTotalVariationSingleIterationImageFilter.h
Algorithms/itkTotalVariationSingleIterationImageFilter.txx
Algorithms/mitkBilateralFilter.h
Algorithms/mitkBilateralFilter.cpp
Algorithms/mitkInstantiateAccessFunctions.h
Algorithms/mitkPixelTypeList.h
# Preprocessor macros taken from Boost
Algorithms/mitkPPArithmeticDec.h
Algorithms/mitkPPArgCount.h
Algorithms/mitkPPCat.h
Algorithms/mitkPPConfig.h
Algorithms/mitkPPControlExprIIf.h
Algorithms/mitkPPControlIf.h
Algorithms/mitkPPControlIIf.h
Algorithms/mitkPPDebugError.h
Algorithms/mitkPPDetailAutoRec.h
Algorithms/mitkPPDetailDMCAutoRec.h
Algorithms/mitkPPExpand.h
Algorithms/mitkPPFacilitiesEmpty.h
Algorithms/mitkPPFacilitiesExpand.h
Algorithms/mitkPPLogicalBool.h
Algorithms/mitkPPRepetitionDetailDMCFor.h
Algorithms/mitkPPRepetitionDetailEDGFor.h
Algorithms/mitkPPRepetitionDetailFor.h
Algorithms/mitkPPRepetitionDetailMSVCFor.h
Algorithms/mitkPPRepetitionFor.h
Algorithms/mitkPPSeqElem.h
Algorithms/mitkPPSeqForEach.h
Algorithms/mitkPPSeqForEachProduct.h
Algorithms/mitkPPSeq.h
Algorithms/mitkPPSeqEnum.h
Algorithms/mitkPPSeqSize.h
Algorithms/mitkPPSeqToTuple.h
Algorithms/mitkPPStringize.h
Algorithms/mitkPPTupleEat.h
Algorithms/mitkPPTupleElem.h
Algorithms/mitkPPTupleRem.h
Algorithms/mitkClippedSurfaceBoundsCalculator.h
Algorithms/mitkExtractSliceFilter.h
Algorithms/mitkConvert2Dto3DImageFilter.h
Common/mitkExceptionMacro.h
Common/mitkServiceBaseObject.h
Common/mitkTestingMacros.h
DataManagement/mitkImageAccessByItk.h
DataManagement/mitkImageCast.h
DataManagement/mitkImagePixelAccessor.h
DataManagement/mitkImagePixelReadAccessor.h
DataManagement/mitkImagePixelWriteAccessor.h
DataManagement/mitkImageReadAccessor.h
DataManagement/mitkImageWriteAccessor.h
DataManagement/mitkITKImageImport.h
DataManagement/mitkITKImageImport.txx
DataManagement/mitkImageToItk.h
DataManagement/mitkImageToItk.txx
Interactions/mitkEventMapperAddOn.h
Interfaces/mitkIDataNodeReader.h
IO/mitkPixelTypeTraits.h
)
set(CPP_FILES
Algorithms/mitkBaseDataSource.cpp
Algorithms/mitkBaseProcess.cpp
Algorithms/mitkDataNodeSource.cpp
Algorithms/mitkGeometry2DDataToSurfaceFilter.cpp
Algorithms/mitkHistogramGenerator.cpp
Algorithms/mitkImageChannelSelector.cpp
Algorithms/mitkImageSliceSelector.cpp
Algorithms/mitkImageSource.cpp
Algorithms/mitkImageTimeSelector.cpp
Algorithms/mitkImageToImageFilter.cpp
Algorithms/mitkPointSetSource.cpp
Algorithms/mitkPointSetToPointSetFilter.cpp
Algorithms/mitkRGBToRGBACastImageFilter.cpp
Algorithms/mitkSubImageSelector.cpp
Algorithms/mitkSurfaceSource.cpp
Algorithms/mitkSurfaceToSurfaceFilter.cpp
Algorithms/mitkUIDGenerator.cpp
Algorithms/mitkVolumeCalculator.cpp
Algorithms/mitkClippedSurfaceBoundsCalculator.cpp
Algorithms/mitkExtractSliceFilter.cpp
Algorithms/mitkConvert2Dto3DImageFilter.cpp
Controllers/mitkBaseController.cpp
Controllers/mitkCallbackFromGUIThread.cpp
Controllers/mitkCameraController.cpp
Controllers/mitkCameraRotationController.cpp
Controllers/mitkCoreActivator.cpp
Controllers/mitkFocusManager.cpp
Controllers/mitkLimitedLinearUndo.cpp
Controllers/mitkOperationEvent.cpp
Controllers/mitkPlanePositionManager.cpp
Controllers/mitkProgressBar.cpp
Controllers/mitkRenderingManager.cpp
Controllers/mitkSliceNavigationController.cpp
Controllers/mitkSlicesCoordinator.cpp
Controllers/mitkSlicesRotator.cpp
Controllers/mitkSlicesSwiveller.cpp
Controllers/mitkStatusBar.cpp
Controllers/mitkStepper.cpp
Controllers/mitkTestManager.cpp
Controllers/mitkUndoController.cpp
Controllers/mitkVerboseLimitedLinearUndo.cpp
Controllers/mitkVtkInteractorCameraController.cpp
Controllers/mitkVtkLayerController.cpp
DataManagement/mitkAbstractTransformGeometry.cpp
DataManagement/mitkAnnotationProperty.cpp
DataManagement/mitkApplicationCursor.cpp
DataManagement/mitkBaseData.cpp
DataManagement/mitkBaseProperty.cpp
DataManagement/mitkClippingProperty.cpp
DataManagement/mitkChannelDescriptor.cpp
DataManagement/mitkColorProperty.cpp
DataManagement/mitkDataStorage.cpp
#DataManagement/mitkDataTree.cpp
DataManagement/mitkDataNode.cpp
DataManagement/mitkDataNodeFactory.cpp
#DataManagement/mitkDataTreeStorage.cpp
DataManagement/mitkDisplayGeometry.cpp
DataManagement/mitkEnumerationProperty.cpp
DataManagement/mitkGeometry2D.cpp
DataManagement/mitkGeometry2DData.cpp
DataManagement/mitkGeometry3D.cpp
DataManagement/mitkGeometryData.cpp
DataManagement/mitkGroupTagProperty.cpp
DataManagement/mitkImage.cpp
DataManagement/mitkImageAccessorBase.cpp
DataManagement/mitkImageCaster.cpp
DataManagement/mitkImageCastPart1.cpp
DataManagement/mitkImageCastPart2.cpp
DataManagement/mitkImageCastPart3.cpp
DataManagement/mitkImageCastPart4.cpp
DataManagement/mitkImageDataItem.cpp
DataManagement/mitkImageDescriptor.cpp
DataManagement/mitkImageVtkAccessor.cpp
DataManagement/mitkImageStatisticsHolder.cpp
DataManagement/mitkLandmarkBasedCurvedGeometry.cpp
DataManagement/mitkLandmarkProjectorBasedCurvedGeometry.cpp
DataManagement/mitkLandmarkProjector.cpp
DataManagement/mitkLevelWindow.cpp
DataManagement/mitkLevelWindowManager.cpp
DataManagement/mitkLevelWindowPreset.cpp
DataManagement/mitkLevelWindowProperty.cpp
DataManagement/mitkLookupTable.cpp
DataManagement/mitkLookupTables.cpp # specializations of GenericLookupTable
DataManagement/mitkMemoryUtilities.cpp
DataManagement/mitkModalityProperty.cpp
DataManagement/mitkModeOperation.cpp
DataManagement/mitkNodePredicateAnd.cpp
DataManagement/mitkNodePredicateBase.cpp
DataManagement/mitkNodePredicateCompositeBase.cpp
DataManagement/mitkNodePredicateData.cpp
DataManagement/mitkNodePredicateDataType.cpp
DataManagement/mitkNodePredicateDimension.cpp
DataManagement/mitkNodePredicateFirstLevel.cpp
DataManagement/mitkNodePredicateNot.cpp
DataManagement/mitkNodePredicateOr.cpp
DataManagement/mitkNodePredicateProperty.cpp
DataManagement/mitkNodePredicateSource.cpp
DataManagement/mitkPlaneOrientationProperty.cpp
DataManagement/mitkPlaneGeometry.cpp
DataManagement/mitkPlaneOperation.cpp
DataManagement/mitkPointOperation.cpp
DataManagement/mitkPointSet.cpp
DataManagement/mitkProperties.cpp
DataManagement/mitkPropertyList.cpp
DataManagement/mitkRestorePlanePositionOperation.cpp
DataManagement/mitkRotationOperation.cpp
DataManagement/mitkSlicedData.cpp
DataManagement/mitkSlicedGeometry3D.cpp
DataManagement/mitkSmartPointerProperty.cpp
DataManagement/mitkStandaloneDataStorage.cpp
DataManagement/mitkStateTransitionOperation.cpp
DataManagement/mitkStringProperty.cpp
DataManagement/mitkSurface.cpp
DataManagement/mitkSurfaceOperation.cpp
DataManagement/mitkThinPlateSplineCurvedGeometry.cpp
DataManagement/mitkTimeSlicedGeometry.cpp
DataManagement/mitkTransferFunction.cpp
DataManagement/mitkTransferFunctionProperty.cpp
DataManagement/mitkTransferFunctionInitializer.cpp
DataManagement/mitkVector.cpp
DataManagement/mitkVtkInterpolationProperty.cpp
DataManagement/mitkVtkRepresentationProperty.cpp
DataManagement/mitkVtkResliceInterpolationProperty.cpp
DataManagement/mitkVtkScalarModeProperty.cpp
DataManagement/mitkVtkVolumeRenderingProperty.cpp
DataManagement/mitkWeakPointerProperty.cpp
DataManagement/mitkShaderProperty.cpp
DataManagement/mitkResliceMethodProperty.cpp
DataManagement/mitkMaterial.cpp
Interactions/mitkAction.cpp
Interactions/mitkAffineInteractor.cpp
Interactions/mitkBindDispatcherInteractor.cpp
Interactions/mitkCoordinateSupplier.cpp
Interactions/mitkDataInteractor.cpp
Interactions/mitkDispatcher.cpp
Interactions/mitkDisplayCoordinateOperation.cpp
Interactions/mitkDisplayInteractor.cpp
Interactions/mitkDisplayPositionEvent.cpp
# Interactions/mitkDisplayVectorInteractorLevelWindow.cpp # legacy, prob even now unneeded
# Interactions/mitkDisplayVectorInteractorScroll.cpp
Interactions/mitkEvent.cpp
Interactions/mitkEventConfig.cpp
Interactions/mitkEventDescription.cpp
Interactions/mitkEventFactory.cpp
Interactions/mitkInteractionEventHandler.cpp
Interactions/mitkEventMapper.cpp
Interactions/mitkEventStateMachine.cpp
Interactions/mitkGlobalInteraction.cpp
Interactions/mitkInteractor.cpp
Interactions/mitkInternalEvent.cpp
Interactions/mitkInteractionEvent.cpp
Interactions/mitkInteractionPositionEvent.cpp
Interactions/mitkInteractionKeyEvent.cpp
Interactions/mitkMousePressEvent.cpp
Interactions/mitkMouseMoveEvent.cpp
Interactions/mitkMouseReleaseEvent.cpp
Interactions/mitkMouseWheelEvent.cpp
Interactions/mitkMouseModeSwitcher.cpp
Interactions/mitkMouseMovePointSetInteractor.cpp
Interactions/mitkMoveBaseDataInteractor.cpp
Interactions/mitkNodeDepententPointSetInteractor.cpp
Interactions/mitkPointSetDataInteractor.cpp
Interactions/mitkPointSetInteractor.cpp
Interactions/mitkPositionEvent.cpp
Interactions/mitkPositionTracker.cpp
Interactions/mitkStateMachineAction.cpp
Interactions/mitkStateMachineState.cpp
Interactions/mitkStateMachineTransition.cpp
Interactions/mitkState.cpp
Interactions/mitkStateMachineContainer.cpp
Interactions/mitkStateEvent.cpp
Interactions/mitkStateMachine.cpp
Interactions/mitkStateMachineFactory.cpp
Interactions/mitkTransition.cpp
Interactions/mitkWheelEvent.cpp
Interactions/mitkKeyEvent.cpp
Interactions/mitkVtkEventAdapter.cpp
Interactions/mitkVtkInteractorStyle.cxx
Interactions/mitkCrosshairPositionEvent.cpp
Interfaces/mitkInteractionEventObserver.cpp
IO/mitkBaseDataIOFactory.cpp
IO/mitkCoreDataNodeReader.cpp
IO/mitkDicomSeriesReader.cpp
IO/mitkFileReader.cpp
IO/mitkFileSeriesReader.cpp
IO/mitkFileWriter.cpp
#IO/mitkIpPicGet.c
IO/mitkImageGenerator.cpp
IO/mitkImageWriter.cpp
IO/mitkImageWriterFactory.cpp
IO/mitkItkImageFileIOFactory.cpp
IO/mitkItkImageFileReader.cpp
IO/mitkItkLoggingAdapter.cpp
IO/mitkItkPictureWrite.cpp
IO/mitkIOUtil.cpp
IO/mitkLookupTableProperty.cpp
IO/mitkOperation.cpp
#IO/mitkPicFileIOFactory.cpp
#IO/mitkPicFileReader.cpp
#IO/mitkPicFileWriter.cpp
#IO/mitkPicHelper.cpp
#IO/mitkPicVolumeTimeSeriesIOFactory.cpp
#IO/mitkPicVolumeTimeSeriesReader.cpp
IO/mitkPixelType.cpp
IO/mitkPointSetIOFactory.cpp
IO/mitkPointSetReader.cpp
IO/mitkPointSetWriter.cpp
IO/mitkPointSetWriterFactory.cpp
IO/mitkRawImageFileReader.cpp
IO/mitkStandardFileLocations.cpp
IO/mitkSTLFileIOFactory.cpp
IO/mitkSTLFileReader.cpp
IO/mitkSurfaceVtkWriter.cpp
IO/mitkSurfaceVtkWriterFactory.cpp
IO/mitkVtkLoggingAdapter.cpp
IO/mitkVtiFileIOFactory.cpp
IO/mitkVtiFileReader.cpp
IO/mitkVtkImageIOFactory.cpp
IO/mitkVtkImageReader.cpp
IO/mitkVtkSurfaceIOFactory.cpp
IO/mitkVtkSurfaceReader.cpp
IO/vtkPointSetXMLParser.cpp
IO/mitkLog.cpp
Rendering/mitkBaseRenderer.cpp
Rendering/mitkVtkMapper2D.cpp
Rendering/mitkVtkMapper3D.cpp
Rendering/mitkRenderWindowFrame.cpp
Rendering/mitkGeometry2DDataMapper2D.cpp
Rendering/mitkGeometry2DDataVtkMapper3D.cpp
Rendering/mitkGLMapper2D.cpp
Rendering/mitkGradientBackground.cpp
Rendering/mitkManufacturerLogo.cpp
Rendering/mitkMapper2D.cpp
Rendering/mitkMapper3D.cpp
Rendering/mitkMapper.cpp
Rendering/mitkPointSetGLMapper2D.cpp
Rendering/mitkPointSetVtkMapper3D.cpp
Rendering/mitkPolyDataGLMapper2D.cpp
Rendering/mitkSurfaceGLMapper2D.cpp
Rendering/mitkSurfaceVtkMapper3D.cpp
Rendering/mitkVolumeDataVtkMapper3D.cpp
Rendering/mitkVtkPropRenderer.cpp
Rendering/mitkVtkWidgetRendering.cpp
Rendering/vtkMitkRectangleProp.cpp
Rendering/vtkMitkRenderProp.cpp
Rendering/mitkVtkEventProvider.cpp
Rendering/mitkRenderWindow.cpp
Rendering/mitkRenderWindowBase.cpp
Rendering/mitkShaderRepository.cpp
Rendering/mitkImageVtkMapper2D.cpp
Rendering/vtkMitkThickSlicesFilter.cpp
Rendering/vtkMitkApplyLevelWindowToRGBFilter.cpp
Common/mitkException.cpp
Common/mitkCommon.h
Common/mitkCoreObjectFactoryBase.cpp
Common/mitkCoreObjectFactory.cpp
)
list(APPEND CPP_FILES ${CppMicroServices_SOURCES})
set(RESOURCE_FILES
Interactions/globalConfig.xml
Interactions/DisplayInteraction.xml
Interactions/DisplayConfig.xml
Interactions/DisplayConfigPACS.xml
Interactions/DisplayConfigPACSPan.xml
Interactions/DisplayConfigPACSScroll.xml
Interactions/DisplayConfigPACSZoom.xml
Interactions/DisplayConfigPACSLevelWindow.xml
Interactions/DisplayConfigMITK.xml
Interactions/PointSet.xml
Interactions/Legacy/StateMachine.xml
+Interactions/Legacy/DisplayConfigMITKTools.xml
Interactions/PointSetConfig.xml
Interactions/Tests/AddAndRemovePoints.xml
Interactions/Tests/globalConfig.xml
Interactions/Tests/StatemachineTest.xml
Interactions/Tests/StatemachineConfigTest.xml
)
diff --git a/Modules/MitkExt/Controllers/mitkToolManager.cpp b/Modules/MitkExt/Controllers/mitkToolManager.cpp
index da81a44c03..02ba2ad59b 100644
--- a/Modules/MitkExt/Controllers/mitkToolManager.cpp
+++ b/Modules/MitkExt/Controllers/mitkToolManager.cpp
@@ -1,567 +1,576 @@
/*===================================================================
The Medical Imaging Interaction Toolkit (MITK)
Copyright (c) German Cancer Research Center,
Division of Medical and Biological Informatics.
All rights reserved.
This software is distributed WITHOUT ANY WARRANTY; without
even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE.
See LICENSE.txt or http://www.mitk.org for details.
===================================================================*/
#include "mitkToolManager.h"
#include "mitkGlobalInteraction.h"
#include "mitkCoreObjectFactory.h"
#include
#include
#include
#include "mitkInteractionEventObserver.h"
+#include "mitkDisplayInteractor.h"
// MicroServices
#include "mitkGetModuleContext.h"
#include "mitkModule.h"
#include "mitkModuleRegistry.h"
mitk::ToolManager::ToolManager(DataStorage* storage)
: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 thingsThatClaimToBeATool = itk::ObjectFactoryBase::CreateAllInstance("mitkTool");
// remember these tools
for ( std::list::iterator iter = thingsThatClaimToBeATool.begin();
iter != thingsThatClaimToBeATool.end();
++iter )
{
if ( Tool* tool = dynamic_cast( iter->GetPointer() ) )
{
tool->SetToolManager(this); // important to call right after instantiation
tool->ErrorMessage += MessageDelegate1( this, &ToolManager::OnToolErrorMessage );
tool->GeneralMessage += MessageDelegate1( this, &ToolManager::OnGeneralToolMessage );
m_Tools.push_back( tool );
}
}
//ActivateTool(0); // first one is default
}
mitk::ToolManager::~ToolManager()
{
for (DataVectorType::iterator dataIter = m_WorkingData.begin(); dataIter != m_WorkingData.end(); ++dataIter)
(*dataIter)->RemoveObserver(m_WorkingDataObserverTags[(*dataIter)]);
if(this->GetDataStorage() != NULL)
this->GetDataStorage()->RemoveNodeEvent.RemoveListener( mitk::MessageDelegate1
( this, &ToolManager::OnNodeRemoved ));
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 );
}
}
void mitk::ToolManager::OnToolErrorMessage(std::string s)
{
this->ToolErrorMessage(s);
}
void mitk::ToolManager::OnGeneralToolMessage(std::string s)
{
this->GeneralToolMessage(s);
}
const mitk::ToolManager::ToolVectorTypeConst mitk::ToolManager::GetTools()
{
ToolVectorTypeConst resultList;
for ( ToolVectorType::iterator iter = m_Tools.begin();
iter != m_Tools.end();
++iter )
{
resultList.push_back( iter->GetPointer() );
}
return resultList;
}
mitk::Tool* mitk::ToolManager::GetToolById(int id)
{
try
{
return m_Tools.at(id);
}
catch(std::exception&)
{
return NULL;
}
}
bool mitk::ToolManager::ActivateTool(int id)
{
if(this->GetDataStorage())
{
this->GetDataStorage()->RemoveNodeEvent.AddListener( mitk::MessageDelegate1
( this, &ToolManager::OnNodeRemoved ) );
}
//MITK_INFO << "ToolManager::ActivateTool("<SetEventNotificationPolicy(GlobalInteraction::INFORM_MULTIPLE);
// Re-enabling InteractionEventObservers that have been previously disabled for legacy handling of Tools
// in new interaction framework
std::list listEventObserver;
ServiceTracker* eventObserverTracker= new ServiceTracker(GetModuleContext());
eventObserverTracker->Open();
eventObserverTracker->GetServiceReferences(listEventObserver); // query all registered interaction event observer
for (std::list::iterator it = listEventObserver.begin(); it != listEventObserver.end(); ++it)
{
InteractionEventObserver* interactionEventObserver = eventObserverTracker->GetService(*it);
if (interactionEventObserver != NULL) {
- interactionEventObserver->Enable(); // re-enable the interaction
+ DisplayInteractor* displayInteractor = dynamic_cast(interactionEventObserver);
+ if (displayInteractor != NULL) {
+ // here the regular configuration is loaded again
+ displayInteractor->LoadEventConfig("DisplayConfigMITK.xml","Mitk");
+ }
}
}
eventObserverTracker->Close();
delete eventObserverTracker;
}
if ( GetToolById( id ) == m_ActiveTool ) return true; // no change needed
static int nextTool = -1;
nextTool = id;
//MITK_INFO << "ToolManager::ActivateTool("<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 > 0)
{
m_ActiveTool->Activated();
GlobalInteraction::GetInstance()->AddListener( m_ActiveTool );
//If a tool is activated set event notification policy to one
GlobalInteraction::GetInstance()->SetEventNotificationPolicy(GlobalInteraction::INFORM_ONE);
// As a legacy solution the display interaction of the new interaction framework is disabled here to avoid conflicts with tools
// Note: this only affects InteractionEventObservers (formerly known as Listeners) all DataNode specific interaction will still be enabled
std::list listEventObserver;
ServiceTracker* eventObserverTracker= new ServiceTracker(GetModuleContext());
eventObserverTracker->Open();
eventObserverTracker->GetServiceReferences(listEventObserver);
for (std::list::iterator it = listEventObserver.begin(); it != listEventObserver.end(); ++it)
{
InteractionEventObserver* interactionEventObserver = eventObserverTracker->GetService(*it);
if (interactionEventObserver != NULL) {
- interactionEventObserver->Disable(); // disable the interaction
+ DisplayInteractor* displayInteractor = dynamic_cast(interactionEventObserver);
+ if (displayInteractor != NULL) {
+ // here the regular configuration is loaded again
+ displayInteractor->LoadEventConfig("Legacy/DisplayConfigMITKTools.xml","Mitk");
+ }
}
}
eventObserverTracker->Close();
delete eventObserverTracker;
}
}
}
inActivateTool = false;
return (m_ActiveTool != NULL);
}
void mitk::ToolManager::SetReferenceData(DataVectorType data)
{
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::Pointer command = itk::MemberCommand::New();
command->SetCallbackFunction( this, &ToolManager::OnOneOfTheReferenceDataDeleted );
command->SetCallbackFunction( this, &ToolManager::OnOneOfTheReferenceDataDeletedConst );
m_ReferenceDataObserverTags.insert( std::pair( (*dataIter), (*dataIter)->AddObserver( itk::DeleteEvent(), command ) ) );
}
ReferenceDataChanged.Send();
}
}
void mitk::ToolManager::OnOneOfTheReferenceDataDeletedConst(const itk::Object* caller, const itk::EventObject& e)
{
OnOneOfTheReferenceDataDeleted( const_cast(caller), e );
}
void mitk::ToolManager::OnOneOfTheReferenceDataDeleted(itk::Object* caller, const itk::EventObject& itkNotUsed(e))
{
//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::SetReferenceData(DataNode* data)
{
//MITK_INFO << "ToolManager::SetReferenceData(" << (void*)data << ")" << std::endl;
DataVectorType v;
if (data)
{
v.push_back(data);
}
SetReferenceData(v);
}
void mitk::ToolManager::SetWorkingData(DataVectorType data)
{
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::Pointer command = itk::MemberCommand::New();
command->SetCallbackFunction( this, &ToolManager::OnOneOfTheWorkingDataDeleted );
command->SetCallbackFunction( this, &ToolManager::OnOneOfTheWorkingDataDeletedConst );
m_WorkingDataObserverTags.insert( std::pair( (*dataIter), (*dataIter)->AddObserver( itk::DeleteEvent(), command ) ) );
}
WorkingDataChanged.Send();
}
}
void mitk::ToolManager::OnOneOfTheWorkingDataDeletedConst(const itk::Object* caller, const itk::EventObject& e)
{
OnOneOfTheWorkingDataDeleted( const_cast(caller), e );
}
void mitk::ToolManager::OnOneOfTheWorkingDataDeleted(itk::Object* caller, const itk::EventObject& itkNotUsed(e))
{
//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::SetWorkingData(DataNode* data)
{
DataVectorType v;
if (data) // don't allow for NULL nodes
{
v.push_back(data);
}
SetWorkingData(v);
}
void mitk::ToolManager::SetRoiData(DataVectorType data)
{
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::Pointer command = itk::MemberCommand::New();
command->SetCallbackFunction( this, &ToolManager::OnOneOfTheRoiDataDeleted );
command->SetCallbackFunction( this, &ToolManager::OnOneOfTheRoiDataDeletedConst );
m_RoiDataObserverTags.insert( std::pair( (*dataIter), (*dataIter)->AddObserver( itk::DeleteEvent(), command ) ) );
}
RoiDataChanged.Send();
}
}
void mitk::ToolManager::SetRoiData(DataNode* data)
{
DataVectorType v;
if(data)
{
v.push_back(data);
}
this->SetRoiData(v);
}
void mitk::ToolManager::OnOneOfTheRoiDataDeletedConst(const itk::Object* caller, const itk::EventObject& e)
{
OnOneOfTheRoiDataDeleted( const_cast(caller), e );
}
void mitk::ToolManager::OnOneOfTheRoiDataDeleted(itk::Object* caller, const itk::EventObject& itkNotUsed(e))
{
//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 );
}
mitk::ToolManager::DataVectorType mitk::ToolManager::GetReferenceData()
{
return m_ReferenceData;
}
mitk::DataNode* mitk::ToolManager::GetReferenceData(int idx)
{
try
{
return m_ReferenceData.at(idx);
}
catch(std::exception&)
{
return NULL;
}
}
mitk::ToolManager::DataVectorType mitk::ToolManager::GetWorkingData()
{
return m_WorkingData;
}
mitk::ToolManager::DataVectorType mitk::ToolManager::GetRoiData()
{
return m_RoiData;
}
mitk::DataNode* mitk::ToolManager::GetRoiData(int idx)
{
try
{
return m_RoiData.at(idx);
}
catch(std::exception&)
{
return NULL;
}
}
mitk::DataStorage* mitk::ToolManager::GetDataStorage()
{
if ( m_DataStorage.IsNotNull() )
{
return m_DataStorage;
}
else
{
return NULL;
}
}
void mitk::ToolManager::SetDataStorage(DataStorage& storage)
{
m_DataStorage = &storage;
}
mitk::DataNode* mitk::ToolManager::GetWorkingData(int idx)
{
try
{
return m_WorkingData.at(idx);
}
catch(std::exception&)
{
return NULL;
}
}
int mitk::ToolManager::GetActiveToolID()
{
return m_ActiveToolID;
}
mitk::Tool* mitk::ToolManager::GetActiveTool()
{
return m_ActiveTool;
}
void mitk::ToolManager::RegisterClient()
{
if ( m_RegisteredClients < 1 )
{
if ( m_ActiveTool )
{
m_ActiveTool->Activated();
GlobalInteraction::GetInstance()->AddListener( m_ActiveTool );
}
}
++m_RegisteredClients;
}
void mitk::ToolManager::UnregisterClient()
{
if ( m_RegisteredClients < 1) return;
--m_RegisteredClients;
if ( m_RegisteredClients < 1 )
{
if ( m_ActiveTool )
{
m_ActiveTool->Deactivated();
GlobalInteraction::GetInstance()->RemoveListener( m_ActiveTool );
}
}
}
int mitk::ToolManager::GetToolID( const Tool* tool )
{
int id(0);
for ( ToolVectorType::iterator iter = m_Tools.begin();
iter != m_Tools.end();
++iter, ++id )
{
if ( tool == iter->GetPointer() )
{
return id;
}
}
return -1;
}
void mitk::ToolManager::OnNodeRemoved(const mitk::DataNode* node)
{
//check if the data of the node is typeof Image
/*if(dynamic_cast(node->GetData()))
{*/
//check all storage vectors
OnOneOfTheReferenceDataDeleted(const_cast(node), itk::DeleteEvent());
OnOneOfTheRoiDataDeleted(const_cast(node),itk::DeleteEvent());
OnOneOfTheWorkingDataDeleted(const_cast(node),itk::DeleteEvent());
//}
}