diff --git a/invesalius/constants.py b/invesalius/constants.py index 134c789..2e12a17 100644 --- a/invesalius/constants.py +++ b/invesalius/constants.py @@ -199,10 +199,10 @@ SURFACE_QUALITY = { _("Low"): (3, 2, 0.3000, 0.4), _("Medium"): (2, 2, 0.3000, 0.4), _("High"): (0, 1, 0.3000, 0.1), - _("Optimal *"): (0, 2, 0.3000, 0.4), - _("Custom"): (None, None, None, None)} + _("Optimal *"): (0, 2, 0.3000, 0.4)} DEFAULT_SURFACE_QUALITY = _("Optimal *") + # Surface properties SURFACE_TRANSPARENCY = 0.0 SURFACE_NAME_PATTERN = _("Surface %d") diff --git a/invesalius/control.py b/invesalius/control.py index 24ed12c..8eb3a22 100755 --- a/invesalius/control.py +++ b/invesalius/control.py @@ -160,14 +160,17 @@ class Controller(): if not answer: print "Close without changes" self.CloseProject() + ps.Publisher().sendMessage("Enable state project", False) elif answer == 1: self.ShowDialogSaveProject() print "Save changes and close" self.CloseProject() + ps.Publisher().sendMessage("Enable state project", False) elif answer == -1: print "Cancel" else: self.CloseProject() + ps.Publisher().sendMessage("Enable state project", False) ########################### def OnOpenProject(self, pubsub_evt): @@ -193,6 +196,7 @@ class Controller(): session = ses.Session() session.OpenProject(filepath) + ps.Publisher().sendMessage("Enable state project", True) def SaveProject(self, path=None): ps.Publisher().sendMessage('Begin busy cursor') @@ -289,6 +293,7 @@ class Controller(): print "No medical images found on given directory" return self.LoadProject() + ps.Publisher().sendMessage("Enable state project", True) def LoadProject(self): proj = prj.Project() @@ -361,6 +366,7 @@ class Controller(): imagedata, dicom = self.OpenDicomGroup(group, gui=True) self.CreateDicomProject(imagedata, dicom) self.LoadProject() + ps.Publisher().sendMessage("Enable state project", True) def OpenDicomGroup(self, dicom_group, gui=True): diff --git a/invesalius/gui/default_tasks.py b/invesalius/gui/default_tasks.py index 4af2a7c..d71f3cc 100755 --- a/invesalius/gui/default_tasks.py +++ b/invesalius/gui/default_tasks.py @@ -117,6 +117,8 @@ class LowerTaskPanel(wx.Panel): self.GetSize(),fpb.FPB_DEFAULT_STYLE, fpb.FPB_COLLAPSE_TO_BOTTOM) + self.enable_items = [] + sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND) self.SetSizer(sizer) @@ -130,6 +132,7 @@ class LowerTaskPanel(wx.Panel): foldIcons=image_list) style = fold_panel.GetCaptionStyle(item) col = style.GetFirstColour() + self.enable_items.append(item) fold_panel.AddFoldPanelWindow(item, nb.NotebookPanel(item), Spacing= 0, leftSpacing=0, rightSpacing=0) @@ -142,11 +145,35 @@ class LowerTaskPanel(wx.Panel): # foldIcons=image_list) #style = fold_panel.GetCaptionStyle(item) #col = style.GetFirstColour() + #self.enable_items.append(item) # #fold_panel.AddFoldPanelWindow(item, tools.TaskPanel(item), Spacing= 0, # leftSpacing=0, rightSpacing=0) #fold_panel.Expand(fold_panel.GetFoldPanel(1)) + self.SetStateProjectClose() + self.__bind_events() + + + def __bind_events(self): + ps.Publisher().subscribe(self.OnEnableState, "Enable state project") + + def OnEnableState(self, pubsub_evt): + state = pubsub_evt.data + if state: + self.SetStateProjectOpen() + else: + self.SetStateProjectClose() + + def SetStateProjectClose(self): + for item in self.enable_items: + item.Disable() + + def SetStateProjectOpen(self): + for item in self.enable_items: + item.Enable() + + # Upper fold panel class UpperTaskPanel(wx.Panel): def __init__(self, parent): @@ -169,6 +196,9 @@ class UpperTaskPanel(wx.Panel): image_list.Add(GetExpandedIconBitmap()) image_list.Add(GetCollapsedIconBitmap()) + + self.enable_items = [] + # Fold 1 - Import item = fold_panel.AddFoldPanel(_("1. InVesalius start"), collapsed=True, @@ -186,6 +216,10 @@ class UpperTaskPanel(wx.Panel): item = fold_panel.AddFoldPanel(_("2. Select region of interest"), collapsed=True, foldIcons=image_list) + + + self.enable_items.append(item) + style = fold_panel.GetCaptionStyle(item) col = style.GetFirstColour() slice_panel = slice_.TaskPanel(item) @@ -210,21 +244,44 @@ class UpperTaskPanel(wx.Panel): Spacing= 0, leftSpacing=0, rightSpacing=0) #fold_panel.Expand(fold_panel.GetFoldPanel(2)) + self.enable_items.append(item) + + # Fold 4 # Export volume item = fold_panel.AddFoldPanel(_("4. Export data"), collapsed=True, foldIcons=image_list) style = fold_panel.GetCaptionStyle(item) col = style.GetFirstColour() - + self.enable_items.append(item) + fold_panel.AddFoldPanelWindow(item, exporter.TaskPanel(item), Spacing= 0, leftSpacing=0, rightSpacing=0) self.fold_panel = fold_panel - self.__bind_evt() - def __bind_evt(self): + self.SetStateProjectClose() + self.__bind_events() + + + def __bind_events(self): self.fold_panel.Bind(fpb.EVT_CAPTIONBAR, self.OnFoldPressCaption) + ps.Publisher().subscribe(self.OnEnableState, "Enable state project") + + def OnEnableState(self, pubsub_evt): + state = pubsub_evt.data + if state: + self.SetStateProjectOpen() + else: + self.SetStateProjectClose() + + def SetStateProjectClose(self): + for item in self.enable_items: + item.Disable() + + def SetStateProjectOpen(self): + for item in self.enable_items: + item.Enable() def OnFoldPressCaption(self, evt): id = evt.GetTag().GetId() diff --git a/invesalius/gui/frame.py b/invesalius/gui/frame.py index 7be23c3..e2d8b3e 100755 --- a/invesalius/gui/frame.py +++ b/invesalius/gui/frame.py @@ -376,12 +376,37 @@ class MenuBar(wx.MenuBar): #self.Append(options_menu, "Options") self.Append(help_menu, _("Help")) + + self.enable_items = [const.ID_PROJECT_SAVE, const.ID_PROJECT_SAVE_AS, + const.ID_PROJECT_CLOSE] + + self.SetStateProjectClose() + + def OnEnableState(self, pubsub_evt): + print "----- OnEnableState" + state = pubsub_evt.data + print "state", state + if state: + self.SetStateProjectOpen() + else: + self.SetStateProjectClose() + + + def SetStateProjectOpen(self): + for item in self.enable_items: + self.Enable(item, True) + + def SetStateProjectClose(self): + for item in self.enable_items: + self.Enable(item, False) + def __bind_events(self): # TODO: in future, possibly when wxPython 2.9 is available, # events should be binded directly from wx.Menu / wx.MenuBar # message "Binding events of wx.MenuBar" on [wxpython-users] # mail list in Oct 20 2008 - pass + ps.Publisher().subscribe(self.OnEnableState, "Enable state project") + # ------------------------------------------------------------------ class ProgressBar(wx.Gauge): @@ -480,7 +505,6 @@ class ProjectToolBar(wx.ToolBar): self.SetToolBitmapSize(wx.Size(32,32)) self.parent = parent - self.__init_items() self.__bind_events() @@ -540,11 +564,29 @@ class ProjectToolBar(wx.ToolBar): #self.AddLabelTool(const.ID_PRINT_SCREENSHOT, # "Print medical image...", # BMP_PRINT) + self.enable_items = [const.ID_PROJECT_SAVE] self.Realize() + self.SetStateProjectClose() + + def SetStateProjectOpen(self): + for tool in self.enable_items: + self.EnableTool(tool, True) + + def SetStateProjectClose(self): + for tool in self.enable_items: + self.EnableTool(tool, False) + + def OnEnableState(self, pubsub_evt): + state = pubsub_evt.data + if state: + self.SetStateProjectOpen() + else: + self.SetStateProjectClose() def __bind_events(self): - pass + ps.Publisher().subscribe(self.OnEnableState, "Enable state project") + #self.Bind(wx.EVT_TOOL, self.OnToolSave, id=const.ID_PROJECT_SAVE) #self.Bind(wx.EVT_TOOL, self.OnToolOpen, id=const.ID_PROJECT_OPEN) #self.Bind(wx.EVT_TOOL, self.OnToolImport, id=const.ID_DICOM_IMPORT) @@ -647,7 +689,30 @@ class ObjectToolBar(wx.ToolBar): self.AddLabelTool(const.STATE_WL, _("Window and Level"), BMP_CONTRAST, kind = wx.ITEM_CHECK) + + self.enable_items = [const.STATE_WL, const.STATE_PAN, const.STATE_SPIN, + const.STATE_ZOOM_SL, const.STATE_ZOOM,] + self.Realize() + self.SetStateProjectClose() + + + def OnEnableState(self, pubsub_evt): + state = pubsub_evt.data + if state: + self.SetStateProjectOpen() + else: + self.SetStateProjectClose() + + + + def SetStateProjectOpen(self): + for tool in self.enable_items: + self.EnableTool(tool, True) + + def SetStateProjectClose(self): + for tool in self.enable_items: + self.EnableTool(tool, False) def __bind_events_wx(self): @@ -656,6 +721,8 @@ class ObjectToolBar(wx.ToolBar): def __bind_events(self): ps.Publisher().subscribe(self.UntoggleAllItems, 'Untoggle object toolbar items') + ps.Publisher().subscribe(self.OnEnableState, "Enable state project") + def OnToggle(self, evt): id = evt.GetId() @@ -714,14 +781,33 @@ class SliceToolBar(wx.ToolBar): self.AddCheckTool(const.SLICE_STATE_SCROLL, BMP_SLICE) self.AddCheckTool(const.SLICE_STATE_CROSS, BMP_CROSS) + self.enable_items = [const.SLICE_STATE_SCROLL, const.SLICE_STATE_CROSS,] self.Realize() + self.SetStateProjectClose() + + def SetStateProjectOpen(self): + for tool in self.enable_items: + self.EnableTool(tool, True) + def SetStateProjectClose(self): + for tool in self.enable_items: + self.EnableTool(tool, False) + def __bind_events_wx(self): self.Bind(wx.EVT_TOOL, self.OnClick) def __bind_events(self): ps.Publisher().subscribe(self.UntoggleAllItem, 'Untoggle slice toolbar items') + ps.Publisher().subscribe(self.OnEnableState, "Enable state project") + + def OnEnableState(self, pubsub_evt): + state = pubsub_evt.data + if state: + self.SetStateProjectOpen() + else: + self.SetStateProjectClose() + def OnClick(self, evt): id = evt.GetId() @@ -793,7 +879,19 @@ class LayoutToolBar(wx.ToolBar): self.AddCheckTool(ID_TEXT, bitmap=BMP_TEXT, shortHelp= "Hide texts") self.ToggleTool(ID_TEXT, True) + self.enable_items = [ID_TEXT] self.Realize() + self.SetStateProjectClose() + + def SetStateProjectOpen(self): + for tool in self.enable_items: + self.EnableTool(tool, True) + + def SetStateProjectClose(self): + for tool in self.enable_items: + self.EnableTool(tool, False) + + def __bind_events(self): ps.Publisher().subscribe(self.SetLayoutButtonOnlyData, @@ -801,6 +899,17 @@ class LayoutToolBar(wx.ToolBar): ps.Publisher().subscribe(self.SetLayoutButtonFull, "Set layout button full") + ps.Publisher().subscribe(self.OnEnableState, "Enable state project") + + def OnEnableState(self, pubsub_evt): + state = pubsub_evt.data + if state: + self.SetStateProjectOpen() + else: + self.SetStateProjectClose() + + + def __bind_events_wx(self): self.Bind(wx.EVT_TOOL, self.OnClick) diff --git a/invesalius/invesalius.py b/invesalius/invesalius.py index 2a652d8..1a0443b 100755 --- a/invesalius/invesalius.py +++ b/invesalius/invesalius.py @@ -184,7 +184,6 @@ def print_events(data): def main(): application = InVesalius(0) parse_comand_line() - #application.ShowFrame() application.MainLoop() if __name__ == '__main__': -- libgit2 0.21.2