Skip to content

Commit

Permalink
ENH: eliminated conflict between crosshair navigation and window level
Browse files Browse the repository at this point in the history
Use AbortFlag to terminate events of LeftButtonPress. May need to use
a priority value if the order of observers changes.

Looked at using the GrabFocus() infrastructure but that requires having
the DisplayableManagers be a vtkInteractorObserver or a vtkAbstractWidget.
Tried to delegate to an instance of an InteractorObserver but the callback
functions would all have to be redefined/redirected. So I fell back
to simply using the AbortFlag.

svn-url: http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&revision=18376
git-svn-id: http://svn.slicer.org/Slicer4/trunk@18376 3bd1e089-480b-0410-8dfb-8563597acbee
  • Loading branch information
millerjv committed Oct 20, 2011
1 parent d45a60d commit 8ded9a0
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
25 changes: 25 additions & 0 deletions Libs/MRMLDisplayableManager/vtkMRMLAbstractDisplayableManager.cxx
Expand Up @@ -702,3 +702,28 @@ void vtkMRMLAbstractDisplayableManager::OnInteractorStyleEvent(int vtkNotUsed(ev
// std::cout << "OnInteractorStyleEvent - eventid:" << eventid
// << ", eventname:" << vtkCommand::GetStringFromEventId(eventid) << std::endl;
}

//---------------------------------------------------------------------------
void vtkMRMLAbstractDisplayableManager::SetInteractorStyleAbortFlag(int f)
{
this->Internal->InteractorStyleCallBackCommand->SetAbortFlag(f);
}

//---------------------------------------------------------------------------
int vtkMRMLAbstractDisplayableManager::GetInteractorStyleAbortFlag()
{
return this->Internal->InteractorStyleCallBackCommand->GetAbortFlag();
}

//---------------------------------------------------------------------------
void vtkMRMLAbstractDisplayableManager::InteractorStyleAbortFlagOn()
{
this->Internal->InteractorStyleCallBackCommand->AbortFlagOn();
}

//---------------------------------------------------------------------------
void vtkMRMLAbstractDisplayableManager::InteractorStyleAbortFlagOff()
{
this->Internal->InteractorStyleCallBackCommand->AbortFlagOff();
}

Expand Up @@ -173,7 +173,13 @@ class VTK_MRML_DISPLAYABLEMANAGER_EXPORT vtkMRMLAbstractDisplayableManager : pub
/// </ul>
/// \sa AddInteractorStyleObservableEvent RemoveInteractorStyleObservableEvent
virtual void OnInteractorStyleEvent(int eventid);


/// Set the Abort flag on the InteractorStyle event callback
void SetInteractorStyleAbortFlag(int f);
int GetInteractorStyleAbortFlag();
void InteractorStyleAbortFlagOn();
void InteractorStyleAbortFlagOff();

private:

vtkMRMLAbstractDisplayableManager(const vtkMRMLAbstractDisplayableManager&); // Not implemented
Expand Down
Expand Up @@ -121,6 +121,7 @@ class vtkMRMLCrosshairDisplayableManager::vtkInternal
vtkWeakPointer<vtkMRMLLightBoxRendererManagerProxy> LightBoxRendererManagerProxy;
};


//---------------------------------------------------------------------------
// vtkInternal methods

Expand Down Expand Up @@ -693,6 +694,10 @@ void vtkMRMLCrosshairDisplayableManager::OnInteractorStyleEvent(int eventid)
if (this->Internal->PickState == vtkInternal::Over)
{
this->Internal->ActionState = vtkInternal::Dragging;

// Set the abort flag so that no other callbacks respond
// (may need to set a priority).
this->InteractorStyleAbortFlagOn();
}
}
break;
Expand Down

0 comments on commit 8ded9a0

Please sign in to comment.