diff --git a/invesalius/data/styles.py b/invesalius/data/styles.py index ce020f2..569e268 100644 --- a/invesalius/data/styles.py +++ b/invesalius/data/styles.py @@ -96,6 +96,7 @@ class CrossInteractorStyle(DefaultInteractorStyle): def __init__(self, viewer): DefaultInteractorStyle.__init__(self, viewer) + self.viewer = viewer self.orientation = viewer.orientation self.slice_actor = viewer.slice_data.actor self.slice_data = viewer.slice_data @@ -106,6 +107,12 @@ class CrossInteractorStyle(DefaultInteractorStyle): self.AddObserver("LeftButtonPressEvent", self.OnCrossMouseClick) self.AddObserver("LeftButtonReleaseEvent", self.OnReleaseLeftButton) + def SetUp(self): + self.viewer._set_cross_visibility(1) + + def CleanUp(self): + self.viewer._set_cross_visibility(0) + def OnCrossMouseClick(self, obj, evt): iren = obj.GetInteractor() self.ChangeCrossPosition(iren) @@ -214,6 +221,14 @@ class WWWLInteractorStyle(DefaultInteractorStyle): self.AddObserver("MouseMoveEvent", self.OnWindowLevelMove) self.AddObserver("LeftButtonPressEvent", self.OnWindowLevelClick) + def SetUp(self): + self.viewer.on_wl = True + self.viewer.wl_text.Show() + + def CleanUp(self): + self.viewer.on_wl = False + self.viewer.wl_text.Hide() + def OnWindowLevelMove(self, obj, evt): if (self.left_pressed): iren = obj.GetInteractor() @@ -584,3 +599,20 @@ class EditorInteractorStyle(DefaultInteractorStyle): elif bounds[4] == bounds[5]: z = bounds[4] return x, y, z + + +def get_style(style): + STYLES = { + const.STATE_DEFAULT: DefaultInteractorStyle, + const.SLICE_STATE_CROSS: CrossInteractorStyle, + const.STATE_WL: WWWLInteractorStyle, + const.STATE_MEASURE_DISTANCE: LinearMeasureInteractorStyle, + const.STATE_MEASURE_ANGLE: AngularMeasureInteractorStyle, + const.STATE_PAN: PanMoveInteractorStyle, + const.STATE_SPIN: SpinInteractorStyle, + const.STATE_ZOOM: ZoomInteractorStyle, + const.STATE_ZOOM_SL: ZoomSLInteractorStyle, + const.SLICE_STATE_SCROLL: ChangeSliceInteractorStyle, + const.SLICE_STATE_EDITOR: EditorInteractorStyle, + } + return STYLES[style] diff --git a/invesalius/data/viewer_slice.py b/invesalius/data/viewer_slice.py index 76d8b0f..35a1995 100755 --- a/invesalius/data/viewer_slice.py +++ b/invesalius/data/viewer_slice.py @@ -67,6 +67,7 @@ class Viewer(wx.Panel): self.spined_image = False #Use to control to spin self.paned_image = False + self.style = None self.last_position_mouse_move = () self.state = const.STATE_DEFAULT @@ -175,89 +176,21 @@ class Viewer(wx.Panel): interactor.SetInteractorStyle(style) def SetInteractorStyle(self, state): - self.__set_cross_visibility(0) - self.on_wl = False - self.wl_text.Hide() - self.state = state - - if state == const.STATE_DEFAULT: - style = styles.DefaultInteractorStyle(self) - self.style = style - self.interactor.SetInteractorStyle(style) - self.interactor.Render() - - elif state == const.SLICE_STATE_CROSS: - style = styles.CrossInteractorStyle(self) - self.style = style - self.interactor.SetInteractorStyle(style) - - self.__set_cross_visibility(1) - Publisher.sendMessage('Activate ball reference') - - self.interactor.Render() - - elif state == const.STATE_WL: - self.on_wl = True - self.wl_text.Show() - - style = styles.WWWLInteractorStyle(self) - self.style = style - self.interactor.SetInteractorStyle(style) - self.interactor.Render() - - elif state == const.STATE_MEASURE_DISTANCE: - style = styles.LinearMeasureInteractorStyle(self) - self.style = style - self.interactor.SetInteractorStyle(style) - self.interactor.Render() - - elif state == const.STATE_MEASURE_ANGLE: - style = styles.AngularMeasureInteractorStyle(self) - self.style = style - self.interactor.SetInteractorStyle(style) - self.interactor.Render() + cleanup = getattr(self.style, 'CleanUp', None) + if cleanup: + self.style.CleanUp() - elif state == const.STATE_PAN: - style = styles.PanMoveInteractorStyle(self) + style = styles.get_style(state)(self) - self.style = style - self.interactor.SetInteractorStyle(style) - self.interactor.Render() + setup = getattr(style, 'SetUp', None) + if setup: + style.SetUp() - elif state == const.STATE_SPIN: - style = styles.SpinInteractorStyle(self) - - self.style = style - self.interactor.SetInteractorStyle(style) - self.interactor.Render() - - elif state == const.STATE_ZOOM: - style = styles.ZoomInteractorStyle(self) - - self.style = style - self.interactor.SetInteractorStyle(style) - self.interactor.Render() - - elif state == const.STATE_ZOOM_SL: - style = styles.ZoomSLInteractorStyle(self) - - self.style = style - self.interactor.SetInteractorStyle(style) - self.interactor.Render() - - elif state == const.SLICE_STATE_SCROLL: - style = styles.ChangeSliceInteractorStyle(self) - - self.style = style - self.interactor.SetInteractorStyle(style) - self.interactor.Render() - - elif state == const.SLICE_STATE_EDITOR: - style = styles.EditorInteractorStyle(self) + self.style = style + self.interactor.SetInteractorStyle(style) + self.interactor.Render() - self.style = style - self.interactor.SetInteractorStyle(style) - self.interactor.Render() + self.state = state def UpdateWindowLevelValue(self, pubsub_evt): window, level = pubsub_evt.data @@ -664,7 +597,7 @@ class Viewer(wx.Panel): Publisher.subscribe(self.UpdateWindowLevelValue,\ 'Update window level value') - #Publisher.subscribe(self.__set_cross_visibility,\ + #Publisher.subscribe(self._set_cross_visibility,\ # 'Set cross visibility') ### Publisher.subscribe(self.__set_layout, @@ -931,7 +864,7 @@ class Viewer(wx.Panel): pos = pubsub_evt.data self.cross.SetFocalPoint(pos) - def __set_cross_visibility(self, visibility): + def _set_cross_visibility(self, visibility): self.cross_actor.SetVisibility(visibility) def _set_editor_cursor_visibility(self, visibility): -- libgit2 0.21.2