Hi Miklos,

I would like to see your patch. Could you please create a differential ( 
https://phabricator.mitk.or
g/differential/ ) so we can discuss your changes there? Thank you!

Regards
Christoph

On Fri, 2016-07-15 at 19:01 +0200, Miklos Espak wrote:
> Hi,
> 
> I am wondering if it would be possible to send the focus change events from 
> interactors rather
> than from mitk::Dispatcher.
> 
> The reason is a bit complicated. We have a custom viewer with very rigorous 
> unit tests. For
> instance, the state changes of the viewer have be atomic for any 
> interactions. E.g. if the user
> clicks in a render window, the state of the viewer has to change in one go 
> and then all the
> signals (including ITK events and Qt signals) have to be sent out. Partial 
> state change, signals,
> another partial state change then other signals again: this is not a valid 
> scenario.
> 
> I enforce this policy by BlockUpdate() and BlockSignals() functions. At the 
> beginning of the
> interactions I block the update of the viewer, that blocks the signals from 
> itself and from the
> slice navigation controllers. (See #16895.) During the interaction the state 
> changes are recorded
> but the renderer is not updated. At the end of the interaction I unblock the 
> update, that realises
> the state changes, unblocks sending signals and sends out the pending signals.
> 
> This works pretty well, except for the focus event. Now when the user clicks 
> in a render window,
> the dispatcher sends out an mitk::FocusChangedEvent, the viewer catches it 
> and changes the
> selected window. Then the interactor receives the mouse press event, and 
> changes the state again
> (world position at crosshair and the position of the crosshair in the window) 
> and sends out
> signals about this. If someone is listening to the focus change event, he 
> will find the viewer in
> an invalid state. (The selected window has changed, but the position has not 
> yet.)
> 
> It would be possible to ignore the focus change event in the viewer and 
> change the selected window
> only when the interactor is notified. But this is another only invalid 
> scenario, a focus change
> event is sent, but the state of the viewer has not changed.
> 
> A possible solution could be to move sending out the focus change event from 
> mitk::Dispatcher to
> an mitk::EventStateMachine or mitk::DisplayInteractor action. Then subclasses 
> could override the
> handler function.
> 
> A possible drawback is that if there is a render window which has no 
> interactor then the focus
> event is not raised. I do not have that use case, though, and I believe MITK 
> does not use the
> focus events at all, anyway.
> 
> Does it make sense?
> 
> I am happy to send a patch.
> 
> What do you think?
> 
> Cheers,
> Miklos
> 
------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity 
planning reports. http://sdm.link/zohodev2dev
_______________________________________________
mitk-users mailing list
mitk-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mitk-users

Reply via email to