| 103 | } |
| 104 | |
| 105 | bool mitk::Dispatcher::ProcessEvent(InteractionEvent *event) |
| 106 | { |
| 107 | InteractionEvent::Pointer p = event; |
| 108 | bool eventIsHandled = false; |
| 109 | /* Filter out and handle Internal Events separately */ |
| 110 | auto *internalEvent = dynamic_cast<InternalEvent *>(event); |
| 111 | if (internalEvent != nullptr) |
| 112 | { |
| 113 | eventIsHandled = HandleInternalEvent(internalEvent); |
| 114 | // InternalEvents that are handled are not sent to the listeners |
| 115 | if (eventIsHandled) |
| 116 | { |
| 117 | return true; |
| 118 | } |
| 119 | } |
| 120 | |
| 121 | auto selectedInteractor = m_SelectedInteractor.Lock(); |
| 122 | |
| 123 | switch (m_ProcessingMode) |
| 124 | { |
| 125 | case CONNECTEDMOUSEACTION: |
| 126 | // finished connected mouse action |
| 127 | if (std::strcmp(p->GetNameOfClass(), "MouseReleaseEvent") == 0) |
| 128 | { |
| 129 | m_ProcessingMode = REGULAR; |
| 130 | |
| 131 | if (selectedInteractor.IsNotNull()) |
| 132 | eventIsHandled = selectedInteractor->HandleEvent(event, selectedInteractor->GetDataNode()); |
| 133 | |
| 134 | m_SelectedInteractor = nullptr; |
| 135 | } |
| 136 | // give event to selected interactor |
| 137 | selectedInteractor = m_SelectedInteractor.Lock(); |
| 138 | |
| 139 | if (eventIsHandled == false && selectedInteractor.IsNotNull()) |
| 140 | eventIsHandled = selectedInteractor->HandleEvent(event, selectedInteractor->GetDataNode()); |
| 141 | |
| 142 | break; |
| 143 | |
| 144 | case GRABINPUT: |
| 145 | if (selectedInteractor.IsNotNull()) |
| 146 | { |
| 147 | eventIsHandled = selectedInteractor->HandleEvent(event,selectedInteractor->GetDataNode()); |
| 148 | SetEventProcessingMode(selectedInteractor); |
| 149 | } |
| 150 | |
| 151 | break; |
| 152 | |
| 153 | case PREFERINPUT: |
| 154 | if (selectedInteractor.IsNotNull() && |
| 155 | selectedInteractor->HandleEvent(event, selectedInteractor->GetDataNode()) == true) |
| 156 | { |
| 157 | SetEventProcessingMode(selectedInteractor); |
| 158 | eventIsHandled = true; |
| 159 | } |
| 160 | |
| 161 | break; |
| 162 | |