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