We have a hierarchy of interaction events:
Qt mouse events (QMouseEvent) are received by a QmitkRenderWindow and transformed into an mitk::InteractionEvent (e.g. mitk::MouseMoveEvent).
This event is process by the renderer-specific dispatcher of the render window.
The dispatcher now retrieves all mitk::InteractionEventObserver using the micro-service approach. Thus all observer get notified, regardless of whether they are in any way connected to the sending render window or not.
A notified observer handles the event (e.g. the mitk::DisplayInteractor transform the event into a function call using its state machine configuration).
An example of this process for a mitk::DataInteractor can be seen here: http://docs.mitk.org/nightly/DataInteractionPage.html
Using our broadcast-class this would lead to another event being sent (via itk::Object::InvokeEvent). This is the concrete display interaction event that we want to process in a customized manner.
However, we want to include filtering techniques on different levels:
- Since the micro-service approach calls all interaction event observer, we want to filter if the interaction happened inside the MITK workbench part we are interested in (e.g. inside a specific multi widget editor).
- Since we might only want to react on specific render windows (e.g. only those that display the same images), we want to filter if the itk event is relevant for a certain observer.