Commit 4d583c075ce7d9532fa7c42e9c3cd5a63f923b2f

Authored by Paulo Henrique Junqueira Amorim
1 parent 50e3d457

ENH: Restructuring state of the tools

invesalius/constants.py
@@ -347,4 +347,4 @@ LEVEL = {STATE_DEFAULT: 0, @@ -347,4 +347,4 @@ LEVEL = {STATE_DEFAULT: 0,
347 STATE_ZOOM_SL: 2, 347 STATE_ZOOM_SL: 2,
348 SLICE_STATE_CROSS: 2, 348 SLICE_STATE_CROSS: 2,
349 SLICE_STATE_SCROLL: 2, 349 SLICE_STATE_SCROLL: 2,
350 - STATE_PAN:2}  
351 \ No newline at end of file 350 \ No newline at end of file
  351 + STATE_PAN:2}
invesalius/data/slice_.py
@@ -24,6 +24,7 @@ import wx.lib.pubsub as ps @@ -24,6 +24,7 @@ import wx.lib.pubsub as ps
24 import constants as const 24 import constants as const
25 import imagedata_utils as iu 25 import imagedata_utils as iu
26 from mask import Mask 26 from mask import Mask
  27 +import mode as md
27 from project import Project 28 from project import Project
28 import session as ses 29 import session as ses
29 from utils import Singleton 30 from utils import Singleton
@@ -41,6 +42,7 @@ class Slice(object): @@ -41,6 +42,7 @@ class Slice(object):
41 self.blend_filter = None 42 self.blend_filter = None
42 self.__bind_events() 43 self.__bind_events()
43 self.num_gradient = 0 44 self.num_gradient = 0
  45 + self.mode = md.SliceMode()
44 46
45 def __bind_events(self): 47 def __bind_events(self):
46 # Slice properties 48 # Slice properties
invesalius/data/viewer_slice.py
@@ -76,7 +76,6 @@ class Viewer(wx.Panel): @@ -76,7 +76,6 @@ class Viewer(wx.Panel):
76 self.__bind_events() 76 self.__bind_events()
77 self.__bind_events_wx() 77 self.__bind_events_wx()
78 78
79 - md.SliceMode()  
80 79
81 def __init_gui(self): 80 def __init_gui(self):
82 81
@@ -185,7 +184,9 @@ class Viewer(wx.Panel): @@ -185,7 +184,9 @@ class Viewer(wx.Panel):
185 "MouseMoveEvent": self.OnWindowLevelMove, 184 "MouseMoveEvent": self.OnWindowLevelMove,
186 "LeftButtonPressEvent": self.OnWindowLevelClick, 185 "LeftButtonPressEvent": self.OnWindowLevelClick,
187 "LeftButtonReleaseEvent": self.OnReleaseModes 186 "LeftButtonReleaseEvent": self.OnReleaseModes
188 - } 187 + },
  188 + const.STATE_DEFAULT:{
  189 + }
189 } 190 }
190 191
191 # Bind method according to current mode 192 # Bind method according to current mode
invesalius/gui/frame.py
@@ -625,24 +625,24 @@ class ObjectToolBar(wx.ToolBar): @@ -625,24 +625,24 @@ class ObjectToolBar(wx.ToolBar):
625 625
626 626
627 def __bind_events_wx(self): 627 def __bind_events_wx(self):
628 - self.Bind(wx.EVT_TOOL, self.OnClick) 628 + self.Bind(wx.EVT_TOOL, self.OnToggle)
629 629
630 def __bind_events(self): 630 def __bind_events(self):
631 ps.Publisher().subscribe(self.UntoggleAllItems, 631 ps.Publisher().subscribe(self.UntoggleAllItems,
632 'Untoggle object toolbar items') 632 'Untoggle object toolbar items')
633 633
634 - def OnClick(self, evt): 634 + def OnToggle(self, evt):
635 id = evt.GetId() 635 id = evt.GetId()
636 state = self.GetToolState(id) 636 state = self.GetToolState(id)
637 -  
638 if state: 637 if state:
639 - ps.Publisher().sendMessage('Set slice mode', 638 + print "Vai enviar..................."
  639 + ps.Publisher().sendMessage('Enable mode',
640 MODE_BY_ID[id]) 640 MODE_BY_ID[id])
641 641
642 #ps.Publisher().sendMessage('Untoggle slice toolbar items') 642 #ps.Publisher().sendMessage('Untoggle slice toolbar items')
643 else: 643 else:
644 - ps.Publisher().sendMessage('Set interaction mode',  
645 - const.MODE_SLICE_EDITOR) 644 + ps.Publisher().sendMessage('Disable mode',
  645 + MODE_BY_ID[id])
