Commit 4d583c075ce7d9532fa7c42e9c3cd5a63f923b2f
1 parent
50e3d457
Exists in
master
and in
6 other branches
ENH: Restructuring state of the tools
Showing
5 changed files
with
35 additions
and
20 deletions
Show diff stats
invesalius/constants.py
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 | ... | ... |