From 4d583c075ce7d9532fa7c42e9c3cd5a63f923b2f Mon Sep 17 00:00:00 2001 From: paulojamorim Date: Tue, 24 Nov 2009 16:20:11 +0000 Subject: [PATCH] ENH: Restructuring state of the tools --- invesalius/constants.py | 2 +- invesalius/data/slice_.py | 2 ++ invesalius/data/viewer_slice.py | 5 +++-- invesalius/gui/frame.py | 13 +++++++------ invesalius/mode.py | 33 ++++++++++++++++++++++----------- 5 files changed, 35 insertions(+), 20 deletions(-) diff --git a/invesalius/constants.py b/invesalius/constants.py index 34008b6..6d12b2b 100644 --- a/invesalius/constants.py +++ b/invesalius/constants.py @@ -347,4 +347,4 @@ LEVEL = {STATE_DEFAULT: 0, STATE_ZOOM_SL: 2, SLICE_STATE_CROSS: 2, SLICE_STATE_SCROLL: 2, - STATE_PAN:2} \ No newline at end of file + STATE_PAN:2} diff --git a/invesalius/data/slice_.py b/invesalius/data/slice_.py index ca43e59..5cc6855 100644 --- a/invesalius/data/slice_.py +++ b/invesalius/data/slice_.py @@ -24,6 +24,7 @@ import wx.lib.pubsub as ps import constants as const import imagedata_utils as iu from mask import Mask +import mode as md from project import Project import session as ses from utils import Singleton @@ -41,6 +42,7 @@ class Slice(object): self.blend_filter = None self.__bind_events() self.num_gradient = 0 + self.mode = md.SliceMode() def __bind_events(self): # Slice properties diff --git a/invesalius/data/viewer_slice.py b/invesalius/data/viewer_slice.py index c2ad01b..90b9c3f 100755 --- a/invesalius/data/viewer_slice.py +++ b/invesalius/data/viewer_slice.py @@ -76,7 +76,6 @@ class Viewer(wx.Panel): self.__bind_events() self.__bind_events_wx() - md.SliceMode() def __init_gui(self): @@ -185,7 +184,9 @@ class Viewer(wx.Panel): "MouseMoveEvent": self.OnWindowLevelMove, "LeftButtonPressEvent": self.OnWindowLevelClick, "LeftButtonReleaseEvent": self.OnReleaseModes - } + }, + const.STATE_DEFAULT:{ + } } # Bind method according to current mode diff --git a/invesalius/gui/frame.py b/invesalius/gui/frame.py index 2e2e1bd..30ef74e 100755 --- a/invesalius/gui/frame.py +++ b/invesalius/gui/frame.py @@ -625,24 +625,24 @@ class ObjectToolBar(wx.ToolBar): def __bind_events_wx(self): - self.Bind(wx.EVT_TOOL, self.OnClick) + self.Bind(wx.EVT_TOOL, self.OnToggle) def __bind_events(self): ps.Publisher().subscribe(self.UntoggleAllItems, 'Untoggle object toolbar items') - def OnClick(self, evt): + def OnToggle(self, evt): id = evt.GetId() state = self.GetToolState(id) - if state: - ps.Publisher().sendMessage('Set slice mode', + print "Vai enviar..................." + ps.Publisher().sendMessage('Enable mode', MODE_BY_ID[id]) #ps.Publisher().sendMessage('Untoggle slice toolbar items') else: - ps.Publisher().sendMessage('Set interaction mode', - const.MODE_SLICE_EDITOR) + ps.Publisher().sendMessage('Disable mode', + MODE_BY_ID[id]) @@ -652,6 +652,7 @@ class ObjectToolBar(wx.ToolBar): self.ToggleTool(item, False) evt.Skip() + def UntoggleAllItems(self, pubsub_evt=None): for id in OBJ_TOOLS: diff --git a/invesalius/mode.py b/invesalius/mode.py index 2d845f8..bc958fa 100644 --- a/invesalius/mode.py +++ b/invesalius/mode.py @@ -76,14 +76,15 @@ class SliceMode(object): # push default value to stack self.stack[const.LEVEL[const.STATE_DEFAULT]] = \ const.STATE_DEFAULT - + print "Foi chamando............................." # bind pubsub evt self.__bind_events() def __bind_events(self): + print "__bind_events" ps.Publisher().subscribe(self.OnEnableState, 'Enable mode') ps.Publisher().subscribe(self.OnDisableState, 'Disable mode') - + def OnEnableState(self, pubsub_evt): state = pubsub_evt.data self.AddState(state) @@ -95,24 +96,28 @@ class SliceMode(object): def AddState(self, state): level = const.LEVEL[state] max_level = max(self.stack.keys()) - + + # Insert new state into stack self.stack[level] = state - + print "ADD---->" + print self.stack + print level + print state # Only will affect InVesalius behaviour if it is the highest # level in stack - if level == max_level: + #if level == max_level: # let viewer slice and other classes know this # change (cursor, interaction, etc) - ps.Publisher().sendMessage('Set slice mode', state) + ps.Publisher().sendMessage('Set slice mode', state) def RemoveState(self, state): level = const.LEVEL[state] max_level = max(self.stack.keys()) - + # Remove item from stack - self.stack.popitem(level) - + self.stack.pop(level) + # New max level new_max_level = max(self.stack.keys()) @@ -120,5 +125,11 @@ class SliceMode(object): # level in stack has been removed if level == max_level: new_state = self.stack[new_max_level] - ps.Publisher().sendMessage('Set slice mode', state) - + + #Case one state in the stack + if(len(self.stack) == 1): + state = self.stack[self.stack.keys()[0]] + + ps.Publisher().sendMessage('Set slice mode', state) + + \ No newline at end of file -- libgit2 0.21.2