646 646
647 647
648 648
@@ -652,6 +652,7 @@ class ObjectToolBar(wx.ToolBar): @@ -652,6 +652,7 @@ class ObjectToolBar(wx.ToolBar):
652 self.ToggleTool(item, False) 652 self.ToggleTool(item, False)
653 653
654 evt.Skip() 654 evt.Skip()
  655 +
655 656
656 def UntoggleAllItems(self, pubsub_evt=None): 657 def UntoggleAllItems(self, pubsub_evt=None):
657 for id in OBJ_TOOLS: 658 for id in OBJ_TOOLS:
invesalius/mode.py
@@ -76,14 +76,15 @@ class SliceMode(object): @@ -76,14 +76,15 @@ class SliceMode(object):
76 # push default value to stack 76 # push default value to stack
77 self.stack[const.LEVEL[const.STATE_DEFAULT]] = \ 77 self.stack[const.LEVEL[const.STATE_DEFAULT]] = \
78 const.STATE_DEFAULT 78 const.STATE_DEFAULT
79 - 79 + print "Foi chamando............................."
80 # bind pubsub evt 80 # bind pubsub evt
81 self.__bind_events() 81 self.__bind_events()
82 82
83 def __bind_events(self): 83 def __bind_events(self):
  84 + print "__bind_events"
84 ps.Publisher().subscribe(self.OnEnableState, 'Enable mode') 85 ps.Publisher().subscribe(self.OnEnableState, 'Enable mode')
85 ps.Publisher().subscribe(self.OnDisableState, 'Disable mode') 86 ps.Publisher().subscribe(self.OnDisableState, 'Disable mode')
86 - 87 +
87 def OnEnableState(self, pubsub_evt): 88 def OnEnableState(self, pubsub_evt):
88 state = pubsub_evt.data 89 state = pubsub_evt.data
89 self.AddState(state) 90 self.AddState(state)
@@ -95,24 +96,28 @@ class SliceMode(object): @@ -95,24 +96,28 @@ class SliceMode(object):
95 def AddState(self, state): 96 def AddState(self, state):
96 level = const.LEVEL[state] 97 level = const.LEVEL[state]
97 max_level = max(self.stack.keys()) 98 max_level = max(self.stack.keys())
98 - 99 +
  100 +
99 # Insert new state into stack 101 # Insert new state into stack
100 self.stack[level] = state 102 self.stack[level] = state
101 - 103 + print "ADD---->"
  104 + print self.stack
  105 + print level
  106 + print state
102 # Only will affect InVesalius behaviour if it is the highest 107 # Only will affect InVesalius behaviour if it is the highest
103 # level in stack 108 # level in stack
104 - if level == max_level: 109 + #if level == max_level:
105 # let viewer slice and other classes know this 110 # let viewer slice and other classes know this
106 # change (cursor, interaction, etc) 111 # change (cursor, interaction, etc)
107 - ps.Publisher().sendMessage('Set slice mode', state) 112 + ps.Publisher().sendMessage('Set slice mode', state)
108 113
109 def RemoveState(self, state): 114 def RemoveState(self, state):
110 level = const.LEVEL[state] 115 level = const.LEVEL[state]
111 max_level = max(self.stack.keys()) 116 max_level = max(self.stack.keys())
112 - 117 +
113 # Remove item from stack 118 # Remove item from stack
114 - self.stack.popitem(level)  
115 - 119 + self.stack.pop(level)
  120 +
116 # New max level 121 # New max level
117 new_max_level = max(self.stack.keys()) 122 new_max_level = max(self.stack.keys())
118 123
@@ -120,5 +125,11 @@ class SliceMode(object): @@ -120,5 +125,11 @@ class SliceMode(object):
120 # level in stack has been removed 125 # level in stack has been removed
121 if level == max_level: 126 if level == max_level:
122 new_state = self.stack[new_max_level] 127 new_state = self.stack[new_max_level]
123 - ps.Publisher().sendMessage('Set slice mode', state)  
124 - 128 +
  129 + #Case one state in the stack
  130 + if(len(self.stack) == 1):
  131 + state = self.stack[self.stack.keys()[0]]
  132 +
  133 + ps.Publisher().sendMessage('Set slice mode', state)
  134 +
  135 +
125 \ No newline at end of file 136 \ No newline at end of file