Commit 5c9a305f4c9821327fb47594a4833f0def899be8

Authored by Thiago Franco de Moraes
1 parent b557c298
Exists in interactor_style

Created a protocol to setup and cleanup when a style is setted

invesalius/data/styles.py
... ... @@ -96,6 +96,7 @@ class CrossInteractorStyle(DefaultInteractorStyle):
96 96 def __init__(self, viewer):
97 97 DefaultInteractorStyle.__init__(self, viewer)
98 98  
  99 + self.viewer = viewer
99 100 self.orientation = viewer.orientation
100 101 self.slice_actor = viewer.slice_data.actor
101 102 self.slice_data = viewer.slice_data
... ... @@ -106,6 +107,12 @@ class CrossInteractorStyle(DefaultInteractorStyle):
106 107 self.AddObserver("LeftButtonPressEvent", self.OnCrossMouseClick)
107 108 self.AddObserver("LeftButtonReleaseEvent", self.OnReleaseLeftButton)
108 109  
  110 + def SetUp(self):
  111 + self.viewer._set_cross_visibility(1)
  112 +
  113 + def CleanUp(self):
  114 + self.viewer._set_cross_visibility(0)
  115 +
109 116 def OnCrossMouseClick(self, obj, evt):
110 117 iren = obj.GetInteractor()
111 118 self.ChangeCrossPosition(iren)
... ... @@ -214,6 +221,14 @@ class WWWLInteractorStyle(DefaultInteractorStyle):
214 221 self.AddObserver("MouseMoveEvent", self.OnWindowLevelMove)
215 222 self.AddObserver("LeftButtonPressEvent", self.OnWindowLevelClick)
216 223  
  224 + def SetUp(self):
  225 + self.viewer.on_wl = True
  226 + self.viewer.wl_text.Show()
  227 +
  228 + def CleanUp(self):
  229 + self.viewer.on_wl = False
  230 + self.viewer.wl_text.Hide()
  231 +
217 232 def OnWindowLevelMove(self, obj, evt):
218 233 if (self.left_pressed):
219 234 iren = obj.GetInteractor()
... ... @@ -584,3 +599,20 @@ class EditorInteractorStyle(DefaultInteractorStyle):
584 599 elif bounds[4] == bounds[5]:
585 600 z = bounds[4]
586 601 return x, y, z
  602 +
  603 +
  604 +def get_style(style):
  605 + STYLES = {
  606 + const.STATE_DEFAULT: DefaultInteractorStyle,
  607 + const.SLICE_STATE_CROSS: CrossInteractorStyle,
  608 + const.STATE_WL: WWWLInteractorStyle,
  609 + const.STATE_MEASURE_DISTANCE: LinearMeasureInteractorStyle,
  610 + const.STATE_MEASURE_ANGLE: AngularMeasureInteractorStyle,
  611 + const.STATE_PAN: PanMoveInteractorStyle,
  612 + const.STATE_SPIN: SpinInteractorStyle,
  613 + const.STATE_ZOOM: ZoomInteractorStyle,
  614 + const.STATE_ZOOM_SL: ZoomSLInteractorStyle,
  615 + const.SLICE_STATE_SCROLL: ChangeSliceInteractorStyle,
  616 + const.SLICE_STATE_EDITOR: EditorInteractorStyle,
  617 + }
  618 + return STYLES[style]
... ...
invesalius/data/viewer_slice.py
... ... @@ -67,6 +67,7 @@ class Viewer(wx.Panel):
67 67 self.spined_image = False #Use to control to spin
68 68 self.paned_image = False
69 69  
  70 + self.style = None
70 71 self.last_position_mouse_move = ()
71 72 self.state = const.STATE_DEFAULT
72 73  
... ... @@ -175,89 +176,21 @@ class Viewer(wx.Panel):
175 176 interactor.SetInteractorStyle(style)
176 177  
177 178 def SetInteractorStyle(self, state):
178   - self.__set_cross_visibility(0)
179   - self.on_wl = False
180   - self.wl_text.Hide()
181   - self.state = state
182   -
183   - if state == const.STATE_DEFAULT:
184   - style = styles.DefaultInteractorStyle(self)
185   - self.style = style
186   - self.interactor.SetInteractorStyle(style)
187   - self.interactor.Render()
188   -
189   - elif state == const.SLICE_STATE_CROSS:
190   - style = styles.CrossInteractorStyle(self)
191   - self.style = style
192   - self.interactor.SetInteractorStyle(style)
193   -
194   - self.__set_cross_visibility(1)
195   - Publisher.sendMessage('Activate ball reference')
196   -
197   - self.interactor.Render()
198   -
199   - elif state == const.STATE_WL:
200   - self.on_wl = True
201   - self.wl_text.Show()
202   -
203   - style = styles.WWWLInteractorStyle(self)
204   - self.style = style
205   - self.interactor.SetInteractorStyle(style)
206   - self.interactor.Render()
207   -
208   - elif state == const.STATE_MEASURE_DISTANCE:
209   - style = styles.LinearMeasureInteractorStyle(self)
210   - self.style = style
211   - self.interactor.SetInteractorStyle(style)
212   - self.interactor.Render()
213   -
214   - elif state == const.STATE_MEASURE_ANGLE:
215   - style = styles.AngularMeasureInteractorStyle(self)
216   - self.style = style
217   - self.interactor.SetInteractorStyle(style)
218   - self.interactor.Render()
  179 + cleanup = getattr(self.style, 'CleanUp', None)
  180 + if cleanup:
  181 + self.style.CleanUp()
219 182  
220   - elif state == const.STATE_PAN:
221   - style = styles.PanMoveInteractorStyle(self)
  183 + style = styles.get_style(state)(self)
222 184  
223   - self.style = style
224   - self.interactor.SetInteractorStyle(style)
225   - self.interactor.Render()
  185 + setup = getattr(style, 'SetUp', None)
  186 + if setup:
  187 + style.SetUp()
226 188  
227   - elif state == const.STATE_SPIN:
228   - style = styles.SpinInteractorStyle(self)
229   -
230   - self.style = style
231   - self.interactor.SetInteractorStyle(style)
232   - self.interactor.Render()
233   -
234   - elif state == const.STATE_ZOOM:
235   - style = styles.ZoomInteractorStyle(self)
236   -
237   - self.style = style
238   - self.interactor.SetInteractorStyle(style)
239   - self.interactor.Render()
240   -
241   - elif state == const.STATE_ZOOM_SL:
242   - style = styles.ZoomSLInteractorStyle(self)
243   -
244   - self.style = style
245   - self.interactor.SetInteractorStyle(style)
246   - self.interactor.Render()
247   -
248   - elif state == const.SLICE_STATE_SCROLL:
249   - style = styles.ChangeSliceInteractorStyle(self)
250   -
251   - self.style = style
252   - self.interactor.SetInteractorStyle(style)
253   - self.interactor.Render()
254   -
255   - elif state == const.SLICE_STATE_EDITOR:
256   - style = styles.EditorInteractorStyle(self)
  189 + self.style = style
  190 + self.interactor.SetInteractorStyle(style)
  191 + self.interactor.Render()
257 192  
258   - self.style = style
259   - self.interactor.SetInteractorStyle(style)
260   - self.interactor.Render()
  193 + self.state = state
261 194  
262 195 def UpdateWindowLevelValue(self, pubsub_evt):
263 196 window, level = pubsub_evt.data
... ... @@ -664,7 +597,7 @@ class Viewer(wx.Panel):
664 597 Publisher.subscribe(self.UpdateWindowLevelValue,\
665 598 'Update window level value')
666 599  
667   - #Publisher.subscribe(self.__set_cross_visibility,\
  600 + #Publisher.subscribe(self._set_cross_visibility,\
668 601 # 'Set cross visibility')
669 602 ###
670 603 Publisher.subscribe(self.__set_layout,
... ... @@ -931,7 +864,7 @@ class Viewer(wx.Panel):
931 864 pos = pubsub_evt.data
932 865 self.cross.SetFocalPoint(pos)
933 866  
934   - def __set_cross_visibility(self, visibility):
  867 + def _set_cross_visibility(self, visibility):
935 868 self.cross_actor.SetVisibility(visibility)
936 869  
937 870 def _set_editor_cursor_visibility(self, visibility):
... ...